| Index: chrome/browser/site_details.cc
|
| diff --git a/chrome/browser/site_details.cc b/chrome/browser/site_details.cc
|
| index 54970b6b6acc152fecba150ade24c4d3fbcb58ca..bf9d9478200dd518a863c3300248ff3232bb2eee 100644
|
| --- a/chrome/browser/site_details.cc
|
| +++ b/chrome/browser/site_details.cc
|
| @@ -7,7 +7,12 @@
|
| #include "base/metrics/histogram.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/render_process_host.h"
|
| +
|
| +#if defined(ENABLE_EXTENSIONS)
|
| +#include "extensions/browser/extension_registry.h"
|
| #include "extensions/common/constants.h"
|
| +#include "extensions/common/extension.h"
|
| +#endif
|
|
|
| using content::BrowserThread;
|
| using content::RenderProcessHost;
|
| @@ -16,7 +21,9 @@ using content::WebContents;
|
|
|
| namespace {
|
|
|
| -bool ShouldIsolate(IsolationScenarioType policy, const GURL& site) {
|
| +bool ShouldIsolate(content::BrowserContext* browser_context,
|
| + IsolationScenarioType policy,
|
| + const GURL& site) {
|
| switch (policy) {
|
| case ISOLATE_ALL_SITES:
|
| return true;
|
| @@ -26,8 +33,19 @@ bool ShouldIsolate(IsolationScenarioType policy, const GURL& site) {
|
| // the New Tab Page gets counted as two processes under this policy, and
|
| // extensions are isolated as well.
|
| return !site.SchemeIs(url::kHttpScheme);
|
| - case ISOLATE_EXTENSIONS:
|
| - return site.SchemeIs(extensions::kExtensionScheme);
|
| + case ISOLATE_EXTENSIONS: {
|
| +#if !defined(ENABLE_EXTENSIONS)
|
| + return false;
|
| +#else
|
| + if (!site.SchemeIs(extensions::kExtensionScheme))
|
| + return false;
|
| + extensions::ExtensionRegistry* registry =
|
| + extensions::ExtensionRegistry::Get(browser_context);
|
| + const extensions::Extension* extension =
|
| + registry->enabled_extensions().GetExtensionOrAppByURL(site);
|
| + return extension && !extension->is_hosted_app();
|
| +#endif
|
| + }
|
| }
|
| NOTREACHED();
|
| return true;
|
| @@ -41,7 +59,10 @@ IsolationScenario::~IsolationScenario() {}
|
|
|
| void IsolationScenario::CollectSiteInfoForScenario(SiteInstance* primary,
|
| const GURL& site) {
|
| - const GURL& isolated = ShouldIsolate(policy, site) ? site : GURL("http://");
|
| + const GURL& isolated =
|
| + ShouldIsolate(primary->GetBrowserContext(), policy, site)
|
| + ? site
|
| + : GURL("http://");
|
| sites.insert(isolated);
|
| browsing_instance_site_map[primary->GetId()].insert(isolated);
|
| }
|
|
|