| 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 dff25a6404e5c2457dd350b1234eb36231470f28..b38b484afaca3a6d865dc3c0f6a09c6436337405 100644
|
| --- a/ui/events/blink/input_handler_proxy.cc
|
| +++ b/ui/events/blink/input_handler_proxy.cc
|
| @@ -221,7 +221,8 @@ InputHandlerProxy::InputHandlerProxy(cc::InputHandler* input_handler,
|
| disallow_vertical_fling_scroll_(false),
|
| has_fling_animation_started_(false),
|
| smooth_scroll_enabled_(false),
|
| - uma_latency_reporting_enabled_(base::TimeTicks::IsHighResolution()) {
|
| + uma_latency_reporting_enabled_(base::TimeTicks::IsHighResolution()),
|
| + scroll_on_mouse_wheel_(false) {
|
| DCHECK(client);
|
| input_handler_->BindToClient(this);
|
| cc::ScrollElasticityHelper* scroll_elasticity_helper =
|
| @@ -288,8 +289,9 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleInputEvent(
|
| const WebGestureEvent& gesture_event =
|
| static_cast<const WebGestureEvent&>(event);
|
| if (gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad &&
|
| - input_handler_->HaveWheelEventHandlersAt(
|
| - gfx::Point(gesture_event.x, gesture_event.y))) {
|
| + input_handler_->EffectiveWheelEventListenerPropertiesAt(
|
| + gfx::Point(gesture_event.x, gesture_event.y)) !=
|
| + cc::EventListenerProperties::kNone) {
|
| return DID_NOT_HANDLE;
|
| } else {
|
| input_handler_->PinchGestureBegin();
|
| @@ -336,6 +338,9 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleInputEvent(
|
| case WebInputEvent::TouchStart:
|
| return HandleTouchStart(static_cast<const WebTouchEvent&>(event));
|
|
|
| + case WebInputEvent::TouchMove:
|
| + return HandleTouchMove(static_cast<const WebTouchEvent&>(event));
|
| +
|
| case WebInputEvent::MouseMove: {
|
| const WebMouseEvent& mouse_event =
|
| static_cast<const WebMouseEvent&>(event);
|
| @@ -419,6 +424,15 @@ bool InputHandlerProxy::ShouldAnimate(
|
|
|
| InputHandlerProxy::EventDisposition InputHandlerProxy::HandleMouseWheel(
|
| const WebMouseWheelEvent& wheel_event) {
|
| + if (!scroll_on_mouse_wheel_) {
|
| + if (input_handler_->EffectiveWheelEventListenerPropertiesAt(
|
| + gfx::Point(wheel_event.x, wheel_event.y)) ==
|
| + cc::EventListenerProperties::kPassive) {
|
| + return NON_BLOCKING;
|
| + }
|
| + return DID_NOT_HANDLE;
|
| + }
|
| +
|
| InputHandlerProxy::EventDisposition result = DID_NOT_HANDLE;
|
| cc::InputHandlerScrollResult scroll_result;
|
|
|
| @@ -720,18 +734,39 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleGestureFlingStart(
|
|
|
| InputHandlerProxy::EventDisposition InputHandlerProxy::HandleTouchStart(
|
| const blink::WebTouchEvent& touch_event) {
|
| - for (size_t i = 0; i < touch_event.touchesLength; ++i) {
|
| + uint32_t properties = cc::EventListenerProperties::kNone;
|
| + for (size_t i = 0; i < touch_event.touchesLength &&
|
| + properties != cc::EventListenerProperties::kMax;
|
| + ++i) {
|
| if (touch_event.touches[i].state != WebTouchPoint::StatePressed)
|
| continue;
|
| - if (input_handler_->DoTouchEventsBlockScrollAt(
|
| - gfx::Point(touch_event.touches[i].position.x,
|
| - touch_event.touches[i].position.y))) {
|
| - // TODO(rbyers): We should consider still sending the touch events to
|
| - // main asynchronously (crbug.com/455539).
|
| - return DID_NOT_HANDLE;
|
| - }
|
| +
|
| + properties |= input_handler_->EffectiveTouchEventListenerPropertiesAt(
|
| + gfx::Point(touch_event.touches[i].position.x,
|
| + touch_event.touches[i].position.y));
|
| + }
|
| +
|
| + if (properties == cc::EventListenerProperties::kPassive) {
|
| + return NON_BLOCKING;
|
| + }
|
| + return DID_NOT_HANDLE;
|
| +}
|
| +
|
| +InputHandlerProxy::EventDisposition InputHandlerProxy::HandleTouchMove(
|
| + const blink::WebTouchEvent& touch_event) {
|
| + uint32_t properties = cc::EventListenerProperties::kNone;
|
| + for (size_t i = 0; i < touch_event.touchesLength &&
|
| + properties != cc::EventListenerProperties::kMax;
|
| + ++i) {
|
| + properties |= input_handler_->EffectiveTouchEventListenerPropertiesAt(
|
| + gfx::Point(touch_event.touches[i].position.x,
|
| + touch_event.touches[i].position.y));
|
| }
|
| - return DROP_EVENT;
|
| +
|
| + if (properties == cc::EventListenerProperties::kPassive) {
|
| + return NON_BLOCKING;
|
| + }
|
| + return DID_NOT_HANDLE;
|
| }
|
|
|
| bool InputHandlerProxy::FilterInputEventForFlingBoosting(
|
| @@ -1093,6 +1128,10 @@ bool InputHandlerProxy::TouchpadFlingScroll(
|
| return true;
|
| case DROP_EVENT:
|
| break;
|
| + case NON_BLOCKING:
|
| + // TODO(dtapuska): Process the fling on the compositor thread
|
| + // but post the events to the main thread; for now just pass it to the
|
| + // main thread.
|
| case DID_NOT_HANDLE:
|
| TRACE_EVENT_INSTANT0("input",
|
| "InputHandlerProxy::scrollBy::AbortFling",
|
|
|