Index: content/renderer/input/render_widget_input_handler.cc |
diff --git a/content/renderer/input/render_widget_input_handler.cc b/content/renderer/input/render_widget_input_handler.cc |
index 54f2b9c57928582fec78d52d91b673f1674c37a0..385d388efc3701750663f1cc61f1e1e9b9849dec 100644 |
--- a/content/renderer/input/render_widget_input_handler.cc |
+++ b/content/renderer/input/render_widget_input_handler.cc |
@@ -131,7 +131,7 @@ void LogPassiveLatency(int64_t latency) { |
} |
void LogPassiveEventListenersUma(WebInputEventResult result, |
- bool passive, |
+ bool non_blocking, |
bool cancelable, |
double event_timestamp, |
const ui::LatencyInfo& latency_info) { |
@@ -145,7 +145,7 @@ void LogPassiveEventListenersUma(WebInputEventResult result, |
}; |
int enum_value; |
- if (passive) |
+ if (non_blocking) |
enum_value = PASSIVE_LISTENER_UMA_ENUM_PASSIVE; |
else if (!cancelable) |
enum_value = PASSIVE_LISTENER_UMA_ENUM_UNCANCELABLE; |
@@ -191,9 +191,8 @@ RenderWidgetInputHandler::~RenderWidgetInputHandler() {} |
void RenderWidgetInputHandler::HandleInputEvent( |
const WebInputEvent& input_event, |
- const ui::LatencyInfo& latency_info) { |
- // TODO(dtapuska): Passive support not implemented yet crbug.com/489802 |
- bool passive = false; |
+ const ui::LatencyInfo& latency_info, |
+ InputEventDispatchType dispatch_type) { |
base::AutoReset<bool> handling_input_event_resetter(&handling_input_event_, |
true); |
base::AutoReset<WebInputEvent::Type> handling_event_type_resetter( |
@@ -314,6 +313,8 @@ void RenderWidgetInputHandler::HandleInputEvent( |
processed = widget_->webwidget()->handleInputEvent(input_event); |
} |
+ bool non_blocking = |
+ dispatch_type == InputEventDispatchType::DISPATCH_TYPE_NON_BLOCKING; |
// TODO(dtapuska): Use the input_event.timeStampSeconds as the start |
// ideally this should be when the event was sent by the compositor to the |
// renderer. crbug.com/565348 |
@@ -321,11 +322,11 @@ void RenderWidgetInputHandler::HandleInputEvent( |
input_event.type == WebInputEvent::TouchMove || |
input_event.type == WebInputEvent::TouchEnd) { |
LogPassiveEventListenersUma( |
- processed, passive, |
+ processed, non_blocking, |
static_cast<const WebTouchEvent&>(input_event).cancelable, |
input_event.timeStampSeconds, latency_info); |
} else if (input_event.type == WebInputEvent::MouseWheel) { |
- LogPassiveEventListenersUma(processed, passive, !passive, |
+ LogPassiveEventListenersUma(processed, non_blocking, !non_blocking, |
input_event.timeStampSeconds, latency_info); |
} |
@@ -362,11 +363,15 @@ void RenderWidgetInputHandler::HandleInputEvent( |
// Send mouse wheel events and their disposition to the compositor thread, so |
// that they can be used to produce the elastic overscroll effect on Mac. |
if (input_event.type == WebInputEvent::MouseWheel) { |
- delegate_->ObserveWheelEventAndResult( |
- static_cast<const WebMouseWheelEvent&>(input_event), |
- event_overscroll ? event_overscroll->latest_overscroll_delta |
- : gfx::Vector2dF(), |
- processed != WebInputEventResult::NotHandled); |
+ const WebMouseWheelEvent& wheel_event = |
+ static_cast<const WebMouseWheelEvent&>(input_event); |
+ if (wheel_event.canScroll) { |
+ delegate_->ObserveWheelEventAndResult( |
+ wheel_event, |
+ event_overscroll ? event_overscroll->latest_overscroll_delta |
+ : gfx::Vector2dF(), |
+ processed != WebInputEventResult::NotHandled); |
+ } |
} |
bool frame_pending = |
@@ -390,7 +395,12 @@ void RenderWidgetInputHandler::HandleInputEvent( |
// by reentrant calls for events after the paused one. |
bool no_ack = ignore_ack_for_mouse_move_from_debugger_ && |
input_event.type == WebInputEvent::MouseMove; |
- if (WebInputEventTraits::WillReceiveAckFromRenderer(input_event) && !no_ack) { |
+ if (non_blocking) { |
+ // |non_blocking| means it was ack'd already by the InputHandlerProxy |
+ // so let the delegate know the event has been handled. |
+ delegate_->NonBlockingInputEventHandled(input_event.type); |
+ } else if (WebInputEventTraits::WillReceiveAckFromRenderer(input_event) && |
+ !no_ack) { |
scoped_ptr<InputEventAck> response(new InputEventAck( |
input_event.type, ack_result, swap_latency_info, |
std::move(event_overscroll), |