Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Unified Diff: content/browser/browsing_instance.cc

Issue 10575014: Move process-per-site logic from BrowsingInstance to RenderProcessHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix review comment. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/browsing_instance.h ('k') | content/browser/renderer_host/render_process_host_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « content/browser/browsing_instance.h ('k') | content/browser/renderer_host/render_process_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698