| 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 6fb4d00503c95a3e3e81f60365c7ba4c0bf1844b..75ad4efb88ca5f84bd5030156c69490eca37b909 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| @@ -209,6 +209,13 @@ PlatformChromeClient* PaintLayerScrollableArea::GetChromeClient() const {
|
| return nullptr;
|
| }
|
|
|
| +SmoothScrollSequencer* PaintLayerScrollableArea::GetSmoothScrollSequencer()
|
| + const {
|
| + if (Page* page = Box().GetFrame()->GetPage())
|
| + return page->GetSmoothScrollSequencer();
|
| + return nullptr;
|
| +}
|
| +
|
| GraphicsLayer* PaintLayerScrollableArea::LayerForScrolling() const {
|
| return Layer()->HasCompositedLayerMapping()
|
| ? Layer()->GetCompositedLayerMapping()->ScrollingContentsLayer()
|
| @@ -1732,6 +1739,7 @@ LayoutRect PaintLayerScrollableArea::ScrollIntoView(
|
| const LayoutRect& rect,
|
| const ScrollAlignment& align_x,
|
| const ScrollAlignment& align_y,
|
| + bool is_smooth,
|
| ScrollType scroll_type) {
|
| LayoutRect local_expose_rect(
|
| Box()
|
| @@ -1745,8 +1753,14 @@ LayoutRect PaintLayerScrollableArea::ScrollIntoView(
|
| ScrollOffset old_scroll_offset = GetScrollOffset();
|
| ScrollOffset new_scroll_offset(ClampScrollOffset(RoundedIntSize(
|
| ToScrollOffset(FloatPoint(r.Location()) + old_scroll_offset))));
|
| - SetScrollOffset(new_scroll_offset, scroll_type, kScrollBehaviorInstant);
|
| - ScrollOffset scroll_offset_difference = GetScrollOffset() - old_scroll_offset;
|
| + if (is_smooth) {
|
| + DCHECK(scroll_type == kProgrammaticScroll);
|
| + GetSmoothScrollSequencer()->QueueAnimation(this, new_scroll_offset);
|
| + } else {
|
| + SetScrollOffset(new_scroll_offset, scroll_type, kScrollBehaviorInstant);
|
| + }
|
| + ScrollOffset scroll_offset_difference =
|
| + ClampScrollOffset(new_scroll_offset) - old_scroll_offset;
|
| local_expose_rect.Move(-LayoutSize(scroll_offset_difference));
|
|
|
| LayoutRect intersect =
|
|
|