| 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 894d81f85ace408237a9936f9ac218ecd574e509..47cba9dc54bf77f26b6d032fa58db583992f0445 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintLayerScrollableArea.cpp
|
| @@ -211,6 +211,13 @@ HostWindow* PaintLayerScrollableArea::getHostWindow() const {
|
| return nullptr;
|
| }
|
|
|
| +ProgrammaticScrollCoordinator*
|
| +PaintLayerScrollableArea::getProgrammaticScrollCoordinator() const {
|
| + if (Page* page = box().frame()->page())
|
| + return page->scrollingCoordinator()->programmaticScrollCoordinator();
|
| + return nullptr;
|
| +}
|
| +
|
| GraphicsLayer* PaintLayerScrollableArea::layerForScrolling() const {
|
| return layer()->hasCompositedLayerMapping()
|
| ? layer()->compositedLayerMapping()->scrollingContentsLayer()
|
| @@ -1630,7 +1637,8 @@ LayoutRect PaintLayerScrollableArea::scrollIntoView(
|
| const LayoutRect& rect,
|
| const ScrollAlignment& alignX,
|
| const ScrollAlignment& alignY,
|
| - ScrollType scrollType) {
|
| + ScrollType scrollType,
|
| + ScrollBehavior scrollBehavior) {
|
| LayoutRect localExposeRect(
|
| box()
|
| .absoluteToLocalQuad(FloatQuad(FloatRect(rect)), UseTransforms)
|
| @@ -1644,7 +1652,12 @@ LayoutRect PaintLayerScrollableArea::scrollIntoView(
|
| ScrollOffset oldScrollOffset = getScrollOffset();
|
| ScrollOffset newScrollOffset(clampScrollOffset(roundedIntSize(
|
| toScrollOffset(FloatPoint(r.location()) + oldScrollOffset))));
|
| - setScrollOffset(newScrollOffset, scrollType, ScrollBehaviorInstant);
|
| + if (scrollBehavior == ScrollBehaviorSmooth) {
|
| + DCHECK(scrollType != UserScroll);
|
| + getProgrammaticScrollCoordinator()->queueAnimation(this, newScrollOffset);
|
| + } else {
|
| + setScrollOffset(newScrollOffset, scrollType, ScrollBehaviorInstant);
|
| + }
|
| ScrollOffset scrollOffsetDifference = getScrollOffset() - oldScrollOffset;
|
| localExposeRect.move(-LayoutSize(scrollOffsetDifference));
|
|
|
|
|