Index: extensions/browser/event_router.cc |
diff --git a/extensions/browser/event_router.cc b/extensions/browser/event_router.cc |
index d9b801e63df21766e519a7b0863865855cdc6ffa..e61f80b4eac1a8a55fd26d0d933962af0a13e757 100644 |
--- a/extensions/browser/event_router.cc |
+++ b/extensions/browser/event_router.cc |
@@ -188,14 +188,43 @@ EventRouter::~EventRouter() {} |
void EventRouter::AddEventListener(const std::string& event_name, |
content::RenderProcessHost* process, |
const std::string& extension_id) { |
- listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( |
- event_name, extension_id, process, scoped_ptr<DictionaryValue>()))); |
+ listeners_.AddListener(scoped_ptr<EventListener>( |
+ new EventListener(event_name, |
+ extension_id, |
+ GURL(), // listener_url |
+ process, |
+ scoped_ptr<DictionaryValue>()))); |
} |
void EventRouter::RemoveEventListener(const std::string& event_name, |
content::RenderProcessHost* process, |
const std::string& extension_id) { |
- EventListener listener(event_name, extension_id, process, |
+ EventListener listener(event_name, |
+ extension_id, |
+ GURL(), // listener_url |
+ process, |
+ scoped_ptr<DictionaryValue>()); |
+ listeners_.RemoveListener(&listener); |
+} |
+ |
+void EventRouter::AddEventListenerForURL(const std::string& event_name, |
+ content::RenderProcessHost* process, |
+ const GURL& listener_url) { |
+ listeners_.AddListener(scoped_ptr<EventListener>( |
+ new EventListener(event_name, |
+ "", // extension_id |
+ listener_url, |
+ process, |
+ scoped_ptr<DictionaryValue>()))); |
+} |
+ |
+void EventRouter::RemoveEventListenerForURL(const std::string& event_name, |
+ content::RenderProcessHost* process, |
+ const GURL& listener_url) { |
+ EventListener listener(event_name, |
+ "", // extension_id |
+ listener_url, |
+ process, |
scoped_ptr<DictionaryValue>()); |
listeners_.RemoveListener(&listener); |
} |
@@ -221,6 +250,7 @@ void EventRouter::UnregisterObserver(Observer* observer) { |
void EventRouter::OnListenerAdded(const EventListener* listener) { |
const EventListenerInfo details(listener->event_name(), |
listener->extension_id(), |
+ listener->listener_url(), |
listener->GetBrowserContext()); |
std::string base_event_name = GetBaseEventName(listener->event_name()); |
ObserverMap::iterator observer = observers_.find(base_event_name); |
@@ -231,6 +261,7 @@ void EventRouter::OnListenerAdded(const EventListener* listener) { |
void EventRouter::OnListenerRemoved(const EventListener* listener) { |
const EventListenerInfo details(listener->event_name(), |
listener->extension_id(), |
+ listener->listener_url(), |
listener->GetBrowserContext()); |
std::string base_event_name = GetBaseEventName(listener->event_name()); |
ObserverMap::iterator observer = observers_.find(base_event_name); |
@@ -241,7 +272,7 @@ void EventRouter::OnListenerRemoved(const EventListener* listener) { |
void EventRouter::AddLazyEventListener(const std::string& event_name, |
const std::string& extension_id) { |
scoped_ptr<EventListener> listener(new EventListener( |
- event_name, extension_id, NULL, scoped_ptr<DictionaryValue>())); |
+ event_name, extension_id, GURL(), NULL, scoped_ptr<DictionaryValue>())); |
bool is_new = listeners_.AddListener(listener.Pass()); |
if (is_new) { |
@@ -254,8 +285,8 @@ void EventRouter::AddLazyEventListener(const std::string& event_name, |
void EventRouter::RemoveLazyEventListener(const std::string& event_name, |
const std::string& extension_id) { |
- EventListener listener(event_name, extension_id, NULL, |
- scoped_ptr<DictionaryValue>()); |
+ EventListener listener( |
+ event_name, extension_id, GURL(), NULL, scoped_ptr<DictionaryValue>()); |
bool did_exist = listeners_.RemoveListener(&listener); |
if (did_exist) { |
@@ -272,13 +303,19 @@ void EventRouter::AddFilteredEventListener(const std::string& event_name, |
const base::DictionaryValue& filter, |
bool add_lazy_listener) { |
listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( |
- event_name, extension_id, process, |
+ event_name, |
+ extension_id, |
+ GURL(), // TODO(kalman): pass through URL from filtered events |
+ process, |
scoped_ptr<DictionaryValue>(filter.DeepCopy())))); |
if (add_lazy_listener) { |
bool added = listeners_.AddListener(scoped_ptr<EventListener>( |
- new EventListener(event_name, extension_id, NULL, |
- scoped_ptr<DictionaryValue>(filter.DeepCopy())))); |
+ new EventListener(event_name, |
+ extension_id, |
+ GURL(), // URL is irrelevant for lazy listeners. |
+ NULL, |
+ scoped_ptr<DictionaryValue>(filter.DeepCopy())))); |
if (added) |
AddFilterToEvent(event_name, extension_id, &filter); |
@@ -291,7 +328,10 @@ void EventRouter::RemoveFilteredEventListener( |
const std::string& extension_id, |
const base::DictionaryValue& filter, |
bool remove_lazy_listener) { |
- EventListener listener(event_name, extension_id, process, |
+ EventListener listener(event_name, |
+ extension_id, |
+ GURL(), // TODO(kalman): URLs for filtered events |
+ process, |
scoped_ptr<DictionaryValue>(filter.DeepCopy())); |
listeners_.RemoveListener(&listener); |
@@ -471,8 +511,10 @@ void EventRouter::DispatchEventImpl(const std::string& restrict_to_extension_id, |
EventDispatchIdentifier dispatch_id(listener->GetBrowserContext(), |
listener->extension_id()); |
if (!ContainsKey(already_dispatched, dispatch_id)) { |
- DispatchEventToProcess( |
- listener->extension_id(), listener->process(), event); |
+ DispatchEventToProcess(listener->extension_id(), |
+ listener->listener_url(), |
+ listener->process(), |
+ event); |
} |
} |
} |
@@ -511,6 +553,7 @@ void EventRouter::DispatchLazyEvent( |
} |
void EventRouter::DispatchEventToProcess(const std::string& extension_id, |
+ const GURL& listener_url, |
content::RenderProcessHost* process, |
const linked_ptr<Event>& event) { |
BrowserContext* listener_context = process->GetBrowserContext(); |
@@ -556,7 +599,7 @@ void EventRouter::DispatchEventToProcess(const std::string& extension_id, |
->HasWebUIBindings(process->GetID())) { |
// Dispatching event to WebUI. |
if (!ExtensionAPI::GetSharedInstance()->IsAvailableToWebUI( |
- event->event_name)) { |
+ event->event_name, listener_url)) { |
return; |
} |
} else { |
@@ -690,8 +733,8 @@ void EventRouter::DispatchPendingEvent(const linked_ptr<Event>& event, |
if (listeners_.HasProcessListener(host->render_process_host(), |
host->extension()->id())) { |
- DispatchEventToProcess(host->extension()->id(), |
- host->render_process_host(), event); |
+ DispatchEventToProcess( |
+ host->extension()->id(), GURL(), host->render_process_host(), event); |
} |
} |
@@ -799,9 +842,12 @@ Event* Event::DeepCopy() { |
EventListenerInfo::EventListenerInfo(const std::string& event_name, |
const std::string& extension_id, |
+ const GURL& listener_url, |
content::BrowserContext* browser_context) |
: event_name(event_name), |
extension_id(extension_id), |
- browser_context(browser_context) {} |
+ listener_url(listener_url), |
+ browser_context(browser_context) { |
+} |
} // namespace extensions |