Chromium Code Reviews| 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 "extensions/browser/event_router.h" | 5 #include "extensions/browser/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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 FROM_HERE, | 161 FROM_HERE, |
| 162 base::Bind(&EventRouter::IncrementInFlightEventsOnUI, | 162 base::Bind(&EventRouter::IncrementInFlightEventsOnUI, |
| 163 browser_context_id, | 163 browser_context_id, |
| 164 extension_id)); | 164 extension_id)); |
| 165 } | 165 } |
| 166 | 166 |
| 167 EventRouter::EventRouter(BrowserContext* browser_context, | 167 EventRouter::EventRouter(BrowserContext* browser_context, |
| 168 ExtensionPrefs* extension_prefs) | 168 ExtensionPrefs* extension_prefs) |
| 169 : browser_context_(browser_context), | 169 : browser_context_(browser_context), |
| 170 extension_prefs_(extension_prefs), | 170 extension_prefs_(extension_prefs), |
| 171 extension_registry_observer_(this), | |
| 171 listeners_(this) { | 172 listeners_(this) { |
| 172 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 173 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 173 content::NotificationService::AllSources()); | 174 content::NotificationService::AllSources()); |
| 174 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 175 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 175 content::NotificationService::AllSources()); | 176 content::NotificationService::AllSources()); |
| 176 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_ENABLED, | 177 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_ENABLED, |
| 177 content::Source<BrowserContext>(browser_context_)); | 178 content::Source<BrowserContext>(browser_context_)); |
| 178 registrar_.Add(this, | 179 extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); |
| 179 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | |
| 180 content::Source<BrowserContext>(browser_context_)); | |
| 181 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | |
| 182 content::Source<BrowserContext>(browser_context_)); | |
| 183 } | 180 } |
| 184 | 181 |
| 185 EventRouter::~EventRouter() {} | 182 EventRouter::~EventRouter() {} |
| 186 | 183 |
| 187 void EventRouter::AddEventListener(const std::string& event_name, | 184 void EventRouter::AddEventListener(const std::string& event_name, |
| 188 content::RenderProcessHost* process, | 185 content::RenderProcessHost* process, |
| 189 const std::string& extension_id) { | 186 const std::string& extension_id) { |
| 190 listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( | 187 listeners_.AddListener(scoped_ptr<EventListener>(new EventListener( |
| 191 event_name, extension_id, process, scoped_ptr<DictionaryValue>()))); | 188 event_name, extension_id, process, scoped_ptr<DictionaryValue>()))); |
| 192 } | 189 } |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 685 const Extension* extension = | 682 const Extension* extension = |
| 686 content::Details<const Extension>(details).ptr(); | 683 content::Details<const Extension>(details).ptr(); |
| 687 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { | 684 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { |
| 688 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( | 685 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( |
| 689 browser_context_)->lazy_background_task_queue(); | 686 browser_context_)->lazy_background_task_queue(); |
| 690 queue->AddPendingTask(browser_context_, extension->id(), | 687 queue->AddPendingTask(browser_context_, extension->id(), |
| 691 base::Bind(&DoNothing)); | 688 base::Bind(&DoNothing)); |
| 692 } | 689 } |
| 693 break; | 690 break; |
| 694 } | 691 } |
| 695 case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { | |
| 696 // Add all registered lazy listeners to our cache. | |
| 697 const Extension* extension = | |
| 698 content::Details<const Extension>(details).ptr(); | |
| 699 std::set<std::string> registered_events = | |
| 700 GetRegisteredEvents(extension->id()); | |
| 701 listeners_.LoadUnfilteredLazyListeners(extension->id(), | |
| 702 registered_events); | |
| 703 const DictionaryValue* filtered_events = | |
| 704 GetFilteredEvents(extension->id()); | |
| 705 if (filtered_events) | |
| 706 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); | |
| 707 break; | |
| 708 } | |
| 709 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { | |
| 710 // Remove all registered lazy listeners from our cache. | |
| 711 UnloadedExtensionInfo* unloaded = | |
| 712 content::Details<UnloadedExtensionInfo>(details).ptr(); | |
| 713 listeners_.RemoveLazyListenersForExtension(unloaded->extension->id()); | |
| 714 break; | |
| 715 } | |
| 716 default: | 692 default: |
| 717 NOTREACHED(); | 693 NOTREACHED(); |
| 718 return; | 694 return; |
|
Devlin
2014/06/25 19:59:54
nit: Can you take out this return while you're her
limasdf
2014/07/20 06:35:50
Done.
| |
| 719 } | 695 } |
| 720 } | 696 } |
| 721 | 697 |
| 698 void EventRouter::OnExtensionLoaded(content::BrowserContext* browser_context, | |
| 699 const Extension* extension) { | |
| 700 std::set<std::string> registered_events = | |
| 701 GetRegisteredEvents(extension->id()); | |
| 702 listeners_.LoadUnfilteredLazyListeners(extension->id(), registered_events); | |
| 703 const DictionaryValue* filtered_events = GetFilteredEvents(extension->id()); | |
| 704 if (filtered_events) | |
| 705 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); | |
| 706 } | |
| 707 | |
| 708 void EventRouter::OnExtensionUnloaded(content::BrowserContext* browser_context, | |
| 709 const Extension* extension, | |
| 710 UnloadedExtensionInfo::Reason reason) { | |
| 711 listeners_.RemoveLazyListenersForExtension(extension->id()); | |
| 712 } | |
| 713 | |
| 722 Event::Event(const std::string& event_name, | 714 Event::Event(const std::string& event_name, |
| 723 scoped_ptr<base::ListValue> event_args) | 715 scoped_ptr<base::ListValue> event_args) |
| 724 : event_name(event_name), | 716 : event_name(event_name), |
| 725 event_args(event_args.Pass()), | 717 event_args(event_args.Pass()), |
| 726 restrict_to_browser_context(NULL), | 718 restrict_to_browser_context(NULL), |
| 727 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), | 719 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), |
| 728 can_load_ephemeral_apps(false) { | 720 can_load_ephemeral_apps(false) { |
| 729 DCHECK(this->event_args.get()); | 721 DCHECK(this->event_args.get()); |
| 730 } | 722 } |
| 731 | 723 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 770 } | 762 } |
| 771 | 763 |
| 772 EventListenerInfo::EventListenerInfo(const std::string& event_name, | 764 EventListenerInfo::EventListenerInfo(const std::string& event_name, |
| 773 const std::string& extension_id, | 765 const std::string& extension_id, |
| 774 content::BrowserContext* browser_context) | 766 content::BrowserContext* browser_context) |
| 775 : event_name(event_name), | 767 : event_name(event_name), |
| 776 extension_id(extension_id), | 768 extension_id(extension_id), |
| 777 browser_context(browser_context) {} | 769 browser_context(browser_context) {} |
| 778 | 770 |
| 779 } // namespace extensions | 771 } // namespace extensions |
| OLD | NEW |