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 0f26dd9f7641c7c7fd8e21dd283b3544c2f515bc..f1ce98636b9993ddd62f92efa2b578f0f47dcae7 100644 |
--- a/ui/events/blink/input_handler_proxy.cc |
+++ b/ui/events/blink/input_handler_proxy.cc |
@@ -678,6 +678,24 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel( |
CancelCurrentFling(); |
InputHandlerProxy::EventDisposition result = DROP_EVENT; |
+ |
+ if (wheel_event.dispatch_type == WebInputEvent::kEventNonBlocking) { |
+ // The first wheel event in the sequence should be cancellable. |
+ DCHECK(wheel_event.phase != WebMouseWheelEvent::kPhaseBegan); |
+ |
+ DCHECK(mouse_wheel_result_ != kEventDispositionUndefined); |
+ result = static_cast<EventDisposition>(mouse_wheel_result_); |
+ |
+ if (wheel_event.phase == WebMouseWheelEvent::kPhaseEnded || |
+ wheel_event.phase == WebMouseWheelEvent::kPhaseCancelled || |
+ wheel_event.momentum_phase == WebMouseWheelEvent::kPhaseEnded || |
+ wheel_event.momentum_phase == WebMouseWheelEvent::kPhaseCancelled) { |
+ mouse_wheel_result_ = kEventDispositionUndefined; |
+ } |
+ if (mouse_wheel_result_ != kEventDispositionUndefined) |
+ return result; |
+ } |
+ |
cc::EventListenerProperties properties = |
input_handler_->GetEventListenerProperties( |
cc::EventListenerClass::kMouseWheel); |