Index: content/browser/renderer_host/render_widget_host_impl.cc |
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc |
index a3c9a01ca84a525c587ee4a36cc119c102ab4e9f..2593ce52316fcd9f8487e653257f13849aa854bf 100644 |
--- a/content/browser/renderer_host/render_widget_host_impl.cc |
+++ b/content/browser/renderer_host/render_widget_host_impl.cc |
@@ -29,6 +29,7 @@ |
#include "content/browser/renderer_host/backing_store.h" |
#include "content/browser/renderer_host/backing_store_manager.h" |
#include "content/browser/renderer_host/dip_util.h" |
+#include "content/browser/renderer_host/input/buffered_input_router.h" |
#include "content/browser/renderer_host/input/immediate_input_router.h" |
#include "content/browser/renderer_host/overscroll_controller.h" |
#include "content/browser/renderer_host/render_process_host_impl.h" |
@@ -189,7 +190,7 @@ RenderWidgetHostImpl::RenderWidgetHostImpl(RenderWidgetHostDelegate* delegate, |
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) |
g_created_callbacks.Get().at(i).Run(this); |
- input_router_.reset(new ImmediateInputRouter(process, this, routing_id_)); |
+ input_router_ = CreateInputRouter(); |
#if defined(USE_AURA) |
bool overscroll_enabled = CommandLine::ForCurrentProcess()-> |
@@ -378,6 +379,10 @@ void RenderWidgetHostImpl::SuppressNextCharEvents() { |
suppress_next_char_events_ = true; |
} |
+void RenderWidgetHostImpl::FlushInput() { |
+ input_router_->Flush(); |
+} |
+ |
void RenderWidgetHostImpl::Init() { |
DCHECK(process_->HasConnection()); |
@@ -478,7 +483,7 @@ bool RenderWidgetHostImpl::OnMessageReceived(const IPC::Message &msg) { |
bool RenderWidgetHostImpl::Send(IPC::Message* msg) { |
if (IPC_MESSAGE_ID_CLASS(msg->type()) == InputMsgStart) |
- return input_router_->SendInput(msg); |
+ return input_router_->SendInput(make_scoped_ptr(msg)); |
return process_->Send(msg); |
} |
@@ -1235,7 +1240,7 @@ void RenderWidgetHostImpl::RendererExited(base::TerminationStatus status, |
waiting_for_screen_rects_ack_ = false; |
// Reset to ensure that input routing works with a new renderer. |
- input_router_.reset(new ImmediateInputRouter(process_, this, routing_id_)); |
+ input_router_ = CreateInputRouter(); |
if (overscroll_controller_) |
overscroll_controller_->Reset(); |
@@ -2102,6 +2107,16 @@ bool RenderWidgetHostImpl::OnSendGestureEventImmediately( |
return !IgnoreInputEvents(); |
} |
+void RenderWidgetHostImpl::SetNeedsFlush() { |
+ if (view_) |
+ view_->OnSetNeedsFlushInput(); |
+} |
+ |
+void RenderWidgetHostImpl::DidFlush() { |
+ if (view_) |
+ view_->OnDidFlushInput(); |
+} |
+ |
void RenderWidgetHostImpl::OnKeyboardEventAck( |
const NativeWebKeyboardEvent& event, |
InputEventAckState ack_result) { |
@@ -2399,6 +2414,17 @@ void RenderWidgetHostImpl::DelayedAutoResized() { |
OnRenderAutoResized(new_size); |
} |
+scoped_ptr<InputRouter> RenderWidgetHostImpl::CreateInputRouter() { |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBufferedInputRouter)) { |
+ return scoped_ptr<InputRouter>( |
+ new BufferedInputRouter(process_, this, this, routing_id_)); |
+ } else { |
+ return scoped_ptr<InputRouter>( |
+ new ImmediateInputRouter(process_, this, this, routing_id_)); |
+ } |
+} |
+ |
void RenderWidgetHostImpl::DetachDelegate() { |
delegate_ = NULL; |
} |