Changeset 127084 in webkit


Ignore:
Timestamp:
Aug 29, 2012 7:14:44 PM (12 years ago)
Author:
dmazzoni@google.com
Message:

AX: Canvas should have a distinct role
https://bugs.webkit.org/show_bug.cgi?id=95248

Reviewed by Chris Fleizach.

Source/WebCore:

Add new role for a canvas element, and a method to determine if
a canvas has fallback content, so each platform can decide on the
appropriate role mapping to use.

Test: accessibility/canvas-description-and-role.html

  • accessibility/AccessibilityNodeObject.cpp:

(WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
(WebCore):

  • accessibility/AccessibilityNodeObject.h:

(AccessibilityNodeObject):

  • accessibility/AccessibilityObject.h:

(WebCore::AccessibilityObject::isCanvas):
(WebCore::AccessibilityObject::canvasHasFallbackContent):

  • accessibility/AccessibilityRenderObject.cpp:

(WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
(WebCore::AccessibilityRenderObject::determineAccessibilityRole):
(WebCore::AccessibilityRenderObject::canHaveChildren):

  • accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:

(atkRole):

  • accessibility/mac/WebAccessibilityObjectWrapper.mm:

(createAccessibilityRoleMap):
(-[WebAccessibilityObjectWrapper role]):

Source/WebKit/chromium:

Add support for canvas accessibility role.

  • public/WebAccessibilityRole.h:
  • src/AssertMatchingEnums.cpp:

Source/WebKit/win:

Map new CanvasRole to the same as ImageRole.

  • AccessibleBase.cpp:

(MSAARole):

Tools:

Add support for canvas accessibility role.

  • DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:

(roleToString):

LayoutTests:

Add new tests for canvas role.

  • accessibility/canvas.html: Deleted.
  • accessibility/canvas-expected.txt: Deleted.
  • accessibility/canvas-description-and-role.html: Added.
  • platform/chromium/accessibility/canvas-description-and-role-expected.txt: Added.
  • platform/gtk/TestExpectations:
  • platform/mac/accessibility/canvas.html: Added.
  • platform/mac/accessibility/canvas-expected.txt: Added.
  • platform/mac/accessibility/canvas-description-and-role-expected.txt: Added.
Location:
trunk
Files:
3 added
16 edited
2 moved

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r127082 r127084  
     12012-08-29  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AX: Canvas should have a distinct role
     4        https://bugs.webkit.org/show_bug.cgi?id=95248
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Add new tests for canvas role.
     9
     10        * accessibility/canvas.html: Deleted.
     11        * accessibility/canvas-expected.txt: Deleted.
     12        * accessibility/canvas-description-and-role.html: Added.
     13        * platform/chromium/accessibility/canvas-description-and-role-expected.txt: Added.
     14        * platform/gtk/TestExpectations:
     15        * platform/mac/accessibility/canvas.html: Added.
     16        * platform/mac/accessibility/canvas-expected.txt: Added.
     17        * platform/mac/accessibility/canvas-description-and-role-expected.txt: Added.
     18
    1192012-08-29  Michael Saboff  <msaboff@apple.com>
    220
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r127070 r127084  
    624624BUGWKGTK : accessibility/aria-used-on-image-maps.html = TEXT
    625625BUGWKGTK : accessibility/button-press-action.html = TEXT
    626 BUGWKGTK : accessibility/canvas.html = TEXT
     626BUGWKGTK : accessibility/canvas-description-and-role.html = TEXT
    627627BUGWKGTK : accessibility/canvas-fallback-content.html = TEXT
    628628BUGWKGTK : accessibility/editable-webarea-context-menu-point.html = TEXT
  • trunk/Source/WebCore/ChangeLog

    r127082 r127084  
     12012-08-29  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AX: Canvas should have a distinct role
     4        https://bugs.webkit.org/show_bug.cgi?id=95248
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Add new role for a canvas element, and a method to determine if
     9        a canvas has fallback content, so each platform can decide on the
     10        appropriate role mapping to use.
     11
     12        Test: accessibility/canvas-description-and-role.html
     13
     14        * accessibility/AccessibilityNodeObject.cpp:
     15        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
     16        (WebCore):
     17        * accessibility/AccessibilityNodeObject.h:
     18        (AccessibilityNodeObject):
     19        * accessibility/AccessibilityObject.h:
     20        (WebCore::AccessibilityObject::isCanvas):
     21        (WebCore::AccessibilityObject::canvasHasFallbackContent):
     22        * accessibility/AccessibilityRenderObject.cpp:
     23        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
     24        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
     25        (WebCore::AccessibilityRenderObject::canHaveChildren):
     26        * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp:
     27        (atkRole):
     28        * accessibility/mac/WebAccessibilityObjectWrapper.mm:
     29        (createAccessibilityRoleMap):
     30        (-[WebAccessibilityObjectWrapper role]):
     31
    1322012-08-29  Michael Saboff  <msaboff@apple.com>
    233
  • trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp

    r127006 r127084  
    307307}
    308308
     309bool AccessibilityNodeObject::canvasHasFallbackContent() const
     310{
     311    Node* node = this->node();
     312    if (!node || !node->hasTagName(canvasTag))
     313        return false;
     314
     315    // If it has any children that are elements, we'll assume it might be fallback
     316    // content. If it has no children or its only children are not elements
     317    // (e.g. just text nodes), it doesn't have fallback content.
     318    for (Node* child = node->firstChild(); child; child = child->nextSibling()) {
     319        if (child->isElementNode())
     320            return true;
     321    }
     322
     323    return false;
     324}
     325
    309326bool AccessibilityNodeObject::canSetFocusAttribute() const
    310327{
  • trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h

    r127006 r127084  
    6767    virtual bool isAccessibilityNodeObject() const { return true; }
    6868
     69    virtual bool canvasHasFallbackContent() const;
     70
    6971    virtual bool canSetFocusAttribute() const;
    7072   
  • trunk/Source/WebCore/accessibility/AccessibilityObject.h

    r127006 r127084  
    105105    BusyIndicatorRole,
    106106    ButtonRole,
     107    CanvasRole,
    107108    CellRole,
    108109    CheckBoxRole,
     
    382383    bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
    383384    bool isScrollView() const { return roleValue() == ScrollAreaRole; }
     385    bool isCanvas() const { return roleValue() == CanvasRole; }
    384386    bool isBlockquote() const;
    385387    bool isLandmark() const;
     
    459461    bool supportsARIAExpanded() const;
    460462    AccessibilitySortDirection sortDirection() const;
     463    virtual bool canvasHasFallbackContent() const { return false; }
    461464   
    462465    // ARIA drag and drop
  • trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp

    r127006 r127084  
    14931493   
    14941494    Node* node = m_renderer->node();
    1495     if (isImage() || isInputImage() || isNativeImage()) {
     1495    if (isImage() || isInputImage() || isNativeImage() || isCanvas()) {
    14961496        if (node && node->isHTMLElement()) {
    14971497            const AtomicString& alt = toHTMLElement(node)->getAttribute(altAttr);
     
    19761976        }
    19771977       
    1978         if (node && node->hasTagName(canvasTag)) {
    1979             RenderHTMLCanvas* canvas = toRenderHTMLCanvas(m_renderer);
    1980             if (canvas->height() <= 1 || canvas->width() <= 1)
    1981                 return true;
    1982             return false;
    1983         }
    1984        
    19851978        if (isNativeImage()) {
    19861979            // check for one-dimensional image
     
    19971990        return false;
    19981991    }
    1999    
     1992
     1993    if (isCanvas()) {
     1994        if (canvasHasFallbackContent())
     1995            return false;
     1996        RenderHTMLCanvas* canvas = toRenderHTMLCanvas(m_renderer);
     1997        if (canvas->height() <= 1 || canvas->width() <= 1)
     1998            return true;
     1999        // Otherwise fall through; use presence of help text, title, or description to decide.
     2000    }
     2001
    20002002    if (isWebArea() || m_renderer->isListMarker())
    20012003        return false;
     
    31793181    }
    31803182    if (node && node->hasTagName(canvasTag))
    3181         return ImageRole;
     3183        return CanvasRole;
    31823184
    31833185    if (cssBox && cssBox->isRenderView())
     
    34243426        return false;
    34253427   
    3426     // Canvas is a special case; its role is ImageRole but it is allowed to have children.
    3427     if (node() && node()->hasTagName(canvasTag))
    3428         return true;
    3429 
    34303428    // Elements that should not have children
    34313429    switch (roleValue()) {
  • trunk/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp

    r127006 r127084  
    502502    case ImageMapLinkRole:
    503503        return ATK_ROLE_LINK;
     504    case CanvasRole:
    504505    case ImageMapRole:
    505506    case ImageRole:
  • trunk/Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapper.mm

    r127006 r127084  
    15791579        { SpinButtonRole, NSAccessibilityIncrementorRole },
    15801580        { FooterRole, NSAccessibilityGroupRole },
    1581         { ToggleButtonRole, NSAccessibilityButtonRole }
     1581        { ToggleButtonRole, NSAccessibilityButtonRole },
     1582        { CanvasRole, NSAccessibilityImageRole }
    15821583    };
    15831584    AccessibilityRoleMap& roleMap = *new AccessibilityRoleMap;
     
    16001601    if (m_object->isAttachment())
    16011602        return [[self attachmentView] accessibilityAttributeValue:NSAccessibilityRoleAttribute];
    1602     NSString* string = roleValueToNSString(m_object->roleValue());
     1603    AccessibilityRole role = m_object->roleValue();
     1604    if (role == CanvasRole && m_object->canvasHasFallbackContent())
     1605        role = GroupRole;
     1606    NSString* string = roleValueToNSString(role);
    16031607    if (string != nil)
    16041608        return string;
  • trunk/Source/WebKit/chromium/ChangeLog

    r127081 r127084  
     12012-08-29  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AX: Canvas should have a distinct role
     4        https://bugs.webkit.org/show_bug.cgi?id=95248
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Add support for canvas accessibility role.
     9
     10        * public/WebAccessibilityRole.h:
     11        * src/AssertMatchingEnums.cpp:
     12
    1132012-08-29  Alex Sakhartchouk  <alexst@chromium.org>
    214
  • trunk/Source/WebKit/chromium/public/WebAccessibilityRole.h

    r127006 r127084  
    5050    WebAccessibilityRoleBusyIndicator,
    5151    WebAccessibilityRoleButton,
     52    WebAccessibilityRoleCanvas,
    5253    WebAccessibilityRoleCell,
    5354    WebAccessibilityRoleCheckBox,
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r127006 r127084  
    262262COMPILE_ASSERT_MATCHING_ENUM(WebAccessibilityRoleUserInterfaceTooltip, UserInterfaceTooltipRole);
    263263COMPILE_ASSERT_MATCHING_ENUM(WebAccessibilityRoleToggleButton, ToggleButtonRole);
     264COMPILE_ASSERT_MATCHING_ENUM(WebAccessibilityRoleCanvas, CanvasRole);
    264265
    265266COMPILE_ASSERT_MATCHING_ENUM(WebApplicationCacheHost::Uncached, ApplicationCacheHost::UNCACHED);
  • trunk/Source/WebKit/win/AccessibleBase.cpp

    r127006 r127084  
    658658        case WebCore::WebCoreLinkRole:
    659659            return ROLE_SYSTEM_LINK;
     660        case WebCore::CanvasRole:
    660661        case WebCore::ImageMapRole:
    661662        case WebCore::ImageRole:
  • trunk/Source/WebKit/win/ChangeLog

    r127006 r127084  
     12012-08-29  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AX: Canvas should have a distinct role
     4        https://bugs.webkit.org/show_bug.cgi?id=95248
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Map new CanvasRole to the same as ImageRole.
     9
     10        * AccessibleBase.cpp:
     11        (MSAARole):
     12
    1132012-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>
    214
  • trunk/Tools/ChangeLog

    r127070 r127084  
     12012-08-29  Dominic Mazzoni  <dmazzoni@google.com>
     2
     3        AX: Canvas should have a distinct role
     4        https://bugs.webkit.org/show_bug.cgi?id=95248
     5
     6        Reviewed by Chris Fleizach.
     7
     8        Add support for canvas accessibility role.
     9
     10        * DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp:
     11        (roleToString):
     12
    1132012-08-29  José Dapena Paz  <jdapena@igalia.com>
    214
  • trunk/Tools/DumpRenderTree/chromium/TestRunner/AccessibilityUIElementChromium.cpp

    r127006 r127084  
    207207    case WebAccessibilityRoleToggleButton:
    208208        return result.append("ToggleButton");
     209    case WebAccessibilityRoleCanvas:
     210        return result.append("Canvas");
    209211    default:
    210212        // Also matches WebAccessibilityRoleUnknown.
Note: See TracChangeset for help on using the changeset viewer.