| Index: chrome/browser/browsing_instance.h
|
| ===================================================================
|
| --- chrome/browser/browsing_instance.h (revision 75626)
|
| +++ chrome/browser/browsing_instance.h (working copy)
|
| @@ -6,130 +6,7 @@
|
| #define CHROME_BROWSER_BROWSING_INSTANCE_H_
|
| #pragma once
|
|
|
| -#include "base/hash_tables.h"
|
| -#include "base/ref_counted.h"
|
| -#include "chrome/browser/profiles/profile.h"
|
| +// TODO(jam): remove this file when all files have been converted.
|
| +#include "content/browser/browsing_instance.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_
|
|
|