Changeset 216096 in webkit
- Timestamp:
- May 2, 2017 2:29:13 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r216090 r216096 1 2017-05-02 Zalan Bujtas <zalan@apple.com> 2 3 Defer AX cache update when text content changes until after layout is finished. 4 https://bugs.webkit.org/show_bug.cgi?id=171429 5 <rdar://problem/31885984> 6 7 Reviewed by Simon Fraser. 8 9 * accessibility/crash-while-adding-text-child-with-transform-expected.txt: Added. 10 * accessibility/crash-while-adding-text-child-with-transform.html: Added. 11 1 12 2017-05-02 David Kilzer <ddkilzer@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r216094 r216096 1 2017-05-02 Zalan Bujtas <zalan@apple.com> 2 3 Defer AX cache update when text content changes until after layout is finished. 4 https://bugs.webkit.org/show_bug.cgi?id=171429 5 <rdar://problem/31885984> 6 7 Reviewed by Simon Fraser. 8 9 When the content of the RenderText changes (even as the result of a text-transform change) 10 instead of updating the AX cache eagerly (and trigger layout on a half-backed render tree) 11 we should just defer it until after the subsequent layout is done. 12 13 Test: accessibility/crash-while-adding-text-child-with-transform.html 14 15 * accessibility/AXObjectCache.cpp: 16 (WebCore::AXObjectCache::remove): 17 (WebCore::AXObjectCache::performDeferredCacheUpdate): 18 (WebCore::AXObjectCache::recomputeDeferredIsIgnored): 19 (WebCore::AXObjectCache::deferTextChanged): 20 (WebCore::AXObjectCache::performDeferredIsIgnoredChange): Deleted. 21 * accessibility/AXObjectCache.h: 22 (WebCore::AXObjectCache::deferTextChanged): 23 (WebCore::AXObjectCache::performDeferredCacheUpdate): 24 (WebCore::AXObjectCache::performDeferredIsIgnoredChange): Deleted. 25 * page/FrameView.cpp: 26 (WebCore::FrameView::performPostLayoutTasks): 27 * rendering/RenderText.cpp: 28 (WebCore::RenderText::setText): 29 1 30 2017-05-02 Wenson Hsieh <wenson_hsieh@apple.com> 2 31 -
trunk/Source/WebCore/accessibility/AXObjectCache.cpp
r215837 r216096 712 712 remove(axID); 713 713 m_renderObjectMapping.remove(renderer); 714 if (is<RenderBlock>(*renderer)) 715 m_deferredIsIgnoredChangeList.remove(downcast<RenderBlock>(renderer)); 714 m_deferredCacheUpdateList.remove(renderer); 716 715 } 717 716 … … 2701 2700 } 2702 2701 2703 void AXObjectCache::performDeferredIsIgnoredChange() 2704 { 2705 for (auto* renderer : m_deferredIsIgnoredChangeList) 2706 recomputeIsIgnored(renderer); 2707 m_deferredIsIgnoredChangeList.clear(); 2702 void AXObjectCache::performDeferredCacheUpdate() 2703 { 2704 for (auto* renderer : m_deferredCacheUpdateList) { 2705 if (is<RenderBlock>(*renderer)) 2706 recomputeIsIgnored(renderer); 2707 else if (is<RenderText>(*renderer)) 2708 textChanged(renderer); 2709 else 2710 ASSERT_NOT_REACHED(); 2711 } 2712 m_deferredCacheUpdateList.clear(); 2708 2713 } 2709 2714 2710 2715 void AXObjectCache::recomputeDeferredIsIgnored(RenderBlock& renderer) 2711 2716 { 2712 m_deferredIsIgnoredChangeList.add(&renderer); 2717 m_deferredCacheUpdateList.add(&renderer); 2718 } 2719 2720 void AXObjectCache::deferTextChanged(RenderText& renderer) 2721 { 2722 m_deferredCacheUpdateList.add(&renderer); 2713 2723 } 2714 2724 -
trunk/Source/WebCore/accessibility/AXObjectCache.h
r215837 r216096 46 46 class RenderBlock; 47 47 class RenderObject; 48 class RenderText; 48 49 class ScrollView; 49 50 class VisiblePosition; … … 328 329 #endif 329 330 void recomputeDeferredIsIgnored(RenderBlock& renderer); 330 void performDeferredIsIgnoredChange(); 331 void deferTextChanged(RenderText& renderer); 332 void performDeferredCacheUpdate(); 331 333 332 334 protected: … … 430 432 AXTextStateChangeIntent m_textSelectionIntent; 431 433 bool m_isSynchronizingSelection { false }; 432 ListHashSet<Render Block*> m_deferredIsIgnoredChangeList;434 ListHashSet<RenderObject*> m_deferredCacheUpdateList; 433 435 }; 434 436 … … 493 495 inline void AXObjectCache::recomputeIsIgnored(RenderObject*) { } 494 496 inline void AXObjectCache::recomputeDeferredIsIgnored(RenderBlock&) { } 495 inline void AXObjectCache::performDeferredIsIgnoredChange() { } 497 inline void AXObjectCache::deferTextChanged(RenderText&) { } 498 inline void AXObjectCache::performDeferredCacheUpdate() { } 496 499 inline void AXObjectCache::handleScrolledToAnchor(const Node*) { } 497 500 inline void AXObjectCache::postTextStateChangeNotification(Node*, const AXTextStateChangeIntent&, const VisibleSelection&) { } -
trunk/Source/WebCore/page/FrameView.cpp
r216047 r216096 3554 3554 3555 3555 if (AXObjectCache* cache = frame().document()->existingAXObjectCache()) 3556 cache->performDeferred IsIgnoredChange();3556 cache->performDeferredCacheUpdate(); 3557 3557 } 3558 3558 -
trunk/Source/WebCore/rendering/RenderText.cpp
r215325 r216096 1282 1282 1283 1283 if (AXObjectCache* cache = document().existingAXObjectCache()) 1284 cache-> textChanged(this);1284 cache->deferTextChanged(*this); 1285 1285 } 1286 1286
Note: See TracChangeset
for help on using the changeset viewer.