Index: ui/events/blink/input_handler_proxy.cc |
diff --git a/ui/events/blink/input_handler_proxy.cc b/ui/events/blink/input_handler_proxy.cc |
index 2a191b83601ca69228ac505a0d4600f71897bdea..187c9ac85a13cb26f002f2224f96bb42a7fcd13d 100644 |
--- a/ui/events/blink/input_handler_proxy.cc |
+++ b/ui/events/blink/input_handler_proxy.cc |
@@ -597,10 +597,18 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleGestureScrollBegin( |
} else if (smooth_scroll_enabled_ && |
gesture_event.data.scrollBegin.deltaHintUnits == |
blink::WebGestureEvent::ScrollUnits::Pixels) { |
- gfx::Vector2dF scroll_delta(-gesture_event.data.scrollBegin.deltaXHint, |
- -gesture_event.data.scrollBegin.deltaYHint); |
- scroll_status = input_handler_->ScrollAnimated( |
- gfx::Point(gesture_event.x, gesture_event.y), scroll_delta); |
+ // Generate a scroll begin/end combination to determine if |
+ // this can actually be handled by the impl thread or not. But |
+ // don't generate any scroll yet; GestureScrollUpdate will generate |
+ // the scroll animation. |
+ scroll_status = input_handler_->ScrollBegin( |
+ &scroll_state, cc::InputHandler::ANIMATED_WHEEL); |
+ if (scroll_status.thread == cc::InputHandler::SCROLL_ON_IMPL_THREAD) { |
+ cc::ScrollStateData scroll_state_end_data; |
+ scroll_state_end_data.is_ending = true; |
+ cc::ScrollState scroll_state_end(scroll_state_end_data); |
+ input_handler_->ScrollEnd(&scroll_state_end); |
+ } |
} else { |
scroll_status = |
input_handler_->ScrollBegin(&scroll_state, cc::InputHandler::GESTURE); |