Index: chrome/browser/extensions/process_map.h |
diff --git a/chrome/browser/extensions/process_map.h b/chrome/browser/extensions/process_map.h |
index 84c8f86677195d56d2ce718eb67d250dc1ab0fba..017ae729ec1492ff6df6c573cd0a64ee3ed8f536 100644 |
--- a/chrome/browser/extensions/process_map.h |
+++ b/chrome/browser/extensions/process_map.h |
@@ -16,6 +16,7 @@ namespace extensions { |
// Contains information about which extensions are assigned to which processes. |
// |
// The relationship between extensions and processes is complex: |
+// |
// - Extensions can be either "split" mode or "spanning" mode. |
// - In spanning mode, extensions share a single process between all incognito |
// and normal windows. This was the original mode for extensions. |
@@ -23,6 +24,8 @@ namespace extensions { |
// - There are also hosted apps, which are a kind of extensions, and those |
// usually have a process model similar to normal web sites: multiple |
// processes per-profile. |
+// - A single hosted app can have more than one SiteInstance in the same process |
+// if we're over the process limit and force them to share a process. |
// |
// In general, we seem to play with the process model of extensions a lot, so |
// it is safest to assume it is many-to-many in most places in the codebase. |
@@ -43,12 +46,14 @@ namespace extensions { |
// it is an "extension process" (e.g., for UI purposes). It may contain only |
// hosted apps. See crbug.com/102533. |
// |
-// 2. An extension can show be in multiple processes. That is why there is no |
+// 2. An extension can show up in multiple processes. That is why there is no |
// GetExtensionProcess() method here. There are two cases: a) The extension |
// is actually a hosted app, in which case this is normal, or b) there is an |
// incognito window open and the extension is "split mode". It is *not safe* |
// to assume that there is one process per extension. If you only care about |
-// extensions (not hosted apps), and you are on the UI thread, then use |
+// extensions (not hosted apps), and you are on the UI thread, and you don't |
+// care about incognito version of this extension (or vice versa if you're in |
+// an incognito profile) then use |
// ExtensionProcessManager::GetSiteInstanceForURL()->[Has|Get]Process(). |
// |
// 3. The process ids contained in this class are *not limited* to the Profile |
@@ -64,30 +69,23 @@ class ProcessMap { |
size_t size() const { return items_.size(); } |
- bool Insert(const std::string& extension_id, int process_id); |
- bool Remove(const std::string& extension_id, int process_id); |
- int Remove(int process_id); |
+ bool Insert(const std::string& extension_id, int process_id, |
+ int site_instance_id); |
+ |
+ bool Remove(const std::string& extension_id, int process_id, |
+ int site_instance_id); |
+ int RemoveAllFromProcess(int process_id); |
+ |
bool Contains(const std::string& extension_id, int process_id) const; |
bool Contains(int process_id) const; |
std::set<std::string> GetExtensionsInProcess(int process_id) const; |
private: |
- struct Item { |
- Item(); |
- Item(const Item& other); |
- Item(const std::string& extension_id, int process_id); |
- ~Item(); |
- |
- // Required for set membership. |
- bool operator<(const Item& other) const; |
- |
- std::string extension_id; |
- int process_id; |
- }; |
+ struct Item; |
typedef std::set<Item> ItemSet; |
- std::set<Item> items_; |
+ ItemSet items_; |
DISALLOW_COPY_AND_ASSIGN(ProcessMap); |
}; |