| Index: content/browser/frame_host/render_frame_host_manager.cc
|
| diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
|
| index 6ed4f00477e0a4a2a8116a23ac0ccbed70934919..0db22328001286825a1c744dd30e8aed0b89fd35 100644
|
| --- a/content/browser/frame_host/render_frame_host_manager.cc
|
| +++ b/content/browser/frame_host/render_frame_host_manager.cc
|
| @@ -401,8 +401,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
|
| // soon anyway, and we don't have the NavigationEntry for this host.
|
| delegate_->CreateRenderViewForRenderManager(
|
| render_frame_host_->render_view_host(), MSG_ROUTING_NONE,
|
| - MSG_ROUTING_NONE, frame_tree_node_->current_replication_state(),
|
| - frame_tree_node_->IsMainFrame());
|
| + MSG_ROUTING_NONE, frame_tree_node_->current_replication_state());
|
| }
|
|
|
| // If the renderer isn't live, then try to create a new one to satisfy this
|
| @@ -421,8 +420,7 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate(
|
| CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(),
|
| frame_tree_node_);
|
| if (!InitRenderView(dest_render_frame_host->render_view_host(),
|
| - MSG_ROUTING_NONE,
|
| - frame_tree_node_->IsMainFrame()))
|
| + MSG_ROUTING_NONE))
|
| return nullptr;
|
|
|
| // Now that we've created a new renderer, be sure to hide it if it isn't
|
| @@ -1058,8 +1056,7 @@ RenderFrameHostImpl* RenderFrameHostManager::GetFrameHostForNavigation(
|
| if (!navigation_rfh->IsRenderFrameLive()) {
|
| // Recreate the opener chain.
|
| CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_);
|
| - if (!InitRenderView(navigation_rfh->render_view_host(), MSG_ROUTING_NONE,
|
| - frame_tree_node_->IsMainFrame())) {
|
| + if (!InitRenderView(navigation_rfh->render_view_host(), MSG_ROUTING_NONE)) {
|
| return nullptr;
|
| }
|
|
|
| @@ -1562,12 +1559,8 @@ const GURL& RenderFrameHostManager::GetCurrentURLForSiteInstance(
|
|
|
| void RenderFrameHostManager::CreatePendingRenderFrameHost(
|
| SiteInstance* old_instance,
|
| - SiteInstance* new_instance,
|
| - bool is_main_frame) {
|
| + SiteInstance* new_instance) {
|
| int create_render_frame_flags = 0;
|
| - if (is_main_frame)
|
| - create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
|
| -
|
| if (delegate_->IsHidden())
|
| create_render_frame_flags |= CREATE_RF_HIDDEN;
|
|
|
| @@ -1691,8 +1684,6 @@ bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost(
|
| CreateProxiesForNewRenderFrameHost(old_instance, new_instance);
|
|
|
| int create_render_frame_flags = 0;
|
| - if (frame_tree_node_->IsMainFrame())
|
| - create_render_frame_flags |= CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
|
| if (delegate_->IsHidden())
|
| create_render_frame_flags |= CREATE_RF_HIDDEN;
|
| speculative_render_frame_host_ =
|
| @@ -1737,6 +1728,7 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
|
| // remove it from the list of proxy hosts below if it will be active.
|
| RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
|
| if (proxy && proxy->render_frame_host()) {
|
| + RenderViewHost* render_view_host = proxy->GetRenderViewHost();
|
| CHECK(!swapped_out_forbidden);
|
| if (view_routing_id_ptr)
|
| *view_routing_id_ptr = proxy->GetRenderViewHost()->GetRoutingID();
|
| @@ -1749,6 +1741,10 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
|
| proxy_hosts_->Remove(instance->GetId());
|
| // NB |proxy| is deleted at this point.
|
| }
|
| + // If we are reusing the RenderViewHost and it doesn't already have a
|
| + // RenderWidgetHostView, we need to create one if this is the main frame.
|
| + if (!render_view_host->GetView() && frame_tree_node_->IsMainFrame())
|
| + delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
|
| } else {
|
| // Create a new RenderFrameHost if we don't find an existing one.
|
|
|
| @@ -1785,8 +1781,17 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
|
| proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
|
| }
|
|
|
| - success = InitRenderView(render_view_host, proxy_routing_id,
|
| - !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION));
|
| + if (frame_tree_node_->IsMainFrame()) {
|
| + success = InitRenderView(render_view_host, proxy_routing_id);
|
| +
|
| + // If we are reusing the RenderViewHost and it doesn't already have a
|
| + // RenderWidgetHostView, we need to create one if this is the main frame.
|
| + if (!swapped_out && !render_view_host->GetView())
|
| + delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
|
| + } else {
|
| + DCHECK(render_view_host->IsRenderViewLive());
|
| + }
|
| +
|
| if (success) {
|
| // Remember that InitRenderView also created the RenderFrameProxy.
|
| if (swapped_out)
|
| @@ -1871,7 +1876,7 @@ int RenderFrameHostManager::CreateRenderFrameProxy(SiteInstance* instance) {
|
|
|
| if (SiteIsolationPolicy::IsSwappedOutStateForbidden() &&
|
| frame_tree_node_->IsMainFrame()) {
|
| - InitRenderView(render_view_host, proxy->GetRoutingID(), true);
|
| + InitRenderView(render_view_host, proxy->GetRoutingID());
|
| proxy->set_render_frame_proxy_created(true);
|
| } else {
|
| proxy->InitRenderFrameProxy();
|
| @@ -1906,7 +1911,7 @@ void RenderFrameHostManager::EnsureRenderViewInitialized(
|
| if (!proxy)
|
| return;
|
|
|
| - InitRenderView(render_view_host, proxy->GetRoutingID(), false);
|
| + InitRenderView(render_view_host, proxy->GetRoutingID());
|
| proxy->set_render_frame_proxy_created(true);
|
| }
|
|
|
| @@ -1941,8 +1946,7 @@ void RenderFrameHostManager::SetRWHViewForInnerContents(
|
|
|
| bool RenderFrameHostManager::InitRenderView(
|
| RenderViewHostImpl* render_view_host,
|
| - int proxy_routing_id,
|
| - bool for_main_frame_navigation) {
|
| + int proxy_routing_id) {
|
| // Ensure the renderer process is initialized before creating the
|
| // RenderView.
|
| if (!render_view_host->GetProcess()->Init())
|
| @@ -1979,7 +1983,7 @@ bool RenderFrameHostManager::InitRenderView(
|
|
|
| return delegate_->CreateRenderViewForRenderManager(
|
| render_view_host, opener_frame_routing_id, proxy_routing_id,
|
| - frame_tree_node_->current_replication_state(), for_main_frame_navigation);
|
| + frame_tree_node_->current_replication_state());
|
| }
|
|
|
| bool RenderFrameHostManager::InitRenderFrame(
|
| @@ -2295,8 +2299,7 @@ RenderFrameHostImpl* RenderFrameHostManager::UpdateStateForNavigate(
|
| // CancelPending(), otherwise CancelPending may clear the pending_web_ui_
|
| // and the page will not have its bindings set appropriately.
|
| SetPendingWebUI(dest_url, bindings);
|
| - CreatePendingRenderFrameHost(current_instance, new_instance.get(),
|
| - frame_tree_node_->IsMainFrame());
|
| + CreatePendingRenderFrameHost(current_instance, new_instance.get());
|
| if (!pending_render_frame_host_)
|
| return nullptr;
|
|
|
| @@ -2576,11 +2579,8 @@ void RenderFrameHostManager::CreateOpenerProxiesForFrameTree(
|
| // Create a swapped out RenderView in the given SiteInstance if none
|
| // exists. Since an opener can point to a subframe, do this on the root
|
| // frame of the current opener's frame tree.
|
| - frame_tree->root()->render_manager()->
|
| - CreateRenderFrame(instance, nullptr,
|
| - CREATE_RF_FOR_MAIN_FRAME_NAVIGATION |
|
| - CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN,
|
| - nullptr);
|
| + frame_tree->root()->render_manager()->CreateRenderFrame(
|
| + instance, nullptr, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, nullptr);
|
| }
|
| }
|
| }
|
|
|