Implement a mojo backed WidgetInputHandler.
Add a WidgetInputHandler which manages the lifecycle of the compositing
input handler (InputHandlerProxy). Associated WidgetInputHandlerImpls
can be associated with this class. WidgetInputHanlderImpls provide
the renderer side implementation of the mojo channel.
BUG=722928
Change-Id: Ice4019cfc63eaa13f4277ba29424f4e2bf25e99f
Reviewed-on: https://chromium-review.googlesource.com/571984
Commit-Queue: Dave Tapuska <[email protected]>
Reviewed-by: Alexandre Elias <[email protected]>
Cr-Commit-Position: refs/heads/master@{#489005}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index e7d1b18..5e72e3a 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -53,6 +53,7 @@
#include "content/renderer/ime_event_guard.h"
#include "content/renderer/input/input_handler_manager.h"
#include "content/renderer/input/main_thread_event_queue.h"
+#include "content/renderer/input/widget_input_handler_manager.h"
#include "content/renderer/pepper/pepper_plugin_instance_impl.h"
#include "content/renderer/render_frame_impl.h"
#include "content/renderer/render_frame_proxy.h"
@@ -535,6 +536,18 @@
input_handler_ = base::MakeUnique<RenderWidgetInputHandler>(this, this);
+ if (base::FeatureList::IsEnabled(features::kMojoInputMessages)) {
+ RenderThreadImpl* render_thread_impl = RenderThreadImpl::current();
+
+ widget_input_handler_manager_ = new WidgetInputHandlerManager(
+ weak_ptr_factory_.GetWeakPtr(), RenderThread::Get()->GetChannel(),
+ render_thread_impl && compositor_
+ ? render_thread_impl->compositor_task_runner()
+ : nullptr,
+ render_thread_impl ? render_thread_impl->GetRendererScheduler()
+ : nullptr);
+ }
+
show_callback_ = show_callback;
webwidget_internal_ = web_widget;
@@ -1047,6 +1060,9 @@
if (input_handler_manager) {
input_handler_manager->ObserveGestureEventAndResultOnMainThread(
routing_id_, gesture_event, scroll_result);
+ } else if (widget_input_handler_manager_) {
+ widget_input_handler_manager_->ObserveGestureEventOnMainThread(
+ gesture_event, scroll_result);
}
}
@@ -1334,18 +1350,20 @@
viz::FrameSinkId(RenderThread::Get()->GetClientId(), routing_id_));
RenderThreadImpl* render_thread = RenderThreadImpl::current();
- // render_thread may be NULL in tests.
- InputHandlerManager* input_handler_manager =
- render_thread ? render_thread->input_handler_manager() : NULL;
- if (input_handler_manager) {
+ if (render_thread) {
input_event_queue_ = new MainThreadEventQueue(
this, render_thread->GetRendererScheduler()->CompositorTaskRunner(),
render_thread->GetRendererScheduler(), should_generate_frame_sink);
- input_handler_manager->AddInputHandler(
- routing_id_, compositor()->GetInputHandler(), input_event_queue_,
- weak_ptr_factory_.GetWeakPtr(),
- compositor_deps_->IsScrollAnimatorEnabled());
- has_added_input_handler_ = true;
+
+ InputHandlerManager* input_handler_manager =
+ render_thread->input_handler_manager();
+ if (input_handler_manager) {
+ input_handler_manager->AddInputHandler(
+ routing_id_, compositor()->GetInputHandler(), input_event_queue_,
+ weak_ptr_factory_.GetWeakPtr(),
+ compositor_deps_->IsScrollAnimatorEnabled());
+ has_added_input_handler_ = true;
+ }
}
return compositor_.get();
@@ -1927,13 +1945,13 @@
}
}
-#if defined(OS_ANDROID)
void RenderWidget::OnRequestTextInputStateUpdate() {
+#if defined(OS_ANDROID)
DCHECK(!ime_event_guard_);
UpdateSelectionBounds();
UpdateTextInputStateInternal(false, true /* reply_to_request */);
-}
#endif
+}
void RenderWidget::OnRequestCompositionUpdates(bool immediate_request,
bool monitor_updates) {