diff options
author | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-12 02:47:26 +0000 |
---|---|---|
committer | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-12 02:47:26 +0000 |
commit | 8ab0465a0a52812b600580540a69ba4687e4ef22 (patch) | |
tree | 12c5483360d5174a2906e84234f4d3db72d8471d /chrome/browser/renderer_host | |
parent | 69a83853994057c9bb81fbc8e184cf36650293db (diff) | |
download | chromium_src-8ab0465a0a52812b600580540a69ba4687e4ef22.zip chromium_src-8ab0465a0a52812b600580540a69ba4687e4ef22.tar.gz chromium_src-8ab0465a0a52812b600580540a69ba4687e4ef22.tar.bz2 |
Added plumbing to transport the frame name between RenderViewHost and the Webkit layer.
Extended ViewMsg_New and ViewHostMsg_CreateWindow to have a new frame_name
parameter. This allows the RVH to know the initial name of the frame associated
with its RenderView, and also to set the name of the frame when creating a new
RenderView.
Review URL: http://codereview.chromium.org/2775003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49622 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
9 files changed, 37 insertions, 24 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index b14d9d5..a5414b6 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -146,7 +146,7 @@ RenderViewHost::~RenderViewHost() { } bool RenderViewHost::CreateRenderView( - URLRequestContextGetter* request_context) { + URLRequestContextGetter* request_context, const string16& frame_name) { DCHECK(!IsRenderViewLive()) << "Creating view twice"; // The process may (if we're sharing a process with another host that already @@ -191,6 +191,7 @@ bool RenderViewHost::CreateRenderView( params.web_preferences = webkit_prefs; params.view_id = routing_id(); params.session_storage_namespace_id = session_storage_namespace_id_; + params.frame_name = frame_name; Send(new ViewMsg_New(params)); // Set the alternate error page, which is profile specific, in the renderer. @@ -863,12 +864,13 @@ void RenderViewHost::Shutdown() { void RenderViewHost::CreateNewWindow( int route_id, - WindowContainerType window_container_type) { + WindowContainerType window_container_type, + const string16& frame_name) { RenderViewHostDelegate::View* view = delegate_->GetViewDelegate(); if (!view) return; - view->CreateNewWindow(route_id, window_container_type); + view->CreateNewWindow(route_id, window_container_type, frame_name); } void RenderViewHost::CreateNewWidget(int route_id, diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index 53793e0..8619094 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -103,8 +103,10 @@ class RenderViewHost : public RenderWidgetHost { RenderViewHostDelegate* delegate() const { return delegate_; } // Set up the RenderView child process. Virtual because it is overridden by - // TestRenderViewHost. - virtual bool CreateRenderView(URLRequestContextGetter* request_context); + // TestRenderViewHost. If the |frame_name| parameter is non-empty, it is used + // as the name of the new top-level frame. + virtual bool CreateRenderView(URLRequestContextGetter* request_context, + const string16& frame_name); // Returns true if the RenderView is active and has not crashed. Virtual // because it is overridden by TestRenderViewHost. @@ -417,7 +419,8 @@ class RenderViewHost : public RenderWidgetHost { // Creates a new RenderView with the given route id. void CreateNewWindow(int route_id, - WindowContainerType window_container_type); + WindowContainerType window_container_type, + const string16& frame_name); // Creates a new RenderWidget with the given route id. |popup_type| indicates // if this widget is a popup and what kind of popup it is (select, autofill). diff --git a/chrome/browser/renderer_host/render_view_host_delegate.h b/chrome/browser/renderer_host/render_view_host_delegate.h index 80ae7be..e2bd3864 100644 --- a/chrome/browser/renderer_host/render_view_host_delegate.h +++ b/chrome/browser/renderer_host/render_view_host_delegate.h @@ -93,13 +93,17 @@ class RenderViewHostDelegate { // that is requested -- in particular, the window.open call may have // specified 'background' and 'persistent' in the feature string. // + // The passed |frame_name| parameter is the name parameter that was passed + // to window.open(), and will be empty if none was passed. + // // Note: this is not called "CreateWindow" because that will clash with // the Windows function which is actually a #define. // // NOTE: this takes ownership of @modal_dialog_event virtual void CreateNewWindow( int route_id, - WindowContainerType window_container_type) = 0; + WindowContainerType window_container_type, + const string16& frame_name) = 0; // The page is trying to open a new widget (e.g. a select popup). The // widget should be created associated with the given route, but it should diff --git a/chrome/browser/renderer_host/render_widget_helper.cc b/chrome/browser/renderer_host/render_widget_helper.cc index 2c3b6f4..baa8045 100644 --- a/chrome/browser/renderer_host/render_widget_helper.cc +++ b/chrome/browser/renderer_host/render_widget_helper.cc @@ -203,6 +203,7 @@ void RenderWidgetHelper::CreateNewWindow( int opener_id, bool user_gesture, WindowContainerType window_container_type, + const string16& frame_name, base::ProcessHandle render_process, int* route_id) { *route_id = GetNextRoutingID(); @@ -215,16 +216,17 @@ void RenderWidgetHelper::CreateNewWindow( ChromeThread::UI, FROM_HERE, NewRunnableMethod( this, &RenderWidgetHelper::OnCreateWindowOnUI, opener_id, *route_id, - window_container_type)); + window_container_type, frame_name)); } void RenderWidgetHelper::OnCreateWindowOnUI( int opener_id, int route_id, - WindowContainerType window_container_type) { + WindowContainerType window_container_type, + string16 frame_name) { RenderViewHost* host = RenderViewHost::FromID(render_process_id_, opener_id); if (host) - host->CreateNewWindow(route_id, window_container_type); + host->CreateNewWindow(route_id, window_container_type, frame_name); ChromeThread::PostTask( ChromeThread::IO, FROM_HERE, diff --git a/chrome/browser/renderer_host/render_widget_helper.h b/chrome/browser/renderer_host/render_widget_helper.h index f942903..d31bf66 100644 --- a/chrome/browser/renderer_host/render_widget_helper.h +++ b/chrome/browser/renderer_host/render_widget_helper.h @@ -123,6 +123,7 @@ class RenderWidgetHelper void CreateNewWindow(int opener_id, bool user_gesture, WindowContainerType window_container_type, + const string16& frame_name, base::ProcessHandle render_process, int* route_id); void CreateNewWidget(int opener_id, @@ -164,7 +165,8 @@ class RenderWidgetHelper // Called on the UI thread to finish creating a window. void OnCreateWindowOnUI(int opener_id, int route_id, - WindowContainerType window_container_type); + WindowContainerType window_container_type, + string16 frame_name); // Called on the IO thread after a window was created on the UI thread. void OnCreateWindowOnIO(int route_id); diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index 61ac3d1..a382042 100755 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -640,15 +640,14 @@ URLRequestContext* ResourceMessageFilter::GetRequestContext( } void ResourceMessageFilter::OnMsgCreateWindow( - int opener_id, bool user_gesture, - WindowContainerType window_container_type, - int64 session_storage_namespace_id, int* route_id, - int64* cloned_session_storage_namespace_id) { + const ViewHostMsg_CreateWindow_Params& params, + int* route_id, int64* cloned_session_storage_namespace_id) { *cloned_session_storage_namespace_id = dom_storage_dispatcher_host_-> - CloneSessionStorage(session_storage_namespace_id); - render_widget_helper_->CreateNewWindow(opener_id, - user_gesture, - window_container_type, + CloneSessionStorage(params.session_storage_namespace_id); + render_widget_helper_->CreateNewWindow(params.opener_id, + params.user_gesture, + params.window_container_type, + params.frame_name, handle(), route_id); } diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h index 33a6d44..e79934a 100755 --- a/chrome/browser/renderer_host/resource_message_filter.h +++ b/chrome/browser/renderer_host/resource_message_filter.h @@ -46,6 +46,7 @@ class NotificationsPrefsCache; class Profile; class RenderWidgetHelper; class URLRequestContextGetter; +struct ViewHostMsg_CreateWindow_Params; struct ViewHostMsg_CreateWorker_Params; struct WebPluginInfo; @@ -132,9 +133,8 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter, virtual ~ResourceMessageFilter(); - void OnMsgCreateWindow(int opener_id, bool user_gesture, - WindowContainerType window_container_type, - int64 session_storage_namespace_id, int* route_id, + void OnMsgCreateWindow(const ViewHostMsg_CreateWindow_Params& params, + int* route_id, int64* cloned_session_storage_namespace_id); void OnMsgCreateWidget(int opener_id, WebKit::WebPopupType popup_type, diff --git a/chrome/browser/renderer_host/test/test_render_view_host.cc b/chrome/browser/renderer_host/test/test_render_view_host.cc index 33c7529..c1d15599 100644 --- a/chrome/browser/renderer_host/test/test_render_view_host.cc +++ b/chrome/browser/renderer_host/test/test_render_view_host.cc @@ -32,7 +32,7 @@ TestRenderViewHost::~TestRenderViewHost() { } bool TestRenderViewHost::CreateRenderView( - URLRequestContextGetter* request_context) { + URLRequestContextGetter* request_context, const string16& frame_name) { DCHECK(!render_view_created_); render_view_created_ = true; process()->ViewCreated(); diff --git a/chrome/browser/renderer_host/test/test_render_view_host.h b/chrome/browser/renderer_host/test/test_render_view_host.h index c50ba06..bda5712 100644 --- a/chrome/browser/renderer_host/test/test_render_view_host.h +++ b/chrome/browser/renderer_host/test/test_render_view_host.h @@ -165,7 +165,8 @@ class TestRenderViewHost : public RenderViewHost { // RenderViewHost overrides -------------------------------------------------- - virtual bool CreateRenderView(URLRequestContextGetter* request_context); + virtual bool CreateRenderView(URLRequestContextGetter* request_context, + const string16& frame_name); virtual bool IsRenderViewLive() const; private: |