diff options
author | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 22:43:04 +0000 |
---|---|---|
committer | nasko@chromium.org <nasko@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 22:43:04 +0000 |
commit | 227692c5deb033cd21a89573b4b16ca20a345811 (patch) | |
tree | 14ab87198605cad1f4b41a13c92d1b434909e64e /content | |
parent | d5023e98df77204c2d0a27000ddf7cfeaec02a32 (diff) | |
download | chromium_src-227692c5deb033cd21a89573b4b16ca20a345811.zip chromium_src-227692c5deb033cd21a89573b4b16ca20a345811.tar.gz chromium_src-227692c5deb033cd21a89573b4b16ca20a345811.tar.bz2 |
Create RenderFrame/RenderFrameHost for the main frame of a page.
This CL is the first in a series that will move frame specific functionality from RenderView/RenderViewHost to RenderFrame/RenderFrameHost. In this change, I'm only creating the objects for the top level frame and keeping them as members of RenderView/RenderViewHost for now.
BUG=245126
Review URL: https://chromiumcodereview.appspot.com/16032007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203500 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
45 files changed, 359 insertions, 26 deletions
diff --git a/content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc b/content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc index 953442a..304dc2e 100644 --- a/content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc +++ b/content/browser/renderer_host/media/web_contents_video_capture_device_unittest.cc @@ -227,10 +227,11 @@ class CaptureTestRenderViewHost : public TestRenderViewHost { RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, CaptureTestSourceController* controller) : TestRenderViewHost(instance, delegate, widget_delegate, routing_id, - swapped_out), + main_frame_routing_id, swapped_out), controller_(controller) { // Override the default view installed by TestRenderViewHost; we need // our special subclass which has mocked-out tab capture support. @@ -287,10 +288,12 @@ class CaptureTestRenderViewHostFactory : public RenderViewHostFactory { RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage_namespace) OVERRIDE { return new CaptureTestRenderViewHost(instance, delegate, widget_delegate, - routing_id, swapped_out, controller_); + routing_id, main_frame_routing_id, + swapped_out, controller_); } private: CaptureTestSourceController* controller_; diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc new file mode 100644 index 0000000..ea511d0 --- /dev/null +++ b/content/browser/renderer_host/render_frame_host_impl.cc @@ -0,0 +1,34 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/browser/renderer_host/render_frame_host_impl.h" + +#include "content/browser/renderer_host/render_view_host_impl.h" + +namespace content { + +RenderFrameHostImpl::RenderFrameHostImpl( + RenderViewHostImpl* render_view_host, + int routing_id, + bool swapped_out) + : render_view_host_(render_view_host), + routing_id_(routing_id) { +} + +RenderFrameHostImpl::~RenderFrameHostImpl() { +} + +bool RenderFrameHostImpl::Send(IPC::Message* message) { + // Use the RenderViewHost object to send the message. It inherits it from + // RenderWidgetHost, which ultimately uses the current process's |Send|. + return render_view_host_->Send(message); +} + +bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { + // Pass the message up to the RenderViewHost, until we have enough + // infrastructure to start processing messages in this object. + return render_view_host_->OnMessageReceived(msg); +} + +} // namespace content diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h new file mode 100644 index 0000000..bb94c8e --- /dev/null +++ b/content/browser/renderer_host/render_frame_host_impl.h @@ -0,0 +1,41 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_IMPL_H_ +#define CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_IMPL_H_ + +#include "base/compiler_specific.h" +#include "content/public/browser/render_frame_host.h" + +namespace content { + +class RenderViewHostImpl; + +class CONTENT_EXPORT RenderFrameHostImpl : public RenderFrameHost { + public: + RenderFrameHostImpl( + RenderViewHostImpl* render_view_host, + int routing_id, + bool swapped_out); + virtual ~RenderFrameHostImpl(); + + // IPC::Sender + virtual bool Send(IPC::Message* msg) OVERRIDE; + + // IPC::Listener + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; + + int routing_id() { return routing_id_; } + + private: + RenderViewHostImpl* render_view_host_; + + int routing_id_; + + DISALLOW_COPY_AND_ASSIGN(RenderFrameHostImpl); +}; + +} // namespace content + +#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_FRAME_HOST_IMPL_H_ diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc index f7059a9..1e8b640 100644 --- a/content/browser/renderer_host/render_message_filter.cc +++ b/content/browser/renderer_host/render_message_filter.cc @@ -446,6 +446,7 @@ bool RenderMessageFilter::OffTheRecord() const { void RenderMessageFilter::OnCreateWindow( const ViewHostMsg_CreateWindow_Params& params, int* route_id, + int* main_frame_route_id, int* surface_id, int64* cloned_session_storage_namespace_id) { bool no_javascript_access; @@ -460,6 +461,7 @@ void RenderMessageFilter::OnCreateWindow( if (!can_create_window) { *route_id = MSG_ROUTING_NONE; + *main_frame_route_id = MSG_ROUTING_NONE; *surface_id = 0; return; } @@ -474,6 +476,7 @@ void RenderMessageFilter::OnCreateWindow( no_javascript_access, peer_handle(), route_id, + main_frame_route_id, surface_id, cloned_namespace); } diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h index fb45016..6e907a7 100644 --- a/content/browser/renderer_host/render_message_filter.h +++ b/content/browser/renderer_host/render_message_filter.h @@ -121,6 +121,7 @@ class RenderMessageFilter : public BrowserMessageFilter { void OnGetProcessMemorySizes(size_t* private_bytes, size_t* shared_bytes); void OnCreateWindow(const ViewHostMsg_CreateWindow_Params& params, int* route_id, + int* main_frame_route_id, int* surface_id, int64* cloned_session_storage_namespace_id); void OnCreateWidget(int opener_id, diff --git a/content/browser/renderer_host/render_view_host_browsertest.cc b/content/browser/renderer_host/render_view_host_browsertest.cc index 8fb43e5..0bd8f1e 100644 --- a/content/browser/renderer_host/render_view_host_browsertest.cc +++ b/content/browser/renderer_host/render_view_host_browsertest.cc @@ -92,4 +92,27 @@ IN_PROC_BROWSER_TEST_F(RenderViewHostTest, BaseURLParam) { EXPECT_EQ("http://www.google.com/", observer.base_url().spec()); } +// This test ensures a RenderFrameHost object is created for the top level frame +// in each RenderViewHost. +IN_PROC_BROWSER_TEST_F(RenderViewHostTest, BasicRenderFrameHost) { + ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); + + GURL test_url = embedded_test_server()->GetURL("/simple_page.html"); + NavigateToURL(shell(), test_url); + + RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>( + shell()->web_contents()->GetRenderViewHost()); + EXPECT_TRUE(rvh->main_render_frame_host_.get()); + + ShellAddedObserver new_shell_observer; + EXPECT_TRUE(ExecuteScript(shell()->web_contents(), "window.open();")); + Shell* new_shell = new_shell_observer.GetShell(); + RenderViewHostImpl* new_rvh = static_cast<RenderViewHostImpl*>( + new_shell->web_contents()->GetRenderViewHost()); + + EXPECT_TRUE(new_rvh->main_render_frame_host_.get()); + EXPECT_NE(rvh->main_render_frame_host_->routing_id(), + new_rvh->main_render_frame_host_->routing_id()); +} + } // namespace content diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h index d9ad8ef..2c7bf68 100644 --- a/content/browser/renderer_host/render_view_host_delegate.h +++ b/content/browser/renderer_host/render_view_host_delegate.h @@ -364,6 +364,7 @@ class CONTENT_EXPORT RenderViewHostDelegate { // the Windows function which is actually a #define. virtual void CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) {} diff --git a/content/browser/renderer_host/render_view_host_factory.cc b/content/browser/renderer_host/render_view_host_factory.cc index c2b6c92..4f01d54 100644 --- a/content/browser/renderer_host/render_view_host_factory.cc +++ b/content/browser/renderer_host/render_view_host_factory.cc @@ -18,15 +18,18 @@ RenderViewHost* RenderViewHostFactory::Create( RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage_namespace) { if (factory_) { return factory_->CreateRenderViewHost(instance, delegate, widget_delegate, - routing_id, swapped_out, + routing_id, main_frame_routing_id, + swapped_out, session_storage_namespace); } return new RenderViewHostImpl(instance, delegate, widget_delegate, routing_id, - swapped_out, session_storage_namespace); + main_frame_routing_id, swapped_out, + session_storage_namespace); } // static diff --git a/content/browser/renderer_host/render_view_host_factory.h b/content/browser/renderer_host/render_view_host_factory.h index 0b7465d..df61552 100644 --- a/content/browser/renderer_host/render_view_host_factory.h +++ b/content/browser/renderer_host/render_view_host_factory.h @@ -28,6 +28,7 @@ class RenderViewHostFactory { RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage); @@ -47,6 +48,7 @@ class RenderViewHostFactory { RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage_namespace) = 0; diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc index 44017ad..e6b59ba 100644 --- a/content/browser/renderer_host/render_view_host_impl.cc +++ b/content/browser/renderer_host/render_view_host_impl.cc @@ -159,6 +159,7 @@ RenderViewHostImpl::RenderViewHostImpl( RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage) : RenderWidgetHostImpl(widget_delegate, instance->GetProcess(), routing_id), @@ -191,6 +192,12 @@ RenderViewHostImpl::RenderViewHostImpl( DCHECK(instance_); CHECK(delegate_); // http://crbug.com/82827 + if (main_frame_routing_id == MSG_ROUTING_NONE) + main_frame_routing_id = GetProcess()->GetNextRoutingID(); + + main_render_frame_host_.reset( + new RenderFrameHostImpl(this, main_frame_routing_id, is_swapped_out_)); + GetProcess()->EnableSendQueue(); for (size_t i = 0; i < g_created_callbacks.Get().size(); i++) @@ -253,6 +260,7 @@ bool RenderViewHostImpl::CreateRenderView( delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); params.web_preferences = delegate_->GetWebkitPrefs(); params.view_id = GetRoutingID(); + params.main_frame_routing_id = main_render_frame_host_->routing_id(); params.surface_id = surface_id(); params.session_storage_namespace_id = session_storage_namespace_->id(); params.frame_name = frame_name; @@ -1035,6 +1043,7 @@ bool RenderViewHostImpl::IsRenderView() const { void RenderViewHostImpl::CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) { ViewHostMsg_CreateWindow_Params validated_params(params); @@ -1045,8 +1054,8 @@ void RenderViewHostImpl::CreateNewWindow( FilterURL(policy, GetProcess(), true, &validated_params.opener_security_origin); - delegate_->CreateNewWindow(route_id, validated_params, - session_storage_namespace); + delegate_->CreateNewWindow(route_id, main_frame_route_id, + validated_params, session_storage_namespace); } void RenderViewHostImpl::CreateNewWidget(int route_id, diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h index 2d5249f..bee7b78 100644 --- a/content/browser/renderer_host/render_view_host_impl.h +++ b/content/browser/renderer_host/render_view_host_impl.h @@ -14,6 +14,7 @@ #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "base/process_util.h" +#include "content/browser/renderer_host/render_frame_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/site_instance_impl.h" #include "content/common/accessibility_node_data.h" @@ -62,6 +63,7 @@ namespace content { class ChildProcessSecurityPolicyImpl; class PageState; class PowerSaveBlocker; +class RenderFrameHostImpl; class RenderViewHostObserver; class RenderWidgetHostDelegate; class SessionStorageNamespace; @@ -120,6 +122,7 @@ class CONTENT_EXPORT RenderViewHostImpl RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage_namespace); virtual ~RenderViewHostImpl(); @@ -364,6 +367,7 @@ class CONTENT_EXPORT RenderViewHostImpl // Creates a new RenderView with the given route id. void CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace); @@ -567,6 +571,7 @@ class CONTENT_EXPORT RenderViewHostImpl private: friend class TestRenderViewHost; + FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, BasicRenderFrameHost); // Sets whether this RenderViewHost is swapped out in favor of another, // and clears any waiting state that is no longer relevant. @@ -576,6 +581,12 @@ class CONTENT_EXPORT RenderViewHostImpl bool CanAccessFilesOfPageState(const PageState& state) const; + // This is an RenderFrameHost object associated with the top-level frame in + // the page rendered by this RenderViewHost. + // TODO(nasko): Remove this pointer once we have enough infrastructure to + // move this to the top-level FrameTreeNode. + scoped_ptr<RenderFrameHostImpl> main_render_frame_host_; + // Our delegate, which wants to know about changes in the RenderView. RenderViewHostDelegate* delegate_; diff --git a/content/browser/renderer_host/render_widget_helper.cc b/content/browser/renderer_host/render_widget_helper.cc index d244da7..9d6a4be 100644 --- a/content/browser/renderer_host/render_widget_helper.cc +++ b/content/browser/renderer_host/render_widget_helper.cc @@ -250,6 +250,7 @@ void RenderWidgetHelper::CreateNewWindow( bool no_javascript_access, base::ProcessHandle render_process, int* route_id, + int* main_frame_route_id, int* surface_id, SessionStorageNamespace* session_storage_namespace) { if (params.opener_suppressed || no_javascript_access) { @@ -259,32 +260,38 @@ void RenderWidgetHelper::CreateNewWindow( // it. Because of this, we will immediately show and navigate the window // in OnCreateWindowOnUI, using the params provided here. *route_id = MSG_ROUTING_NONE; + *main_frame_route_id = MSG_ROUTING_NONE; *surface_id = 0; } else { *route_id = GetNextRoutingID(); + *main_frame_route_id = GetNextRoutingID(); *surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer( render_process_id_, *route_id); // Block resource requests until the view is created, since the HWND might // be needed if a response ends up creating a plugin. resource_dispatcher_host_->BlockRequestsForRoute( render_process_id_, *route_id); + resource_dispatcher_host_->BlockRequestsForRoute( + render_process_id_, *main_frame_route_id); } BrowserThread::PostTask( BrowserThread::UI, FROM_HERE, base::Bind(&RenderWidgetHelper::OnCreateWindowOnUI, - this, params, *route_id, + this, params, *route_id, *main_frame_route_id, make_scoped_refptr(session_storage_namespace))); } void RenderWidgetHelper::OnCreateWindowOnUI( const ViewHostMsg_CreateWindow_Params& params, int route_id, + int main_frame_route_id, SessionStorageNamespace* session_storage_namespace) { RenderViewHostImpl* host = RenderViewHostImpl::FromID(render_process_id_, params.opener_id); if (host) - host->CreateNewWindow(route_id, params, session_storage_namespace); + host->CreateNewWindow(route_id, main_frame_route_id, params, + session_storage_namespace); } void RenderWidgetHelper::OnResumeRequestsForView(int route_id) { diff --git a/content/browser/renderer_host/render_widget_helper.h b/content/browser/renderer_host/render_widget_helper.h index 733130a..638c9a7 100644 --- a/content/browser/renderer_host/render_widget_helper.h +++ b/content/browser/renderer_host/render_widget_helper.h @@ -148,6 +148,7 @@ class RenderWidgetHelper bool no_javascript_access, base::ProcessHandle render_process, int* route_id, + int* main_frame_route_id, int* surface_id, SessionStorageNamespace* session_storage_namespace); void CreateNewWidget(int opener_id, @@ -196,6 +197,7 @@ class RenderWidgetHelper void OnCreateWindowOnUI( const ViewHostMsg_CreateWindow_Params& params, int route_id, + int main_frame_route_id, SessionStorageNamespace* session_storage_namespace); // Called on the IO thread after a window was created on the UI thread. diff --git a/content/browser/renderer_host/test_render_view_host.cc b/content/browser/renderer_host/test_render_view_host.cc index a3a8b43..b54efc5 100644 --- a/content/browser/renderer_host/test_render_view_host.cc +++ b/content/browser/renderer_host/test_render_view_host.cc @@ -240,11 +240,13 @@ TestRenderViewHost::TestRenderViewHost( RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out) : RenderViewHostImpl(instance, delegate, widget_delegate, routing_id, + main_frame_routing_id, swapped_out, CreateSessionStorageNamespace(instance)), render_view_created_(false), diff --git a/content/browser/renderer_host/test_render_view_host.h b/content/browser/renderer_host/test_render_view_host.h index 9fb3cfc..f384e86 100644 --- a/content/browser/renderer_host/test_render_view_host.h +++ b/content/browser/renderer_host/test_render_view_host.h @@ -227,6 +227,7 @@ class TestRenderViewHost RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out); virtual ~TestRenderViewHost(); diff --git a/content/browser/web_contents/interstitial_page_impl.cc b/content/browser/web_contents/interstitial_page_impl.cc index 9b6ada9..02d3e5a 100644 --- a/content/browser/web_contents/interstitial_page_impl.cc +++ b/content/browser/web_contents/interstitial_page_impl.cc @@ -497,7 +497,7 @@ RenderViewHost* InterstitialPageImpl::CreateRenderViewHost() { new SessionStorageNamespaceImpl(dom_storage_context); RenderViewHostImpl* render_view_host = new RenderViewHostImpl( - site_instance, this, this, MSG_ROUTING_NONE, false, + site_instance, this, this, MSG_ROUTING_NONE, MSG_ROUTING_NONE, false, session_storage_namespace_impl); web_contents_->RenderViewForInterstitialPageCreated(render_view_host); return render_view_host; @@ -666,6 +666,7 @@ gfx::Rect InterstitialPageImpl::GetRootWindowResizerRect() const { void InterstitialPageImpl::CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) { NOTREACHED() << "InterstitialPage does not support showing popups yet."; diff --git a/content/browser/web_contents/interstitial_page_impl.h b/content/browser/web_contents/interstitial_page_impl.h index 532dcc29..476b062 100644 --- a/content/browser/web_contents/interstitial_page_impl.h +++ b/content/browser/web_contents/interstitial_page_impl.h @@ -113,6 +113,7 @@ class CONTENT_EXPORT InterstitialPageImpl virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE; virtual void CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) OVERRIDE; virtual void CreateNewWidget(int route_id, diff --git a/content/browser/web_contents/render_view_host_manager.cc b/content/browser/web_contents/render_view_host_manager.cc index 4cbd0fc..73cd00a 100644 --- a/content/browser/web_contents/render_view_host_manager.cc +++ b/content/browser/web_contents/render_view_host_manager.cc @@ -64,7 +64,8 @@ RenderViewHostManager::~RenderViewHostManager() { void RenderViewHostManager::Init(BrowserContext* browser_context, SiteInstance* site_instance, - int routing_id) { + int routing_id, + int main_frame_routing_id) { // Create a RenderViewHost, once we have an instance. It is important to // immediately give this SiteInstance to a RenderViewHost so that it is // ref counted. @@ -73,7 +74,7 @@ void RenderViewHostManager::Init(BrowserContext* browser_context, render_view_host_ = static_cast<RenderViewHostImpl*>( RenderViewHostFactory::Create( site_instance, render_view_delegate_, render_widget_delegate_, - routing_id, false, delegate_-> + routing_id, main_frame_routing_id, false, delegate_-> GetControllerForRenderManager().GetSessionStorageNamespace( site_instance))); @@ -624,7 +625,7 @@ int RenderViewHostManager::CreateRenderView( new_render_view_host = static_cast<RenderViewHostImpl*>( RenderViewHostFactory::Create(instance, render_view_delegate_, render_widget_delegate_, MSG_ROUTING_NONE, - swapped_out, delegate_-> + MSG_ROUTING_NONE, swapped_out, delegate_-> GetControllerForRenderManager().GetSessionStorageNamespace( instance))); diff --git a/content/browser/web_contents/render_view_host_manager.h b/content/browser/web_contents/render_view_host_manager.h index d8b4001..d178680 100644 --- a/content/browser/web_contents/render_view_host_manager.h +++ b/content/browser/web_contents/render_view_host_manager.h @@ -116,7 +116,8 @@ class CONTENT_EXPORT RenderViewHostManager // For arguments, see WebContentsImpl constructor. void Init(BrowserContext* browser_context, SiteInstance* site_instance, - int routing_id); + int routing_id, + int main_frame_routing_id); // Returns the currently active RenderViewHost. // diff --git a/content/browser/web_contents/render_view_host_manager_unittest.cc b/content/browser/web_contents/render_view_host_manager_unittest.cc index 0ad1f7f..6223e4f 100644 --- a/content/browser/web_contents/render_view_host_manager_unittest.cc +++ b/content/browser/web_contents/render_view_host_manager_unittest.cc @@ -332,7 +332,7 @@ TEST_F(RenderViewHostManagerTest, Init) { RenderViewHostManager manager(web_contents.get(), web_contents.get(), web_contents.get()); - manager.Init(browser_context(), instance, MSG_ROUTING_NONE); + manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); RenderViewHost* host = manager.current_host(); ASSERT_TRUE(host); @@ -359,7 +359,7 @@ TEST_F(RenderViewHostManagerTest, Navigate) { RenderViewHostManager manager(web_contents.get(), web_contents.get(), web_contents.get()); - manager.Init(browser_context(), instance, MSG_ROUTING_NONE); + manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); RenderViewHost* host; @@ -452,7 +452,7 @@ TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { RenderViewHostManager manager(web_contents.get(), web_contents.get(), web_contents.get()); - manager.Init(browser_context(), instance, MSG_ROUTING_NONE); + manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); // 1) The first navigation. -------------------------- const GURL kUrl1("http://www.google.com/"); @@ -599,7 +599,7 @@ TEST_F(RenderViewHostManagerTest, WebUI) { RenderViewHostManager manager(web_contents.get(), web_contents.get(), web_contents.get()); - manager.Init(browser_context(), instance, MSG_ROUTING_NONE); + manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); EXPECT_FALSE(manager.current_host()->IsRenderViewLive()); const GURL kUrl("chrome://foo"); @@ -645,7 +645,8 @@ TEST_F(RenderViewHostManagerTest, WebUIInNewTab) { TestWebContents::Create(browser_context(), blank_instance)); RenderViewHostManager manager1(web_contents1.get(), web_contents1.get(), web_contents1.get()); - manager1.Init(browser_context(), blank_instance, MSG_ROUTING_NONE); + manager1.Init( + browser_context(), blank_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); // Test the case that new RVH is considered live. manager1.current_host()->CreateRenderView(string16(), -1, -1); @@ -674,7 +675,8 @@ TEST_F(RenderViewHostManagerTest, WebUIInNewTab) { TestWebContents::Create(browser_context(), webui_instance)); RenderViewHostManager manager2(web_contents2.get(), web_contents2.get(), web_contents2.get()); - manager2.Init(browser_context(), webui_instance, MSG_ROUTING_NONE); + manager2.Init( + browser_context(), webui_instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); // Make sure the new RVH is considered live. This is usually done in // RenderWidgetHost::Init when opening a new tab from a link. manager2.current_host()->CreateRenderView(string16(), -1, -1); @@ -901,7 +903,7 @@ TEST_F(RenderViewHostManagerTest, NoSwapOnGuestNavigations) { RenderViewHostManager manager(web_contents.get(), web_contents.get(), web_contents.get()); - manager.Init(browser_context(), instance, MSG_ROUTING_NONE); + manager.Init(browser_context(), instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE); RenderViewHost* host; diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index 0e1b8c5..fabd43a 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc @@ -1162,7 +1162,8 @@ void WebContentsImpl::Observe(int type, void WebContentsImpl::Init(const WebContents::CreateParams& params) { render_manager_.Init( - params.browser_context, params.site_instance, params.routing_id); + params.browser_context, params.site_instance, params.routing_id, + params.main_frame_routing_id); view_.reset(GetContentClient()->browser()-> OverrideCreateWebContentsView(this, &render_view_host_delegate_view_)); @@ -1378,12 +1379,15 @@ void WebContentsImpl::LostMouseLock() { void WebContentsImpl::CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) { if (delegate_ && !delegate_->ShouldCreateWebContents( this, route_id, params.window_container_type, params.frame_name, params.target_url)) { GetRenderViewHost()->GetProcess()->ResumeRequestsForView(route_id); + GetRenderViewHost()->GetProcess()->ResumeRequestsForView( + main_frame_route_id); return; } @@ -1424,6 +1428,7 @@ void WebContentsImpl::CreateNewWindow( session_storage_namespace); CreateParams create_params(GetBrowserContext(), site_instance); create_params.routing_id = route_id; + create_params.main_frame_routing_id = main_frame_route_id; if (!is_guest) { create_params.context = view_->GetNativeView(); create_params.initial_size = view_->GetContainerSize(); diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index 2af13f8..008162e2 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h @@ -420,6 +420,7 @@ class CONTENT_EXPORT WebContentsImpl virtual void LostMouseLock() OVERRIDE; virtual void CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) OVERRIDE; virtual void CreateNewWidget(int route_id, diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc index b75fc5b..657950d 100644 --- a/content/browser/web_contents/web_contents_impl_unittest.cc +++ b/content/browser/web_contents/web_contents_impl_unittest.cc @@ -184,7 +184,7 @@ class TestInterstitialPage : public InterstitialPageImpl { virtual RenderViewHost* CreateRenderViewHost() OVERRIDE { return new TestRenderViewHost( SiteInstance::Create(web_contents()->GetBrowserContext()), - this, this, MSG_ROUTING_NONE, false); + this, this, MSG_ROUTING_NONE, MSG_ROUTING_NONE, false); } virtual WebContentsView* CreateWebContentsView() OVERRIDE { diff --git a/content/common/view_messages.h b/content/common/view_messages.h index 844ee5e..b50c6e2 100644 --- a/content/common/view_messages.h +++ b/content/common/view_messages.h @@ -655,6 +655,9 @@ IPC_STRUCT_BEGIN(ViewMsg_New_Params) // The ID of the view to be created. IPC_STRUCT_MEMBER(int32, view_id) + // The ID of the main frame hosted in the view. + IPC_STRUCT_MEMBER(int32, main_frame_routing_id) + // The ID of the rendering surface. IPC_STRUCT_MEMBER(int32, surface_id) @@ -1325,9 +1328,10 @@ IPC_MESSAGE_ROUTED1(ViewMsg_Snapshot, // Sent by the renderer when it is creating a new window. The browser creates // a tab for it and responds with a ViewMsg_CreatingNew_ACK. If route_id is // MSG_ROUTING_NONE, the view couldn't be created. -IPC_SYNC_MESSAGE_CONTROL1_3(ViewHostMsg_CreateWindow, +IPC_SYNC_MESSAGE_CONTROL1_4(ViewHostMsg_CreateWindow, ViewHostMsg_CreateWindow_Params, int /* route_id */, + int /* main_frame_route_id */, int32 /* surface_id */, int64 /* cloned_session_storage_namespace_id */) diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 8ec7782..c09639f6 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi @@ -135,6 +135,7 @@ 'public/browser/profiler_controller.h', 'public/browser/profiler_subscriber.h', 'public/browser/quota_permission_context.h', + 'public/browser/render_frame_host.h', 'public/browser/render_process_host.h', 'public/browser/render_process_host_factory.h', 'public/browser/render_view_host.h', @@ -859,6 +860,8 @@ 'browser/renderer_host/popup_menu_helper_mac.mm', 'browser/renderer_host/quota_dispatcher_host.cc', 'browser/renderer_host/quota_dispatcher_host.h', + 'browser/renderer_host/render_frame_host_impl.cc', + 'browser/renderer_host/render_frame_host_impl.h', 'browser/renderer_host/render_message_filter.cc', 'browser/renderer_host/render_message_filter.h', 'browser/renderer_host/render_process_host_impl.cc', diff --git a/content/content_renderer.gypi b/content/content_renderer.gypi index d1e0cb4..99c34cb 100644 --- a/content/content_renderer.gypi +++ b/content/content_renderer.gypi @@ -44,6 +44,7 @@ 'public/renderer/navigation_state.h', 'public/renderer/password_form_conversion_utils.h', 'public/renderer/renderer_ppapi_host.h', + 'public/renderer/render_frame.h', 'public/renderer/render_process_observer.cc', 'public/renderer/render_process_observer.h', 'public/renderer/render_thread.cc', @@ -266,6 +267,8 @@ 'renderer/fetchers/resource_fetcher.h', 'renderer/ime_event_guard.cc', 'renderer/ime_event_guard.h', + 'renderer/render_frame_impl.cc', + 'renderer/render_frame_impl.h', 'renderer/render_process.h', 'renderer/render_process_impl.cc', 'renderer/render_process_impl.h', diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h new file mode 100644 index 0000000..a5a49f2 --- /dev/null +++ b/content/public/browser/render_frame_host.h @@ -0,0 +1,25 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_H_ +#define CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_H_ + +#include "content/common/content_export.h" +#include "ipc/ipc_listener.h" +#include "ipc/ipc_sender.h" + +namespace content { + +// The interface provides a communication conduit with a frame in the renderer. +class CONTENT_EXPORT RenderFrameHost : public IPC::Listener, + public IPC::Sender { + private: + // This interface should only be implemented inside content. + friend class RenderFrameHostImpl; + RenderFrameHost() {} +}; + +} // namespace content + +#endif // CONTENT_PUBLIC_BROWSER_RENDER_FRAME_HOST_H_ diff --git a/content/public/browser/web_contents.cc b/content/public/browser/web_contents.cc index 0c27483..f4de54a 100644 --- a/content/public/browser/web_contents.cc +++ b/content/public/browser/web_contents.cc @@ -12,6 +12,7 @@ WebContents::CreateParams::CreateParams(BrowserContext* context) : browser_context(context), site_instance(NULL), routing_id(MSG_ROUTING_NONE), + main_frame_routing_id(MSG_ROUTING_NONE), context(NULL) {} WebContents::CreateParams::CreateParams( @@ -19,6 +20,7 @@ WebContents::CreateParams::CreateParams( : browser_context(context), site_instance(site), routing_id(MSG_ROUTING_NONE), + main_frame_routing_id(MSG_ROUTING_NONE), context(NULL) {} } // namespace content diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h index caaee98..ebf2352 100644 --- a/content/public/browser/web_contents.h +++ b/content/public/browser/web_contents.h @@ -78,6 +78,7 @@ class WebContents : public PageNavigator, BrowserContext* browser_context; SiteInstance* site_instance; int routing_id; + int main_frame_routing_id; // Initial size of the new WebContent's view. Can be (0, 0) if not needed. gfx::Size initial_size; diff --git a/content/public/renderer/render_frame.h b/content/public/renderer/render_frame.h new file mode 100644 index 0000000..47ace3e --- /dev/null +++ b/content/public/renderer/render_frame.h @@ -0,0 +1,30 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ +#define CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ + +#include "content/common/content_export.h" +#include "ipc/ipc_listener.h" +#include "ipc/ipc_sender.h" + +namespace content { + +// This interface wraps functionality, which is specific to frames, such as +// navigation. It provides communication with a corresponding RenderFrameHost +// in the browser process. +class CONTENT_EXPORT RenderFrame : public IPC::Listener, + public IPC::Sender { + protected: + virtual ~RenderFrame() {} + + private: + // This interface should only be implemented inside content. + friend class RenderFrameImpl; + RenderFrame() {} +}; + +} // namespace content + +#endif // CONTENT_PUBLIC_RENDERER_RENDER_FRAME_H_ diff --git a/content/public/test/mock_render_thread.cc b/content/public/test/mock_render_thread.cc index ec75926..6c0dee1 100644 --- a/content/public/test/mock_render_thread.cc +++ b/content/public/test/mock_render_thread.cc @@ -14,7 +14,11 @@ namespace content { MockRenderThread::MockRenderThread() - : routing_id_(0), surface_id_(0), opener_id_(0), new_window_routing_id_(0) { + : routing_id_(0), + surface_id_(0), + opener_id_(0), + new_window_routing_id_(0), + new_window_main_frame_routing_id_(0) { } MockRenderThread::~MockRenderThread() { @@ -208,9 +212,11 @@ void MockRenderThread::OnCreateWidget(int opener_id, void MockRenderThread::OnCreateWindow( const ViewHostMsg_CreateWindow_Params& params, int* route_id, + int* main_frame_route_id, int* surface_id, int64* cloned_session_storage_namespace_id) { *route_id = new_window_routing_id_; + *main_frame_route_id = new_window_main_frame_routing_id_; *surface_id = surface_id_; *cloned_session_storage_namespace_id = 0; } diff --git a/content/public/test/mock_render_thread.h b/content/public/test/mock_render_thread.h index d90275c..b4503f8 100644 --- a/content/public/test/mock_render_thread.h +++ b/content/public/test/mock_render_thread.h @@ -120,6 +120,7 @@ class MockRenderThread : public RenderThread { void OnCreateWindow( const ViewHostMsg_CreateWindow_Params& params, int* route_id, + int* main_frame_route_id, int* surface_id, int64* cloned_session_storage_namespace_id); @@ -146,6 +147,7 @@ class MockRenderThread : public RenderThread { // Routing id that will be assigned to a CreateWindow Widget. int32 new_window_routing_id_; + int32 new_window_main_frame_routing_id_; // The last known good deserializer for sync messages. scoped_ptr<IPC::MessageReplyDeserializer> reply_deserializer_; diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index cd2f720..3add61a 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc @@ -39,7 +39,8 @@ using WebKit::WebURLRequest; namespace { const int32 kOpenerId = -2; const int32 kRouteId = 5; -const int32 kNewWindowRouteId = 6; +const int32 kMainFrameRouteId = 6; +const int32 kNewWindowRouteId = 7; const int32 kSurfaceId = 42; } // namespace @@ -170,6 +171,7 @@ void RenderViewTest::SetUp() { WebPreferences(), new SharedRenderViewCounter(0), kRouteId, + kMainFrameRouteId, kSurfaceId, dom_storage::kInvalidSessionStorageNamespaceId, string16(), diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc new file mode 100644 index 0000000..8c6d03b --- /dev/null +++ b/content/renderer/render_frame_impl.cc @@ -0,0 +1,32 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/renderer/render_frame_impl.h" + +#include "content/renderer/render_thread_impl.h" +#include "content/renderer/render_view_impl.h" + +namespace content { + +RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) + : render_view_(render_view), + routing_id_(routing_id) { +} + +RenderFrameImpl::~RenderFrameImpl() { +} + +bool RenderFrameImpl::Send(IPC::Message* message) { + // TODO(nasko): Move away from using the RenderView's Send method once we + // have enough infrastructure and state to make the right checks here. + return render_view_->Send(message); +} + +bool RenderFrameImpl::OnMessageReceived(const IPC::Message &msg) { + // Pass the message up to the RenderView, until we have enough + // infrastructure to start processing messages in this object. + return render_view_->OnMessageReceived(msg); +} + +} // namespace content diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h new file mode 100644 index 0000000..a74077e --- /dev/null +++ b/content/renderer/render_frame_impl.h @@ -0,0 +1,38 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONTENT_RENDERER_RENDER_FRAME_IMPL_H_ +#define CONTENT_RENDERER_RENDER_FRAME_IMPL_H_ + +#include "base/basictypes.h" +#include "content/public/renderer/render_frame.h" +#include "ipc/ipc_message.h" + +namespace content { + +class RenderViewImpl; + +class CONTENT_EXPORT RenderFrameImpl : public RenderFrame { + public: + RenderFrameImpl(RenderViewImpl* render_view, int routing_id); + virtual ~RenderFrameImpl(); + + // IPC::Sender + virtual bool Send(IPC::Message* msg) OVERRIDE; + + // IPC::Listener + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; + + int routing_id() { return routing_id_; } + + private: + RenderViewImpl* render_view_; + int routing_id_; + + DISALLOW_COPY_AND_ASSIGN(RenderFrameImpl); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_RENDER_FRAME_IMPL_H_ diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 386e442..75b73e1 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -1197,6 +1197,7 @@ void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) { params.web_preferences, new SharedRenderViewCounter(0), params.view_id, + params.main_frame_routing_id, params.surface_id, params.session_storage_namespace_id, params.frame_name, diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc index da95ec0..4dafdb8 100644 --- a/content/renderer/render_view_browsertest.cc +++ b/content/renderer/render_view_browsertest.cc @@ -1861,4 +1861,10 @@ TEST_F(RenderViewImplTest, NavigateFrame) { EXPECT_EQ(output, L"hello \n\nworld"); } +// This test ensures that a RenderFrame object is created for the top level +// frame in the RenderView. +TEST_F(RenderViewImplTest, BasicRenderFrame) { + EXPECT_TRUE(view()->main_render_frame_.get()); +} + } // namespace content diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 2a8fc58..e5740cd4 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -101,6 +101,7 @@ #include "content/renderer/notification_provider.h" #include "content/renderer/pepper/pepper_plugin_delegate_impl.h" #include "content/renderer/plugin_channel_host.h" +#include "content/renderer/render_frame_impl.h" #include "content/renderer/render_process.h" #include "content/renderer/render_thread_impl.h" #include "content/renderer/render_view_impl_params.h" @@ -756,6 +757,9 @@ RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) } void RenderViewImpl::Initialize(RenderViewImplParams* params) { + main_render_frame_.reset(new RenderFrameImpl( + this, params->main_frame_routing_id)); + #if defined(ENABLE_PLUGINS) pepper_helper_.reset(new PepperPluginDelegateImpl(this)); #else @@ -970,6 +974,7 @@ RenderViewImpl* RenderViewImpl::Create( const WebPreferences& webkit_prefs, SharedRenderViewCounter* counter, int32 routing_id, + int32 main_frame_routing_id, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, @@ -986,6 +991,7 @@ RenderViewImpl* RenderViewImpl::Create( webkit_prefs, counter, routing_id, + main_frame_routing_id, surface_id, session_storage_namespace_id, frame_name, @@ -2044,12 +2050,14 @@ WebView* RenderViewImpl::createView( params.target_url = request.url(); int32 routing_id = MSG_ROUTING_NONE; + int32 main_frame_routing_id = MSG_ROUTING_NONE; int32 surface_id = 0; int64 cloned_session_storage_namespace_id; RenderThread::Get()->Send( new ViewHostMsg_CreateWindow(params, &routing_id, + &main_frame_routing_id, &surface_id, &cloned_session_storage_namespace_id)); if (routing_id == MSG_ROUTING_NONE) @@ -2077,6 +2085,7 @@ WebView* RenderViewImpl::createView( transferred_preferences, shared_popup_counter_, routing_id, + main_frame_routing_id, surface_id, cloned_session_storage_namespace_id, string16(), // WebCore will take care of setting the correct name. diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 8d73ee9..29fb368 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -35,6 +35,7 @@ #include "content/public/common/top_controls_state.h" #include "content/public/renderer/render_view.h" #include "content/renderer/mouse_lock_dispatcher.h" +#include "content/renderer/render_frame_impl.h" #include "content/renderer/render_view_pepper_helper.h" #include "content/renderer/render_widget.h" #include "content/renderer/renderer_webcookiejar_impl.h" @@ -214,6 +215,7 @@ class CONTENT_EXPORT RenderViewImpl const WebPreferences& webkit_prefs, SharedRenderViewCounter* counter, int32 routing_id, + int32 main_frame_routing_id, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, @@ -874,6 +876,7 @@ class CONTENT_EXPORT RenderViewImpl FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, NavigateFrame); FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, ShouldUpdateSelectionTextFromContextMenuParams); + FRIEND_TEST_ALL_PREFIXES(RenderViewImplTest, BasicRenderFrame); typedef std::map<GURL, double> HostZoomLevels; @@ -1375,6 +1378,8 @@ class CONTENT_EXPORT RenderViewImpl // Helper objects ------------------------------------------------------------ + scoped_ptr<RenderFrameImpl> main_render_frame_; + RendererWebCookieJarImpl cookie_jar_; // The next group of objects all implement RenderViewObserver, so are deleted diff --git a/content/renderer/render_view_impl_params.cc b/content/renderer/render_view_impl_params.cc index 521778b..daceb5b 100644 --- a/content/renderer/render_view_impl_params.cc +++ b/content/renderer/render_view_impl_params.cc @@ -12,6 +12,7 @@ RenderViewImplParams::RenderViewImplParams( const WebPreferences& webkit_prefs, SharedRenderViewCounter* counter, int32 routing_id, + int32 main_frame_routing_id, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, @@ -26,6 +27,7 @@ RenderViewImplParams::RenderViewImplParams( webkit_prefs(webkit_prefs), counter(counter), routing_id(routing_id), + main_frame_routing_id(main_frame_routing_id), surface_id(surface_id), session_storage_namespace_id(session_storage_namespace_id), frame_name(frame_name), diff --git a/content/renderer/render_view_impl_params.h b/content/renderer/render_view_impl_params.h index da29fea..27835be 100644 --- a/content/renderer/render_view_impl_params.h +++ b/content/renderer/render_view_impl_params.h @@ -29,6 +29,7 @@ struct CONTENT_EXPORT RenderViewImplParams { const WebPreferences& webkit_prefs, SharedRenderViewCounter* counter, int32 routing_id, + int32 main_frame_routing_id, int32 surface_id, int64 session_storage_namespace_id, const string16& frame_name, @@ -45,6 +46,7 @@ struct CONTENT_EXPORT RenderViewImplParams { const WebPreferences& webkit_prefs; SharedRenderViewCounter* counter; int32 routing_id; + int32 main_frame_routing_id; int32 surface_id; int64 session_storage_namespace_id; const string16& frame_name; diff --git a/content/test/test_render_view_host_factory.cc b/content/test/test_render_view_host_factory.cc index 3a2b0f3..3211dd0 100644 --- a/content/test/test_render_view_host_factory.cc +++ b/content/test/test_render_view_host_factory.cc @@ -30,13 +30,15 @@ RenderViewHost* TestRenderViewHostFactory::CreateRenderViewHost( RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage) { // See declaration of render_process_host_factory_ below. static_cast<SiteInstanceImpl*>(instance)-> set_render_process_host_factory(render_process_host_factory_); return new TestRenderViewHost( - instance, delegate, widget_delegate, routing_id, swapped_out); + instance, delegate, widget_delegate, routing_id, main_frame_routing_id, + swapped_out); } } // namespace content diff --git a/content/test/test_render_view_host_factory.h b/content/test/test_render_view_host_factory.h index 3a30b46..6b9b45e 100644 --- a/content/test/test_render_view_host_factory.h +++ b/content/test/test_render_view_host_factory.h @@ -32,6 +32,7 @@ class TestRenderViewHostFactory : public RenderViewHostFactory { RenderViewHostDelegate* delegate, RenderWidgetHostDelegate* widget_delegate, int routing_id, + int main_frame_routing_id, bool swapped_out, SessionStorageNamespace* session_storage) OVERRIDE; diff --git a/content/test/test_web_contents.cc b/content/test/test_web_contents.cc index bdcc948..72f4f62 100644 --- a/content/test/test_web_contents.cc +++ b/content/test/test_web_contents.cc @@ -221,6 +221,7 @@ void TestWebContents::TestDidFailLoadWithError( void TestWebContents::CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) { } diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h index fce9fa8..55024b8 100644 --- a/content/test/test_web_contents.h +++ b/content/test/test_web_contents.h @@ -107,6 +107,7 @@ class TestWebContents : public WebContentsImpl, public WebContentsTester { // WebContentsImpl overrides virtual void CreateNewWindow( int route_id, + int main_frame_route_id, const ViewHostMsg_CreateWindow_Params& params, SessionStorageNamespace* session_storage_namespace) OVERRIDE; virtual void CreateNewWidget(int route_id, |