| 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 8d4c481c736b66dee09a30ed0aea50f0701552ed..5f44a675024b89eb28d8d0dc642b81054f78b894 100644
|
| --- a/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/FrameView.cpp
|
| @@ -2147,6 +2147,13 @@ PlatformChromeClient* FrameView::GetChromeClient() const {
|
| return &page->GetChromeClient();
|
| }
|
|
|
| +SmoothScrollSequencer* FrameView::GetSmoothScrollSequencer() const {
|
| + Page* page = GetFrame().GetPage();
|
| + if (!page)
|
| + return nullptr;
|
| + return page->GetSmoothScrollSequencer();
|
| +}
|
| +
|
| void FrameView::ContentsResized() {
|
| if (frame_->IsMainFrame() && frame_->GetDocument()) {
|
| if (TextAutosizer* text_autosizer =
|
| @@ -4635,14 +4642,20 @@ bool FrameView::ShouldPlaceVerticalScrollbarOnLeft() const {
|
| LayoutRect FrameView::ScrollIntoView(const LayoutRect& rect_in_content,
|
| const ScrollAlignment& align_x,
|
| const ScrollAlignment& align_y,
|
| - ScrollType scroll_type) {
|
| + ScrollType scroll_type,
|
| + bool is_smooth) {
|
| LayoutRect view_rect(VisibleContentRect());
|
| LayoutRect expose_rect = ScrollAlignment::GetRectToExpose(
|
| view_rect, rect_in_content, align_x, align_y);
|
| if (expose_rect != view_rect) {
|
| - SetScrollOffset(
|
| - ScrollOffset(expose_rect.X().ToFloat(), expose_rect.Y().ToFloat()),
|
| - scroll_type);
|
| + ScrollOffset target_offset(expose_rect.X().ToFloat(),
|
| + expose_rect.Y().ToFloat());
|
| + if (is_smooth) {
|
| + DCHECK(scroll_type != kUserScroll);
|
| + GetSmoothScrollSequencer()->QueueAnimation(this, target_offset);
|
| + } else {
|
| + SetScrollOffset(target_offset, scroll_type);
|
| + }
|
| }
|
|
|
| // Scrolling the FrameView cannot change the input rect's location relative to
|
|
|