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

Unified Diff: extensions/browser/event_router.cc

Issue 155183002: Add ApiActivityMonitor to decouple ActivityLog from low-level extensions code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase3 (activity_log) Created 6 years, 10 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
« no previous file with comments | « extensions/browser/event_router.h ('k') | extensions/browser/extensions_browser_client.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « extensions/browser/event_router.h ('k') | extensions/browser/extensions_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698