Skip to content
  • dmazzoni@google.com's avatar
    AX: should init an AXObject only after AXObjectCache has added it · 36019066
    dmazzoni@google.com authored
    https://bugs.webkit.org/show_bug.cgi?id=107533
    
    Reviewed by Chris Fleizach.
    
    Source/WebCore:
    
    Initialize each AXObject after the AXObjectCache has
    finished adding it to its hash maps, so that it's
    impossible for initialization of an AXObject to result in
    exploring the tree and creating another AXObject instance
    that points to the same renderer / node.
    
    Test: accessibility/duplicate-axrenderobject-crash.html
    
    * accessibility/AXObjectCache.cpp:
    (WebCore::AXObjectCache::getOrCreate):
    * accessibility/AccessibilityARIAGrid.cpp:
    (WebCore::AccessibilityARIAGrid::create):
    * accessibility/AccessibilityARIAGridCell.cpp:
    (WebCore::AccessibilityARIAGridCell::create):
    * accessibility/AccessibilityARIAGridRow.cpp:
    (WebCore::AccessibilityARIAGridRow::create):
    * accessibility/AccessibilityList.cpp:
    (WebCore::AccessibilityList::create):
    * accessibility/AccessibilityListBox.cpp:
    (WebCore::AccessibilityListBox::create):
    * accessibility/AccessibilityMediaControls.cpp:
    (WebCore::AccessibilityMediaControl::create):
    (WebCore::AccessibilityMediaControlsContainer::create):
    (WebCore::AccessibilityMediaTimeline::create):
    (WebCore::AccessibilityMediaTimeDisplay::create):
    * accessibility/AccessibilityMenuList.cpp:
    (WebCore::AccessibilityMenuList::create):
    * accessibility/AccessibilityNodeObject.cpp:
    (WebCore::AccessibilityNodeObject::create):
    * accessibility/AccessibilityObject.h:
    (WebCore::AccessibilityObject::init):
    (AccessibilityObject):
    * accessibility/AccessibilityProgressIndicator.cpp:
    (WebCore::AccessibilityProgressIndicator::create):
    * accessibility/AccessibilityRenderObject.cpp:
    (WebCore::AccessibilityRenderObject::create):
    (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        assert that the object has been initialized
    * accessibility/AccessibilitySVGRoot.cpp:
    (WebCore::AccessibilitySVGRoot::create):
    * accessibility/AccessibilitySlider.cpp:
    (WebCore::AccessibilitySlider::create):
    * accessibility/AccessibilityTable.cpp:
    (WebCore::AccessibilityTable::create):
    * accessibility/AccessibilityTableCell.cpp:
    (WebCore::AccessibilityTableCell::create):
    * accessibility/AccessibilityTableRow.cpp:
    (WebCore::AccessibilityTableRow::create):
    
    LayoutTests:
    
    Adds a new test that demonstrates a crash if an AXObject
    initializes itself before the AXObjectCache has added it to
    the cache.
    
    * accessibility/duplicate-axrenderobject-crash-expected.txt: Added.
    * accessibility/duplicate-axrenderobject-crash.html: Added.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140658 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    36019066