summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browsing_instance.h
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2011-06-09 11:47:42 +0100
committerKristian Monsen <kristianm@google.com>2011-06-29 14:33:03 +0100
commitdc0f95d653279beabeb9817299e2902918ba123e (patch)
tree32eb121cd532053a5b9cb0c390331349af8d6baa /chrome/browser/browsing_instance.h
parentba160cd4054d13d0cb0b1b46e61c3bed67095811 (diff)
downloadexternal_chromium-dc0f95d653279beabeb9817299e2902918ba123e.zip
external_chromium-dc0f95d653279beabeb9817299e2902918ba123e.tar.gz
external_chromium-dc0f95d653279beabeb9817299e2902918ba123e.tar.bz2
Merge Chromium at r11.0.696.0: Initial merge by git
Change-Id: I273dde2843af0839dfc08b419bb443fbd449532d
Diffstat (limited to 'chrome/browser/browsing_instance.h')
-rw-r--r--chrome/browser/browsing_instance.h135
1 files changed, 0 insertions, 135 deletions
diff --git a/chrome/browser/browsing_instance.h b/chrome/browser/browsing_instance.h
deleted file mode 100644
index 3082b61..0000000
--- a/chrome/browser/browsing_instance.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROME_BROWSER_BROWSING_INSTANCE_H_
-#define CHROME_BROWSER_BROWSING_INSTANCE_H_
-#pragma once
-
-#include "base/hash_tables.h"
-#include "base/ref_counted.h"
-#include "chrome/browser/profiles/profile.h"
-
-class GURL;
-class SiteInstance;
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// BrowsingInstance class
-//
-// A browsing instance corresponds to the notion of a "unit of related browsing
-// contexts" in the HTML 5 spec. Intuitively, it represents a collection of
-// tabs and frames that can have script connections to each other. In that
-// sense, it reflects the user interface, and not the contents of the tabs and
-// frames.
-//
-// We further subdivide a BrowsingInstance into SiteInstances, which represent
-// the documents within each BrowsingInstance that are from the same site and
-// thus can have script access to each other. Different SiteInstances can
-// safely run in different processes, because their documents cannot access
-// each other's contents (due to the same origin policy).
-//
-// It is important to only have one SiteInstance per site within a given
-// BrowsingInstance. This is because any two documents from the same site
-// might be able to script each other if they are in the same BrowsingInstance.
-// Thus, they must be rendered in the same process.
-//
-// If the process-per-site model is in use, then we ensure that there is only
-// one SiteInstance per site for the entire profile, not just for each
-// BrowsingInstance. This reduces the number of renderer processes we create.
-// (This is currently only true if --process-per-site is specified at the
-// command line.)
-//
-// A BrowsingInstance is live as long as any SiteInstance has a reference to
-// it. A SiteInstance is live as long as any NavigationEntry or RenderViewHost
-// have references to it. Because both classes are RefCounted, they do not
-// need to be manually deleted.
-//
-// Currently, the BrowsingInstance class is not visible outside of the
-// SiteInstance class. To get a new SiteInstance that is part of the same
-// BrowsingInstance, use SiteInstance::GetRelatedSiteInstance. Because of
-// this, BrowsingInstances and SiteInstances are tested together in
-// site_instance_unittest.cc.
-//
-///////////////////////////////////////////////////////////////////////////////
-class BrowsingInstance : public base::RefCounted<BrowsingInstance> {
- public:
- // Create a new BrowsingInstance.
- explicit BrowsingInstance(Profile* profile);
-
- // Returns whether the process-per-site model is in use (globally or just for
- // the given url), in which case we should ensure there is only one
- // SiteInstance per site for the entire profile, not just for this
- // BrowsingInstance.
- virtual bool ShouldUseProcessPerSite(const GURL& url);
-
- // Get the profile to which this BrowsingInstance belongs.
- Profile* profile() { return profile_; }
-
- // Returns whether this BrowsingInstance has registered a SiteInstance for
- // the site of the given URL.
- bool HasSiteInstance(const GURL& url);
-
- // Get the SiteInstance responsible for rendering the given URL. Should
- // create a new one if necessary, but should not create more than one
- // SiteInstance per site.
- SiteInstance* GetSiteInstanceForURL(const GURL& url);
-
- // Adds the given SiteInstance to our map, to ensure that we do not create
- // another SiteInstance for the same site.
- void RegisterSiteInstance(SiteInstance* site_instance);
-
- // Removes the given SiteInstance from our map, after all references to it
- // have been deleted. This means it is safe to create a new SiteInstance
- // if the user later visits a page from this site, within this
- // BrowsingInstance.
- void UnregisterSiteInstance(SiteInstance* site_instance);
-
- protected:
- friend class base::RefCounted<BrowsingInstance>;
-
- // Virtual to allow tests to extend it.
- virtual ~BrowsingInstance();
-
- private:
- // Map of site to SiteInstance, to ensure we only have one SiteInstance per
- // site. The site string should be the possibly_invalid_spec() of a GURL
- // obtained with SiteInstance::GetSiteForURL.
- typedef base::hash_map<std::string, SiteInstance*> SiteInstanceMap;
-
- // Map of Profile runtime Id to SiteInstanceMap, for use in the
- // process-per-site model.
- typedef base::hash_map<ProfileId, SiteInstanceMap> ProfileSiteInstanceMap;
-
- // Returns a pointer to the relevant SiteInstanceMap for this object. If the
- // process-per-site model is in use, or if process-per-site-instance is in
- // use and |url| matches a site for which we always use one process (e.g.,
- // the new tab page), then this returns the SiteInstanceMap for the entire
- // profile. If not, this returns the BrowsingInstance's own private
- // SiteInstanceMap.
- SiteInstanceMap* GetSiteInstanceMap(Profile* profile, const GURL& url);
-
- // Utility routine which removes the passed SiteInstance from the passed
- // SiteInstanceMap.
- bool RemoveSiteInstanceFromMap(SiteInstanceMap* map, const std::string& site,
- SiteInstance* site_instance);
-
- // Common profile to which all SiteInstances in this BrowsingInstance
- // must belong.
- Profile* const profile_;
-
- // Map of site to SiteInstance, to ensure we only have one SiteInstance per
- // site. The site string should be the possibly_invalid_spec() of a GURL
- // obtained with SiteInstance::GetSiteForURL. Note that this map may not
- // contain every active SiteInstance, because a race exists where two
- // SiteInstances can be assigned to the same site. This is ok in rare cases.
- // This field is only used if we are not using process-per-site.
- SiteInstanceMap site_instance_map_;
-
- // Global map of Profile to SiteInstanceMap, for process-per-site.
- static ProfileSiteInstanceMap profile_site_instance_map_;
-
- DISALLOW_COPY_AND_ASSIGN(BrowsingInstance);
-};
-
-#endif // CHROME_BROWSER_BROWSING_INSTANCE_H_