Bug 1313753 - Update overflow at the establisher of the 3D rendering context. r=dbaron a=jcristau
authorThinker K.F. Li <thinker@codemud.net>
Wed, 08 Feb 2017 23:17:00 +0100
changeset 354349 da123a8b468f6004cef07a9d8a1c7a59c1434be8
parent 354348 85400a46019b9663ff62727565a8e478dd1577e1
child 354350 398b16c6ce7a7918e01098767faf2c65b28fc7c7
push id6897
push userryanvm@gmail.com
push dateTue, 21 Feb 2017 21:41:19 +0000
treeherdermozilla-esr52@0316bb85a29c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdbaron, jcristau
bugs1313753
milestone52.0
Bug 1313753 - Update overflow at the establisher of the 3D rendering context. r=dbaron a=jcristau
layout/base/OverflowChangedTracker.h
--- a/layout/base/OverflowChangedTracker.h
+++ b/layout/base/OverflowChangedTracker.h
@@ -134,16 +134,24 @@ public:
         overflowChanged = true;
       }
 
       // If the frame style changed (e.g. positioning offsets)
       // then we need to update the parent with the overflow areas of its
       // children.
       if (overflowChanged) {
         nsIFrame *parent = frame->GetParent();
+        while (parent &&
+               parent != mSubtreeRoot &&
+               parent->Combines3DTransformWithAncestors()) {
+          // Passing frames in between the frame and the establisher of
+          // 3D rendering context.
+          parent = parent->GetParent();
+          MOZ_ASSERT(parent, "Root frame should never return true for Combines3DTransformWithAncestors");
+        }
         if (parent && parent != mSubtreeRoot) {
           Entry* parentEntry = mEntryList.find(Entry(parent, entry->mDepth - 1));
           if (parentEntry) {
             parentEntry->mChangeKind = std::max(parentEntry->mChangeKind, CHILDREN_CHANGED);
           } else {
             mEntryList.insert(new Entry(parent, entry->mDepth - 1, CHILDREN_CHANGED));
           }
         }