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..1516037a006f1eff66f90dc7b7e79d91d90cefbf 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 (scrollType == ProgrammaticScroll && |
+ scrollBehavior == ScrollBehaviorSmooth) { |
+ getProgrammaticScrollCoordinator()->queueAnimation(this, newScrollOffset); |
bokan
2017/02/02 22:51:50
Hmm, maybe I'm missing something obvious here, but
sunyunjia
2017/02/10 23:25:20
Right! See here: https://docs.google.com/a/chromiu
bokan
2017/02/21 21:33:00
Got it. I think the name makes it sound like it's
|
+ } else { |
+ setScrollOffset(newScrollOffset, scrollType, ScrollBehaviorInstant); |
+ } |
ScrollOffset scrollOffsetDifference = getScrollOffset() - oldScrollOffset; |
localExposeRect.move(-LayoutSize(scrollOffsetDifference)); |