| Index: content/renderer/input/input_event_filter.cc
|
| diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc
|
| index 076eec831668228b1cadaa95a7c005f4f70700cc..96f799c2caf9126bab285473931a7c530505273e 100644
|
| --- a/content/renderer/input/input_event_filter.cc
|
| +++ b/content/renderer/input/input_event_filter.cc
|
| @@ -53,7 +53,6 @@ InputEventFilter::InputEventFilter(
|
| main_listener_(main_listener),
|
| sender_(NULL),
|
| target_task_runner_(target_task_runner),
|
| - current_overscroll_params_(NULL),
|
| renderer_scheduler_(NULL) {
|
| DCHECK(target_task_runner_.get());
|
| DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| @@ -90,11 +89,12 @@ void InputEventFilter::UnregisterRoutingID(int routing_id) {
|
| }
|
|
|
| void InputEventFilter::DidOverscroll(int routing_id,
|
| - const DidOverscrollParams& params) {
|
| - if (current_overscroll_params_) {
|
| - current_overscroll_params_->reset(new DidOverscrollParams(params));
|
| + const DidOverscrollParams& params,
|
| + bool bundle_ack_with_triggering_event) {
|
| + // Overscroll message will be bundled with triggering event ACK, saving an
|
| + // IPC.
|
| + if (bundle_ack_with_triggering_event)
|
| return;
|
| - }
|
|
|
| SendMessage(std::unique_ptr<IPC::Message>(
|
| new InputHostMsg_DidOverscroll(routing_id, params)));
|
| @@ -165,9 +165,7 @@ bool InputEventFilter::OnMessageReceived(const IPC::Message& message) {
|
| return true;
|
| }
|
|
|
| -InputEventFilter::~InputEventFilter() {
|
| - DCHECK(!current_overscroll_params_);
|
| -}
|
| +InputEventFilter::~InputEventFilter() {}
|
|
|
| void InputEventFilter::ForwardToHandler(const IPC::Message& message) {
|
| DCHECK(!handler_.is_null());
|
| @@ -192,22 +190,24 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) {
|
| ui::WebInputEventTraits::Clone(*std::get<0>(params));
|
| ui::LatencyInfo latency_info = std::get<1>(params);
|
| InputEventDispatchType dispatch_type = std::get<2>(params);
|
| +
|
| DCHECK(event);
|
| DCHECK(dispatch_type == DISPATCH_TYPE_BLOCKING ||
|
| dispatch_type == DISPATCH_TYPE_NON_BLOCKING);
|
|
|
| - bool send_ack = dispatch_type == DISPATCH_TYPE_BLOCKING;
|
| -
|
| - // Intercept |DidOverscroll| notifications, bundling any triggered overscroll
|
| - // response with the input event ack.
|
| - std::unique_ptr<DidOverscrollParams> overscroll_params;
|
| - base::AutoReset<std::unique_ptr<DidOverscrollParams>*>
|
| - auto_reset_current_overscroll_params(
|
| - ¤t_overscroll_params_, send_ack ? &overscroll_params : NULL);
|
| -
|
| - InputEventAckState ack_state =
|
| - handler_.Run(routing_id, event.get(), &latency_info);
|
| + handler_.Run(routing_id, std::move(event), latency_info,
|
| + base::Bind(&InputEventFilter::DidForwardToHandler, this,
|
| + routing_id, dispatch_type));
|
| +};
|
|
|
| +void InputEventFilter::DidForwardToHandler(
|
| + int routing_id,
|
| + InputEventDispatchType dispatch_type,
|
| + InputEventAckState ack_state,
|
| + ui::ScopedWebInputEvent event,
|
| + const ui::LatencyInfo& latency_info,
|
| + std::unique_ptr<DidOverscrollParams> overscroll_params) {
|
| + bool send_ack = dispatch_type == DISPATCH_TYPE_BLOCKING;
|
| uint32_t unique_touch_event_id =
|
| ui::WebInputEventTraits::GetUniqueTouchEventId(*event);
|
| WebInputEvent::Type type = event->type;
|
|
|