| Index: content/browser/site_instance_impl.cc
|
| diff --git a/content/browser/site_instance_impl.cc b/content/browser/site_instance_impl.cc
|
| index cd5ac038b4b1dee1e26d64fc0b0a1996ec8b9e97..46751c2963e7a5666c1ab9dc82798e2d5085db0f 100644
|
| --- a/content/browser/site_instance_impl.cc
|
| +++ b/content/browser/site_instance_impl.cc
|
| @@ -213,7 +213,8 @@ bool SiteInstanceImpl::HasWrongProcessForURL(const GURL& url) {
|
| bool SiteInstanceImpl::RequiresDedicatedProcess() {
|
| if (!has_site_)
|
| return false;
|
| - return SiteIsolationPolicy::DoesSiteRequireDedicatedProcess(site_);
|
| + return SiteInstanceImpl::DoesSiteRequireDedicatedProcess(GetBrowserContext(),
|
| + site_);
|
| }
|
|
|
| void SiteInstanceImpl::IncrementRelatedActiveContentsCount() {
|
| @@ -233,12 +234,12 @@ BrowserContext* SiteInstanceImpl::GetBrowserContext() const {
|
| return browsing_instance_->browser_context();
|
| }
|
|
|
| -/*static*/
|
| +// static
|
| SiteInstance* SiteInstance::Create(BrowserContext* browser_context) {
|
| return new SiteInstanceImpl(new BrowsingInstance(browser_context));
|
| }
|
|
|
| -/*static*/
|
| +// static
|
| SiteInstance* SiteInstance::CreateForURL(BrowserContext* browser_context,
|
| const GURL& url) {
|
| // This will create a new SiteInstance and BrowsingInstance.
|
| @@ -247,7 +248,7 @@ SiteInstance* SiteInstance::CreateForURL(BrowserContext* browser_context,
|
| return instance->GetSiteInstanceForURL(url);
|
| }
|
|
|
| -/*static*/
|
| +// static
|
| bool SiteInstance::IsSameWebSite(BrowserContext* browser_context,
|
| const GURL& real_src_url,
|
| const GURL& real_dest_url) {
|
| @@ -287,7 +288,7 @@ bool SiteInstance::IsSameWebSite(BrowserContext* browser_context,
|
| net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
|
| }
|
|
|
| -/*static*/
|
| +// static
|
| GURL SiteInstance::GetSiteForURL(BrowserContext* browser_context,
|
| const GURL& real_url) {
|
| // TODO(fsamuel, creis): For some reason appID is not recognized as a host.
|
| @@ -332,13 +333,31 @@ GURL SiteInstance::GetSiteForURL(BrowserContext* browser_context,
|
| return GURL();
|
| }
|
|
|
| -/*static*/
|
| +// static
|
| GURL SiteInstanceImpl::GetEffectiveURL(BrowserContext* browser_context,
|
| const GURL& url) {
|
| return GetContentClient()->browser()->
|
| GetEffectiveURL(browser_context, url);
|
| }
|
|
|
| +// static
|
| +bool SiteInstanceImpl::DoesSiteRequireDedicatedProcess(
|
| + BrowserContext* browser_context,
|
| + const GURL& effective_url) {
|
| + // If --site-per-process is enabled, site isolation is enabled everywhere.
|
| + if (SiteIsolationPolicy::UseDedicatedProcessesForAllSites())
|
| + return true;
|
| +
|
| + // Let the content embedder enable site isolation for specific URLs.
|
| + if (GetContentClient()->IsSupplementarySiteIsolationModeEnabled() &&
|
| + GetContentClient()->browser()->DoesSiteRequireDedicatedProcess(
|
| + browser_context, effective_url)) {
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| void SiteInstanceImpl::RenderProcessHostDestroyed(RenderProcessHost* host) {
|
| DCHECK_EQ(process_, host);
|
| process_->RemoveObserver(this);
|
| @@ -350,7 +369,7 @@ void SiteInstanceImpl::LockToOrigin() {
|
| // protection. If only some sites are isolated, we need additional logic to
|
| // prevent the non-isolated sites from requesting resources for isolated
|
| // sites. https://crbug.com/509125
|
| - if (SiteIsolationPolicy::DoesSiteRequireDedicatedProcess(site_)) {
|
| + if (RequiresDedicatedProcess()) {
|
| // Guest processes cannot be locked to its site because guests always have
|
| // a fixed SiteInstance. The site of GURLs a guest loads doesn't match that
|
| // SiteInstance. So we skip locking the guest process to the site.
|
|
|