Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(715)

Unified Diff: content/browser/renderer_host/input/immediate_input_router.cc

Issue 19220002: [WIP] BufferedInputRouter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix client assignment Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/input/immediate_input_router.cc
diff --git a/content/browser/renderer_host/input/immediate_input_router.cc b/content/browser/renderer_host/input/immediate_input_router.cc
index 368619cc1e633721beac4f37fa29314ea22bce62..15ab147cf4ef27445c0824ec565cc8581a8be9f5 100644
--- a/content/browser/renderer_host/input/immediate_input_router.cc
+++ b/content/browser/renderer_host/input/immediate_input_router.cc
@@ -7,6 +7,7 @@
#include "base/command_line.h"
#include "base/metrics/histogram.h"
#include "content/browser/renderer_host/input/gesture_event_filter.h"
+#include "content/browser/renderer_host/input/input_ack_handler.h"
#include "content/browser/renderer_host/input/input_router_client.h"
#include "content/browser/renderer_host/input/touch_event_queue.h"
#include "content/browser/renderer_host/input/touchpad_tap_suppression_controller.h"
@@ -71,12 +72,13 @@ const char* GetEventAckName(InputEventAckState ack_result) {
} // namespace
-ImmediateInputRouter::ImmediateInputRouter(
- RenderProcessHost* process,
- InputRouterClient* client,
- int routing_id)
+ImmediateInputRouter::ImmediateInputRouter(RenderProcessHost* process,
+ InputRouterClient* client,
+ InputAckHandler* ack_handler,
+ int routing_id)
: process_(process),
client_(client),
+ ack_handler_(ack_handler),
routing_id_(routing_id),
select_range_pending_(false),
move_caret_pending_(false),
@@ -86,8 +88,8 @@ ImmediateInputRouter::ImmediateInputRouter(
touch_event_queue_(new TouchEventQueue(this)),
gesture_event_filter_(new GestureEventFilter(this)) {
enable_no_touch_to_renderer_while_scrolling_ =
- CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
- switches::kNoTouchToRendererWhileScrolling) == "1";
+ CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kNoTouchToRendererWhileScrolling);
DCHECK(process);
DCHECK(client);
}
@@ -95,20 +97,23 @@ ImmediateInputRouter::ImmediateInputRouter(
ImmediateInputRouter::~ImmediateInputRouter() {
}
-bool ImmediateInputRouter::SendInput(IPC::Message* message) {
+void ImmediateInputRouter::Flush() {
+ NOTREACHED() << "ImmediateInputRouter will never request a flush.";
+}
+
+bool ImmediateInputRouter::SendInput(scoped_ptr<IPC::Message> message) {
DCHECK(IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart);
- scoped_ptr<IPC::Message> scoped_message(message);
- switch (scoped_message->type()) {
+ switch (message->type()) {
// Check for types that require an ACK.
case InputMsg_SelectRange::ID:
- return SendSelectRange(scoped_message.release());
+ return SendSelectRange(message.Pass());
case InputMsg_MoveCaret::ID:
- return SendMoveCaret(scoped_message.release());
+ return SendMoveCaret(message.Pass());
case InputMsg_HandleInputEvent::ID:
NOTREACHED() << "WebInputEvents should never be sent via SendInput.";
return false;
default:
- return Send(scoped_message.release());
+ return Send(message.release());
}
}
@@ -299,7 +304,7 @@ bool ImmediateInputRouter::OnMessageReceived(const IPC::Message& message) {
IPC_END_MESSAGE_MAP()
if (!message_is_ok)
- client_->OnUnexpectedEventAck(true);
+ ack_handler_->OnUnexpectedEventAck(true);
return handled;
}
@@ -307,29 +312,29 @@ bool ImmediateInputRouter::OnMessageReceived(const IPC::Message& message) {
void ImmediateInputRouter::OnTouchEventAck(
const TouchEventWithLatencyInfo& event,
InputEventAckState ack_result) {
- client_->OnTouchEventAck(event, ack_result);
+ ack_handler_->OnTouchEventAck(event, ack_result);
}
-bool ImmediateInputRouter::SendSelectRange(IPC::Message* message) {
+bool ImmediateInputRouter::SendSelectRange(scoped_ptr<IPC::Message> message) {
DCHECK(message->type() == InputMsg_SelectRange::ID);
if (select_range_pending_) {
- next_selection_range_.reset(message);
+ next_selection_range_ = message.Pass();
return true;
}
select_range_pending_ = true;
- return Send(message);
+ return Send(message.release());
}
-bool ImmediateInputRouter::SendMoveCaret(IPC::Message* message) {
+bool ImmediateInputRouter::SendMoveCaret(scoped_ptr<IPC::Message> message) {
DCHECK(message->type() == InputMsg_MoveCaret::ID);
if (move_caret_pending_) {
- next_move_caret_.reset(message);
+ next_move_caret_ = message.Pass();
return true;
}
move_caret_pending_ = true;
- return Send(message);
+ return Send(message.release());
}
bool ImmediateInputRouter::Send(IPC::Message* message) {
@@ -403,7 +408,7 @@ void ImmediateInputRouter::FilterAndSendWebInputEvent(
// Proceed as normal.
case INPUT_EVENT_ACK_STATE_NOT_CONSUMED:
break;
- };
+ }
// Transmit any pending wheel events on a non-wheel event. This ensures that
// the renderer receives the final PhaseEnded wheel event, which is necessary
@@ -439,13 +444,13 @@ void ImmediateInputRouter::OnInputEventAck(
void ImmediateInputRouter::OnMsgMoveCaretAck() {
move_caret_pending_ = false;
if (next_move_caret_)
- SendMoveCaret(next_move_caret_.release());
+ SendMoveCaret(next_move_caret_.Pass());
}
void ImmediateInputRouter::OnSelectRangeAck() {
select_range_pending_ = false;
if (next_selection_range_)
- SendSelectRange(next_selection_range_.release());
+ SendSelectRange(next_selection_range_.Pass());
}
void ImmediateInputRouter::OnHasTouchEventHandlers(bool has_handlers) {
@@ -466,7 +471,7 @@ void ImmediateInputRouter::ProcessInputEventAck(
int type = static_cast<int>(event_type);
if (type < WebInputEvent::Undefined) {
- client_->OnUnexpectedEventAck(true);
+ ack_handler_->OnUnexpectedEventAck(true);
} else if (type == WebInputEvent::MouseMove) {
mouse_move_pending_ = false;
@@ -516,13 +521,12 @@ void ImmediateInputRouter::ProcessKeyboardAck(
// Something must be wrong. Clear the |key_queue_| and char event
// suppression so that we can resume from the error.
key_queue_.clear();
- client_->OnUnexpectedEventAck(false);
+ ack_handler_->OnUnexpectedEventAck(false);
} else {
NativeWebKeyboardEvent front_item = key_queue_.front();
key_queue_.pop_front();
- client_->OnKeyboardEventAck(front_item, ack_result);
-
+ ack_handler_->OnKeyboardEventAck(front_item, ack_result);
// WARNING: This ImmediateInputRouter can be deallocated at this point
// (i.e. in the case of Ctrl+W, where the call to
// HandleKeyboardEvent destroys this ImmediateInputRouter).
@@ -535,7 +539,7 @@ void ImmediateInputRouter::ProcessWheelAck(InputEventAckState ack_result) {
// Process the unhandled wheel event here before calling
// ForwardWheelEventWithLatencyInfo() since it will mutate
// current_wheel_event_.
- client_->OnWheelEventAck(current_wheel_event_.event, ack_result);
+ ack_handler_->OnWheelEventAck(current_wheel_event_.event, ack_result);
// Now send the next (coalesced) mouse wheel event.
if (!coalesced_mouse_wheel_events_.empty()) {
@@ -549,7 +553,7 @@ void ImmediateInputRouter::ProcessWheelAck(InputEventAckState ack_result) {
void ImmediateInputRouter::ProcessGestureAck(int type,
InputEventAckState ack_result) {
const bool processed = (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result);
- client_->OnGestureEventAck(
+ ack_handler_->OnGestureEventAck(
gesture_event_filter_->GetGestureEventAwaitingAck(), ack_result);
gesture_event_filter_->ProcessGestureAck(processed, type);
}

Powered by Google App Engine
This is Rietveld 408576698