Start moving context menu code to RenderFrame.
The selection code will have to move as well. That will happen in future changes.
BUG=304341
[email protected]
Review URL: https://codereview.chromium.org/130773004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@248091 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h
index b364ec5..b23223e 100644
--- a/content/browser/frame_host/render_frame_host_delegate.h
+++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -14,6 +14,7 @@
namespace content {
class RenderFrameHost;
class WebContents;
+struct ContextMenuParams;
// An interface implemented by an object interested in knowing about the state
// of the RenderFrameHost.
@@ -30,7 +31,12 @@
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) {}
// Notification that a worker process has crashed.
- virtual void WorkerCrashed() {}
+ virtual void WorkerCrashed(RenderFrameHost* render_frame_host) {}
+
+ // A context menu should be shown, to be built using the context information
+ // provided in the supplied params.
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {}
// Return this object cast to a WebContents, if it is one. If the object is
// not a WebContents, returns NULL.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index ee130b9..98122c8 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -97,6 +97,16 @@
return view->GetNativeView();
}
+void RenderFrameHostImpl::NotifyContextMenuClosed(
+ const CustomContextMenuContext& context) {
+ Send(new FrameMsg_ContextMenuClosed(routing_id_, context));
+}
+
+void RenderFrameHostImpl::ExecuteCustomContextMenuCommand(
+ int action, const CustomContextMenuContext& context) {
+ Send(new FrameMsg_CustomContextMenuAction(routing_id_, context, action));
+}
+
RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() {
return render_view_host_;
}
@@ -124,6 +134,7 @@
IPC_MESSAGE_HANDLER(FrameHostMsg_DidRedirectProvisionalLoad,
OnDidRedirectProvisionalLoad)
IPC_MESSAGE_HANDLER(FrameHostMsg_SwapOut_ACK, OnSwapOutACK)
+ IPC_MESSAGE_HANDLER(FrameHostMsg_ContextMenu, OnContextMenu)
IPC_END_MESSAGE_MAP_EX()
if (!msg_is_ok) {
@@ -137,7 +148,7 @@
}
void RenderFrameHostImpl::Init() {
- GetProcess()->ResumeRequestsForView(routing_id());
+ GetProcess()->ResumeRequestsForView(routing_id_);
}
void RenderFrameHostImpl::OnCreateChildFrame(int new_frame_routing_id,
@@ -178,7 +189,7 @@
void RenderFrameHostImpl::SwapOut() {
if (render_view_host_->IsRenderViewLive()) {
- Send(new FrameMsg_SwapOut(routing_id()));
+ Send(new FrameMsg_SwapOut(routing_id_));
} else {
// Our RenderViewHost doesn't have a live renderer, so just skip the unload
// event.
@@ -194,4 +205,20 @@
frame_tree_node_->render_manager()->SwappedOutFrame(this);
}
+void RenderFrameHostImpl::OnContextMenu(const ContextMenuParams& params) {
+ // Validate the URLs in |params|. If the renderer can't request the URLs
+ // directly, don't show them in the context menu.
+ ContextMenuParams validated_params(params);
+ RenderProcessHost* process = GetProcess();
+
+ // We don't validate |unfiltered_link_url| so that this field can be used
+ // when users want to copy the original link URL.
+ process->FilterURL(true, &validated_params.link_url);
+ process->FilterURL(true, &validated_params.src_url);
+ process->FilterURL(false, &validated_params.page_url);
+ process->FilterURL(true, &validated_params.frame_url);
+
+ delegate_->ShowContextMenu(this, validated_params);
+}
+
} // namespace content
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 2430fecc..64864cb1 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -26,6 +26,7 @@
class RenderFrameHostDelegate;
class RenderProcessHost;
class RenderViewHostImpl;
+struct ContextMenuParams;
class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost {
public:
@@ -38,6 +39,10 @@
virtual RenderProcessHost* GetProcess() OVERRIDE;
virtual int GetRoutingID() OVERRIDE;
virtual gfx::NativeView GetNativeView() OVERRIDE;
+ virtual void NotifyContextMenuClosed(
+ const CustomContextMenuContext& context) OVERRIDE;
+ virtual void ExecuteCustomContextMenuCommand(
+ int action, const CustomContextMenuContext& context) OVERRIDE;
virtual RenderViewHost* GetRenderViewHost() OVERRIDE;
// IPC::Sender
@@ -106,6 +111,7 @@
const GURL& source_url,
const GURL& target_url);
void OnSwapOutACK();
+ void OnContextMenu(const ContextMenuParams& params);
// For now, RenderFrameHosts indirectly keep RenderViewHosts alive via a
// refcount that calls Shutdown when it reaches zero. This allows each
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index a728d1e..891bbde 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -54,7 +54,6 @@
class SiteInstance;
class WebContents;
class WebContentsImpl;
-struct ContextMenuParams;
struct FileChooserParams;
struct GlobalRequestID;
struct NativeWebKeyboardEvent;
@@ -394,10 +393,6 @@
// Show the newly created full screen widget. Similar to above.
virtual void ShowCreatedFullscreenWidget(int route_id) {}
- // A context menu should be shown, to be built using the context information
- // provided in the supplied params.
- virtual void ShowContextMenu(const ContextMenuParams& params) {}
-
// The render view has requested access to media devices listed in
// |request|, and the client should grant or deny that permission by
// calling |callback|.
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index d485fd9..752d34e 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -1238,7 +1238,6 @@
OnDocumentAvailableInMainFrame)
IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame,
OnDocumentOnLoadCompletedInMainFrame)
- IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnContextMenu)
IPC_MESSAGE_HANDLER(ViewHostMsg_ToggleFullscreen, OnToggleFullscreen)
IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnOpenURL)
IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredSizeChange,
@@ -1609,22 +1608,6 @@
delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id);
}
-void RenderViewHostImpl::OnContextMenu(const ContextMenuParams& params) {
- // Validate the URLs in |params|. If the renderer can't request the URLs
- // directly, don't show them in the context menu.
- ContextMenuParams validated_params(params);
- RenderProcessHost* process = GetProcess();
-
- // We don't validate |unfiltered_link_url| so that this field can be used
- // when users want to copy the original link URL.
- process->FilterURL(true, &validated_params.link_url);
- process->FilterURL(true, &validated_params.src_url);
- process->FilterURL(false, &validated_params.page_url);
- process->FilterURL(true, &validated_params.frame_url);
-
- delegate_->ShowContextMenu(validated_params);
-}
-
void RenderViewHostImpl::OnToggleFullscreen(bool enter_fullscreen) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
delegate_->ToggleFullscreenMode(enter_fullscreen);
@@ -2062,16 +2045,6 @@
Send(new ViewMsg_DisableAutoResize(GetRoutingID(), new_size));
}
-void RenderViewHostImpl::ExecuteCustomContextMenuCommand(
- int action, const CustomContextMenuContext& context) {
- Send(new ViewMsg_CustomContextMenuAction(GetRoutingID(), context, action));
-}
-
-void RenderViewHostImpl::NotifyContextMenuClosed(
- const CustomContextMenuContext& context) {
- Send(new ViewMsg_ContextMenuClosed(GetRoutingID(), context));
-}
-
void RenderViewHostImpl::CopyImageAt(int x, int y) {
Send(new ViewMsg_CopyImageAt(GetRoutingID(), x, y));
}
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 52f36ea..f185fad 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -64,7 +64,6 @@
class SessionStorageNamespace;
class SessionStorageNamespaceImpl;
class TestRenderViewHost;
-struct ContextMenuParams;
struct FileChooserParams;
struct Referrer;
struct ShowDesktopNotificationHostMsgParams;
@@ -167,8 +166,6 @@
const gfx::Size& max_size) OVERRIDE;
virtual void DisableAutoResize(const gfx::Size& new_size) OVERRIDE;
virtual void EnablePreferredSizeMode() OVERRIDE;
- virtual void ExecuteCustomContextMenuCommand(
- int action, const CustomContextMenuContext& context) OVERRIDE;
virtual void ExecuteMediaPlayerActionAtLocation(
const gfx::Point& location,
const blink::WebMediaPlayerAction& action) OVERRIDE;
@@ -193,8 +190,6 @@
virtual void InsertCSS(const base::string16& frame_xpath,
const std::string& css) OVERRIDE;
virtual bool IsRenderViewLive() const OVERRIDE;
- virtual void NotifyContextMenuClosed(
- const CustomContextMenuContext& context) OVERRIDE;
virtual void NotifyMoveOrResizeStarted() OVERRIDE;
virtual void ReloadFrame() OVERRIDE;
virtual void SetWebUIProperty(const std::string& name,
@@ -523,7 +518,6 @@
void OnDidDisownOpener();
void OnDocumentAvailableInMainFrame();
void OnDocumentOnLoadCompletedInMainFrame(int32 page_id);
- void OnContextMenu(const ContextMenuParams& params);
void OnToggleFullscreen(bool enter_fullscreen);
void OnOpenURL(const ViewHostMsg_OpenURL_Params& params);
void OnDidContentsPreferredSizeChange(const gfx::Size& new_size);
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 0c2cce58..d86c3975 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -1528,14 +1528,6 @@
return widget_host_view;
}
-void WebContentsImpl::ShowContextMenu(const ContextMenuParams& params) {
- // Allow WebContentsDelegates to handle the context menu operation first.
- if (delegate_ && delegate_->HandleContextMenu(params))
- return;
-
- render_view_host_delegate_view_->ShowContextMenu(params);
-}
-
void WebContentsImpl::RequestMediaAccessPermission(
const MediaStreamRequest& request,
const MediaResponseCallback& callback) {
@@ -2684,11 +2676,20 @@
RenderFrameDeleted(render_frame_host));
}
-void WebContentsImpl::WorkerCrashed() {
+void WebContentsImpl::WorkerCrashed(RenderFrameHost* render_frame_host) {
if (delegate_)
delegate_->WorkerCrashed(this);
}
+void WebContentsImpl::ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {
+ // Allow WebContentsDelegates to handle the context menu operation first.
+ if (delegate_ && delegate_->HandleContextMenu(params))
+ return;
+
+ render_view_host_delegate_view_->ShowContextMenu(render_frame_host, params);
+}
+
WebContents* WebContentsImpl::GetAsWebContents() {
return this;
}
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 9f41ca6a..ccb10ac 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -304,7 +304,9 @@
const IPC::Message& message) OVERRIDE;
virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE;
virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
- virtual void WorkerCrashed() OVERRIDE;
+ virtual void WorkerCrashed(RenderFrameHost* render_frame_host) OVERRIDE;
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual WebContents* GetAsWebContents() OVERRIDE;
// RenderViewHostDelegate ----------------------------------------------------
@@ -438,7 +440,6 @@
virtual void ShowCreatedWidget(int route_id,
const gfx::Rect& initial_pos) OVERRIDE;
virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE;
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
virtual void RequestMediaAccessPermission(
const MediaStreamRequest& request,
const MediaResponseCallback& callback) OVERRIDE;
diff --git a/content/browser/web_contents/web_contents_view_android.cc b/content/browser/web_contents/web_contents_view_android.cc
index 21fcf542..fc024b7 100644
--- a/content/browser/web_contents/web_contents_view_android.cc
+++ b/content/browser/web_contents/web_contents_view_android.cc
@@ -178,9 +178,9 @@
}
void WebContentsViewAndroid::ShowContextMenu(
- const ContextMenuParams& params) {
+ RenderFrameHost* render_frame_host, const ContextMenuParams& params) {
if (delegate_)
- delegate_->ShowContextMenu(params);
+ delegate_->ShowContextMenu(render_frame_host, params);
}
void WebContentsViewAndroid::ShowPopupMenu(
diff --git a/content/browser/web_contents/web_contents_view_android.h b/content/browser/web_contents/web_contents_view_android.h
index 48cfee9..3d043ec 100644
--- a/content/browser/web_contents/web_contents_view_android.h
+++ b/content/browser/web_contents/web_contents_view_android.h
@@ -63,7 +63,8 @@
virtual void SetOverscrollControllerEnabled(bool enabled) OVERRIDE;
// Backend implementation of RenderViewHostDelegateView.
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
diff --git a/content/browser/web_contents/web_contents_view_aura.cc b/content/browser/web_contents/web_contents_view_aura.cc
index 4ef75d9..f06f827 100644
--- a/content/browser/web_contents/web_contents_view_aura.cc
+++ b/content/browser/web_contents/web_contents_view_aura.cc
@@ -1401,11 +1401,12 @@
////////////////////////////////////////////////////////////////////////////////
// WebContentsViewAura, RenderViewHostDelegateView implementation:
-void WebContentsViewAura::ShowContextMenu(const ContextMenuParams& params) {
+void WebContentsViewAura::ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {
if (touch_editable_)
touch_editable_->EndTouchEditing(false);
if (delegate_) {
- delegate_->ShowContextMenu(params);
+ delegate_->ShowContextMenu(render_frame_host, params);
// WARNING: we may have been deleted during the call to ShowContextMenu().
}
}
diff --git a/content/browser/web_contents/web_contents_view_aura.h b/content/browser/web_contents/web_contents_view_aura.h
index a0597d3..f02bdaec 100644
--- a/content/browser/web_contents/web_contents_view_aura.h
+++ b/content/browser/web_contents/web_contents_view_aura.h
@@ -124,7 +124,8 @@
virtual void SetOverscrollControllerEnabled(bool enabled) OVERRIDE;
// Overridden from RenderViewHostDelegateView:
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
diff --git a/content/browser/web_contents/web_contents_view_gtk.cc b/content/browser/web_contents/web_contents_view_gtk.cc
index 516ada0..995f82d 100644
--- a/content/browser/web_contents/web_contents_view_gtk.cc
+++ b/content/browser/web_contents/web_contents_view_gtk.cc
@@ -362,9 +362,10 @@
return TRUE;
}
-void WebContentsViewGtk::ShowContextMenu(const ContextMenuParams& params) {
+void WebContentsViewGtk::ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {
if (delegate_)
- delegate_->ShowContextMenu(params);
+ delegate_->ShowContextMenu(render_frame_host, params);
else
DLOG(ERROR) << "Cannot show context menus without a delegate.";
}
diff --git a/content/browser/web_contents/web_contents_view_gtk.h b/content/browser/web_contents/web_contents_view_gtk.h
index 7a8d25e..d536f65 100644
--- a/content/browser/web_contents/web_contents_view_gtk.h
+++ b/content/browser/web_contents/web_contents_view_gtk.h
@@ -72,7 +72,8 @@
virtual void SetOverscrollControllerEnabled(bool enabled) OVERRIDE;
// Backend implementation of RenderViewHostDelegateView.
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
diff --git a/content/browser/web_contents/web_contents_view_guest.cc b/content/browser/web_contents/web_contents_view_guest.cc
index 475e864..aaebcaf 100644
--- a/content/browser/web_contents/web_contents_view_guest.cc
+++ b/content/browser/web_contents/web_contents_view_guest.cc
@@ -217,7 +217,8 @@
void WebContentsViewGuest::TakeFocus(bool reverse) {
}
-void WebContentsViewGuest::ShowContextMenu(const ContextMenuParams& params) {
+void WebContentsViewGuest::ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {
#if defined(USE_AURA) || defined(OS_WIN)
// Context menu uses ScreenPositionClient::ConvertPointToScreen() in aura and
// windows to calculate popup position. Guest's native view
@@ -234,9 +235,10 @@
ContextMenuParams params_in_embedder = params;
params_in_embedder.x += offset.x();
params_in_embedder.y += offset.y();
- platform_view_delegate_view_->ShowContextMenu(params_in_embedder);
+ platform_view_delegate_view_->ShowContextMenu(
+ render_frame_host, params_in_embedder);
#else
- platform_view_delegate_view_->ShowContextMenu(params);
+ platform_view_delegate_view_->ShowContextMenu(render_frame_host, params);
#endif // defined(USE_AURA) || defined(OS_WIN)
}
diff --git a/content/browser/web_contents/web_contents_view_guest.h b/content/browser/web_contents/web_contents_view_guest.h
index 68fb473..3493231 100644
--- a/content/browser/web_contents/web_contents_view_guest.h
+++ b/content/browser/web_contents/web_contents_view_guest.h
@@ -78,7 +78,8 @@
#endif
// Backend implementation of RenderViewHostDelegateView.
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
+ virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index 0dadbad..be6df61b 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -99,7 +99,8 @@
virtual void CloseTabAfterEventTracking() OVERRIDE;
// Backend implementation of RenderViewHostDelegateView.
- virtual void ShowContextMenu(const ContextMenuParams& params) OVERRIDE;
+ virtual void ShowContextMenu(content::RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) OVERRIDE;
virtual void ShowPopupMenu(const gfx::Rect& bounds,
int item_height,
double item_font_size,
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index a58a658..7d960b51 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -230,7 +230,9 @@
}
}
-void WebContentsViewMac::ShowContextMenu(const ContextMenuParams& params) {
+void WebContentsViewMac::ShowContextMenu(
+ content::RenderFrameHost* render_frame_host,
+ const ContextMenuParams& params) {
// Allow delegates to handle the context menu operation first.
if (web_contents_->GetDelegate() &&
web_contents_->GetDelegate()->HandleContextMenu(params)) {
@@ -238,7 +240,7 @@
}
if (delegate())
- delegate()->ShowContextMenu(params);
+ delegate()->ShowContextMenu(render_frame_host, params);
else
DLOG(ERROR) << "Cannot show context menus without a delegate.";
}
diff --git a/content/browser/worker_host/worker_process_host.cc b/content/browser/worker_host/worker_process_host.cc
index fe4de91..2ba32e2 100644
--- a/content/browser/worker_host/worker_process_host.cc
+++ b/content/browser/worker_host/worker_process_host.cc
@@ -84,7 +84,7 @@
RenderFrameHostImpl* host =
RenderFrameHostImpl::FromID(render_process_unique_id, render_frame_id);
if (host)
- host->delegate()->WorkerCrashed();
+ host->delegate()->WorkerCrashed(host);
}
void WorkerCreatedCallback(int render_process_id,