Teach render_host about a mojo WidgetInputHandler.

Implement a WidgetInputHandler as a legacy interface over Chrome IPC.
This will then allow us to dynamically swap it with a mojo backed one.

This change does not provide a mojo backed implementation of this
interface but just an implementation of the interface backed by Chrome IPC.
The new implementation will come in another CL.

BUG=722928
[email protected]

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_site_isolation
Change-Id: I03bb42524cec501a8b76f517629e0b3e3e76bba0
Reviewed-on: https://chromium-review.googlesource.com/541036
Commit-Queue: Dave Tapuska <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Cr-Commit-Position: refs/heads/master@{#484707}
diff --git a/content/renderer/input/frame_input_handler_impl.cc b/content/renderer/input/frame_input_handler_impl.cc
index 79be471..52c00fa 100644
--- a/content/renderer/input/frame_input_handler_impl.cc
+++ b/content/renderer/input/frame_input_handler_impl.cc
@@ -337,6 +337,37 @@
       render_frame_->render_view()->ConvertWindowPointToViewport(extent));
 }
 
+void FrameInputHandlerImpl::ScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& rect) {
+  if (!main_thread_task_runner_->BelongsToCurrentThread()) {
+    RunOnMainThread(
+        base::Bind(&FrameInputHandlerImpl::ScrollFocusedEditableNodeIntoRect,
+                   weak_this_, rect));
+    return;
+  }
+
+  if (!render_frame_)
+    return;
+
+  RenderViewImpl* render_view = render_frame_->render_view();
+  render_view->ScrollFocusedEditableNodeIntoRect(rect);
+}
+
+void FrameInputHandlerImpl::MoveCaret(const gfx::Point& point) {
+  if (!main_thread_task_runner_->BelongsToCurrentThread()) {
+    RunOnMainThread(
+        base::Bind(&FrameInputHandlerImpl::MoveCaret, weak_this_, point));
+    return;
+  }
+
+  if (!render_frame_)
+    return;
+
+  RenderViewImpl* render_view = render_frame_->render_view();
+  render_frame_->GetWebFrame()->MoveCaretSelection(
+      render_view->ConvertWindowPointToViewport(point));
+}
+
 void FrameInputHandlerImpl::ExecuteCommandOnMainThread(
     const std::string& command,
     UpdateState update_state) {
diff --git a/content/renderer/input/frame_input_handler_impl.h b/content/renderer/input/frame_input_handler_impl.h
index 9c75602..66ca5e43 100644
--- a/content/renderer/input/frame_input_handler_impl.h
+++ b/content/renderer/input/frame_input_handler_impl.h
@@ -68,6 +68,8 @@
   void SelectRange(const gfx::Point& base, const gfx::Point& extent) override;
   void AdjustSelectionByCharacterOffset(int32_t start, int32_t end) override;
   void MoveRangeSelectionExtent(const gfx::Point& extent) override;
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect) override;
+  void MoveCaret(const gfx::Point& point) override;
 
  private:
   ~FrameInputHandlerImpl() override;
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b5ab78a924..8bd2dbd 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1609,6 +1609,9 @@
                         OnMoveRangeSelectionExtent)
     IPC_MESSAGE_HANDLER(InputMsg_Replace, OnReplace)
     IPC_MESSAGE_HANDLER(InputMsg_ReplaceMisspelling, OnReplaceMisspelling)
+    IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
+    IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
+                        OnScrollFocusedEditableNodeIntoRect)
     IPC_MESSAGE_HANDLER(FrameMsg_CopyImageAt, OnCopyImageAt)
     IPC_MESSAGE_HANDLER(FrameMsg_SaveImageAt, OnSaveImageAt)
     IPC_MESSAGE_HANDLER(InputMsg_ExtendSelectionAndDelete,
@@ -1900,6 +1903,18 @@
   }
 }
 
+void RenderFrameImpl::OnMoveCaret(const gfx::Point& point) {
+  Send(new InputHostMsg_MoveCaret_ACK(render_view_->GetRoutingID()));
+  frame_->MoveCaretSelection(render_view_->ConvertWindowPointToViewport(point));
+}
+
+void RenderFrameImpl::OnScrollFocusedEditableNodeIntoRect(
+    const gfx::Rect& rect) {
+  // TODO(dtapuska): Move the implementation of scroll focused
+  // editable node into rect into this class.
+  render_view_->ScrollFocusedEditableNodeIntoRect(rect);
+}
+
 void RenderFrameImpl::OnUndo() {
   frame_->ExecuteCommand(WebString::FromUTF8("Undo"));
 }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 7683fb5..6db17694 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -858,6 +858,8 @@
   void OnContextMenuClosed(const CustomContextMenuContext& custom_context);
   void OnCustomContextMenuAction(const CustomContextMenuContext& custom_context,
                                  unsigned action);
+  void OnMoveCaret(const gfx::Point& point);
+  void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
   void OnUndo();
   void OnRedo();
   void OnCut();
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index d0f55d4..bc40880 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1149,10 +1149,6 @@
 
   bool handled = true;
   IPC_BEGIN_MESSAGE_MAP(RenderViewImpl, message)
-    IPC_MESSAGE_HANDLER(InputMsg_ExecuteEditCommand, OnExecuteEditCommand)
-    IPC_MESSAGE_HANDLER(InputMsg_MoveCaret, OnMoveCaret)
-    IPC_MESSAGE_HANDLER(InputMsg_ScrollFocusedEditableNodeIntoRect,
-                        OnScrollFocusedEditableNodeIntoRect)
     IPC_MESSAGE_HANDLER(ViewMsg_SetPageScale, OnSetPageScale)
     IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus)
     IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck)
@@ -1243,26 +1239,7 @@
   target_url_status_ = TARGET_NONE;
 }
 
-void RenderViewImpl::OnExecuteEditCommand(const std::string& name,
-    const std::string& value) {
-  if (!webview() || !webview()->FocusedFrame())
-    return;
-
-  webview()->FocusedFrame()->ExecuteCommand(WebString::FromUTF8(name),
-                                            WebString::FromUTF8(value));
-}
-
-void RenderViewImpl::OnMoveCaret(const gfx::Point& point) {
-  if (!webview())
-    return;
-
-  Send(new InputHostMsg_MoveCaret_ACK(GetRoutingID()));
-  webview()->FocusedFrame()->MoveCaretSelection(
-      ConvertWindowPointToViewport(point));
-}
-
-void RenderViewImpl::OnScrollFocusedEditableNodeIntoRect(
-    const gfx::Rect& rect) {
+void RenderViewImpl::ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect) {
   blink::WebAutofillClient* autofill_client = nullptr;
   if (auto* focused_frame = GetWebView()->FocusedFrame())
     autofill_client = focused_frame->AutofillClient();
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 452aa15..ded94ab 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -381,6 +381,7 @@
   void HandleInputEvent(const blink::WebCoalescedInputEvent& input_event,
                         const ui::LatencyInfo& latency_info,
                         HandledEventCallback callback) override;
+  void ScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
 
  protected:
   // RenderWidget overrides:
@@ -505,8 +506,6 @@
   // The documentation for these functions should be in
   // content/common/*_messages.h for the message that the function is handling.
   void OnExecuteEditCommand(const std::string& name, const std::string& value);
-  void OnMoveCaret(const gfx::Point& point);
-  void OnScrollFocusedEditableNodeIntoRect(const gfx::Rect& rect);
   void OnAllowScriptToClose(bool script_can_close);
   void OnCancelDownload(int32_t download_id);
   void OnClosePage();