Index: third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
index ba2878b3f7468b7f66b5582495755e38850c1913..771acb511c8fb4426626165b72876116e6f5dd5d 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp |
@@ -612,10 +612,12 @@ void PaintLayerScrollableArea::scrollToPosition(const DoublePoint& scrollPositio |
ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehavior); |
} |
-void PaintLayerScrollableArea::updateAfterLayout() |
+bool PaintLayerScrollableArea::updateAfterLayout(SubtreeLayoutScope* delayedLayoutScope) |
{ |
ASSERT(box().hasOverflowClip()); |
+ bool didMarkForDelayedLayout = false; |
+ |
if (needsScrollbarReconstruction()) { |
m_scrollbarManager.setCanDetachScrollbars(false); |
setHasHorizontalScrollbar(false); |
@@ -683,14 +685,19 @@ void PaintLayerScrollableArea::updateAfterLayout() |
if ((horizontalScrollBarChanged && box().style()->overflowX() != OOVERLAY) || (verticalScrollBarChanged && box().style()->overflowY() != OOVERLAY)) { |
if (!m_inOverflowRelayout) { |
m_inOverflowRelayout = true; |
- SubtreeLayoutScope layoutScope(box()); |
- layoutScope.setNeedsLayout(&box(), LayoutInvalidationReason::ScrollbarChanged); |
- if (box().isLayoutBlock()) { |
- LayoutBlock& block = toLayoutBlock(box()); |
- block.scrollbarsChanged(horizontalScrollBarChanged, verticalScrollBarChanged); |
- block.layoutBlock(true); |
+ if (delayedLayoutScope) { |
+ delayedLayoutScope->setNeedsLayout(&box(), LayoutInvalidationReason::ScrollbarChanged); |
+ didMarkForDelayedLayout = true; |
} else { |
- box().layout(); |
+ SubtreeLayoutScope layoutScope(box()); |
+ layoutScope.setNeedsLayout(&box(), LayoutInvalidationReason::ScrollbarChanged); |
+ if (box().isLayoutBlock()) { |
+ LayoutBlock& block = toLayoutBlock(box()); |
+ block.scrollbarsChanged(horizontalScrollBarChanged, verticalScrollBarChanged); |
+ block.layoutBlock(true); |
+ } else { |
+ box().layout(); |
+ } |
} |
LayoutObject* parent = box().parent(); |
if (parent && parent->isFlexibleBox()) |
@@ -727,6 +734,8 @@ void PaintLayerScrollableArea::updateAfterLayout() |
DisableCompositingQueryAsserts disabler; |
positionOverflowControls(); |
+ |
+ return didMarkForDelayedLayout; |
} |
ScrollBehavior PaintLayerScrollableArea::scrollBehaviorStyle() const |