Index: third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
diff --git a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
index 90ffa14352af757a84d44e05f77c3eb11233fb38..0f6ed9237dd76ae8e572c22e88581f5893f061bc 100644 |
--- a/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
+++ b/third_party/WebKit/Source/core/page/scrolling/ScrollingCoordinator.cpp |
@@ -206,7 +206,8 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded() { |
} |
FrameView* frameView = toLocalFrame(m_page->mainFrame())->view(); |
- bool frameIsScrollable = frameView && frameView->isScrollable(); |
+ bool frameIsScrollable = |
+ frameView && frameView->layoutViewportScrollableArea()->isScrollable(); |
if (m_shouldScrollOnMainThreadDirty || |
m_wasFrameScrollable != frameIsScrollable) { |
setShouldUpdateScrollLayerPositionOnMainThread( |
@@ -221,8 +222,11 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded() { |
m_wasFrameScrollable = frameIsScrollable; |
if (WebLayer* layoutViewportScrollLayer = |
- frameView ? toWebLayer(frameView->layerForScrolling()) : nullptr) { |
- layoutViewportScrollLayer->setBounds(frameView->contentsSize()); |
+ frameView ? toWebLayer(frameView->layoutViewportScrollableArea() |
+ ->layerForScrolling()) |
+ : nullptr) { |
+ if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
+ layoutViewportScrollLayer->setBounds(frameView->contentsSize()); |
// If there is a non-root fullscreen element, prevent the viewport from |
// scrolling. |
@@ -241,21 +245,25 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded() { |
visualViewportScrollLayer->setUserScrollable(true, true); |
} |
- layoutViewportScrollLayer->setUserScrollable( |
- frameView->userInputScrollable(HorizontalScrollbar), |
- frameView->userInputScrollable(VerticalScrollbar)); |
+ if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
+ layoutViewportScrollLayer->setUserScrollable( |
+ frameView->userInputScrollable(HorizontalScrollbar), |
+ frameView->userInputScrollable(VerticalScrollbar)); |
+ } |
} |
- const FrameTree& tree = m_page->mainFrame()->tree(); |
- for (const Frame* child = tree.firstChild(); child; |
- child = child->tree().nextSibling()) { |
- if (!child->isLocalFrame()) |
- continue; |
- FrameView* frameView = toLocalFrame(child)->view(); |
- if (!frameView || frameView->shouldThrottleRendering()) |
- continue; |
- if (WebLayer* scrollLayer = toWebLayer(frameView->layerForScrolling())) |
- scrollLayer->setBounds(frameView->contentsSize()); |
+ if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) { |
+ const FrameTree& tree = m_page->mainFrame()->tree(); |
+ for (const Frame* child = tree.firstChild(); child; |
+ child = child->tree().nextSibling()) { |
+ if (!child->isLocalFrame()) |
+ continue; |
+ FrameView* frameView = toLocalFrame(child)->view(); |
+ if (!frameView || frameView->shouldThrottleRendering()) |
+ continue; |
+ if (WebLayer* scrollLayer = toWebLayer(frameView->layerForScrolling())) |
+ scrollLayer->setBounds(frameView->contentsSize()); |
+ } |
} |
} |
@@ -717,8 +725,8 @@ void ScrollingCoordinator::reset() { |
m_wasFrameScrollable = false; |
m_lastMainThreadScrollingReasons = 0; |
- setShouldUpdateScrollLayerPositionOnMainThread( |
- m_lastMainThreadScrollingReasons); |
+ if (!RuntimeEnabledFeatures::rootLayerScrollingEnabled()) |
+ setShouldUpdateScrollLayerPositionOnMainThread(0); |
} |
// Note that in principle this could be called more often than |
@@ -820,19 +828,24 @@ void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread( |
GraphicsLayer* visualViewportLayer = |
m_page->frameHost().visualViewport().scrollLayer(); |
WebLayer* visualViewportScrollLayer = toWebLayer(visualViewportLayer); |
- GraphicsLayer* layer = |
- m_page->deprecatedLocalMainFrame()->view()->layerForScrolling(); |
+ GraphicsLayer* layer = m_page->deprecatedLocalMainFrame() |
+ ->view() |
+ ->layoutViewportScrollableArea() |
+ ->layerForScrolling(); |
if (WebLayer* scrollLayer = toWebLayer(layer)) { |
m_lastMainThreadScrollingReasons = mainThreadScrollingReasons; |
if (mainThreadScrollingReasons) { |
- if (ScrollAnimatorBase* scrollAnimator = |
- layer->getScrollableArea()->existingScrollAnimator()) { |
- DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled() || |
- m_page->deprecatedLocalMainFrame() |
- ->document() |
- ->lifecycle() |
- .state() >= DocumentLifecycle::CompositingClean); |
- scrollAnimator->takeOverCompositorAnimation(); |
+ ScrollableArea* scrollableArea = layer->getScrollableArea(); |
+ if (scrollableArea) { |
+ if (ScrollAnimatorBase* scrollAnimator = |
+ scrollableArea->existingScrollAnimator()) { |
+ DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled() || |
+ m_page->deprecatedLocalMainFrame() |
+ ->document() |
+ ->lifecycle() |
+ .state() >= DocumentLifecycle::CompositingClean); |
+ scrollAnimator->takeOverCompositorAnimation(); |
+ } |
} |
scrollLayer->addMainThreadScrollingReasons(mainThreadScrollingReasons); |
if (visualViewportScrollLayer) { |
@@ -1154,17 +1167,22 @@ void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView) { |
notifyGeometryChanged(); |
} |
-bool ScrollingCoordinator::frameViewIsDirty() const { |
+bool ScrollingCoordinator::frameScrollerIsDirty() const { |
FrameView* frameView = m_page->mainFrame()->isLocalFrame() |
? m_page->deprecatedLocalMainFrame()->view() |
: nullptr; |
- bool frameIsScrollable = frameView && frameView->isScrollable(); |
+ bool frameIsScrollable = |
+ frameView && frameView->layoutViewportScrollableArea()->isScrollable(); |
if (frameIsScrollable != m_wasFrameScrollable) |
return true; |
if (WebLayer* scrollLayer = |
- frameView ? toWebLayer(frameView->layerForScrolling()) : nullptr) |
- return WebSize(frameView->contentsSize()) != scrollLayer->bounds(); |
+ frameView ? toWebLayer(frameView->layoutViewportScrollableArea() |
+ ->layerForScrolling()) |
+ : nullptr) { |
+ return WebSize(frameView->layoutViewportScrollableArea()->contentsSize()) != |
+ scrollLayer->bounds(); |
+ } |
return false; |
} |