| Index: third_party/WebKit/Source/core/frame/FrameView.cpp
|
| diff --git a/third_party/WebKit/Source/core/frame/FrameView.cpp b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| index 9e64a983ed273135f768d12e98d0c4a98780eba9..cafdeed2fbc6dd5f59e6a13d8f2dc6806610557e 100644
|
| --- a/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| @@ -3646,10 +3646,16 @@ void FrameView::updateScrollbars()
|
|
|
| void FrameView::adjustScrollPositionFromUpdateScrollbars()
|
| {
|
| - DoublePoint adjustedScrollPosition = clampScrollPosition(scrollPositionDouble());
|
| -
|
| - if (adjustedScrollPosition != scrollPositionDouble() || scrollOriginChanged()) {
|
| - ScrollableArea::setScrollPosition(adjustedScrollPosition, ProgrammaticScroll);
|
| + DoublePoint clamped = clampScrollPosition(scrollPositionDouble());
|
| + // Restore before clamping because clamping clears the scroll anchor.
|
| + // TODO(ymalik): This same logic exists in PaintLayerScrollableArea.
|
| + // Remove when root-layer-scrolls is enabled.
|
| + if (clamped != scrollPositionDouble() && shouldPerformScrollAnchoring() && m_scrollAnchor.hasScroller()) {
|
| + m_scrollAnchor.restore();
|
| + clamped = clampScrollPosition(scrollPositionDouble());
|
| + }
|
| + if (clamped != scrollPositionDouble() || scrollOriginChanged()) {
|
| + ScrollableArea::setScrollPosition(clamped, ProgrammaticScroll);
|
| resetScrollOriginChanged();
|
| }
|
| }
|
|
|