diff options
author | Kristian Monsen <kristianm@google.com> | 2011-06-09 11:47:42 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-06-29 14:33:03 +0100 |
commit | dc0f95d653279beabeb9817299e2902918ba123e (patch) | |
tree | 32eb121cd532053a5b9cb0c390331349af8d6baa /chrome/browser/browsing_instance.h | |
parent | ba160cd4054d13d0cb0b1b46e61c3bed67095811 (diff) | |
download | external_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.h | 135 |
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_ |