ASSERT(!m_zOrderListsDirty) when mousing over web view with incremental rendering...
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jun 2015 01:59:08 +0000 (01:59 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jun 2015 01:59:08 +0000 (01:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=146225

Reviewed by Zalan Bujtas.

Update RenderLayer's z-order lists when hit testing. There's no guarantee that they've
been updated; this happens to work most of the time because painting updates them,
but if incremental rendering is suppressed, we may not have painted yet.

Easy to hit on webkit.org in MiniBrowser, but I wasn't able to make a reduced testcase.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::hitTest):
(WebCore::RenderLayer::updateLayerListsIfNeeded): Flip the order of the tests, since checking
dirty bits is cheaper than calling isStackingContext().

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@185858 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderLayer.cpp

index 7fcefcc..80cbce1 100644 (file)
@@ -1,3 +1,21 @@
+2015-06-22  Simon Fraser  <simon.fraser@apple.com>
+
+        ASSERT(!m_zOrderListsDirty) when mousing over web view with incremental rendering suppressed
+        https://bugs.webkit.org/show_bug.cgi?id=146225
+
+        Reviewed by Zalan Bujtas.
+
+        Update RenderLayer's z-order lists when hit testing. There's no guarantee that they've
+        been updated; this happens to work most of the time because painting updates them,
+        but if incremental rendering is suppressed, we may not have painted yet.
+        
+        Easy to hit on webkit.org in MiniBrowser, but I wasn't able to make a reduced testcase.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::hitTest):
+        (WebCore::RenderLayer::updateLayerListsIfNeeded): Flip the order of the tests, since checking
+        dirty bits is cheaper than calling isStackingContext().
+
 2015-06-22  Dean Jackson  <dino@apple.com>
 
         Rename PlatformCA*Mac to PlatformCA*Cocoa
index 38f3b41..54c10fc 100644 (file)
@@ -4808,6 +4808,8 @@ bool RenderLayer::hitTest(const HitTestRequest& request, const HitTestLocation&
 {
     ASSERT(isSelfPaintingLayer() || hasSelfPaintingLayerDescendant());
     ASSERT(!renderer().view().needsLayout());
+    
+    updateLayerListsIfNeeded();
 
     LayoutRect hitTestArea = isOutOfFlowRenderFlowThread() ? downcast<RenderFlowThread>(renderer()).visualOverflowRect() : renderer().view().documentRect();
     if (!request.ignoreClipping())
@@ -6303,7 +6305,7 @@ void RenderLayer::collectLayers(bool includeHiddenLayers, CollectLayersBehavior
 
 void RenderLayer::updateLayerListsIfNeeded()
 {
-    bool shouldUpdateDescendantsAreContiguousInStackingOrder = isStackingContext() && (m_zOrderListsDirty || m_normalFlowListDirty);
+    bool shouldUpdateDescendantsAreContiguousInStackingOrder = (m_zOrderListsDirty || m_normalFlowListDirty) && isStackingContext();
     updateZOrderLists();
     updateNormalFlowList();