OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/event_router.h" | 5 #include "chrome/browser/extensions/event_router.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 if (!extension_service) { | 112 if (!extension_service) { |
113 LOG(WARNING) << "ExtensionService does not seem to be available " | 113 LOG(WARNING) << "ExtensionService does not seem to be available " |
114 << "(this may be normal for unit tests)"; | 114 << "(this may be normal for unit tests)"; |
115 } else { | 115 } else { |
116 const Extension* extension = | 116 const Extension* extension = |
117 extension_service->extensions()->GetByID(extension_id); | 117 extension_service->extensions()->GetByID(extension_id); |
118 if (!extension) { | 118 if (!extension) { |
119 LOG(WARNING) << "Extension " << extension_id << " not found!"; | 119 LOG(WARNING) << "Extension " << extension_id << " not found!"; |
120 } else { | 120 } else { |
121 extensions::ActivityLog::GetInstance(profile)->LogEventAction( | 121 extensions::ActivityLog::GetInstance(profile)->LogEventAction( |
122 extension, event_name, event_args.get(), ""); | 122 extension, event_name, event_args.get(), std::string()); |
123 } | 123 } |
124 } | 124 } |
125 } | 125 } |
126 } | 126 } |
127 | 127 |
128 // static | 128 // static |
129 void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, | 129 void EventRouter::DispatchExtensionMessage(IPC::Sender* ipc_sender, |
130 void* profile_id, | 130 void* profile_id, |
131 const std::string& extension_id, | 131 const std::string& extension_id, |
132 const std::string& event_name, | 132 const std::string& event_name, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 if (observer != observers_.end()) | 236 if (observer != observers_.end()) |
237 observer->second->OnListenerAdded(details); | 237 observer->second->OnListenerAdded(details); |
238 | 238 |
239 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> | 239 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> |
240 extension_service()->GetExtensionById(listener->extension_id, | 240 extension_service()->GetExtensionById(listener->extension_id, |
241 ExtensionService::INCLUDE_ENABLED); | 241 ExtensionService::INCLUDE_ENABLED); |
242 if (extension) { | 242 if (extension) { |
243 scoped_ptr<ListValue> args(new ListValue()); | 243 scoped_ptr<ListValue> args(new ListValue()); |
244 if (listener->filter) | 244 if (listener->filter) |
245 args->Append(listener->filter->DeepCopy()); | 245 args->Append(listener->filter->DeepCopy()); |
246 activity_log_->LogAPIAction(extension, | 246 activity_log_->LogAPIAction( |
247 event_name + ".addListener", | 247 extension, event_name + ".addListener", args.get(), std::string()); |
248 args.get(), | |
249 ""); | |
250 } | 248 } |
251 } | 249 } |
252 | 250 |
253 void EventRouter::OnListenerRemoved(const EventListener* listener) { | 251 void EventRouter::OnListenerRemoved(const EventListener* listener) { |
254 const std::string& event_name = listener->event_name; | 252 const std::string& event_name = listener->event_name; |
255 const EventListenerInfo details(event_name, listener->extension_id); | 253 const EventListenerInfo details(event_name, listener->extension_id); |
256 ObserverMap::iterator observer = observers_.find(event_name); | 254 ObserverMap::iterator observer = observers_.find(event_name); |
257 if (observer != observers_.end()) | 255 if (observer != observers_.end()) |
258 observer->second->OnListenerRemoved(details); | 256 observer->second->OnListenerRemoved(details); |
259 | 257 |
260 void* profile = | 258 void* profile = |
261 listener->process | 259 listener->process |
262 ? Profile::FromBrowserContext(listener->process->GetBrowserContext()) | 260 ? Profile::FromBrowserContext(listener->process->GetBrowserContext()) |
263 : NULL; | 261 : NULL; |
264 BrowserThread::PostTask( | 262 BrowserThread::PostTask( |
265 BrowserThread::IO, FROM_HERE, | 263 BrowserThread::IO, FROM_HERE, |
266 base::Bind(&NotifyEventListenerRemovedOnIOThread, | 264 base::Bind(&NotifyEventListenerRemovedOnIOThread, |
267 profile, listener->extension_id, event_name)); | 265 profile, listener->extension_id, event_name)); |
268 | 266 |
269 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> | 267 const Extension* extension = extensions::ExtensionSystem::Get(profile_)-> |
270 extension_service()->GetExtensionById(listener->extension_id, | 268 extension_service()->GetExtensionById(listener->extension_id, |
271 ExtensionService::INCLUDE_ENABLED); | 269 ExtensionService::INCLUDE_ENABLED); |
272 if (extension) { | 270 if (extension) { |
273 scoped_ptr<ListValue> args(new ListValue()); | 271 scoped_ptr<ListValue> args(new ListValue()); |
274 activity_log_->LogAPIAction(extension, | 272 activity_log_->LogAPIAction( |
275 event_name + ".removeListener", | 273 extension, event_name + ".removeListener", args.get(), std::string()); |
276 args.get(), | |
277 ""); | |
278 } | 274 } |
279 } | 275 } |
280 | 276 |
281 void EventRouter::AddLazyEventListener(const std::string& event_name, | 277 void EventRouter::AddLazyEventListener(const std::string& event_name, |
282 const std::string& extension_id) { | 278 const std::string& extension_id) { |
283 scoped_ptr<EventListener> listener(new EventListener( | 279 scoped_ptr<EventListener> listener(new EventListener( |
284 event_name, extension_id, NULL, scoped_ptr<DictionaryValue>())); | 280 event_name, extension_id, NULL, scoped_ptr<DictionaryValue>())); |
285 bool is_new = listeners_.AddListener(listener.Pass()); | 281 bool is_new = listeners_.AddListener(listener.Pass()); |
286 | 282 |
287 if (is_new) { | 283 if (is_new) { |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 | 373 |
378 for (std::set<ListenerProcess>::const_iterator listener = listeners.begin(); | 374 for (std::set<ListenerProcess>::const_iterator listener = listeners.begin(); |
379 listener != listeners.end(); ++listener) { | 375 listener != listeners.end(); ++listener) { |
380 if (listener->extension_id == extension_id) | 376 if (listener->extension_id == extension_id) |
381 return true; | 377 return true; |
382 } | 378 } |
383 return false; | 379 return false; |
384 } | 380 } |
385 | 381 |
386 void EventRouter::BroadcastEvent(scoped_ptr<Event> event) { | 382 void EventRouter::BroadcastEvent(scoped_ptr<Event> event) { |
387 DispatchEventImpl("", linked_ptr<Event>(event.release())); | 383 DispatchEventImpl(std::string(), linked_ptr<Event>(event.release())); |
388 } | 384 } |
389 | 385 |
390 void EventRouter::DispatchEventToExtension(const std::string& extension_id, | 386 void EventRouter::DispatchEventToExtension(const std::string& extension_id, |
391 scoped_ptr<Event> event) { | 387 scoped_ptr<Event> event) { |
392 DCHECK(!extension_id.empty()); | 388 DCHECK(!extension_id.empty()); |
393 DispatchEventImpl(extension_id, linked_ptr<Event>(event.release())); | 389 DispatchEventImpl(extension_id, linked_ptr<Event>(event.release())); |
394 } | 390 } |
395 | 391 |
396 void EventRouter::DispatchEventImpl(const std::string& restrict_to_extension_id, | 392 void EventRouter::DispatchEventImpl(const std::string& restrict_to_extension_id, |
397 const linked_ptr<Event>& event) { | 393 const linked_ptr<Event>& event) { |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
720 copy->will_dispatch_callback = will_dispatch_callback; | 716 copy->will_dispatch_callback = will_dispatch_callback; |
721 return copy; | 717 return copy; |
722 } | 718 } |
723 | 719 |
724 EventListenerInfo::EventListenerInfo(const std::string& event_name, | 720 EventListenerInfo::EventListenerInfo(const std::string& event_name, |
725 const std::string& extension_id) | 721 const std::string& extension_id) |
726 : event_name(event_name), | 722 : event_name(event_name), |
727 extension_id(extension_id) {} | 723 extension_id(extension_id) {} |
728 | 724 |
729 } // namespace extensions | 725 } // namespace extensions |
OLD | NEW |