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 d99018945366b5feda09daea5fd64f3ce9334497..133be5f7b7dfd19110a128781e2da20b77545143 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -663,20 +663,7 @@ void RenderFrameHostManager::SwapOutOldFrame( |
// SwapOut creates a RenderFrameProxy, so set the proxy to be initialized. |
proxy->set_render_frame_proxy_created(true); |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
- // In --site-per-process, frames delete their RFH rather than storing it |
- // in the proxy. Schedule it for deletion once the SwapOutACK comes in. |
- // TODO(creis): This will be the default when we remove swappedout://. |
- MoveToPendingDeleteHosts(std::move(old_render_frame_host)); |
- } else { |
- // We shouldn't get here for subframes, since we only swap subframes when |
- // --site-per-process is used. |
- DCHECK(frame_tree_node_->IsMainFrame()); |
- |
- // The old RenderFrameHost will stay alive inside the proxy so that existing |
- // JavaScript window references to it stay valid. |
- proxy->TakeFrameHostOwnership(std::move(old_render_frame_host)); |
- } |
+ MoveToPendingDeleteHosts(std::move(old_render_frame_host)); |
} |
void RenderFrameHostManager::DiscardUnusedFrame( |
@@ -703,20 +690,6 @@ void RenderFrameHostManager::DiscardUnusedFrame( |
proxy = CreateRenderFrameProxyHost(site_instance, |
render_frame_host->render_view_host()); |
} |
- |
- if (!SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
- DCHECK(frame_tree_node_->IsMainFrame()); |
- |
- // When using swapped out RenderFrameHosts, it is possible for the pending |
- // RenderFrameHost to be an existing one in swapped out state. Since it |
- // has been used to start a navigation, it could have committed a |
- // document. Check if |render_frame_host| is already swapped out, to avoid |
- // swapping it out again. |
- if (!render_frame_host->is_swapped_out()) |
- render_frame_host->SwapOut(proxy, false); |
- |
- proxy->TakeFrameHostOwnership(std::move(render_frame_host)); |
- } |
} |
render_frame_host.reset(); |
@@ -976,8 +949,6 @@ void RenderFrameHostManager::OnDidUpdateName(const std::string& name, |
// The window.name message may be sent outside of --site-per-process when |
// report_frame_name_changes renderer preference is set (used by |
// WebView). Don't send the update to proxies in those cases. |
- // TODO(nick,nasko): Should this be IsSwappedOutStateForbidden, to match |
- // OnDidUpdateOrigin? |
if (!SiteIsolationPolicy::AreCrossProcessFramesPossible()) |
return; |
@@ -999,9 +970,6 @@ void RenderFrameHostManager::OnEnforceStrictMixedContentChecking( |
} |
void RenderFrameHostManager::OnDidUpdateOrigin(const url::Origin& origin) { |
- if (!SiteIsolationPolicy::IsSwappedOutStateForbidden()) |
- return; |
- |
for (const auto& pair : proxy_hosts_) { |
pair.second->Send( |
new FrameMsg_DidUpdateOrigin(pair.second->GetRoutingID(), origin)); |
@@ -1028,18 +996,6 @@ void RenderFrameHostManager::ActiveFrameCountIsZero( |
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(site_instance); |
CHECK(proxy); |
- // Delete the proxy. If it is for a main frame (and the RFH is stored |
- // in the proxy) and it was still pending swap out, move the RFH to the |
- // pending deletion list first. |
- if (frame_tree_node_->IsMainFrame() && proxy->render_frame_host() && |
- proxy->render_frame_host()->rfh_state() == |
- RenderFrameHostImpl::STATE_PENDING_SWAP_OUT) { |
- DCHECK(!SiteIsolationPolicy::IsSwappedOutStateForbidden()); |
- scoped_ptr<RenderFrameHostImpl> swapped_out_rfh = |
- proxy->PassFrameHostOwnership(); |
- MoveToPendingDeleteHosts(std::move(swapped_out_rfh)); |
- } |
- |
DeleteRenderFrameProxyHost(site_instance); |
} |
@@ -1618,11 +1574,11 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( |
int flags, |
int* view_routing_id_ptr) { |
bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
- bool swapped_out_forbidden = |
- SiteIsolationPolicy::IsSwappedOutStateForbidden(); |
+ int32_t widget_routing_id = MSG_ROUTING_NONE; |
+ RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
CHECK(instance); |
- CHECK(!swapped_out_forbidden || !swapped_out); |
+ CHECK(!swapped_out); |
CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible() || |
frame_tree_node_->IsMainFrame()); |
@@ -1638,101 +1594,58 @@ scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( |
// never create it in the same SiteInstance as our current RFH. |
CHECK_NE(render_frame_host_->GetSiteInstance(), instance); |
- // Check if we've already created an RFH for this SiteInstance. If so, try |
- // to re-use the existing one, which has already been initialized. We'll |
- // 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(); |
- // Delete the existing RenderFrameProxyHost, but reuse the RenderFrameHost. |
- // Prevent the process from exiting while we're trying to use it. |
- if (!swapped_out) { |
- new_render_frame_host = proxy->PassFrameHostOwnership(); |
- new_render_frame_host->GetProcess()->AddPendingView(); |
- |
- DeleteRenderFrameProxyHost(instance); |
- // 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->IsRenderViewLive() && |
- !render_view_host->GetWidget()->GetView() && |
- frame_tree_node_->IsMainFrame()) { |
- delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
- } |
- } |
- } else { |
- // Create a new RenderFrameHost if we don't find an existing one. |
+ // A RenderFrame in a different process from its parent RenderFrame |
+ // requires a RenderWidget for input/layout/painting. |
+ if (frame_tree_node_->parent() && |
+ frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != |
+ instance) { |
+ CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
+ widget_routing_id = instance->GetProcess()->GetNextRoutingID(); |
+ } |
- int32_t widget_routing_id = MSG_ROUTING_NONE; |
+ new_render_frame_host = CreateRenderFrameHost( |
+ instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags); |
+ RenderViewHostImpl* render_view_host = |
+ new_render_frame_host->render_view_host(); |
- // A RenderFrame in a different process from its parent RenderFrame |
- // requires a RenderWidget for input/layout/painting. |
- if (frame_tree_node_->parent() && |
- frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != |
- instance) { |
- CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
- widget_routing_id = instance->GetProcess()->GetNextRoutingID(); |
- } |
+ // Prevent the process from exiting while we're trying to navigate in it. |
+ new_render_frame_host->GetProcess()->AddPendingView(); |
- new_render_frame_host = CreateRenderFrameHost( |
- instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags); |
- RenderViewHostImpl* render_view_host = |
- new_render_frame_host->render_view_host(); |
+ if (frame_tree_node_->IsMainFrame()) { |
+ success = InitRenderView(render_view_host, proxy); |
- // Prevent the process from exiting while we're trying to navigate in it. |
- // Otherwise, if the new RFH is swapped out already, store it. |
- if (!swapped_out) { |
- new_render_frame_host->GetProcess()->AddPendingView(); |
- } else { |
- proxy = |
- CreateRenderFrameProxyHost(new_render_frame_host->GetSiteInstance(), |
- new_render_frame_host->render_view_host()); |
- proxy->TakeFrameHostOwnership(std::move(new_render_frame_host)); |
- } |
+ // 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->GetWidget()->GetView()) |
+ delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
+ } else { |
+ DCHECK(render_view_host->IsRenderViewLive()); |
+ } |
+ if (success) { |
if (frame_tree_node_->IsMainFrame()) { |
- success = InitRenderView(render_view_host, proxy); |
- |
- // 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->GetWidget()->GetView()) |
- delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
- } else { |
- DCHECK(render_view_host->IsRenderViewLive()); |
- } |
- |
- if (success) { |
- if (frame_tree_node_->IsMainFrame()) { |
- // Don't show the main frame's view until we get a DidNavigate from it. |
- // Only the RenderViewHost for the top-level RenderFrameHost has a |
- // RenderWidgetHostView; RenderWidgetHosts for out-of-process iframes |
- // will be created later and hidden. |
- if (render_view_host->GetWidget()->GetView()) |
- render_view_host->GetWidget()->GetView()->Hide(); |
- } |
- // RenderViewHost for |instance| might exist prior to calling |
- // CreateRenderFrame. In such a case, InitRenderView will not create the |
- // RenderFrame in the renderer process and it needs to be done |
- // explicitly. |
- if (swapped_out_forbidden) { |
- // Init the RFH, so a RenderFrame is created in the renderer. |
- DCHECK(new_render_frame_host); |
- success = InitRenderFrame(new_render_frame_host.get()); |
- } |
+ // Don't show the main frame's view until we get a DidNavigate from it. |
+ // Only the RenderViewHost for the top-level RenderFrameHost has a |
+ // RenderWidgetHostView; RenderWidgetHosts for out-of-process iframes |
+ // will be created later and hidden. |
+ if (render_view_host->GetWidget()->GetView()) |
+ render_view_host->GetWidget()->GetView()->Hide(); |
} |
+ // RenderViewHost for |instance| might exist prior to calling |
+ // CreateRenderFrame. In such a case, InitRenderView will not create the |
+ // RenderFrame in the renderer process and it needs to be done |
+ // explicitly. |
+ DCHECK(new_render_frame_host); |
+ success = InitRenderFrame(new_render_frame_host.get()); |
+ } |
- if (success) { |
- if (view_routing_id_ptr) |
- *view_routing_id_ptr = render_view_host->GetRoutingID(); |
- } |
+ if (success) { |
+ if (view_routing_id_ptr) |
+ *view_routing_id_ptr = render_view_host->GetRoutingID(); |
} |
- // Returns the new RFH if it isn't swapped out. |
- if (success && !swapped_out) { |
+ // Return the new RenderFrameHost on successful creation. |
+ if (success) { |
DCHECK(new_render_frame_host->GetSiteInstance() == instance); |
return new_render_frame_host; |
} |
@@ -1749,14 +1662,12 @@ int RenderFrameHostManager::CreateRenderFrameProxy(SiteInstance* instance) { |
// Ensure a RenderViewHost exists for |instance|, as it creates the page |
// level structure in Blink. |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
- render_view_host = |
- frame_tree_node_->frame_tree()->GetRenderViewHost(instance); |
- if (!render_view_host) { |
- CHECK(frame_tree_node_->IsMainFrame()); |
- render_view_host = frame_tree_node_->frame_tree()->CreateRenderViewHost( |
- instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, true, true); |
- } |
+ render_view_host = |
+ frame_tree_node_->frame_tree()->GetRenderViewHost(instance); |
+ if (!render_view_host) { |
+ CHECK(frame_tree_node_->IsMainFrame()); |
+ render_view_host = frame_tree_node_->frame_tree()->CreateRenderViewHost( |
+ instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, true, true); |
} |
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
@@ -1766,8 +1677,7 @@ int RenderFrameHostManager::CreateRenderFrameProxy(SiteInstance* instance) { |
if (!proxy) |
proxy = CreateRenderFrameProxyHost(instance, render_view_host); |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden() && |
- frame_tree_node_->IsMainFrame()) { |
+ if (frame_tree_node_->IsMainFrame()) { |
InitRenderView(render_view_host, proxy); |
} else { |
proxy->InitRenderFrameProxy(); |
@@ -1910,8 +1820,7 @@ bool RenderFrameHostManager::InitRenderFrame( |
// Calling InitRenderFrameProxy on main frames seems to be causing |
// https://crbug.com/575245, so track down how this can happen. |
// TODO(creis): Remove this once we've found the cause. |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden() && |
- !frame_tree_node_->parent()) { |
+ if (!frame_tree_node_->parent()) { |
base::debug::SetCrashKeyValue( |
"initrf_frame_id", |
base::IntToString(render_frame_host->GetRoutingID())); |
@@ -1946,14 +1855,6 @@ int RenderFrameHostManager::GetRoutingIdForSiteInstance( |
if (render_frame_host_->GetSiteInstance() == site_instance) |
return render_frame_host_->GetRoutingID(); |
- // If there is a matching pending RFH, only return it if swapped out is |
- // allowed, since otherwise there should be a proxy that should be used |
- // instead. |
- if (pending_render_frame_host_ && |
- pending_render_frame_host_->GetSiteInstance() == site_instance && |
- !SiteIsolationPolicy::IsSwappedOutStateForbidden()) |
- return pending_render_frame_host_->GetRoutingID(); |
- |
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(site_instance); |
if (proxy) |
return proxy->GetRoutingID(); |
@@ -2067,7 +1968,7 @@ void RenderFrameHostManager::CommitPending() { |
// If this is committing a main frame navigation, update it and set the |
// routing id in the RenderViewHost associated with the old RenderFrameHost |
// to MSG_ROUTING_NONE. |
- if (is_main_frame && SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
+ if (is_main_frame) { |
render_frame_host_->render_view_host()->set_main_frame_routing_id( |
render_frame_host_->routing_id()); |
old_render_frame_host->render_view_host()->set_main_frame_routing_id( |
@@ -2082,11 +1983,9 @@ void RenderFrameHostManager::CommitPending() { |
// the proxy. |
SwapOutOldFrame(std::move(old_render_frame_host)); |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
- // Since the new RenderFrameHost is now committed, there must be no proxies |
- // for its SiteInstance. Delete any existing ones. |
- DeleteRenderFrameProxyHost(render_frame_host_->GetSiteInstance()); |
- } |
+ // Since the new RenderFrameHost is now committed, there must be no proxies |
+ // for its SiteInstance. Delete any existing ones. |
+ DeleteRenderFrameProxyHost(render_frame_host_->GetSiteInstance()); |
// If this is a subframe, it should have a CrossProcessFrameConnector |
// created already. Use it to link the new RFH's view to the proxy that |
@@ -2478,29 +2377,22 @@ void RenderFrameHostManager::CreateOpenerProxiesForFrameTree( |
} else { |
// If any of the RenderViewHosts (current, pending, or swapped out) for this |
// FrameTree has the same SiteInstance, then we can return early and reuse |
- // them. An exception is if we are in IsSwappedOutStateForbidden mode and |
- // find a pending RenderViewHost: in this case, we should still create a |
- // proxy, which will allow communicating with the opener until the pending |
- // RenderView commits, or if the pending navigation is canceled. |
+ // them. An exception is if we find a pending RenderViewHost: in this case, |
+ // we should still create a proxy, which will allow communicating with the |
+ // opener until the pending RenderView commits, or if the pending navigation |
+ // is canceled. |
RenderViewHostImpl* rvh = frame_tree->GetRenderViewHost(instance); |
- bool need_proxy_for_pending_rvh = |
- SiteIsolationPolicy::IsSwappedOutStateForbidden() && |
- (rvh == pending_render_view_host()); |
+ bool need_proxy_for_pending_rvh = (rvh == pending_render_view_host()); |
if (rvh && rvh->IsRenderViewLive() && !need_proxy_for_pending_rvh) |
return; |
if (rvh && !rvh->IsRenderViewLive()) { |
EnsureRenderViewInitialized(rvh, instance); |
} else { |
- // Create a swapped out RenderView in the given SiteInstance if none |
+ // Create a RenderFrameProxyHost 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. |
- if (SiteIsolationPolicy::IsSwappedOutStateForbidden()) { |
- frame_tree->root()->render_manager()->CreateRenderFrameProxy(instance); |
- } else { |
- frame_tree->root()->render_manager()->CreateRenderFrame( |
- instance, CREATE_RF_SWAPPED_OUT | CREATE_RF_HIDDEN, nullptr); |
- } |
+ frame_tree->root()->render_manager()->CreateRenderFrameProxy(instance); |
} |
} |
} |