| Index: content/browser/browsing_instance.cc
|
| diff --git a/content/browser/browsing_instance.cc b/content/browser/browsing_instance.cc
|
| index ae42e29a540b97ec07036143a6951d5574162453..60daa5efd71e072994cd81e673782c159e1580d6 100644
|
| --- a/content/browser/browsing_instance.cc
|
| +++ b/content/browser/browsing_instance.cc
|
| @@ -9,73 +9,21 @@
|
| #include "content/browser/site_instance_impl.h"
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| -#include "content/public/browser/web_ui_controller_factory.h"
|
| #include "content/public/common/content_switches.h"
|
| #include "content/public/common/url_constants.h"
|
|
|
| using content::SiteInstance;
|
| -using content::WebUIControllerFactory;
|
| -
|
| -// static
|
| -base::LazyInstance<BrowsingInstance::ContextSiteInstanceMap>::Leaky
|
| - BrowsingInstance::context_site_instance_map_ = LAZY_INSTANCE_INITIALIZER;
|
|
|
| BrowsingInstance::BrowsingInstance(content::BrowserContext* browser_context)
|
| : browser_context_(browser_context) {
|
| }
|
|
|
| -bool BrowsingInstance::ShouldUseProcessPerSite(const GURL& url) {
|
| - // Returns true if we should use the process-per-site model. This will be
|
| - // the case if the --process-per-site switch is specified, or in
|
| - // process-per-site-instance for particular sites (e.g., the new tab page).
|
| -
|
| - const CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - if (command_line.HasSwitch(switches::kProcessPerSite))
|
| - return true;
|
| -
|
| - // We want to consolidate particular sites like extensions and WebUI whether
|
| - // it is in process-per-tab or process-per-site-instance.
|
| - // Note that --single-process may have been specified, but that affects the
|
| - // process creation logic in RenderProcessHost, so we do not need to worry
|
| - // about it here.
|
| -
|
| - if (content::GetContentClient()->browser()->
|
| - ShouldUseProcessPerSite(browser_context_, url))
|
| - return true;
|
| -
|
| - // DevTools pages have WebUI type but should not reuse the same host.
|
| - WebUIControllerFactory* factory =
|
| - content::GetContentClient()->browser()->GetWebUIControllerFactory();
|
| - if (factory && factory->UseWebUIForURL(browser_context_, url) &&
|
| - !url.SchemeIs(chrome::kChromeDevToolsScheme)) {
|
| - return true;
|
| - }
|
| -
|
| - // In all other cases, don't use process-per-site logic.
|
| - return false;
|
| -}
|
| -
|
| -BrowsingInstance::SiteInstanceMap* BrowsingInstance::GetSiteInstanceMap(
|
| - content::BrowserContext* browser_context, const GURL& url) {
|
| - if (!ShouldUseProcessPerSite(
|
| - SiteInstanceImpl::GetEffectiveURL(browser_context, url))) {
|
| - // Not using process-per-site, so use a map specific to this instance.
|
| - return &site_instance_map_;
|
| - }
|
| -
|
| - // Otherwise, process-per-site is in use, at least for this URL. Look up the
|
| - // global map for this context, creating an entry if necessary.
|
| - return &context_site_instance_map_.Get()[browser_context];
|
| -}
|
| -
|
| bool BrowsingInstance::HasSiteInstance(const GURL& url) {
|
| std::string site =
|
| SiteInstanceImpl::GetSiteForURL(browser_context_, url)
|
| .possibly_invalid_spec();
|
|
|
| - SiteInstanceMap* map = GetSiteInstanceMap(browser_context_, url);
|
| - SiteInstanceMap::iterator i = map->find(site);
|
| - return (i != map->end());
|
| + return site_instance_map_.find(site) != site_instance_map_.end();
|
| }
|
|
|
| SiteInstance* BrowsingInstance::GetSiteInstanceForURL(const GURL& url) {
|
| @@ -83,11 +31,10 @@ SiteInstance* BrowsingInstance::GetSiteInstanceForURL(const GURL& url) {
|
| SiteInstanceImpl::GetSiteForURL(browser_context_, url)
|
| .possibly_invalid_spec();
|
|
|
| - SiteInstanceMap* map = GetSiteInstanceMap(browser_context_, url);
|
| - SiteInstanceMap::iterator i = map->find(site);
|
| - if (i != map->end()) {
|
| + SiteInstanceMap::iterator i = site_instance_map_.find(site);
|
| + if (i != site_instance_map_.end())
|
| return i->second;
|
| - }
|
| +
|
|
|
| // No current SiteInstance for this site, so let's create one.
|
| SiteInstanceImpl* instance = new SiteInstanceImpl(this);
|
| @@ -108,12 +55,10 @@ void BrowsingInstance::RegisterSiteInstance(SiteInstance* site_instance) {
|
| // tabs are navigated there at the same time. (We don't call SetSite or
|
| // register them until DidNavigate.) If there is a previously existing
|
| // SiteInstance for this site, we just won't register the new one.
|
| - SiteInstanceMap* map = GetSiteInstanceMap(browser_context_,
|
| - site_instance->GetSite());
|
| - SiteInstanceMap::iterator i = map->find(site);
|
| - if (i == map->end()) {
|
| + SiteInstanceMap::iterator i = site_instance_map_.find(site);
|
| + if (i == site_instance_map_.end()) {
|
| // Not previously registered, so register it.
|
| - (*map)[site] = site_instance;
|
| + site_instance_map_[site] = site_instance;
|
| }
|
| }
|
|
|
| @@ -126,33 +71,11 @@ void BrowsingInstance::UnregisterSiteInstance(SiteInstance* site_instance) {
|
| // Only unregister the SiteInstance if it is the same one that is registered
|
| // for the site. (It might have been an unregistered SiteInstance. See the
|
| // comments in RegisterSiteInstance.)
|
| -
|
| - // We look for the site instance in both the local site_instance_map_ and also
|
| - // the static context_site_instance_map_ - this is because the logic in
|
| - // ShouldUseProcessPerSite() can produce different results over the lifetime
|
| - // of Chrome (e.g. installation of apps with web extents can change our
|
| - // process-per-site policy for a given domain), so we don't know which map
|
| - // the site was put into when it was originally registered.
|
| - if (!RemoveSiteInstanceFromMap(&site_instance_map_, site, site_instance)) {
|
| - // Wasn't in our local map, so look in the static per-browser context map.
|
| - RemoveSiteInstanceFromMap(
|
| - &context_site_instance_map_.Get()[browser_context_],
|
| - site,
|
| - site_instance);
|
| - }
|
| -}
|
| -
|
| -bool BrowsingInstance::RemoveSiteInstanceFromMap(
|
| - SiteInstanceMap* map,
|
| - const std::string& site,
|
| - SiteInstance* site_instance) {
|
| - SiteInstanceMap::iterator i = map->find(site);
|
| - if (i != map->end() && i->second == site_instance) {
|
| + SiteInstanceMap::iterator i = site_instance_map_.find(site);
|
| + if (i != site_instance_map_.end() && i->second == site_instance) {
|
| // Matches, so erase it.
|
| - map->erase(i);
|
| - return true;
|
| + site_instance_map_.erase(i);
|
| }
|
| - return false;
|
| }
|
|
|
| BrowsingInstance::~BrowsingInstance() {
|
|
|