Bug 1450360 - Reland chunk that got accidentally removed during a branch merge. draft
authorMatt Woodrow <mwoodrow@mozilla.com>
Wed, 04 Apr 2018 11:30:35 +1200
changeset 776979 743ea11b7b2be5b3deb28eed5da71c10132da8ba
parent 776948 00bdc9451be6557ccce1492b9b966d4435615380
child 777570 0e9f69c43ecd43d3ace88b0458c260996dba65c8
push id105046
push usermwoodrow@mozilla.com
push dateTue, 03 Apr 2018 23:31:12 +0000
bugs1450360
milestone61.0a1
Bug 1450360 - Reland chunk that got accidentally removed during a branch merge. MozReview-Commit-ID: 7gVvlsNcJnn
layout/painting/RetainedDisplayListBuilder.cpp
--- a/layout/painting/RetainedDisplayListBuilder.cpp
+++ b/layout/painting/RetainedDisplayListBuilder.cpp
@@ -1104,17 +1104,25 @@ RetainedDisplayListBuilder::AttemptParti
   // nsLayoutUtils::InvalidateForDisplayPortChange. The display port change also
   // marks the frame modified, so those regions are cleared here as well.
   AutoClearFramePropsArray modifiedFrames;
   AutoClearFramePropsArray framesWithProps;
   GetModifiedAndFramesWithProps(&mBuilder, &modifiedFrames.Frames(), &framesWithProps.Frames());
 
   // Do not allow partial builds if the retained display list is empty, or if
   // ShouldBuildPartial heuristic fails.
-  const bool shouldBuildPartial = !mList.IsEmpty() && ShouldBuildPartial(modifiedFrames.Frames());
+  bool shouldBuildPartial = !mList.IsEmpty() && ShouldBuildPartial(modifiedFrames.Frames());
+
+  // We don't support retaining with overlay scrollbars, since they require
+  // us to look at the display list and pick the highest z-index, which
+  // we can't do during partial building.
+  if (mBuilder.BuiltOverlayScrollbars()) {
+    shouldBuildPartial = false;
+    mBuilder.SetBuiltOverlayScrollbars(false);
+  }
 
   if (mPreviousCaret != mBuilder.GetCaretFrame()) {
     if (mPreviousCaret) {
       if (mBuilder.MarkFrameModifiedDuringBuilding(mPreviousCaret)) {
         modifiedFrames.Frames().AppendElement(mPreviousCaret);
       }
     }