Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1262)

Unified Diff: chrome/browser/extensions/extension_process_manager.cc

Issue 8361021: Track all extension processes in ExtensionInfoMap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: maybe fix dcheck Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_process_manager.cc
diff --git a/chrome/browser/extensions/extension_process_manager.cc b/chrome/browser/extensions/extension_process_manager.cc
index c2a61d8451f0dd49bb117887d043417f70e435ab..f789415d3882446a4a64d2a9de0fbd78f76539c9 100644
--- a/chrome/browser/extensions/extension_process_manager.cc
+++ b/chrome/browser/extensions/extension_process_manager.cc
@@ -280,20 +280,16 @@ void ExtensionProcessManager::RegisterExtensionSiteInstance(
int site_instance_id = site_instance->id();
int render_process_id = site_instance->GetProcess()->id();
- process_ids_[render_process_id].insert(site_instance_id);
-
- // Register process hosting extensions that have access to extension bindings
- // with the ExtensionInfoMap on the IO thread.
- Profile* profile =
- Profile::FromBrowserContext(browsing_instance_->browser_context());
- ExtensionService* service = profile->GetExtensionService();
- if (service->ExtensionBindingsAllowed(extension->url())) {
- Profile* profile = Profile::FromBrowserContext(
- site_instance->GetProcess()->browser_context());
+ if (process_ids_[render_process_id].insert(site_instance_id).second) {
+ // Register process hosting extensions that have access to extension
+ // bindings with the ExtensionInfoMap on the IO thread.
+ Profile* profile =
+ Profile::FromBrowserContext(browsing_instance_->browser_context());
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&ExtensionInfoMap::BindingsEnabledForProcess,
+ base::Bind(&ExtensionInfoMap::RegisterExtensionProcess,
profile->GetExtensionInfoMap(),
+ extension->id(),
render_process_id));
}
@@ -310,27 +306,44 @@ void ExtensionProcessManager::RegisterExtensionSiteInstance(
void ExtensionProcessManager::UnregisterExtensionSiteInstance(
SiteInstance* site_instance) {
int site_instance_id = site_instance->id();
- SiteInstanceIDMap::iterator it = extension_ids_.find(site_instance_id);
- if (it != extension_ids_.end()) {
- extension_ids_.erase(it++);
+ std::string extension_id = extension_ids_[site_instance_id];
+ if (!extension_id.empty())
+ extension_ids_.erase(site_instance_id);
+
+ int render_process_id = GetProcessIDBySiteInstanceID(site_instance_id);
+ if (render_process_id == -1)
+ return;
+
+ ProcessIDMap::iterator iter = process_ids_.find(render_process_id);
Matt Perry 2011/10/21 18:28:51 This code might be cleaner if the helper was inste
+ if (iter != process_ids_.end()) {
+ SiteInstanceIDSet& site_instance_id_set = iter->second;
+ site_instance_id_set.erase(site_instance_id);
+ if (site_instance_id_set.empty())
+ process_ids_.erase(iter);
}
- if (site_instance->HasProcess()) {
- int render_process_id = site_instance->GetProcess()->id();
- ProcessIDMap::iterator host = process_ids_.find(render_process_id);
- if (host != process_ids_.end()) {
- host->second.erase(site_instance_id);
- if (host->second.empty()) {
- process_ids_.erase(host);
- Profile* profile = Profile::FromBrowserContext(
- site_instance->GetProcess()->browser_context());
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(&ExtensionInfoMap::BindingsDisabledForProcess,
- profile->GetExtensionInfoMap(),
- render_process_id));
- }
+
+ Profile* profile = Profile::FromBrowserContext(
+ site_instance->GetProcess()->browser_context());
Matt Perry 2011/10/21 18:28:51 Is GetProcess guaranteed to be non-NULL? The old c
Aaron Boodman 2011/10/22 04:02:42 Done.
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE,
+ base::Bind(&ExtensionInfoMap::UnregisterExtensionProcess,
+ profile->GetExtensionInfoMap(),
+ extension_id,
+ render_process_id));
+}
+
+int ExtensionProcessManager::GetProcessIDBySiteInstanceID(
+ int site_instance_id) const {
+ for (ProcessIDMap::const_iterator i = process_ids_.begin();
+ i != process_ids_.end(); ++i) {
+ const SiteInstanceIDSet& site_instance_id_set = i->second;
+ for (SiteInstanceIDSet::const_iterator j = site_instance_id_set.begin();
+ j != site_instance_id_set.end(); ++j) {
+ if (*j == site_instance_id)
+ return i->first;
}
}
+ return -1;
}
bool ExtensionProcessManager::IsExtensionProcess(int render_process_id) {

Powered by Google App Engine
This is Rietveld 408576698