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

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

Issue 155514: Implement extension specific events (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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
===================================================================
--- chrome/browser/extensions/extension_process_manager.cc (revision 20629)
+++ chrome/browser/extensions/extension_process_manager.cc (working copy)
@@ -9,9 +9,11 @@
#include "chrome/browser/extensions/extensions_service.h"
#include "chrome/browser/profile.h"
#include "chrome/browser/renderer_host/site_instance.h"
+#include "chrome/browser/renderer_host/render_view_host.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/notification_service.h"
#include "chrome/common/notification_type.h"
+#include "chrome/common/render_messages.h"
static void CreateBackgroundHosts(
ExtensionProcessManager* manager, const ExtensionList* extensions) {
@@ -33,6 +35,10 @@
NotificationService::AllSources());
registrar_.Add(this, NotificationType::EXTENSION_HOST_DESTROYED,
Source<Profile>(profile));
+ registrar_.Add(this, NotificationType::RENDERER_PROCESS_TERMINATED,
+ NotificationService::AllSources());
+ registrar_.Add(this, NotificationType::RENDERER_PROCESS_CLOSED,
+ NotificationService::AllSources());
}
ExtensionProcessManager::~ExtensionProcessManager() {
@@ -78,6 +84,39 @@
return host;
}
+void ExtensionProcessManager::RegisterExtensionProcess(
+ std::string extension_id, int process_id) {
+ ProcessIDMap::const_iterator it = process_ids_.find(extension_id);
+ if (it != process_ids_.end() && (*it).second == process_id)
+ return;
+
+ process_ids_[extension_id] = process_id;
+
+ ExtensionsService* extension_service =
+ browsing_instance_->profile()->GetExtensionsService();
+
+ std::vector<std::string> page_action_ids;
+ Extension* extension = extension_service->GetExtensionById(extension_id);
+ for (PageActionMap::const_iterator i = extension->page_actions().begin();
+ i != extension->page_actions().end(); ++i) {
+ page_action_ids.push_back(i->first);
+ }
+
+ RenderProcessHost* rph = RenderProcessHost::FromID(process_id);
+ rph->Send(new ViewMsg_Extension_UpdatePageActions(extension_id,
+ page_action_ids));
+}
+
+void ExtensionProcessManager::UnregisterExtensionProcess(int process_id) {
+ ProcessIDMap::iterator it = process_ids_.begin();
+ while (it != process_ids_.end()) {
+ if (it->second == process_id)
+ it = process_ids_.erase(it);
+ else
+ ++it;
+ }
+}
+
SiteInstance* ExtensionProcessManager::GetSiteInstanceForURL(const GURL& url) {
return browsing_instance_->GetSiteInstanceForURL(url);
}
@@ -122,6 +161,13 @@
break;
}
+ case NotificationType::RENDERER_PROCESS_TERMINATED:
+ case NotificationType::RENDERER_PROCESS_CLOSED: {
+ RenderProcessHost* host = Source<RenderProcessHost>(source).ptr();
+ UnregisterExtensionProcess(host->pid());
+ break;
+ }
+
default:
NOTREACHED();
}

Powered by Google App Engine
This is Rietveld 408576698