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();