Changeset 223151 in webkit
- Timestamp:
- Oct 10, 2017 3:47:30 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r223149 r223151 1 2017-10-10 Zalan Bujtas <zalan@apple.com> 2 3 AccessibilityRenderObject should not hold a raw pointer to RenderObject 4 https://bugs.webkit.org/show_bug.cgi?id=178144 5 <rdar://problem/34919287> 6 7 Reviewed by Chris Fleizach. 8 9 m_renderer's lifetime is not directly tied to the AX wrapper object's lifetime. 10 11 Covered by existing tests. 12 13 * accessibility/AccessibilityListBox.cpp: 14 (WebCore::AccessibilityListBox::elementAccessibilityHitTest const): 15 * accessibility/AccessibilityMathMLElement.cpp: 16 (WebCore::AccessibilityMathMLElement::isMathFenceOperator const): 17 (WebCore::AccessibilityMathMLElement::isMathSeparatorOperator const): 18 (WebCore::AccessibilityMathMLElement::mathLineThickness const): 19 * accessibility/AccessibilityMenuList.cpp: 20 (WebCore::AccessibilityMenuList::press): 21 (WebCore::AccessibilityMenuList::isCollapsed const): 22 * accessibility/AccessibilityRenderObject.cpp: 23 (WebCore::AccessibilityRenderObject::AccessibilityRenderObject): 24 (WebCore::AccessibilityRenderObject::renderBoxModelObject const): 25 (WebCore::AccessibilityRenderObject::setRenderer): 26 (WebCore::AccessibilityRenderObject::previousSibling const): 27 (WebCore::AccessibilityRenderObject::anchorElement const): 28 (WebCore::AccessibilityRenderObject::helpText const): 29 (WebCore::AccessibilityRenderObject::boundingBoxRect const): 30 (WebCore::AccessibilityRenderObject::supportsPath const): 31 (WebCore::AccessibilityRenderObject::elementPath const): 32 (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored const): 33 (WebCore::AccessibilityRenderObject::index const): 34 (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged): 35 (WebCore::AccessibilityRenderObject::observableObject const): 36 (WebCore::AccessibilityRenderObject::determineAccessibilityRole): 37 (WebCore::AccessibilityRenderObject::textChanged): 38 (WebCore::AccessibilityRenderObject::remoteSVGRootElement const): 39 (WebCore::AccessibilityRenderObject::roleValueForMSAA const): 40 (WebCore::AccessibilityRenderObject::getScrollableAreaIfScrollable const): 41 (WebCore::AccessibilityRenderObject::scrollTo const): 42 * accessibility/AccessibilityRenderObject.h: 43 (WebCore::AccessibilityRenderObject::setRenderObject): 44 * accessibility/AccessibilitySlider.cpp: 45 (WebCore::AccessibilitySlider::elementAccessibilityHitTest const): 46 * accessibility/AccessibilityTable.cpp: 47 (WebCore::AccessibilityTable::addChildren): 48 * accessibility/AccessibilityTableCell.cpp: 49 (WebCore::AccessibilityTableCell::computeAccessibilityIsIgnored const): 50 (WebCore::AccessibilityTableCell::parentTable const): 51 (WebCore::AccessibilityTableCell::rowIndexRange const): 52 (WebCore::AccessibilityTableCell::columnIndexRange const): 53 (WebCore::AccessibilityTableCell::titleUIElement const): 54 1 55 2017-10-10 Sam Weinig <sam@webkit.org> 2 56 -
trunk/Source/WebCore/accessibility/AccessibilityListBox.cpp
r177733 r223151 173 173 return listBoxOption; 174 174 175 return axObjectCache()->getOrCreate( m_renderer);175 return axObjectCache()->getOrCreate(renderer()); 176 176 } 177 177 -
trunk/Source/WebCore/accessibility/AccessibilityMathMLElement.cpp
r202961 r223151 154 154 bool AccessibilityMathMLElement::isMathFenceOperator() const 155 155 { 156 if (!is<RenderMathMLOperator>( m_renderer))156 if (!is<RenderMathMLOperator>(renderer())) 157 157 return false; 158 158 … … 162 162 bool AccessibilityMathMLElement::isMathSeparatorOperator() const 163 163 { 164 if (!is<RenderMathMLOperator>( m_renderer))164 if (!is<RenderMathMLOperator>(renderer())) 165 165 return false; 166 166 … … 446 446 int AccessibilityMathMLElement::mathLineThickness() const 447 447 { 448 if (!is<RenderMathMLFraction>( m_renderer))448 if (!is<RenderMathMLFraction>(renderer())) 449 449 return -1; 450 450 -
trunk/Source/WebCore/accessibility/AccessibilityMenuList.cpp
r184097 r223151 46 46 { 47 47 #if !PLATFORM(IOS) 48 RenderMenuList* menuList = static_cast<RenderMenuList*>( m_renderer);48 RenderMenuList* menuList = static_cast<RenderMenuList*>(renderer()); 49 49 if (menuList->popupIsVisible()) 50 50 menuList->hidePopup(); … … 94 94 { 95 95 #if !PLATFORM(IOS) 96 return !static_cast<RenderMenuList*>( m_renderer)->popupIsVisible();96 return !static_cast<RenderMenuList*>(renderer())->popupIsVisible(); 97 97 #else 98 98 return true; -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
r223127 r223151 109 109 AccessibilityRenderObject::AccessibilityRenderObject(RenderObject* renderer) 110 110 : AccessibilityNodeObject(renderer->node()) 111 , m_renderer( renderer)111 , m_renderer(makeWeakPtr(renderer)) 112 112 { 113 113 #ifndef NDEBUG … … 146 146 RenderBoxModelObject* AccessibilityRenderObject::renderBoxModelObject() const 147 147 { 148 if (!is<RenderBoxModelObject>( m_renderer))149 return nullptr; 150 return downcast<RenderBoxModelObject>( m_renderer);148 if (!is<RenderBoxModelObject>(renderer())) 149 return nullptr; 150 return downcast<RenderBoxModelObject>(renderer()); 151 151 } 152 152 153 153 void AccessibilityRenderObject::setRenderer(RenderObject* renderer) 154 154 { 155 m_renderer = renderer;155 m_renderer = makeWeakPtr(renderer); 156 156 setNode(renderer->node()); 157 157 } … … 325 325 RenderInline* startOfConts; 326 326 if (is<RenderBox>(*m_renderer) && (startOfConts = startOfContinuations(*m_renderer))) 327 previousSibling = childBeforeConsideringContinuations(startOfConts, m_renderer);327 previousSibling = childBeforeConsideringContinuations(startOfConts, renderer()); 328 328 329 329 // Case 2: Anonymous block parent of the end of a continuation - skip all the way to before … … 562 562 563 563 // Search up the render tree for a RenderObject with a DOM node. Defer to an earlier continuation, though. 564 for (currentRenderer = m_renderer; currentRenderer && !currentRenderer->node(); currentRenderer = currentRenderer->parent()) {564 for (currentRenderer = renderer(); currentRenderer && !currentRenderer->node(); currentRenderer = currentRenderer->parent()) { 565 565 if (currentRenderer->isAnonymousBlock()) { 566 566 if (RenderObject* continuation = downcast<RenderBlock>(*currentRenderer).continuation()) … … 597 597 598 598 String description = accessibilityDescription(); 599 for (RenderObject* ancestor = m_renderer; ancestor; ancestor = ancestor->parent()) {599 for (RenderObject* ancestor = renderer(); ancestor; ancestor = ancestor->parent()) { 600 600 if (is<HTMLElement>(ancestor->node())) { 601 601 HTMLElement& element = downcast<HTMLElement>(*ancestor->node()); … … 824 824 LayoutRect AccessibilityRenderObject::boundingBoxRect() const 825 825 { 826 RenderObject* obj = m_renderer;826 RenderObject* obj = renderer(); 827 827 828 828 if (!obj) … … 886 886 bool AccessibilityRenderObject::supportsPath() const 887 887 { 888 return is<RenderSVGShape>( m_renderer);888 return is<RenderSVGShape>(renderer()); 889 889 } 890 890 891 891 Path AccessibilityRenderObject::elementPath() const 892 892 { 893 if (is<RenderSVGShape>( m_renderer) && downcast<RenderSVGShape>(*m_renderer).hasPath()) {893 if (is<RenderSVGShape>(renderer()) && downcast<RenderSVGShape>(*m_renderer).hasPath()) { 894 894 Path path = downcast<RenderSVGShape>(*m_renderer).path(); 895 895 … … 1196 1196 1197 1197 // WebAreas should be ignored if their iframe container is marked as presentational. 1198 if (webAreaIsPresentational( m_renderer))1198 if (webAreaIsPresentational(renderer())) 1199 1199 return true; 1200 1200 1201 1201 // An ARIA tree can only have tree items and static text as children. 1202 1202 if (!isAllowedChildOfTree()) … … 1333 1333 // However, if this is not a native image, fallback to the attribute on the Element. 1334 1334 AccessibilityObjectInclusion altTextInclusion = DefaultBehavior; 1335 bool isRenderImage = is<RenderImage>( m_renderer);1335 bool isRenderImage = is<RenderImage>(renderer()); 1336 1336 if (isRenderImage) 1337 1337 altTextInclusion = objectInclusionFromAltText(downcast<RenderImage>(*m_renderer).altText()); … … 2198 2198 return -1; 2199 2199 2200 if (renderObjectContainsPosition( m_renderer, position.deepEquivalent()))2200 if (renderObjectContainsPosition(renderer(), position.deepEquivalent())) 2201 2201 return indexForVisiblePosition(position); 2202 2202 … … 2511 2511 2512 2512 if (activeDescendant() && shouldNotifyActiveDescendant()) 2513 renderer()->document().axObjectCache()->postNotification( m_renderer, AXObjectCache::AXActiveDescendantChanged);2513 renderer()->document().axObjectCache()->postNotification(renderer(), AXObjectCache::AXActiveDescendantChanged); 2514 2514 } 2515 2515 … … 2574 2574 { 2575 2575 // Find the object going up the parent chain that is used in accessibility to monitor certain notifications. 2576 for (RenderObject* renderer = m_renderer; renderer && renderer->node(); renderer = renderer->parent()) {2576 for (RenderObject* renderer = this->renderer(); renderer && renderer->node(); renderer = renderer->parent()) { 2577 2577 if (renderObjectIsObservable(*renderer)) { 2578 2578 if (AXObjectCache* cache = axObjectCache()) … … 2728 2728 // This return value is what will be used if AccessibilityTableCell determines 2729 2729 // the cell should not be treated as a cell (e.g. because it is a layout table. 2730 if (is<RenderTableCell>( m_renderer))2730 if (is<RenderTableCell>(renderer())) 2731 2731 return TextGroupRole; 2732 2732 … … 2960 2960 return; 2961 2961 2962 for (RenderObject* renderParent = m_renderer; renderParent; renderParent = renderParent->parent()) {2962 for (RenderObject* renderParent = renderer(); renderParent; renderParent = renderParent->parent()) { 2963 2963 AccessibilityObject* parent = cache->get(renderParent); 2964 2964 if (!parent) … … 3047 3047 AccessibilitySVGRoot* AccessibilityRenderObject::remoteSVGRootElement(CreationChoice createIfNecessary) const 3048 3048 { 3049 if (!is<RenderImage>( m_renderer))3049 if (!is<RenderImage>(renderer())) 3050 3050 return nullptr; 3051 3051 … … 3667 3667 return m_roleForMSAA; 3668 3668 3669 m_roleForMSAA = msaaRoleForRenderer( m_renderer);3669 m_roleForMSAA = msaaRoleForRenderer(renderer()); 3670 3670 3671 3671 if (m_roleForMSAA == UnknownRole) … … 3697 3697 return nullptr; 3698 3698 3699 if (!is<RenderBox>( m_renderer))3699 if (!is<RenderBox>(renderer())) 3700 3700 return nullptr; 3701 3701 … … 3709 3709 void AccessibilityRenderObject::scrollTo(const IntPoint& point) const 3710 3710 { 3711 if (!is<RenderBox>( m_renderer))3711 if (!is<RenderBox>(renderer())) 3712 3712 return; 3713 3713 -
trunk/Source/WebCore/accessibility/AccessibilityRenderObject.h
r222422 r223151 31 31 #include "AccessibilityNodeObject.h" 32 32 #include "LayoutRect.h" 33 #include "RenderObject.h" 33 34 #include <wtf/Forward.h> 34 35 #include <wtf/WeakPtr.h> … … 115 116 116 117 void setRenderer(RenderObject*); 117 RenderObject* renderer() const override { return m_renderer ; }118 RenderObject* renderer() const override { return m_renderer.get(); } 118 119 RenderBoxModelObject* renderBoxModelObject() const; 119 120 Node* node() const override; … … 205 206 protected: 206 207 explicit AccessibilityRenderObject(RenderObject*); 207 void setRenderObject(RenderObject* renderer) { m_renderer = renderer; }208 208 ScrollableArea* getScrollableAreaIfScrollable() const override; 209 209 void scrollTo(const IntPoint&) const override; … … 218 218 #endif 219 219 220 RenderObject*m_renderer;220 WeakPtr<RenderObject> m_renderer; 221 221 222 222 private: -
trunk/Source/WebCore/accessibility/AccessibilitySlider.cpp
r177733 r223151 109 109 } 110 110 111 return axObjectCache()->getOrCreate( m_renderer);111 return axObjectCache()->getOrCreate(renderer()); 112 112 } 113 113 -
trunk/Source/WebCore/accessibility/AccessibilityTable.cpp
r222790 r223151 387 387 388 388 m_haveChildren = true; 389 if (!is<RenderTable>( m_renderer))389 if (!is<RenderTable>(renderer())) 390 390 return; 391 391 -
trunk/Source/WebCore/accessibility/AccessibilityTableCell.cpp
r216167 r223151 67 67 68 68 // Ignore anonymous table cells as long as they're not in a table (ie. when display:table is used). 69 RenderObject* renderTable = is<RenderTableCell>( m_renderer) ? downcast<RenderTableCell>(*m_renderer).table() : nullptr;69 RenderObject* renderTable = is<RenderTableCell>(renderer()) ? downcast<RenderTableCell>(*m_renderer).table() : nullptr; 70 70 bool inTable = renderTable && renderTable->node() && (renderTable->node()->hasTagName(tableTag) || nodeHasRole(renderTable->node(), "grid")); 71 71 if (!node() && !inTable) … … 80 80 AccessibilityTable* AccessibilityTableCell::parentTable() const 81 81 { 82 if (!is<RenderTableCell>( m_renderer))82 if (!is<RenderTableCell>(renderer())) 83 83 return nullptr; 84 84 … … 315 315 void AccessibilityTableCell::rowIndexRange(std::pair<unsigned, unsigned>& rowRange) const 316 316 { 317 if (!is<RenderTableCell>( m_renderer))317 if (!is<RenderTableCell>(renderer())) 318 318 return; 319 319 … … 333 333 void AccessibilityTableCell::columnIndexRange(std::pair<unsigned, unsigned>& columnRange) const 334 334 { 335 if (!is<RenderTableCell>( m_renderer))335 if (!is<RenderTableCell>(renderer())) 336 336 return; 337 337 … … 354 354 // then it can act as the title ui element. (This is only in the 355 355 // case when the table is not appearing as an AXTable.) 356 if (isTableCell() || !is<RenderTableCell>( m_renderer))356 if (isTableCell() || !is<RenderTableCell>(renderer())) 357 357 return nullptr; 358 358
Note: See TracChangeset
for help on using the changeset viewer.