Title: [95432] branches/chromium/874/Source/WebCore/accessibility
Revision
95432
Author
infe...@chromium.org
Date
2011-09-19 10:07:18 -0700 (Mon, 19 Sep 2011)

Log Message

Merge 94716
BUG=84160
Review URL: http://codereview.chromium.org/7944004

Modified Paths

Diff

Modified: branches/chromium/874/Source/WebCore/accessibility/AccessibilityObject.h (95431 => 95432)


--- branches/chromium/874/Source/WebCore/accessibility/AccessibilityObject.h	2011-09-19 17:05:26 UTC (rev 95431)
+++ branches/chromium/874/Source/WebCore/accessibility/AccessibilityObject.h	2011-09-19 17:07:18 UTC (rev 95432)
@@ -550,6 +550,8 @@
     virtual bool canHaveChildren() const { return true; }
     virtual bool hasChildren() const { return m_haveChildren; }
     virtual void updateChildrenIfNecessary();
+    virtual void clearChildren();
+
     virtual void selectedChildren(AccessibilityChildrenVector&) { }
     virtual void visibleChildren(AccessibilityChildrenVector&) { }
     virtual void tabChildren(AccessibilityChildrenVector&) { }
@@ -670,7 +672,6 @@
     mutable bool m_haveChildren;
     AccessibilityRole m_role;
     
-    virtual void clearChildren();
     virtual bool isDetached() const { return true; }
     
 #if PLATFORM(GTK)

Modified: branches/chromium/874/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (95431 => 95432)


--- branches/chromium/874/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2011-09-19 17:05:26 UTC (rev 95431)
+++ branches/chromium/874/Source/WebCore/accessibility/AccessibilityRenderObject.cpp	2011-09-19 17:07:18 UTC (rev 95432)
@@ -1710,7 +1710,7 @@
     // aria-hidden hides this object and any children
     AccessibilityObject* object = parentObject();
     while (object) {
-        if (object->isAccessibilityRenderObject() && equalIgnoringCase(static_cast<AccessibilityRenderObject*>(object)->getAttribute(aria_hiddenAttr), "true"))
+        if (equalIgnoringCase(object->getAttribute(aria_hiddenAttr), "true"))
             return true;
         object = object->parentObject();
     }
@@ -3382,7 +3382,7 @@
         if (!parent->isAccessibilityRenderObject())
             continue;
         
-        AccessibilityRenderObject* axParent = static_cast<AccessibilityRenderObject*>(parent);
+        AccessibilityRenderObject* axParent = toAccessibilityRenderObject(parent);
         
         // Send the children changed notification on the first accessibility render object ancestor.
         if (!sentChildrenChanged) {
@@ -3464,7 +3464,12 @@
     // add all unignored acc children
     for (RefPtr<AccessibilityObject> obj = firstChild(); obj; obj = obj->nextSibling()) {
         if (obj->accessibilityIsIgnored()) {
-            obj->updateChildrenIfNecessary();
+
+            // If the parent is asking for this child's children, then either it's the first time (and clearing is a no-op), 
+            // or its visibility has changed. In the latter case, this child may have a stale child cached. 
+            // This can prevent aria-hidden changes from working correctly. Hence, whenever a parent is getting children, ensure data is not stale.
+            obj->clearChildren();
+            
             AccessibilityChildrenVector children = obj->children();
             unsigned length = children.size();
             for (unsigned i = 0; i < length; ++i)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to