Chromium Code Reviews| Index: extensions/browser/event_router.cc |
| diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc |
| index 41bccc57ec1b03164965969ba0e680a24933377c..81c98d099917b2e37d7494a1a292be1ce8fa5ad0 100644 |
| --- a/extensions/browser/event_router.cc |
| +++ b/extensions/browser/event_router.cc |
| @@ -77,10 +77,25 @@ void NotifyApiEventDispatched(void* browser_context_id, |
| monitor->OnApiEventDispatched(extension_id, event_name, args.Pass()); |
| } |
| +// A global identifier used to distinguish extension events and is |
| +// incremented every time an event is dispatched. |
| +int g_extension_message_id = 0; |
| + |
| } // namespace |
| const char EventRouter::kRegisteredEvents[] = "events"; |
| +EventRouter::DispatchDetails::DispatchDetails(const std::string& extension_id, |
| + const std::string& event_name, |
| + int message_id) |
| + : extension_id_(extension_id), |
| + event_name_(event_name), |
| + message_id_(message_id) { |
| +} |
| + |
| +EventRouter::DispatchDetails::~DispatchDetails() { |
| +} |
| + |
| struct EventRouter::ListenerProcess { |
| content::RenderProcessHost* process; |
| std::string extension_id; |
| @@ -111,10 +126,12 @@ void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, |
| event_name, |
| make_scoped_ptr(event_args->DeepCopy())); |
| + int message_id = g_extension_message_id++; |
| ListValue args; |
| args.Set(0, new base::StringValue(event_name)); |
| args.Set(1, event_args); |
| args.Set(2, info.AsValue().release()); |
| + args.Set(3, new base::FundamentalValue(message_id)); |
| ipc_sender->Send(new ExtensionMsg_MessageInvoke( |
| MSG_ROUTING_CONTROL, |
| extension_id, |
| @@ -123,6 +140,13 @@ void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, |
| args, |
| user_gesture == USER_GESTURE_ENABLED)); |
| + DispatchDetails details(extension_id, event_name, message_id); |
| + content::NotificationService::current()->Notify( |
|
Ken Rockot(use gerrit already)
2015/01/08 01:24:02
This function runs on the IO thread, but Notificat
Ken Rockot(use gerrit already)
2015/01/08 01:25:58
I realize my pronoun may be ambiguous here. What I
|
| + NOTIFICATION_EXTENSION_MESSAGE_DISPATCHED, |
| + content::Source<content::BrowserContext>( |
| + static_cast<content::BrowserContext*>(browser_context_id)), |
| + content::Details<EventRouter::DispatchDetails>(&details)); |
| + |
| // DispatchExtensionMessage does _not_ take ownership of event_args, so we |
| // must ensure that the destruction of args does not attempt to free it. |
| scoped_ptr<base::Value> removed_event_args; |