Index: trunk/src/content/browser/renderer_host/render_view_host_impl.cc |
=================================================================== |
--- trunk/src/content/browser/renderer_host/render_view_host_impl.cc (revision 241158) |
+++ trunk/src/content/browser/renderer_host/render_view_host_impl.cc (working copy) |
@@ -27,6 +27,7 @@ |
#include "content/browser/cross_site_request_manager.h" |
#include "content/browser/dom_storage/session_storage_namespace_impl.h" |
#include "content/browser/frame_host/frame_tree.h" |
+#include "content/browser/frame_host/render_frame_host_factory.h" |
#include "content/browser/gpu/compositor_util.h" |
#include "content/browser/gpu/gpu_data_manager_impl.h" |
#include "content/browser/gpu/gpu_process_host.h" |
@@ -158,6 +159,7 @@ |
RenderViewHostImpl::RenderViewHostImpl( |
SiteInstance* instance, |
RenderViewHostDelegate* delegate, |
+ RenderFrameHostDelegate* frame_delegate, |
RenderWidgetHostDelegate* widget_delegate, |
int routing_id, |
int main_frame_routing_id, |
@@ -176,7 +178,6 @@ |
is_swapped_out_(swapped_out), |
is_subframe_(false), |
main_frame_id_(-1), |
- main_frame_routing_id_(main_frame_routing_id), |
run_modal_reply_msg_(NULL), |
run_modal_opener_id_(MSG_ROUTING_NONE), |
is_waiting_for_beforeunload_ack_(false), |
@@ -189,6 +190,16 @@ |
DCHECK(instance_.get()); |
CHECK(delegate_); // http://crbug.com/82827 |
+ if (main_frame_routing_id == MSG_ROUTING_NONE) |
+ main_frame_routing_id = GetProcess()->GetNextRoutingID(); |
+ |
+ main_render_frame_host_ = RenderFrameHostFactory::Create( |
+ this, frame_delegate, delegate_->GetFrameTree(), |
+ delegate_->GetFrameTree()->root(), |
+ main_frame_routing_id, is_swapped_out_); |
+ delegate_->GetFrameTree()->root()->set_render_frame_host( |
+ main_render_frame_host_.get(), false); |
+ |
GetProcess()->EnableSendQueue(); |
if (!swapped_out) |
@@ -268,7 +279,7 @@ |
delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); |
params.web_preferences = delegate_->GetWebkitPrefs(); |
params.view_id = GetRoutingID(); |
- params.main_frame_routing_id = main_frame_routing_id_; |
+ params.main_frame_routing_id = main_render_frame_host()->routing_id(); |
params.surface_id = surface_id(); |
params.session_storage_namespace_id = |
delegate_->GetSessionStorageNamespace(instance_)->id(); |
@@ -1279,6 +1290,7 @@ |
void RenderViewHostImpl::Init() { |
RenderWidgetHostImpl::Init(); |
+ main_render_frame_host()->Init(); |
} |
void RenderViewHostImpl::Shutdown() { |
@@ -1392,7 +1404,7 @@ |
// TODO(creis): Once subframes can be in different processes, we'll need to |
// clear just the FrameTreeNodes affected by the crash (and their subtrees). |
main_frame_id_ = -1; |
- delegate_->GetFrameTree()->ResetForMainFrameSwap(); |
+ delegate_->GetFrameTree()->SwapMainFrame(main_render_frame_host_.get()); |
// Our base class RenderWidgetHost needs to reset some stuff. |
RendererExited(render_view_termination_status_, exit_code); |
@@ -2287,7 +2299,7 @@ |
void RenderViewHostImpl::AttachToFrameTree() { |
FrameTree* frame_tree = delegate_->GetFrameTree(); |
- frame_tree->ResetForMainFrameSwap(); |
+ frame_tree->SwapMainFrame(main_render_frame_host_.get()); |
if (main_frame_id() != FrameTreeNode::kInvalidFrameId) { |
frame_tree->OnFirstNavigationAfterSwap(main_frame_id()); |
} |