| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_BROWSING_INSTANCE_H_ | 5 #ifndef CHROME_BROWSER_BROWSING_INSTANCE_H_ |
| 6 #define CHROME_BROWSER_BROWSING_INSTANCE_H_ | 6 #define CHROME_BROWSER_BROWSING_INSTANCE_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include "base/hash_tables.h" | 9 #include "base/hash_tables.h" |
| 10 #include "base/logging.h" | |
| 11 #include "base/ref_counted.h" | 10 #include "base/ref_counted.h" |
| 12 #include "chrome/browser/profile.h" | 11 #include "chrome/browser/profile.h" |
| 13 | 12 |
| 14 class GURL; | 13 class GURL; |
| 15 class SiteInstance; | 14 class SiteInstance; |
| 16 | 15 |
| 17 /////////////////////////////////////////////////////////////////////////////// | 16 /////////////////////////////////////////////////////////////////////////////// |
| 18 // | 17 // |
| 19 // BrowsingInstance class | 18 // BrowsingInstance class |
| 20 // | 19 // |
| (...skipping 28 matching lines...) Expand all Loading... |
| 49 // Currently, the BrowsingInstance class is not visible outside of the | 48 // Currently, the BrowsingInstance class is not visible outside of the |
| 50 // SiteInstance class. To get a new SiteInstance that is part of the same | 49 // SiteInstance class. To get a new SiteInstance that is part of the same |
| 51 // BrowsingInstance, use SiteInstance::GetRelatedSiteInstance. Because of | 50 // BrowsingInstance, use SiteInstance::GetRelatedSiteInstance. Because of |
| 52 // this, BrowsingInstances and SiteInstances are tested together in | 51 // this, BrowsingInstances and SiteInstances are tested together in |
| 53 // site_instance_unittest.cc. | 52 // site_instance_unittest.cc. |
| 54 // | 53 // |
| 55 /////////////////////////////////////////////////////////////////////////////// | 54 /////////////////////////////////////////////////////////////////////////////// |
| 56 class BrowsingInstance : public base::RefCounted<BrowsingInstance> { | 55 class BrowsingInstance : public base::RefCounted<BrowsingInstance> { |
| 57 public: | 56 public: |
| 58 // Create a new BrowsingInstance. | 57 // Create a new BrowsingInstance. |
| 59 explicit BrowsingInstance(Profile* profile) | 58 explicit BrowsingInstance(Profile* profile); |
| 60 : profile_(profile) { | |
| 61 } | |
| 62 | 59 |
| 63 // Returns whether the process-per-site model is in use (globally or just for | 60 // Returns whether the process-per-site model is in use (globally or just for |
| 64 // the given url), in which case we should ensure there is only one | 61 // the given url), in which case we should ensure there is only one |
| 65 // SiteInstance per site for the entire profile, not just for this | 62 // SiteInstance per site for the entire profile, not just for this |
| 66 // BrowsingInstance. | 63 // BrowsingInstance. |
| 67 virtual bool ShouldUseProcessPerSite(const GURL& url); | 64 virtual bool ShouldUseProcessPerSite(const GURL& url); |
| 68 | 65 |
| 69 // Get the profile to which this BrowsingInstance belongs. | 66 // Get the profile to which this BrowsingInstance belongs. |
| 70 Profile* profile() { return profile_; } | 67 Profile* profile() { return profile_; } |
| 71 | 68 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 85 // Removes the given SiteInstance from our map, after all references to it | 82 // Removes the given SiteInstance from our map, after all references to it |
| 86 // have been deleted. This means it is safe to create a new SiteInstance | 83 // have been deleted. This means it is safe to create a new SiteInstance |
| 87 // if the user later visits a page from this site, within this | 84 // if the user later visits a page from this site, within this |
| 88 // BrowsingInstance. | 85 // BrowsingInstance. |
| 89 void UnregisterSiteInstance(SiteInstance* site_instance); | 86 void UnregisterSiteInstance(SiteInstance* site_instance); |
| 90 | 87 |
| 91 protected: | 88 protected: |
| 92 friend class base::RefCounted<BrowsingInstance>; | 89 friend class base::RefCounted<BrowsingInstance>; |
| 93 | 90 |
| 94 // Virtual to allow tests to extend it. | 91 // Virtual to allow tests to extend it. |
| 95 virtual ~BrowsingInstance() { | 92 virtual ~BrowsingInstance(); |
| 96 // We should only be deleted when all of the SiteInstances that refer to | |
| 97 // us are gone. | |
| 98 DCHECK(site_instance_map_.empty()); | |
| 99 } | |
| 100 | 93 |
| 101 private: | 94 private: |
| 102 // Map of site to SiteInstance, to ensure we only have one SiteInstance per | 95 // Map of site to SiteInstance, to ensure we only have one SiteInstance per |
| 103 // site. The site string should be the possibly_invalid_spec() of a GURL | 96 // site. The site string should be the possibly_invalid_spec() of a GURL |
| 104 // obtained with SiteInstance::GetSiteForURL. | 97 // obtained with SiteInstance::GetSiteForURL. |
| 105 typedef base::hash_map<std::string, SiteInstance*> SiteInstanceMap; | 98 typedef base::hash_map<std::string, SiteInstance*> SiteInstanceMap; |
| 106 | 99 |
| 107 // Map of Profile runtime Id to SiteInstanceMap, for use in the | 100 // Map of Profile runtime Id to SiteInstanceMap, for use in the |
| 108 // process-per-site model. | 101 // process-per-site model. |
| 109 typedef base::hash_map<ProfileId, SiteInstanceMap> ProfileSiteInstanceMap; | 102 typedef base::hash_map<ProfileId, SiteInstanceMap> ProfileSiteInstanceMap; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 128 // This field is only used if we are not using process-per-site. | 121 // This field is only used if we are not using process-per-site. |
| 129 SiteInstanceMap site_instance_map_; | 122 SiteInstanceMap site_instance_map_; |
| 130 | 123 |
| 131 // Global map of Profile to SiteInstanceMap, for process-per-site. | 124 // Global map of Profile to SiteInstanceMap, for process-per-site. |
| 132 static ProfileSiteInstanceMap profile_site_instance_map_; | 125 static ProfileSiteInstanceMap profile_site_instance_map_; |
| 133 | 126 |
| 134 DISALLOW_COPY_AND_ASSIGN(BrowsingInstance); | 127 DISALLOW_COPY_AND_ASSIGN(BrowsingInstance); |
| 135 }; | 128 }; |
| 136 | 129 |
| 137 #endif // CHROME_BROWSER_BROWSING_INSTANCE_H_ | 130 #endif // CHROME_BROWSER_BROWSING_INSTANCE_H_ |
| OLD | NEW |