De-virtualize RenderWidget/RenderViewImpl::OnClose
The interaction between RenderViewImpl and RenderWidget around handling
of ViewMsg_Close is somewhat complex.
Currently, the IPC message is received by RenderViewImpl. It doesn't have
a handler registered, so it falls back to calling
RenderWidget::OnMessageReceived. RenderWidget has a handler - OnClose,
which is a virtual method overriden by RenderViewImpl, therefore
RenderViewImpl::OnClose ends up handling the IPC. This roundtripping
between objects seems unnecessary complexity and should be eliminated.
This CL de-virtualizes OnClose and both RenderViewImpl and RenderWidget
has their own version of the method. RenderViewImpl now defines a handler
directly, so no calls to RenderWidget are made as part of finding a
handler for the IPC message.
BUG=478281
Review URL: https://codereview.chromium.org/1123513002
Cr-Commit-Position: refs/heads/master@{#328003}
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 3475244c..9d917d2 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1358,6 +1358,7 @@
OnGetRenderedText)
IPC_MESSAGE_HANDLER(ViewMsg_PluginImeCompositionCompleted,
OnPluginImeCompositionCompleted)
+ IPC_MESSAGE_HANDLER(ViewMsg_Close, OnClose)
IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
IPC_MESSAGE_HANDLER(ViewMsg_SetWindowVisibility, OnSetWindowVisibility)
IPC_MESSAGE_HANDLER(ViewMsg_WindowFrameChanged, OnWindowFrameChanged)
@@ -2852,6 +2853,12 @@
Send(new ViewHostMsg_ClosePage_ACK(routing_id_));
}
+void RenderViewImpl::OnClose() {
+ if (closing_)
+ RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(routing_id_));
+ RenderWidget::OnClose();
+}
+
void RenderViewImpl::OnThemeChanged() {
#if defined(USE_AURA)
// Aura doesn't care if we switch themes.
@@ -3024,12 +3031,6 @@
}
#endif // OS_MACOSX
-void RenderViewImpl::OnClose() {
- if (closing_)
- RenderThread::Get()->Send(new ViewHostMsg_Close_ACK(routing_id_));
- RenderWidget::OnClose();
-}
-
void RenderViewImpl::Close() {
// We need to grab a pointer to the doomed WebView before we destroy it.
WebView* doomed = webview();
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index da62fb79..8e07711 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -457,7 +457,6 @@
protected:
// RenderWidget overrides:
- void OnClose() override;
void Close() override;
void OnResize(const ViewMsg_Resize_Params& params) override;
void DidInitiatePaint() override;
@@ -606,6 +605,8 @@
void OnCancelDownload(int32 download_id);
void OnClearFocusedElement();
void OnClosePage();
+ void OnClose();
+
void OnShowContextMenu(ui::MenuSourceType source_type,
const gfx::Point& location);
void OnCopyImageAt(int x, int y);
diff --git a/content/renderer/render_widget.h b/content/renderer/render_widget.h
index a09da9bd..df4f62f 100644
--- a/content/renderer/render_widget.h
+++ b/content/renderer/render_widget.h
@@ -412,7 +412,7 @@
void OnCursorVisibilityChange(bool is_visible);
void OnMouseCaptureLost();
virtual void OnSetFocus(bool enable);
- virtual void OnClose();
+ void OnClose();
void OnCreatingNewAck();
virtual void OnResize(const ViewMsg_Resize_Params& params);
void OnEnableDeviceEmulation(const blink::WebDeviceEmulationParams& params);