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

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

Issue 600553003: Enable swapping a frame back in to its parent process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@remoteToLocal
Patch Set: Created 6 years, 3 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 8d557ace789b3b3c784bab09ebaa946467840a5b..d11de6a06746dc27aee1d509480e60fcbf191447 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -981,18 +981,6 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForURL(
// compare against the last non-interstitial entry.
current_entry = controller.GetEntryAtOffset(-1);
}
- // If there is no last non-interstitial entry (and current_instance already
- // has a site), then we must have been opened from another tab. We want
- // to compare against the URL of the page that opened us, but we can't
- // get to it directly. The best we can do is check against the site of
- // the SiteInstance. This will be correct when we intercept links and
- // script-based navigations, but for now, it could place some pages in a
- // new process unnecessarily. We should only hit this case if a page tries
- // to open a new tab to an interstitial-inducing URL, and then navigates
- // the page to a different same-site URL. (This seems very unlikely in
- // practice.)
- const GURL& current_url = (current_entry) ? current_entry->GetURL() :
Nate Chapin 2014/09/30 21:44:47 This code and comment are really old (pre-opensour
Charlie Reis 2014/09/30 23:02:43 Ah, this is tricky. We should fix this in its own
Nate Chapin 2014/09/30 23:19:44 I can try that. I had also considered making the b
- current_instance->GetSiteURL();
// View-source URLs must use a new SiteInstance and BrowsingInstance.
// We don't need a swap when going from view-source to a debug URL like
@@ -1008,6 +996,7 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForURL(
// Use the current SiteInstance for same site navigations, as long as the
// process type is correct. (The URL may have been installed as an app since
// the last time we visited it.)
+ const GURL& current_url = current_instance->GetSiteURL();
if (SiteInstance::IsSameWebSite(browser_context, current_url, dest_url) &&
!current_site_instance->HasWrongProcessForURL(dest_url)) {
return current_instance;
@@ -1147,13 +1136,13 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
// Otherwise, if the new RFH is swapped out already, store it.
if (!swapped_out) {
new_render_frame_host->GetProcess()->AddPendingView();
- } else {
- proxy = new RenderFrameProxyHost(
+ } else if (!proxy) {
+ RenderFrameProxyHost* new_proxy = new RenderFrameProxyHost(
new_render_frame_host->GetSiteInstance(), frame_tree_node_);
- proxy_hosts_[instance->GetId()] = proxy;
- proxy_routing_id = proxy->GetRoutingID();
+ proxy_hosts_[instance->GetId()] = new_proxy;
+ proxy_routing_id = new_proxy->GetRoutingID();
if (frame_tree_node_->IsMainFrame())
- proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
+ new_proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
}
bool success = InitRenderView(render_view_host,
@@ -1164,6 +1153,10 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
if (frame_tree_node_->IsMainFrame()) {
// Don't show the main frame's view until we get a DidNavigate from it.
render_view_host->GetView()->Hide();
+ } else if (proxy) {
+ proxy->SwapOut(new_render_frame_host.get());
Nate Chapin 2014/09/30 21:44:47 This case is where we have a RenderFrameProxyHost,
Charlie Reis 2014/09/30 23:02:43 I don't think we want to do the swap until the new
Nate Chapin 2014/09/30 23:19:44 Hrm. I guess that's more accurate.
nasko 2014/10/08 16:42:58 When we are creating a frame and there exists a pr
+ delete proxy;
+ proxy_hosts_.erase(instance->GetId());
} else if (!swapped_out) {
// Init the RFH, so a RenderFrame is created in the renderer.
DCHECK(new_render_frame_host.get());

Powered by Google App Engine
This is Rietveld 408576698