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/extension_event_router.h" | 5 #include "chrome/browser/extensions/extension_event_router.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 } | 180 } |
181 | 181 |
182 void ExtensionEventRouter::AddLazyEventListener( | 182 void ExtensionEventRouter::AddLazyEventListener( |
183 const std::string& event_name, | 183 const std::string& event_name, |
184 const std::string& extension_id) { | 184 const std::string& extension_id) { |
185 scoped_ptr<EventListener> listener(new EventListener( | 185 scoped_ptr<EventListener> listener(new EventListener( |
186 event_name, extension_id, NULL, scoped_ptr<DictionaryValue>())); | 186 event_name, extension_id, NULL, scoped_ptr<DictionaryValue>())); |
187 bool is_new = listeners_.AddListener(listener.Pass()); | 187 bool is_new = listeners_.AddListener(listener.Pass()); |
188 | 188 |
189 if (is_new) { | 189 if (is_new) { |
190 ExtensionPrefs* prefs = profile_->GetExtensionService()->extension_prefs(); | 190 extensions::ExtensionPrefs* prefs = |
| 191 profile_->GetExtensionService()->extension_prefs(); |
191 std::set<std::string> events = prefs->GetRegisteredEvents(extension_id); | 192 std::set<std::string> events = prefs->GetRegisteredEvents(extension_id); |
192 bool prefs_is_new = events.insert(event_name).second; | 193 bool prefs_is_new = events.insert(event_name).second; |
193 if (prefs_is_new) | 194 if (prefs_is_new) |
194 prefs->SetRegisteredEvents(extension_id, events); | 195 prefs->SetRegisteredEvents(extension_id, events); |
195 } | 196 } |
196 } | 197 } |
197 | 198 |
198 void ExtensionEventRouter::RemoveLazyEventListener( | 199 void ExtensionEventRouter::RemoveLazyEventListener( |
199 const std::string& event_name, | 200 const std::string& event_name, |
200 const std::string& extension_id) { | 201 const std::string& extension_id) { |
201 EventListener listener(event_name, extension_id, NULL, | 202 EventListener listener(event_name, extension_id, NULL, |
202 scoped_ptr<DictionaryValue>()); | 203 scoped_ptr<DictionaryValue>()); |
203 bool did_exist = listeners_.RemoveListener(&listener); | 204 bool did_exist = listeners_.RemoveListener(&listener); |
204 | 205 |
205 if (did_exist) { | 206 if (did_exist) { |
206 ExtensionPrefs* prefs = profile_->GetExtensionService()->extension_prefs(); | 207 extensions::ExtensionPrefs* prefs = |
| 208 profile_->GetExtensionService()->extension_prefs(); |
207 std::set<std::string> events = prefs->GetRegisteredEvents(extension_id); | 209 std::set<std::string> events = prefs->GetRegisteredEvents(extension_id); |
208 bool prefs_did_exist = events.erase(event_name) > 0; | 210 bool prefs_did_exist = events.erase(event_name) > 0; |
209 DCHECK(prefs_did_exist); | 211 DCHECK(prefs_did_exist); |
210 prefs->SetRegisteredEvents(extension_id, events); | 212 prefs->SetRegisteredEvents(extension_id, events); |
211 } | 213 } |
212 } | 214 } |
213 | 215 |
214 void ExtensionEventRouter::AddFilteredEventListener( | 216 void ExtensionEventRouter::AddFilteredEventListener( |
215 const std::string& event_name, | 217 const std::string& event_name, |
216 content::RenderProcessHost* process, | 218 content::RenderProcessHost* process, |
217 const std::string& extension_id, | 219 const std::string& extension_id, |
218 const base::DictionaryValue& filter, | 220 const base::DictionaryValue& filter, |
219 bool add_lazy_listener) { | 221 bool add_lazy_listener) { |
220 listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( | 222 listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( |
221 event_name, extension_id, process, | 223 event_name, extension_id, process, |
222 scoped_ptr<DictionaryValue>(filter.DeepCopy())))); | 224 scoped_ptr<DictionaryValue>(filter.DeepCopy())))); |
223 | 225 |
224 if (add_lazy_listener) { | 226 if (add_lazy_listener) { |
225 bool added = listeners_.AddListener(scoped_ptr<EventListener>( | 227 bool added = listeners_.AddListener(scoped_ptr<EventListener>( |
226 new EventListener(event_name, extension_id, NULL, | 228 new EventListener(event_name, extension_id, NULL, |
227 scoped_ptr<DictionaryValue>(filter.DeepCopy())))); | 229 scoped_ptr<DictionaryValue>(filter.DeepCopy())))); |
228 | 230 |
229 if (added) { | 231 if (added) { |
230 ExtensionPrefs* prefs = | 232 extensions::ExtensionPrefs* prefs = |
231 profile_->GetExtensionService()->extension_prefs(); | 233 profile_->GetExtensionService()->extension_prefs(); |
232 prefs->AddFilterToEvent(event_name, extension_id, &filter); | 234 prefs->AddFilterToEvent(event_name, extension_id, &filter); |
233 } | 235 } |
234 } | 236 } |
235 } | 237 } |
236 | 238 |
237 void ExtensionEventRouter::RemoveFilteredEventListener( | 239 void ExtensionEventRouter::RemoveFilteredEventListener( |
238 const std::string& event_name, | 240 const std::string& event_name, |
239 content::RenderProcessHost* process, | 241 content::RenderProcessHost* process, |
240 const std::string& extension_id, | 242 const std::string& extension_id, |
241 const base::DictionaryValue& filter, | 243 const base::DictionaryValue& filter, |
242 bool remove_lazy_listener) { | 244 bool remove_lazy_listener) { |
243 EventListener listener(event_name, extension_id, process, | 245 EventListener listener(event_name, extension_id, process, |
244 scoped_ptr<DictionaryValue>(filter.DeepCopy())); | 246 scoped_ptr<DictionaryValue>(filter.DeepCopy())); |
245 | 247 |
246 listeners_.RemoveListener(&listener); | 248 listeners_.RemoveListener(&listener); |
247 | 249 |
248 if (remove_lazy_listener) { | 250 if (remove_lazy_listener) { |
249 listener.process = NULL; | 251 listener.process = NULL; |
250 bool removed = listeners_.RemoveListener(&listener); | 252 bool removed = listeners_.RemoveListener(&listener); |
251 | 253 |
252 if (removed) { | 254 if (removed) { |
253 ExtensionPrefs* prefs = | 255 extensions::ExtensionPrefs* prefs = |
254 profile_->GetExtensionService()->extension_prefs(); | 256 profile_->GetExtensionService()->extension_prefs(); |
255 prefs->RemoveFilterFromEvent(event_name, extension_id, &filter); | 257 prefs->RemoveFilterFromEvent(event_name, extension_id, &filter); |
256 } | 258 } |
257 } | 259 } |
258 } | 260 } |
259 | 261 |
260 bool ExtensionEventRouter::HasEventListener(const std::string& event_name) { | 262 bool ExtensionEventRouter::HasEventListener(const std::string& event_name) { |
261 return listeners_.HasListenerForEvent(event_name); | 263 return listeners_.HasListenerForEvent(event_name); |
262 } | 264 } |
263 | 265 |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 content::RenderProcessHost* renderer = | 532 content::RenderProcessHost* renderer = |
531 content::Source<content::RenderProcessHost>(source).ptr(); | 533 content::Source<content::RenderProcessHost>(source).ptr(); |
532 // Remove all event listeners associated with this renderer. | 534 // Remove all event listeners associated with this renderer. |
533 listeners_.RemoveListenersForProcess(renderer); | 535 listeners_.RemoveListenersForProcess(renderer); |
534 break; | 536 break; |
535 } | 537 } |
536 case chrome::NOTIFICATION_EXTENSION_LOADED: { | 538 case chrome::NOTIFICATION_EXTENSION_LOADED: { |
537 // Add all registered lazy listeners to our cache. | 539 // Add all registered lazy listeners to our cache. |
538 const Extension* extension = | 540 const Extension* extension = |
539 content::Details<const Extension>(details).ptr(); | 541 content::Details<const Extension>(details).ptr(); |
540 ExtensionPrefs* prefs = | 542 extensions::ExtensionPrefs* prefs = |
541 profile_->GetExtensionService()->extension_prefs(); | 543 profile_->GetExtensionService()->extension_prefs(); |
542 std::set<std::string> registered_events = | 544 std::set<std::string> registered_events = |
543 prefs->GetRegisteredEvents(extension->id()); | 545 prefs->GetRegisteredEvents(extension->id()); |
544 listeners_.LoadUnfilteredLazyListeners(extension->id(), | 546 listeners_.LoadUnfilteredLazyListeners(extension->id(), |
545 registered_events); | 547 registered_events); |
546 const DictionaryValue* filtered_events = | 548 const DictionaryValue* filtered_events = |
547 prefs->GetFilteredEvents(extension->id()); | 549 prefs->GetFilteredEvents(extension->id()); |
548 if (filtered_events) | 550 if (filtered_events) |
549 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); | 551 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); |
550 break; | 552 break; |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 event_args(event_args.DeepCopy()), | 618 event_args(event_args.DeepCopy()), |
617 event_url(event_url), | 619 event_url(event_url), |
618 restrict_to_profile(restrict_to_profile), | 620 restrict_to_profile(restrict_to_profile), |
619 cross_incognito_args(NULL), | 621 cross_incognito_args(NULL), |
620 user_gesture(user_gesture), | 622 user_gesture(user_gesture), |
621 info(info) { | 623 info(info) { |
622 } | 624 } |
623 | 625 |
624 ExtensionEvent::~ExtensionEvent() { | 626 ExtensionEvent::~ExtensionEvent() { |
625 } | 627 } |
OLD | NEW |