Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 1785153005: Remove SiteIsolationPolicy::IsSwappedOutStateForbidden(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on ToT. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}
}

Powered by Google App Engine
This is Rietveld 408576698