Changeset 140658 in webkit
- Timestamp:
- Jan 24, 2013 12:16:00 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r140657 r140658 1 2013-01-24 Dominic Mazzoni <dmazzoni@google.com> 2 3 AX: should init an AXObject only after AXObjectCache has added it 4 https://bugs.webkit.org/show_bug.cgi?id=107533 5 6 Reviewed by Chris Fleizach. 7 8 Adds a new test that demonstrates a crash if an AXObject 9 initializes itself before the AXObjectCache has added it to 10 the cache. 11 12 * accessibility/duplicate-axrenderobject-crash-expected.txt: Added. 13 * accessibility/duplicate-axrenderobject-crash.html: Added. 14 1 15 2013-01-23 Kentaro Hara <haraken@chromium.org> 2 16 -
trunk/Source/WebCore/ChangeLog
r140657 r140658 1 2013-01-24 Dominic Mazzoni <dmazzoni@google.com> 2 3 AX: should init an AXObject only after AXObjectCache has added it 4 https://bugs.webkit.org/show_bug.cgi?id=107533 5 6 Reviewed by Chris Fleizach. 7 8 Initialize each AXObject after the AXObjectCache has 9 finished adding it to its hash maps, so that it's 10 impossible for initialization of an AXObject to result in 11 exploring the tree and creating another AXObject instance 12 that points to the same renderer / node. 13 14 Test: accessibility/duplicate-axrenderobject-crash.html 15 16 * accessibility/AXObjectCache.cpp: 17 (WebCore::AXObjectCache::getOrCreate): 18 * accessibility/AccessibilityARIAGrid.cpp: 19 (WebCore::AccessibilityARIAGrid::create): 20 * accessibility/AccessibilityARIAGridCell.cpp: 21 (WebCore::AccessibilityARIAGridCell::create): 22 * accessibility/AccessibilityARIAGridRow.cpp: 23 (WebCore::AccessibilityARIAGridRow::create): 24 * accessibility/AccessibilityList.cpp: 25 (WebCore::AccessibilityList::create): 26 * accessibility/AccessibilityListBox.cpp: 27 (WebCore::AccessibilityListBox::create): 28 * accessibility/AccessibilityMediaControls.cpp: 29 (WebCore::AccessibilityMediaControl::create): 30 (WebCore::AccessibilityMediaControlsContainer::create): 31 (WebCore::AccessibilityMediaTimeline::create): 32 (WebCore::AccessibilityMediaTimeDisplay::create): 33 * accessibility/AccessibilityMenuList.cpp: 34 (WebCore::AccessibilityMenuList::create): 35 * accessibility/AccessibilityNodeObject.cpp: 36 (WebCore::AccessibilityNodeObject::create): 37 * accessibility/AccessibilityObject.h: 38 (WebCore::AccessibilityObject::init): 39 (AccessibilityObject): 40 * accessibility/AccessibilityProgressIndicator.cpp: 41 (WebCore::AccessibilityProgressIndicator::create): 42 * accessibility/AccessibilityRenderObject.cpp: 43 (WebCore::AccessibilityRenderObject::create): 44 (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): 45 assert that the object has been initialized 46 * accessibility/AccessibilitySVGRoot.cpp: 47 (WebCore::AccessibilitySVGRoot::create): 48 * accessibility/AccessibilitySlider.cpp: 49 (WebCore::AccessibilitySlider::create): 50 * accessibility/AccessibilityTable.cpp: 51 (WebCore::AccessibilityTable::create): 52 * accessibility/AccessibilityTableCell.cpp: 53 (WebCore::AccessibilityTableCell::create): 54 * accessibility/AccessibilityTableRow.cpp: 55 (WebCore::AccessibilityTableRow::create): 56 1 57 2013-01-23 Kentaro Hara <haraken@chromium.org> 2 58 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r140393 r140658 315 315 m_objects.set(newObj->axObjectID(), newObj); 316 316 attachWrapper(newObj.get()); 317 newObj->init(); 317 318 return newObj.get(); 318 319 } … … 350 351 attachWrapper(newObj.get()); 351 352 353 newObj->init(); 352 354 newObj->setCachedIsIgnoredValue(newObj->accessibilityIsIgnored()); 353 355 … … 374 376 attachWrapper(newObj.get()); 375 377 378 newObj->init(); 376 379 newObj->setCachedIsIgnoredValue(newObj->accessibilityIsIgnored()); 377 380 … … 441 444 m_objects.set(obj->axObjectID(), obj); 442 445 attachWrapper(obj.get()); 446 obj->init(); 443 447 return obj.get(); 444 448 } -
trunk/Source/WebCore/accessibility/AccessibilityARIAGrid.cpp
r131957 r140658 62 62 PassRefPtr<AccessibilityARIAGrid> AccessibilityARIAGrid::create(RenderObject* renderer) 63 63 { 64 AccessibilityARIAGrid* obj = new AccessibilityARIAGrid(renderer); 65 obj->init(); 66 return adoptRef(obj); 64 return adoptRef(new AccessibilityARIAGrid(renderer)); 67 65 } 68 66 -
trunk/Source/WebCore/accessibility/AccessibilityARIAGridCell.cpp
r123428 r140658 49 49 PassRefPtr<AccessibilityARIAGridCell> AccessibilityARIAGridCell::create(RenderObject* renderer) 50 50 { 51 AccessibilityARIAGridCell* obj = new AccessibilityARIAGridCell(renderer); 52 obj->init(); 53 return adoptRef(obj); 51 return adoptRef(new AccessibilityARIAGridCell(renderer)); 54 52 } 55 53 -
trunk/Source/WebCore/accessibility/AccessibilityARIAGridRow.cpp
r140095 r140658 49 49 PassRefPtr<AccessibilityARIAGridRow> AccessibilityARIAGridRow::create(RenderObject* renderer) 50 50 { 51 AccessibilityARIAGridRow* obj = new AccessibilityARIAGridRow(renderer); 52 obj->init(); 53 return adoptRef(obj); 51 return adoptRef(new AccessibilityARIAGridRow(renderer)); 54 52 } 55 53 -
trunk/Source/WebCore/accessibility/AccessibilityList.cpp
r123428 r140658 51 51 PassRefPtr<AccessibilityList> AccessibilityList::create(RenderObject* renderer) 52 52 { 53 AccessibilityList* obj = new AccessibilityList(renderer); 54 obj->init(); 55 return adoptRef(obj); 53 return adoptRef(new AccessibilityList(renderer)); 56 54 } 57 55 -
trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp
r123428 r140658 55 55 PassRefPtr<AccessibilityListBox> AccessibilityListBox::create(RenderObject* renderer) 56 56 { 57 AccessibilityListBox* obj = new AccessibilityListBox(renderer); 58 obj->init(); 59 return adoptRef(obj); 57 return adoptRef(new AccessibilityListBox(renderer)); 60 58 } 61 59 -
trunk/Source/WebCore/accessibility/AccessibilityMediaControls.cpp
r133424 r140658 68 68 return AccessibilityMediaControlsContainer::create(renderer); 69 69 70 default: { 71 AccessibilityMediaControl* obj = new AccessibilityMediaControl(renderer); 72 obj->init(); 73 return adoptRef(obj); 74 } 70 default: 71 return adoptRef(new AccessibilityMediaControl(renderer)); 75 72 } 76 73 } … … 227 224 PassRefPtr<AccessibilityObject> AccessibilityMediaControlsContainer::create(RenderObject* renderer) 228 225 { 229 AccessibilityMediaControlsContainer* obj = new AccessibilityMediaControlsContainer(renderer); 230 obj->init(); 231 return adoptRef(obj); 226 return adoptRef(new AccessibilityMediaControlsContainer(renderer)); 232 227 } 233 228 … … 273 268 PassRefPtr<AccessibilityObject> AccessibilityMediaTimeline::create(RenderObject* renderer) 274 269 { 275 AccessibilityMediaTimeline* obj = new AccessibilityMediaTimeline(renderer); 276 obj->init(); 277 return adoptRef(obj); 270 return adoptRef(new AccessibilityMediaTimeline(renderer)); 278 271 } 279 272 … … 305 298 PassRefPtr<AccessibilityObject> AccessibilityMediaTimeDisplay::create(RenderObject* renderer) 306 299 { 307 AccessibilityMediaTimeDisplay* obj = new AccessibilityMediaTimeDisplay(renderer); 308 obj->init(); 309 return adoptRef(obj); 300 return adoptRef(new AccessibilityMediaTimeDisplay(renderer)); 310 301 } 311 302 -
trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp
r123428 r140658 40 40 PassRefPtr<AccessibilityMenuList> AccessibilityMenuList::create(RenderMenuList* renderer) 41 41 { 42 AccessibilityMenuList* obj = new AccessibilityMenuList(renderer); 43 obj->init(); 44 return adoptRef(obj); 42 return adoptRef(new AccessibilityMenuList(renderer)); 45 43 } 46 44 -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp
r139663 r140658 90 90 , m_roleForMSAA(UnknownRole) 91 91 , m_node(node) 92 #ifndef NDEBUG 93 , m_initialized(false) 94 #endif 92 95 { 93 96 } … … 100 103 void AccessibilityNodeObject::init() 101 104 { 105 #ifndef NDEBUG 106 ASSERT(!m_initialized); 107 m_initialized = true; 108 #endif 102 109 m_role = determineAccessibilityRole(); 103 110 } … … 105 112 PassRefPtr<AccessibilityNodeObject> AccessibilityNodeObject::create(Node* node) 106 113 { 107 AccessibilityNodeObject* obj = new AccessibilityNodeObject(node); 108 obj->init(); 109 return adoptRef(obj); 114 return adoptRef(new AccessibilityNodeObject(node)); 110 115 } 111 116 … … 387 392 bool AccessibilityNodeObject::accessibilityIsIgnored() const 388 393 { 394 #ifndef NDEBUG 395 // Double-check that an AccessibilityObject is never accessed before 396 // it's been initialized. 397 ASSERT(m_initialized); 398 #endif 399 389 400 // If this element is within a parent that cannot have children, it should not be exposed. 390 401 if (isDescendantOfBarrenParent()) -
trunk/Source/WebCore/accessibility/AccessibilityNodeObject.h
r139663 r140658 154 154 bool m_childrenDirty; 155 155 mutable AccessibilityRole m_roleForMSAA; 156 #ifndef NDEBUG 157 bool m_initialized; 158 #endif 156 159 157 160 virtual bool isDetached() const { return !m_node; } -
trunk/Source/WebCore/accessibility/AccessibilityObject.h
r139663 r140658 356 356 public: 357 357 virtual ~AccessibilityObject(); 358 359 // After constructing an AccessibilityObject, it must be given a 360 // unique ID, then added to AXObjectCache, and finally init() must 361 // be called last. 362 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; } 363 virtual void init() { } 364 365 // When the corresponding WebCore object that this AccessibilityObject 366 // wraps is deleted, it must be detached. 358 367 virtual void detach(); 359 368 virtual bool isDetached() const; … … 570 579 virtual AXObjectCache* axObjectCache() const; 571 580 AXID axObjectID() const { return m_id; } 572 void setAXObjectID(AXID axObjectID) { m_id = axObjectID; }573 581 574 582 static AccessibilityObject* anchorElementForNode(Node*); -
trunk/Source/WebCore/accessibility/AccessibilityProgressIndicator.cpp
r123428 r140658 40 40 PassRefPtr<AccessibilityProgressIndicator> AccessibilityProgressIndicator::create(RenderProgress* renderer) 41 41 { 42 AccessibilityProgressIndicator* obj = new AccessibilityProgressIndicator(renderer); 43 obj->init(); 44 return adoptRef(obj); 42 return adoptRef(new AccessibilityProgressIndicator(renderer)); 45 43 } 46 44 -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r140541 r140658 124 124 PassRefPtr<AccessibilityRenderObject> AccessibilityRenderObject::create(RenderObject* renderer) 125 125 { 126 AccessibilityRenderObject* obj = new AccessibilityRenderObject(renderer); 127 obj->init(); 128 return adoptRef(obj); 126 return adoptRef(new AccessibilityRenderObject(renderer)); 129 127 } 130 128 … … 1127 1125 bool AccessibilityRenderObject::accessibilityIsIgnored() const 1128 1126 { 1127 #ifndef NDEBUG 1128 ASSERT(m_initialized); 1129 #endif 1130 1129 1131 // Check first if any of the common reasons cause this element to be ignored. 1130 1132 // Then process other use cases that need to be applied to all the various roles -
trunk/Source/WebCore/accessibility/AccessibilitySVGRoot.cpp
r132915 r140658 46 46 PassRefPtr<AccessibilitySVGRoot> AccessibilitySVGRoot::create(RenderObject* renderer) 47 47 { 48 AccessibilitySVGRoot* obj = new AccessibilitySVGRoot(renderer); 49 obj->init(); 50 return adoptRef(obj); 48 return adoptRef(new AccessibilitySVGRoot(renderer)); 51 49 } 52 50 -
trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp
r128006 r140658 48 48 PassRefPtr<AccessibilitySlider> AccessibilitySlider::create(RenderObject* renderer) 49 49 { 50 AccessibilitySlider* obj = new AccessibilitySlider(renderer); 51 obj->init(); 52 return adoptRef(obj); 50 return adoptRef(new AccessibilitySlider(renderer)); 53 51 } 54 52 -
trunk/Source/WebCore/accessibility/AccessibilityTable.cpp
r140181 r140658 70 70 PassRefPtr<AccessibilityTable> AccessibilityTable::create(RenderObject* renderer) 71 71 { 72 AccessibilityTable* obj = new AccessibilityTable(renderer); 73 obj->init(); 74 return adoptRef(obj); 72 return adoptRef(new AccessibilityTable(renderer)); 75 73 } 76 74 -
trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp
r140340 r140658 52 52 PassRefPtr<AccessibilityTableCell> AccessibilityTableCell::create(RenderObject* renderer) 53 53 { 54 AccessibilityTableCell* obj = new AccessibilityTableCell(renderer); 55 obj->init(); 56 return adoptRef(obj); 54 return adoptRef(new AccessibilityTableCell(renderer)); 57 55 } 58 56 -
trunk/Source/WebCore/accessibility/AccessibilityTableRow.cpp
r140095 r140658 55 55 PassRefPtr<AccessibilityTableRow> AccessibilityTableRow::create(RenderObject* renderer) 56 56 { 57 AccessibilityTableRow* obj = new AccessibilityTableRow(renderer); 58 obj->init(); 59 return adoptRef(obj); 57 return adoptRef(new AccessibilityTableRow(renderer)); 60 58 } 61 59
Note: See TracChangeset
for help on using the changeset viewer.