Index: extensions/browser/event_router.cc |
diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc |
index 29661be6bd2104fc804d1fdccfb77b1ee5c2c415..d1450590a5b32f702833e7d4f92759fcd129a25d 100644 |
--- a/extensions/browser/event_router.cc |
+++ b/extensions/browser/event_router.cc |
@@ -17,6 +17,7 @@ |
#include "chrome/common/extensions/extension_messages.h" |
#include "content/public/browser/notification_service.h" |
#include "content/public/browser/render_process_host.h" |
+#include "extensions/browser/api_activity_monitor.h" |
#include "extensions/browser/extension_prefs.h" |
#include "extensions/browser/extension_registry.h" |
#include "extensions/browser/extension_system.h" |
@@ -45,6 +46,35 @@ void DoNothing(ExtensionHost* host) {} |
// registered from its lazy background page. |
const char kFilteredEvents[] = "filtered_events"; |
+// Sends a notification about an event to the API activity monitor on the |
+// UI thread. Can be called from any thread. |
+void NotifyApiEventDispatched(void* browser_context_id, |
+ const std::string& extension_id, |
+ const std::string& event_name, |
+ scoped_ptr<ListValue> args) { |
+ // The ApiActivityMonitor can only be accessed from the UI thread. |
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, |
+ FROM_HERE, |
+ base::Bind(&NotifyApiEventDispatched, |
+ browser_context_id, |
+ extension_id, |
+ event_name, |
+ base::Passed(&args))); |
+ return; |
+ } |
+ |
+ // Notify the ApiActivityMonitor about the event dispatch. |
+ BrowserContext* context = static_cast<BrowserContext*>(browser_context_id); |
+ if (!ExtensionsBrowserClient::Get()->IsValidContext(context)) |
+ return; |
+ ApiActivityMonitor* monitor = |
+ ExtensionsBrowserClient::Get()->GetApiActivityMonitor(context); |
+ if (monitor) |
+ monitor->OnApiEventDispatched(extension_id, event_name, args.Pass()); |
+} |
+ |
} // namespace |
const char EventRouter::kRegisteredEvents[] = "events"; |
@@ -67,32 +97,6 @@ struct EventRouter::ListenerProcess { |
}; |
// static |
-void EventRouter::NotifyExtensionDispatchObserverOnUIThread( |
- void* browser_context_id, |
- scoped_ptr<EventDispatchInfo> details) { |
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
- BrowserThread::PostTask( |
- BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(&NotifyExtensionDispatchObserverOnUIThread, |
- browser_context_id, base::Passed(&details))); |
- } else { |
- BrowserContext* context = |
- reinterpret_cast<BrowserContext*>(browser_context_id); |
- if (!ExtensionsBrowserClient::Get()->IsValidContext(context)) |
- return; |
- ExtensionSystem* extension_system = ExtensionSystem::Get(context); |
- EventRouter* event_router = extension_system->event_router(); |
- if (!event_router) |
- return; |
- if (event_router->event_dispatch_observer_) { |
- event_router->event_dispatch_observer_->OnWillDispatchEvent( |
- details.Pass()); |
- } |
- } |
-} |
- |
-// static |
void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, |
void* browser_context_id, |
const std::string& extension_id, |
@@ -100,12 +104,10 @@ void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, |
ListValue* event_args, |
UserGestureState user_gesture, |
const EventFilteringInfo& info) { |
- NotifyExtensionDispatchObserverOnUIThread( |
- browser_context_id, |
- make_scoped_ptr(new EventDispatchInfo( |
- extension_id, |
- event_name, |
- make_scoped_ptr(event_args->DeepCopy())))); |
+ NotifyApiEventDispatched(browser_context_id, |
+ extension_id, |
+ event_name, |
+ make_scoped_ptr(event_args->DeepCopy())); |
ListValue args; |
args.Set(0, new base::StringValue(event_name)); |
@@ -160,8 +162,7 @@ EventRouter::EventRouter(BrowserContext* browser_context, |
ExtensionPrefs* extension_prefs) |
: browser_context_(browser_context), |
extension_prefs_(extension_prefs), |
- listeners_(this), |
- event_dispatch_observer_(NULL) { |
+ listeners_(this) { |
registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
content::NotificationService::AllSources()); |
registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
@@ -209,11 +210,6 @@ void EventRouter::UnregisterObserver(Observer* observer) { |
observers_.erase(iters_to_remove[i]); |
} |
-void EventRouter::SetEventDispatchObserver(EventDispatchObserver* observer) { |
- CHECK(!event_dispatch_observer_); |
- event_dispatch_observer_ = observer; |
-} |
- |
void EventRouter::OnListenerAdded(const EventListener* listener) { |
const EventListenerInfo details( |
listener->event_name, |
@@ -773,13 +769,4 @@ EventListenerInfo::EventListenerInfo(const std::string& event_name, |
extension_id(extension_id), |
browser_context(browser_context) {} |
-EventDispatchInfo::EventDispatchInfo(const std::string& extension_id, |
- const std::string& event_name, |
- scoped_ptr<ListValue> event_args) |
- : extension_id(extension_id), |
- event_name(event_name), |
- event_args(event_args.Pass()) {} |
- |
-EventDispatchInfo::~EventDispatchInfo() {} |
- |
} // namespace extensions |