AX: aria-checked not recognized on image map radio buttons
authorcfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Jul 2010 22:09:31 +0000 (22:09 +0000)
committercfleizach@apple.com <cfleizach@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 14 Jul 2010 22:09:31 +0000 (22:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=42055

Reviewed by Darin Adler.

WebCore:

Moves some code from AccessibilityRenderObject to AccessibilityObject so that
elements that do not have render objects, but do have Nodes (like image map links
and list box options) can still make use of certain aria attributes.

Test: platform/mac/accessibility/image-map-link-used-as-radiobutton.html

* accessibility/AccessibilityImageMapLink.cpp:
(WebCore::AccessibilityImageMapLink::roleValue):
(WebCore::AccessibilityImageMapLink::accessibilityDescription):
(WebCore::AccessibilityImageMapLink::title):
   Make imageMap use standard AccessibilityObject methods for getAttribute()
* accessibility/AccessibilityImageMapLink.h:
(WebCore::AccessibilityImageMapLink::node):
* accessibility/AccessibilityListBoxOption.cpp:
(WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
(WebCore::AccessibilityListBoxOption::stringValue):
* accessibility/AccessibilityListBoxOption.h:
(WebCore::AccessibilityListBoxOption::node):
       * accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::language):
     Language method doesn't need a node() anymore, it can use the node from AccessibilityObject.
(WebCore::renderListItemContainerForNode):
(WebCore::AccessibilityObject::getAttribute):
(WebCore::AccessibilityObject::intValue):
   Move intValue into AccessibilityObject.
(WebCore::AccessibilityObject::hasIntValue):
* accessibility/AccessibilityObject.h:
(WebCore::AccessibilityObject::isCheckbox):
(WebCore::AccessibilityObject::isRadioButton):
(WebCore::AccessibilityObject::isCheckboxOrRadio):
   Consolidate what defines a checkbox and radio button into AccessibilityObject.
(WebCore::AccessibilityObject::node):
(WebCore::AccessibilityObject::headingLevel):
       (WebCore::AccessibilityObject::isDetached):
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::isPasswordField):
(WebCore::AccessibilityRenderObject::headingLevel):
(WebCore::AccessibilityRenderObject::selectedTabItem):
(WebCore::AccessibilityRenderObject::hierarchicalLevel):
(WebCore::AccessibilityRenderObject::node):
(WebCore::AccessibilityRenderObject::intValue):
* accessibility/AccessibilityRenderObject.h:
* rendering/RenderMenuList.cpp:
(WebCore::RenderMenuList::itemAccessibilityText):
    Stop using AccessibilityObjects getAttribute (no reason to use it really).

LayoutTests:

* platform/mac/accessibility/image-map-link-used-as-radiobutton-expected.txt: Added.
* platform/mac/accessibility/image-map-link-used-as-radiobutton.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@63358 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
WebCore/ChangeLog
WebCore/accessibility/AccessibilityImageMapLink.cpp
WebCore/accessibility/AccessibilityImageMapLink.h
WebCore/accessibility/AccessibilityListBoxOption.cpp
WebCore/accessibility/AccessibilityListBoxOption.h
WebCore/accessibility/AccessibilityObject.cpp
WebCore/accessibility/AccessibilityObject.h
WebCore/accessibility/AccessibilityRenderObject.cpp
WebCore/accessibility/AccessibilityRenderObject.h
WebCore/rendering/RenderMenuList.cpp

index ce45e36..8685bfc 100644 (file)
@@ -1,5 +1,15 @@
 2010-07-14  Chris Fleizach  <cfleizach@apple.com>
 
+        Reviewed by Darin Adler.
+
+        AX: aria-checked not recognized on image map radio buttons
+        https://bugs.webkit.org/show_bug.cgi?id=42055
+
+        * platform/mac/accessibility/image-map-link-used-as-radiobutton-expected.txt: Added.
+        * platform/mac/accessibility/image-map-link-used-as-radiobutton.html: Added.
+
+2010-07-14  Chris Fleizach  <cfleizach@apple.com>
+
         No review. Make sure Tiger and Leopard don't run this test.
 
         AX: Data table heuristics: consider assuming data table for 'zebra-striped' rows
index bc72488..63d59bb 100644 (file)
@@ -1,3 +1,56 @@
+2010-07-14  Chris Fleizach  <cfleizach@apple.com>
+
+        Reviewed by Darin Adler.
+
+        AX: aria-checked not recognized on image map radio buttons
+        https://bugs.webkit.org/show_bug.cgi?id=42055
+
+        Moves some code from AccessibilityRenderObject to AccessibilityObject so that
+        elements that do not have render objects, but do have Nodes (like image map links 
+        and list box options) can still make use of certain aria attributes.
+
+        Test: platform/mac/accessibility/image-map-link-used-as-radiobutton.html
+
+        * accessibility/AccessibilityImageMapLink.cpp:
+        (WebCore::AccessibilityImageMapLink::roleValue):
+        (WebCore::AccessibilityImageMapLink::accessibilityDescription):
+        (WebCore::AccessibilityImageMapLink::title):
+           Make imageMap use standard AccessibilityObject methods for getAttribute()
+        * accessibility/AccessibilityImageMapLink.h:
+        (WebCore::AccessibilityImageMapLink::node):
+        * accessibility/AccessibilityListBoxOption.cpp:
+        (WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
+        (WebCore::AccessibilityListBoxOption::stringValue):
+        * accessibility/AccessibilityListBoxOption.h:
+        (WebCore::AccessibilityListBoxOption::node):
+       * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::language):
+             Language method doesn't need a node() anymore, it can use the node from AccessibilityObject.
+        (WebCore::renderListItemContainerForNode):
+        (WebCore::AccessibilityObject::getAttribute):
+        (WebCore::AccessibilityObject::intValue):
+           Move intValue into AccessibilityObject.
+        (WebCore::AccessibilityObject::hasIntValue):
+        * accessibility/AccessibilityObject.h:
+        (WebCore::AccessibilityObject::isCheckbox):
+        (WebCore::AccessibilityObject::isRadioButton):
+        (WebCore::AccessibilityObject::isCheckboxOrRadio):
+           Consolidate what defines a checkbox and radio button into AccessibilityObject.
+        (WebCore::AccessibilityObject::node):
+        (WebCore::AccessibilityObject::headingLevel):
+       (WebCore::AccessibilityObject::isDetached):
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::isPasswordField):
+        (WebCore::AccessibilityRenderObject::headingLevel):
+        (WebCore::AccessibilityRenderObject::selectedTabItem):
+        (WebCore::AccessibilityRenderObject::hierarchicalLevel):
+        (WebCore::AccessibilityRenderObject::node):
+        (WebCore::AccessibilityRenderObject::intValue):
+        * accessibility/AccessibilityRenderObject.h:
+        * rendering/RenderMenuList.cpp:
+        (WebCore::RenderMenuList::itemAccessibilityText):
+            Stop using AccessibilityObjects getAttribute (no reason to use it really).
+
 2010-07-14  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Simon Fraser.
index 2eac8d3..924ba21 100644 (file)
@@ -73,7 +73,7 @@ AccessibilityRole AccessibilityImageMapLink::roleValue() const
     if (!m_areaElement)
         return WebCoreLinkRole;
     
-    const AtomicString& ariaRole = m_areaElement->getAttribute(roleAttr);
+    const AtomicString& ariaRole = getAttribute(roleAttr);
     if (!ariaRole.isEmpty())
         return AccessibilityObject::ariaRoleToWebCoreRole(ariaRole);
 
@@ -100,13 +100,10 @@ KURL AccessibilityImageMapLink::url() const
     
 String AccessibilityImageMapLink::accessibilityDescription() const
 {
-    if (!m_areaElement)
-        return String();
-
-    const AtomicString& ariaLabel = m_areaElement->getAttribute(aria_labelAttr);
+    const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
     if (!ariaLabel.isEmpty())
         return ariaLabel;
-    const AtomicString& alt = m_areaElement->getAttribute(altAttr);
+    const AtomicString& alt = getAttribute(altAttr);
     if (!alt.isEmpty())
         return alt;
 
@@ -115,13 +112,10 @@ String AccessibilityImageMapLink::accessibilityDescription() const
     
 String AccessibilityImageMapLink::title() const
 {
-    if (!m_areaElement)
-        return String();
-    
-    const AtomicString& title = m_areaElement->getAttribute(titleAttr);
+    const AtomicString& title = getAttribute(titleAttr);
     if (!title.isEmpty())
         return title;
-    const AtomicString& summary = m_areaElement->getAttribute(summaryAttr);
+    const AtomicString& summary = getAttribute(summaryAttr);
     if (!summary.isEmpty())
         return summary;
 
index ca4c62c..e2e1544 100644 (file)
@@ -49,6 +49,7 @@ public:
     void setHTMLMapElement(HTMLMapElement* element) { m_mapElement = element; }    
     HTMLMapElement* mapElement() const { return m_mapElement; }
     
+    virtual Node* node() const { return m_areaElement; }
     void setParent(AccessibilityObject* parent) { m_parent = parent; }
         
     virtual AccessibilityRole roleValue() const;
index 57519e3..3e4dad9 100644 (file)
@@ -110,17 +110,12 @@ bool AccessibilityListBoxOption::accessibilityIsIgnored() const
     if (!m_optionElement)
         return true;
     
-    if (equalIgnoringCase(getAttribute(m_optionElement, aria_hiddenAttr), "true"))
+    if (equalIgnoringCase(getAttribute(aria_hiddenAttr), "true"))
         return true;
     
     return parentObject()->accessibilityIsIgnored();
 }
     
-String AccessibilityListBoxOption::language() const
-{
-    return AccessibilityObject::language(m_optionElement);
-}
-
 bool AccessibilityListBoxOption::canSetSelectedAttribute() const
 {
     if (!m_optionElement)
@@ -144,7 +139,7 @@ String AccessibilityListBoxOption::stringValue() const
     if (!m_optionElement)
         return String();
     
-    const AtomicString& ariaLabel = getAttribute(m_optionElement, aria_labelAttr);
+    const AtomicString& ariaLabel = getAttribute(aria_labelAttr);
     if (!ariaLabel.isNull())
         return ariaLabel;
     
index 1da77e7..c4c9315 100644 (file)
@@ -56,7 +56,7 @@ public:
     virtual bool isEnabled() const;
     virtual String stringValue() const;
     virtual Element* actionElement() const;
-    
+    virtual Node* node() const { return m_optionElement; }
     virtual void setSelected(bool);
     virtual bool canSetSelectedAttribute() const;
 
@@ -68,7 +68,6 @@ public:
 private:
     HTMLElement* m_optionElement;
     
-    virtual String language() const;
     virtual bool canHaveChildren() const { return false; }
     HTMLSelectElement* listBoxOptionParentNode() const;
     int listBoxOptionIndex() const;
index 555ba6f..bc4e2f5 100644 (file)
@@ -148,17 +148,12 @@ bool AccessibilityObject::press() const
     return true;
 }
     
-String AccessibilityObject::language(Node* node) const
-{
-    const AtomicString& lang = getAttribute(node, langAttr);
-    if (lang.isEmpty())
-        return AccessibilityObject::language();
-    
-    return lang;
-}
-    
 String AccessibilityObject::language() const
 {
+    const AtomicString& lang = getAttribute(langAttr);
+    if (!lang.isEmpty())
+        return lang;
+
     AccessibilityObject* parent = parentObject();
     
     // as a last resort, fall back to the content language specified in the meta tag
@@ -166,7 +161,7 @@ String AccessibilityObject::language() const
         Document* doc = document();
         if (doc)
             return doc->contentLanguage();
-        return String();
+        return nullAtom;
     }
     
     return parent->language();
@@ -403,7 +398,7 @@ static bool replacedNodeNeedsCharacter(Node* replacedNode)
 }
 
 // Finds a RenderListItem parent give a node.
-RenderListItem* AccessibilityObject::renderListItemContainerForNode(Node* node) const
+static RenderListItem* renderListItemContainerForNode(Node* node)
 {
     for (Node* stringNode = node; stringNode; stringNode = stringNode->parent()) {
         RenderObject* renderObject = stringNode->renderer();
@@ -844,15 +839,16 @@ const String& AccessibilityObject::actionVerb() const
     }
 }
  
-const AtomicString& AccessibilityObject::getAttribute(Node* node, const QualifiedName& attribute)
+const AtomicString& AccessibilityObject::getAttribute(const QualifiedName& attribute) const
 {
-    if (!node)
+    Node* elementNode = node();
+    if (!elementNode)
         return nullAtom;
     
-    if (!node->isElementNode())
+    if (!elementNode->isElementNode())
         return nullAtom;
     
-    Element* element = static_cast<Element*>(node);
+    Element* element = static_cast<Element*>(elementNode);
     return element->getAttribute(attribute);
 }
     
@@ -980,6 +976,32 @@ bool AccessibilityObject::supportsARIALiveRegion() const
     const AtomicString& liveRegion = ariaLiveRegionStatus();
     return equalIgnoringCase(liveRegion, "polite") || equalIgnoringCase(liveRegion, "assertive");
 }
+    
+int AccessibilityObject::intValue() const
+{
+    if (isPasswordField())
+        return 0;
+    
+    if (isHeading())
+        return headingLevel();
+    
+    // If this is a real checkbox or radio button, AccessibilityRenderObject will handle.
+    // If it's an ARIA checkbox or radio, the aria-checked attribute should be used.
+    if (isCheckboxOrRadio())
+        return equalIgnoringCase(getAttribute(aria_checkedAttr), "true");
+    
+    return 0;
+}
 
+bool AccessibilityObject::hasIntValue() const
+{
+    if (isHeading())
+        return true;
+    
+    if (isCheckboxOrRadio())
+        return true;
+    
+    return false;
+}
     
 } // namespace WebCore
index 3c8d392..400a200 100644 (file)
@@ -264,7 +264,8 @@ public:
     virtual bool isTextControl() const { return false; }
     virtual bool isNativeTextControl() const { return false; }
     virtual bool isWebArea() const { return false; }
-    virtual bool isCheckboxOrRadio() const { return false; }
+    virtual bool isCheckbox() const { return roleValue() == CheckBoxRole; }
+    virtual bool isRadioButton() const { return roleValue() == RadioButtonRole; }
     virtual bool isListBox() const { return roleValue() == ListBoxRole; }
     virtual bool isMediaTimeline() const { return false; }
     virtual bool isMenuRelated() const { return false; }
@@ -298,6 +299,7 @@ public:
     bool isScrollbar() const { return roleValue() == ScrollBarRole; }
     bool isButton() const { return roleValue() == ButtonRole; }
     bool isListItem() const { return roleValue() == ListItemRole; }
+    bool isCheckboxOrRadio() const { return isCheckbox() || isRadioButton(); }
     
     virtual bool isChecked() const { return false; }
     virtual bool isEnabled() const { return false; }
@@ -325,16 +327,17 @@ public:
     virtual bool canSetSelectedChildrenAttribute() const { return false; }
     virtual bool canSetExpandedAttribute() const { return false; }
     
-    virtual bool hasIntValue() const { return false; }
-
+    bool hasIntValue() const;
+    virtual int intValue() const;
+    
     // A programmatic way to set a name on an AccessibleObject.
     virtual void setAccessibleName(String&) { }
     
+    virtual Node* node() const { return 0; }
     bool accessibilityShouldUseUniqueId() const { return true; }
     virtual bool accessibilityIsIgnored() const  { return true; }
 
     virtual int headingLevel() const { return 0; }
-    virtual int intValue() const { return 0; }
     virtual String valueDescription() const { return String(); }
     virtual float valueForRange() const { return 0.0f; }
     virtual float maxValueForRange() const { return 0.0f; }
@@ -419,8 +422,7 @@ public:
     virtual Document* document() const { return 0; }
     virtual FrameView* topDocumentFrameView() const { return 0; }
     virtual FrameView* documentFrameView() const;
-    virtual String language() const;
-    String language(Node*) const;
+    String language() const;
     virtual unsigned hierarchicalLevel() const { return 0; }
     
     virtual void setFocused(bool) { }
@@ -454,7 +456,7 @@ public:
     virtual void handleAriaExpandedChanged() { }
     
     static AccessibilityRole ariaRoleToWebCoreRole(const String&);
-    static const AtomicString& getAttribute(Node*, const QualifiedName&);
+    const AtomicString& getAttribute(const QualifiedName&) const;
 
     virtual VisiblePositionRange visiblePositionRange() const { return VisiblePositionRange(); }
     virtual VisiblePositionRange visiblePositionRangeForLine(unsigned) const { return VisiblePositionRange(); }
@@ -564,7 +566,6 @@ protected:
     
     virtual void clearChildren();
     virtual bool isDetached() const { return true; }
-    RenderListItem* renderListItemContainerForNode(Node* node) const;
     
 #if PLATFORM(MAC)
     RetainPtr<AccessibilityObjectWrapper> m_wrapper;
index 8a1c07e..1b3c461 100644 (file)
@@ -476,12 +476,6 @@ bool AccessibilityRenderObject::isPasswordField() const
 
     return inputElement->isPasswordField();
 }
-
-bool AccessibilityRenderObject::isCheckboxOrRadio() const
-{
-    AccessibilityRole role = roleValue();
-    return role == RadioButtonRole || role == CheckBoxRole;
-}    
     
 bool AccessibilityRenderObject::isFileUploadButton() const
 {
@@ -660,36 +654,29 @@ bool AccessibilityRenderObject::isOffScreen() const
 int AccessibilityRenderObject::headingLevel() const
 {
     // headings can be in block flow and non-block flow
-    if (!m_renderer)
-        return 0;
-    
-    Node* node = m_renderer->node();
-    if (!node)
+    Node* element = node();
+    if (!element)
         return 0;
 
-    if (ariaRoleAttribute() == HeadingRole)  {
-        if (!node->isElementNode())
-            return 0;
-        Element* element = static_cast<Element*>(node);
-        return element->getAttribute(aria_levelAttr).toInt();
-    }
+    if (ariaRoleAttribute() == HeadingRole)
+        return getAttribute(aria_levelAttr).toInt();
 
-    if (node->hasTagName(h1Tag))
+    if (element->hasTagName(h1Tag))
         return 1;
     
-    if (node->hasTagName(h2Tag))
+    if (element->hasTagName(h2Tag))
         return 2;
     
-    if (node->hasTagName(h3Tag))
+    if (element->hasTagName(h3Tag))
         return 3;
     
-    if (node->hasTagName(h4Tag))
+    if (element->hasTagName(h4Tag))
         return 4;
     
-    if (node->hasTagName(h5Tag))
+    if (element->hasTagName(h5Tag))
         return 5;
     
-    if (node->hasTagName(h6Tag))
+    if (element->hasTagName(h6Tag))
         return 6;
     
     return 0;
@@ -760,11 +747,6 @@ AccessibilityObject* AccessibilityRenderObject::selectedTabItem()
     }
     return 0;
 }
-    
-const AtomicString& AccessibilityRenderObject::getAttribute(const QualifiedName& attribute) const
-{
-    return AccessibilityObject::getAttribute(m_renderer->node(), attribute);
-}
 
 Element* AccessibilityRenderObject::anchorElement() const
 {
@@ -990,14 +972,6 @@ unsigned AccessibilityRenderObject::hierarchicalLevel() const
     
     return level;
 }
-    
-String AccessibilityRenderObject::language() const
-{
-    if (!m_renderer)
-        return String();
-    
-    return AccessibilityObject::language(m_renderer->node());
-}
 
 String AccessibilityRenderObject::textUnderElement() const
 {
@@ -1030,38 +1004,17 @@ String AccessibilityRenderObject::textUnderElement() const
     return String();
 }
 
-bool AccessibilityRenderObject::hasIntValue() const
-{
-    if (isHeading())
-        return true;
-    
-    if (m_renderer->node() && isCheckboxOrRadio())
-        return true;
+Node* AccessibilityRenderObject::node() const
+{ 
+    return m_renderer ? m_renderer->node() : 0; 
+}    
     
-    return false;
-}
-
 int AccessibilityRenderObject::intValue() const
 {
-    if (!m_renderer || isPasswordField())
-        return 0;
-    
-    if (isHeading())
-        return headingLevel();
-    
-    Node* node = m_renderer->node();
-    if (!node || !isCheckboxOrRadio())
-        return 0;
+    if (isCheckboxOrRadio())
+        return isChecked() ? 1 : 0;
 
-    // If this is an ARIA checkbox or radio, check the aria-checked attribute rather than node()->checked()
-    AccessibilityRole ariaRole = ariaRoleAttribute();
-    if (ariaRole == RadioButtonRole || ariaRole == CheckBoxRole) {
-        if (equalIgnoringCase(getAttribute(aria_checkedAttr), "true"))
-            return true;
-        return false;
-    }
-    
-    return static_cast<HTMLInputElement*>(node)->checked();
+    return AccessibilityObject::intValue();
 }
 
 String AccessibilityRenderObject::valueDescription() const
@@ -1122,9 +1075,11 @@ String AccessibilityRenderObject::stringValue() const
         Element* selectedOption = 0;
         if (selectedIndex >= 0 && selectedIndex < (int)listItems.size()) 
             selectedOption = listItems[selectedIndex];
-        String overridenDescription = AccessibilityObject::getAttribute(selectedOption, aria_labelAttr);
-        if (!overridenDescription.isNull())
-            return overridenDescription;
+        if (selectedOption) {
+            String overridenDescription = selectedOption->getAttribute(aria_labelAttr);
+            if (!overridenDescription.isNull())
+                return overridenDescription;
+        }
         
         return toRenderMenuList(m_renderer)->text();
     }
@@ -1364,9 +1319,11 @@ String AccessibilityRenderObject::accessibilityDescription() const
         
         // Check if the HTML element has an aria-label for the webpage.
         Element* documentElement = document->documentElement();
-        const AtomicString& ariaLabel = AccessibilityObject::getAttribute(documentElement, aria_labelAttr);
-        if (!ariaLabel.isEmpty())
-            return ariaLabel;
+        if (documentElement) {
+            const AtomicString& ariaLabel = documentElement->getAttribute(aria_labelAttr);
+            if (!ariaLabel.isEmpty())
+                return ariaLabel;
+        }
         
         Node* owner = document->ownerElement();
         if (owner) {
index d4f798a..526324f 100644 (file)
@@ -75,7 +75,6 @@ public:
     virtual bool isTextControl() const;
     virtual bool isNativeTextControl() const;
     virtual bool isWebArea() const;
-    virtual bool isCheckboxOrRadio() const;
     virtual bool isFileUploadButton() const;
     virtual bool isInputImage() const;
     virtual bool isProgressIndicator() const;
@@ -106,14 +105,11 @@ public:
     virtual bool isExpanded() const;
     virtual void setIsExpanded(bool);
 
-    const AtomicString& getAttribute(const QualifiedName&) const;
     virtual bool canSetFocusAttribute() const;
     virtual bool canSetTextRangeAttributes() const;
     virtual bool canSetValueAttribute() const;
     virtual bool canSetExpandedAttribute() const;
 
-    virtual bool hasIntValue() const;
-    
     virtual void setAccessibleName(String&);
     
     // Provides common logic used by all elements when determining isIgnored.
@@ -169,10 +165,7 @@ public:
     
     void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
     RenderObject* renderer() const { return m_renderer; }
-    Node* node() const 
-    { 
-        return m_renderer ? m_renderer->node() : 0; 
-    };
+    virtual Node* node() const;
 
     RenderView* topRenderer() const;
     RenderTextControl* textControl() const;
@@ -283,7 +276,6 @@ private:
     bool isAllowedChildOfTree() const;
     bool hasTextAlternative() const;
     String positionalDescriptionForMSAA() const;
-    virtual String language() const;
 
     Element* menuElementForMenuButton() const;
     Element* menuItemElementForMenu() const;
index 09b2960..177921c 100644 (file)
@@ -26,7 +26,6 @@
 #include "RenderMenuList.h"
 
 #include "AXObjectCache.h"
-#include "AccessibilityObject.h"
 #include "CSSStyleSelector.h"
 #include "Frame.h"
 #include "FrameView.h"
@@ -363,7 +362,7 @@ String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
     if (listIndex >= listItems.size())
         return String();
 
-    return AccessibilityObject::getAttribute(listItems[listIndex], aria_labelAttr); 
+    return listItems[listIndex]->getAttribute(aria_labelAttr);
 }
     
 String RenderMenuList::itemToolTip(unsigned listIndex) const