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 e6e93d96f64bbbbcb7c1d75d017efb528f705af2..aa2b2fe6bffa6a366294b76ee33574a9323a63a3 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -690,7 +690,9 @@ bool RenderFrameHostManager::ShouldSwapBrowsingInstancesForNavigation( |
// For security, we should transition between processes when one is a Web UI |
// page and one isn't. |
- if (WebUIControllerFactoryRegistry::GetInstance()->UseWebUIForURL( |
+ if (ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( |
+ render_frame_host_->GetProcess()->GetID()) || |
+ WebUIControllerFactoryRegistry::GetInstance()->UseWebUIForURL( |
browser_context, current_effective_url)) { |
// If so, force a swap if destination is not an acceptable URL for Web UI. |
// Here, data URLs are never allowed. |
@@ -747,7 +749,8 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForNavigation( |
SiteInstance* new_instance = current_instance; |
// We do not currently swap processes for navigations in webview tag guests. |
- bool is_guest_scheme = current_instance->GetSiteURL().SchemeIs(kGuestScheme); |
+ if (current_instance->GetSiteURL().SchemeIs(kGuestScheme)) |
+ return current_instance; |
// Determine if we need a new BrowsingInstance for this entry. If true, this |
// implies that it will get a new SiteInstance (and likely process), and that |
@@ -765,14 +768,13 @@ SiteInstance* RenderFrameHostManager::GetSiteInstanceForNavigation( |
render_frame_host_->GetSiteInstance()->GetSiteURL(); |
bool current_is_view_source_mode = current_entry ? |
current_entry->IsViewSourceMode() : dest_is_view_source_mode; |
- bool force_swap = !is_guest_scheme && |
- ShouldSwapBrowsingInstancesForNavigation( |
- current_effective_url, |
- current_is_view_source_mode, |
- dest_instance, |
- SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url), |
- dest_is_view_source_mode); |
- if (!is_guest_scheme && (ShouldTransitionCrossSite() || force_swap)) { |
+ bool force_swap = ShouldSwapBrowsingInstancesForNavigation( |
+ current_effective_url, |
+ current_is_view_source_mode, |
+ dest_instance, |
+ SiteInstanceImpl::GetEffectiveURL(browser_context, dest_url), |
+ dest_is_view_source_mode); |
+ if (ShouldTransitionCrossSite() || force_swap) { |
new_instance = GetSiteInstanceForURL( |
dest_url, |
dest_instance, |