Index: third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp |
diff --git a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp |
index 1184db856fce0f2a876889e27720a0f51ce5dcf5..39d68eecfaebc6682a408db6c6fab2d54c6d029c 100644 |
--- a/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp |
+++ b/third_party/WebKit/Source/platform/scroll/ScrollableArea.cpp |
@@ -178,22 +178,28 @@ ScrollResult ScrollableArea::userScroll(ScrollGranularity granularity, |
void ScrollableArea::setScrollPosition(const DoublePoint& position, |
ScrollType scrollType, |
ScrollBehavior behavior) { |
+ DoublePoint clampedPosition = clampScrollPosition(position); |
+ if (shouldUseIntegerScrollOffset()) |
+ clampedPosition = flooredIntPoint(clampedPosition); |
+ if (clampedPosition == scrollPositionDouble()) |
+ return; |
+ |
if (behavior == ScrollBehaviorAuto) |
behavior = scrollBehaviorStyle(); |
switch (scrollType) { |
case CompositorScroll: |
- scrollPositionChanged(clampScrollPosition(position), scrollType); |
+ scrollPositionChanged(clampedPosition, scrollType); |
break; |
case AnchoringScroll: |
- scrollAnimator().adjustAnimationAndSetScrollPosition(position, |
+ scrollAnimator().adjustAnimationAndSetScrollPosition(clampedPosition, |
scrollType); |
break; |
case ProgrammaticScroll: |
- programmaticScrollHelper(position, behavior); |
+ programmaticScrollHelper(clampedPosition, behavior); |
break; |
case UserScroll: |
- userScrollHelper(position, behavior); |
+ userScrollHelper(clampedPosition, behavior); |
break; |
default: |
ASSERT_NOT_REACHED(); |