diff options
Diffstat (limited to 'chrome/browser/extensions/extension_message_service.cc')
-rw-r--r-- | chrome/browser/extensions/extension_message_service.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_message_service.cc b/chrome/browser/extensions/extension_message_service.cc index 7e675f5..a25b384 100644 --- a/chrome/browser/extensions/extension_message_service.cc +++ b/chrome/browser/extensions/extension_message_service.cc @@ -10,6 +10,8 @@ #include "base/values.h" #include "chrome/browser/child_process_security_policy.h" #include "chrome/browser/extensions/extension_process_manager.h" +#include "chrome/browser/extensions/extension_processes_api.h" +#include "chrome/browser/extensions/extension_processes_api_constants.h" #include "chrome/browser/extensions/extension_tabs_module.h" #include "chrome/browser/profile.h" #include "chrome/browser/renderer_host/render_process_host.h" @@ -168,10 +170,22 @@ void ExtensionMessageService::AddEventListener(const std::string& event_name, extension_devtools_manager_->AddEventListener(event_name, render_process_id); } + + // We lazily tell the TaskManager to start updating when listeners to the + // processes.onUpdated event arrive. + if (event_name.compare(extension_processes_api_constants::kOnUpdated) == 0) { + ExtensionProcessesEventRouter::GetInstance()->ListenerAdded(); + } } void ExtensionMessageService::RemoveEventListener(const std::string& event_name, int render_process_id) { + // If a processes.onUpdated event listener is removed (or a process with one + // exits), then we let the TaskManager know that it has one fewer listener. + if (event_name.compare(extension_processes_api_constants::kOnUpdated) == 0) { + ExtensionProcessesEventRouter::GetInstance()->ListenerRemoved(); + } + DCHECK_EQ(listeners_[event_name].count(render_process_id), 1u) << " PID=" << render_process_id << " event=" << event_name; listeners_[event_name].erase(render_process_id); |