Index: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
index 1e6b1b694ac7b88a8a454348bce30302a726f0e7..3bd31655f9be5933d4e1b77f11d22baf6969634a 100644 |
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
@@ -1210,6 +1210,21 @@ double LocalDOMWindow::devicePixelRatio() const { |
return GetFrame()->DevicePixelRatio(); |
} |
+void LocalDOMWindow::scrollViewportTo(ScrollableArea* viewport, |
+ const ScrollOffset& offset, |
+ ScrollBehavior scroll_behavior) const { |
+ if (SmoothScrollSequencer* sequencer = |
+ GetFrame()->GetPage()->GetSmoothScrollSequencer()) { |
+ sequencer->AbortAnimations(); |
+ if (scroll_behavior == kScrollBehaviorSmooth) { |
+ sequencer->QueueAnimation(viewport, offset); |
+ sequencer->RunQueuedAnimations(); |
+ } else { |
+ viewport->SetScrollOffset(offset, kProgrammaticScroll, scroll_behavior); |
+ } |
+ } |
+} |
+ |
void LocalDOMWindow::scrollBy(double x, |
double y, |
ScrollBehavior scroll_behavior) const { |
@@ -1237,8 +1252,7 @@ void LocalDOMWindow::scrollBy(double x, |
ScrollOffset scaled_delta(x * GetFrame()->PageZoomFactor(), |
y * GetFrame()->PageZoomFactor()); |
- viewport->SetScrollOffset(current_offset + scaled_delta, kProgrammaticScroll, |
- scroll_behavior); |
+ scrollViewportTo(viewport, current_offset + scaled_delta, scroll_behavior); |
} |
void LocalDOMWindow::scrollBy(const ScrollToOptions& scroll_to_options) const { |
@@ -1279,8 +1293,7 @@ void LocalDOMWindow::scrollTo(double x, double y) const { |
ScrollableArea* viewport = page->GetSettings().GetInertVisualViewport() |
? view->LayoutViewportScrollableArea() |
: view->GetScrollableArea(); |
- viewport->SetScrollOffset(layout_offset, kProgrammaticScroll, |
- kScrollBehaviorAuto); |
+ scrollViewportTo(viewport, layout_offset, kScrollBehaviorAuto); |
} |
void LocalDOMWindow::scrollTo(const ScrollToOptions& scroll_to_options) const { |
@@ -1327,8 +1340,7 @@ void LocalDOMWindow::scrollTo(const ScrollToOptions& scroll_to_options) const { |
ScrollableArea::ScrollBehaviorFromString(scroll_to_options.behavior(), |
scroll_behavior); |
- viewport->SetScrollOffset(ScrollOffset(scaled_x, scaled_y), |
- kProgrammaticScroll, scroll_behavior); |
+ scrollViewportTo(viewport, ScrollOffset(scaled_x, scaled_y), scroll_behavior); |
} |
void LocalDOMWindow::moveBy(int x, int y) const { |