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 f9e2bf976fcbe85f71d53b78f7fbd8fe5bcf37f9..2c5bd18c595b79f62b3a94a8699613620eeea8c1 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -994,9 +994,20 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForNavigation( |
SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url), |
dest_is_view_source_mode); |
if (ShouldTransitionCrossSite() || force_swap) { |
- new_instance = GetSiteInstanceForURL( |
- dest_url, source_instance, current_instance, dest_instance, |
- transition, dest_is_restore, dest_is_view_source_mode, force_swap); |
+ if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation) && |
+ speculative_render_frame_host_ && |
+ speculative_render_frame_host_->GetSiteInstance()->GetSiteURL() == |
+ 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.
|
+ // We already created a new SiteInstance for this specific URL during this |
+ // navigation and used it to create the speculative RenderFrameHost, so |
+ // there's no need to create yet another new one. |
+ new_instance = speculative_render_frame_host_->GetSiteInstance(); |
+ } else { |
+ new_instance = GetSiteInstanceForURL( |
+ dest_url, source_instance, current_instance, dest_instance, |
+ transition, dest_is_restore, dest_is_view_source_mode, force_swap); |
+ } |
} |
// If force_swap is true, we must use a different SiteInstance. If we didn't, |
@@ -1096,7 +1107,7 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForURL( |
// create a new SiteInstance. |
if (WebUIControllerFactoryRegistry::GetInstance()->UseWebUIForURL( |
browser_context, dest_url)) { |
- return SiteInstance::CreateForURL(browser_context, dest_url); |
+ return SiteInstance::CreateForURL(browser_context, dest_url); |
} |
// Normally the "site" on the SiteInstance is set lazily when the load |