| Index: content/renderer/gpu/input_event_filter.cc
|
| diff --git a/content/renderer/gpu/input_event_filter.cc b/content/renderer/gpu/input_event_filter.cc
|
| index 9488963ac78bf8e013bf4334544c276da0d10e46..9085c156922c6d4c4b2ba18c7d854478d597e98b 100644
|
| --- a/content/renderer/gpu/input_event_filter.cc
|
| +++ b/content/renderer/gpu/input_event_filter.cc
|
| @@ -36,31 +36,6 @@ void InputEventFilter::RemoveRoute(int routing_id) {
|
| routes_.erase(routing_id);
|
| }
|
|
|
| -void InputEventFilter::DidHandleInputEvent() {
|
| - DCHECK(target_loop_->BelongsToCurrentThread());
|
| -
|
| - SendACK(messages_.front(), INPUT_EVENT_ACK_STATE_CONSUMED);
|
| - messages_.pop();
|
| -}
|
| -
|
| -void InputEventFilter::DidNotHandleInputEvent(bool send_to_widget) {
|
| - DCHECK(target_loop_->BelongsToCurrentThread());
|
| -
|
| - if (send_to_widget) {
|
| - // Forward to the renderer thread, and dispatch the message there.
|
| - TRACE_EVENT0("InputEventFilter::DidNotHandleInputEvent",
|
| - "ForwardToRenderThread");
|
| - main_loop_->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&InputEventFilter::ForwardToMainListener,
|
| - this, messages_.front()));
|
| - } else {
|
| - TRACE_EVENT0("InputEventFilter::DidNotHandleInputEvent", "LeaveUnhandled");
|
| - SendACK(messages_.front(), INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS);
|
| - }
|
| - messages_.pop();
|
| -}
|
| -
|
| void InputEventFilter::OnFilterAdded(IPC::Channel* channel) {
|
| io_loop_ = base::MessageLoopProxy::current();
|
| sender_ = channel;
|
| @@ -128,15 +103,20 @@ void InputEventFilter::ForwardToHandler(const IPC::Message& message) {
|
| return;
|
| }
|
|
|
| - // Save this message for later, in case we need to bounce it back up to the
|
| - // main listener.
|
| - //
|
| - // TODO(darin): Change RenderWidgetHost to always require an ACK before
|
| - // sending the next input event. This way we can nuke this queue.
|
| - //
|
| - messages_.push(message);
|
| + InputEventAckState ack = handler_.Run(message.routing_id(),
|
| + CrackMessage(message));
|
| +
|
| + if (ack == INPUT_EVENT_ACK_STATE_NOT_CONSUMED) {
|
| + TRACE_EVENT0("InputEventFilter::DidNotHandleInputEvent",
|
| + "ForwardToRenderThread");
|
| + main_loop_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&InputEventFilter::ForwardToMainListener,
|
| + this, message));
|
| + return;
|
| + }
|
|
|
| - handler_.Run(message.routing_id(), CrackMessage(message));
|
| + SendACK(message, ack);
|
| }
|
|
|
| void InputEventFilter::SendACK(const IPC::Message& message,
|
|
|