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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 967383002: PlzNavigate: Avoid duplicate SiteInstance creation during navigation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved the logic into GetSiteInstanceForNavigation. Created 5 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 render_frame_host_->GetSiteInstance()->GetSiteURL(); 987 render_frame_host_->GetSiteInstance()->GetSiteURL();
988 bool current_is_view_source_mode = current_entry ? 988 bool current_is_view_source_mode = current_entry ?
989 current_entry->IsViewSourceMode() : dest_is_view_source_mode; 989 current_entry->IsViewSourceMode() : dest_is_view_source_mode;
990 bool force_swap = ShouldSwapBrowsingInstancesForNavigation( 990 bool force_swap = ShouldSwapBrowsingInstancesForNavigation(
991 current_effective_url, 991 current_effective_url,
992 current_is_view_source_mode, 992 current_is_view_source_mode,
993 dest_instance, 993 dest_instance,
994 SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url), 994 SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url),
995 dest_is_view_source_mode); 995 dest_is_view_source_mode);
996 if (ShouldTransitionCrossSite() || force_swap) { 996 if (ShouldTransitionCrossSite() || force_swap) {
997 new_instance = GetSiteInstanceForURL( 997 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
998 dest_url, source_instance, current_instance, dest_instance, 998 switches::kEnableBrowserSideNavigation) &&
999 transition, dest_is_restore, dest_is_view_source_mode, force_swap); 999 speculative_render_frame_host_ &&
1000 speculative_render_frame_host_->GetSiteInstance()->GetSiteURL() ==
1001 SiteInstanceImpl::GetSiteForURL(browser_context, dest_url)) {
Charlie Reis 2015/03/05 04:27:11 SiteInstanceImpl::GetSiteForURL is not equivalent
carlosk 2015/03/06 16:03:54 Acknowledged.
1002 // We already created a new SiteInstance for this specific URL during this
1003 // navigation and used it to create the speculative RenderFrameHost, so
1004 // there's no need to create yet another new one.
1005 new_instance = speculative_render_frame_host_->GetSiteInstance();
1006 } else {
1007 new_instance = GetSiteInstanceForURL(
1008 dest_url, source_instance, current_instance, dest_instance,
1009 transition, dest_is_restore, dest_is_view_source_mode, force_swap);
1010 }
1000 } 1011 }
1001 1012
1002 // If force_swap is true, we must use a different SiteInstance. If we didn't, 1013 // If force_swap is true, we must use a different SiteInstance. If we didn't,
1003 // we would have two RenderFrameHosts in the same SiteInstance and the same 1014 // we would have two RenderFrameHosts in the same SiteInstance and the same
1004 // frame, resulting in page_id conflicts for their NavigationEntries. 1015 // frame, resulting in page_id conflicts for their NavigationEntries.
1005 if (force_swap) 1016 if (force_swap)
1006 CHECK_NE(new_instance, current_instance); 1017 CHECK_NE(new_instance, current_instance);
1007 return new_instance; 1018 return new_instance;
1008 } 1019 }
1009 1020
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 // TODO(nasko): This is the same condition as later in the function. This 1100 // TODO(nasko): This is the same condition as later in the function. This
1090 // should be taken into account when refactoring this method as part of 1101 // should be taken into account when refactoring this method as part of
1091 // http://crbug.com/123007. 1102 // http://crbug.com/123007.
1092 if (dest_is_view_source_mode) 1103 if (dest_is_view_source_mode)
1093 return SiteInstance::CreateForURL(browser_context, dest_url); 1104 return SiteInstance::CreateForURL(browser_context, dest_url);
1094 1105
1095 // If we are navigating from a blank SiteInstance to a WebUI, make sure we 1106 // If we are navigating from a blank SiteInstance to a WebUI, make sure we
1096 // create a new SiteInstance. 1107 // create a new SiteInstance.
1097 if (WebUIControllerFactoryRegistry::GetInstance()->UseWebUIForURL( 1108 if (WebUIControllerFactoryRegistry::GetInstance()->UseWebUIForURL(
1098 browser_context, dest_url)) { 1109 browser_context, dest_url)) {
1099 return SiteInstance::CreateForURL(browser_context, dest_url); 1110 return SiteInstance::CreateForURL(browser_context, dest_url);
1100 } 1111 }
1101 1112
1102 // Normally the "site" on the SiteInstance is set lazily when the load 1113 // Normally the "site" on the SiteInstance is set lazily when the load
1103 // actually commits. This is to support better process sharing in case 1114 // actually commits. This is to support better process sharing in case
1104 // the site redirects to some other site: we want to use the destination 1115 // the site redirects to some other site: we want to use the destination
1105 // site in the site instance. 1116 // site in the site instance.
1106 // 1117 //
1107 // In the case of session restore, as it loads all the pages immediately 1118 // In the case of session restore, as it loads all the pages immediately
1108 // we need to set the site first, otherwise after a restore none of the 1119 // we need to set the site first, otherwise after a restore none of the
1109 // pages would share renderers in process-per-site. 1120 // pages would share renderers in process-per-site.
(...skipping 840 matching lines...) Expand 10 before | Expand all | Expand 10 after
1950 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 1961 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
1951 SiteInstance* instance) { 1962 SiteInstance* instance) {
1952 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 1963 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
1953 if (iter != proxy_hosts_.end()) { 1964 if (iter != proxy_hosts_.end()) {
1954 delete iter->second; 1965 delete iter->second;
1955 proxy_hosts_.erase(iter); 1966 proxy_hosts_.erase(iter);
1956 } 1967 }
1957 } 1968 }
1958 1969
1959 } // namespace content 1970 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698