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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 FROM_HERE, | 162 FROM_HERE, |
163 base::Bind(&EventRouter::IncrementInFlightEventsOnUI, | 163 base::Bind(&EventRouter::IncrementInFlightEventsOnUI, |
164 browser_context_id, | 164 browser_context_id, |
165 extension_id)); | 165 extension_id)); |
166 } | 166 } |
167 | 167 |
168 EventRouter::EventRouter(BrowserContext* browser_context, | 168 EventRouter::EventRouter(BrowserContext* browser_context, |
169 ExtensionPrefs* extension_prefs) | 169 ExtensionPrefs* extension_prefs) |
170 : browser_context_(browser_context), | 170 : browser_context_(browser_context), |
171 extension_prefs_(extension_prefs), | 171 extension_prefs_(extension_prefs), |
| 172 extension_registry_observer_(this), |
172 listeners_(this) { | 173 listeners_(this) { |
173 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 174 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
174 content::NotificationService::AllSources()); | 175 content::NotificationService::AllSources()); |
175 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 176 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
176 content::NotificationService::AllSources()); | 177 content::NotificationService::AllSources()); |
177 registrar_.Add(this, | 178 registrar_.Add(this, |
178 extensions::NOTIFICATION_EXTENSION_ENABLED, | 179 extensions::NOTIFICATION_EXTENSION_ENABLED, |
179 content::Source<BrowserContext>(browser_context_)); | 180 content::Source<BrowserContext>(browser_context_)); |
180 registrar_.Add(this, | 181 extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context_)); |
181 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | |
182 content::Source<BrowserContext>(browser_context_)); | |
183 registrar_.Add(this, | |
184 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | |
185 content::Source<BrowserContext>(browser_context_)); | |
186 } | 182 } |
187 | 183 |
188 EventRouter::~EventRouter() {} | 184 EventRouter::~EventRouter() {} |
189 | 185 |
190 void EventRouter::AddEventListener(const std::string& event_name, | 186 void EventRouter::AddEventListener(const std::string& event_name, |
191 content::RenderProcessHost* process, | 187 content::RenderProcessHost* process, |
192 const std::string& extension_id) { | 188 const std::string& extension_id) { |
193 listeners_.AddListener(EventListener::ForExtension( | 189 listeners_.AddListener(EventListener::ForExtension( |
194 event_name, extension_id, process, scoped_ptr<DictionaryValue>())); | 190 event_name, extension_id, process, scoped_ptr<DictionaryValue>())); |
195 } | 191 } |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
743 const Extension* extension = | 739 const Extension* extension = |
744 content::Details<const Extension>(details).ptr(); | 740 content::Details<const Extension>(details).ptr(); |
745 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { | 741 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { |
746 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( | 742 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( |
747 browser_context_)->lazy_background_task_queue(); | 743 browser_context_)->lazy_background_task_queue(); |
748 queue->AddPendingTask(browser_context_, extension->id(), | 744 queue->AddPendingTask(browser_context_, extension->id(), |
749 base::Bind(&DoNothing)); | 745 base::Bind(&DoNothing)); |
750 } | 746 } |
751 break; | 747 break; |
752 } | 748 } |
753 case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { | |
754 // Add all registered lazy listeners to our cache. | |
755 const Extension* extension = | |
756 content::Details<const Extension>(details).ptr(); | |
757 std::set<std::string> registered_events = | |
758 GetRegisteredEvents(extension->id()); | |
759 listeners_.LoadUnfilteredLazyListeners(extension->id(), | |
760 registered_events); | |
761 const DictionaryValue* filtered_events = | |
762 GetFilteredEvents(extension->id()); | |
763 if (filtered_events) | |
764 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); | |
765 break; | |
766 } | |
767 case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { | |
768 // Remove all registered lazy listeners from our cache. | |
769 UnloadedExtensionInfo* unloaded = | |
770 content::Details<UnloadedExtensionInfo>(details).ptr(); | |
771 listeners_.RemoveLazyListenersForExtension(unloaded->extension->id()); | |
772 break; | |
773 } | |
774 default: | 749 default: |
775 NOTREACHED(); | 750 NOTREACHED(); |
776 return; | |
777 } | 751 } |
778 } | 752 } |
779 | 753 |
| 754 void EventRouter::OnExtensionLoaded(content::BrowserContext* browser_context, |
| 755 const Extension* extension) { |
| 756 // Add all registered lazy listeners to our cache. |
| 757 std::set<std::string> registered_events = |
| 758 GetRegisteredEvents(extension->id()); |
| 759 listeners_.LoadUnfilteredLazyListeners(extension->id(), registered_events); |
| 760 const DictionaryValue* filtered_events = GetFilteredEvents(extension->id()); |
| 761 if (filtered_events) |
| 762 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); |
| 763 } |
| 764 |
| 765 void EventRouter::OnExtensionUnloaded(content::BrowserContext* browser_context, |
| 766 const Extension* extension, |
| 767 UnloadedExtensionInfo::Reason reason) { |
| 768 // Remove all registered lazy listeners from our cache. |
| 769 listeners_.RemoveLazyListenersForExtension(extension->id()); |
| 770 } |
| 771 |
780 Event::Event(const std::string& event_name, | 772 Event::Event(const std::string& event_name, |
781 scoped_ptr<base::ListValue> event_args) | 773 scoped_ptr<base::ListValue> event_args) |
782 : event_name(event_name), | 774 : event_name(event_name), |
783 event_args(event_args.Pass()), | 775 event_args(event_args.Pass()), |
784 restrict_to_browser_context(NULL), | 776 restrict_to_browser_context(NULL), |
785 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), | 777 user_gesture(EventRouter::USER_GESTURE_UNKNOWN), |
786 can_load_ephemeral_apps(false) { | 778 can_load_ephemeral_apps(false) { |
787 DCHECK(this->event_args.get()); | 779 DCHECK(this->event_args.get()); |
788 } | 780 } |
789 | 781 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 const std::string& extension_id, | 823 const std::string& extension_id, |
832 const GURL& listener_url, | 824 const GURL& listener_url, |
833 content::BrowserContext* browser_context) | 825 content::BrowserContext* browser_context) |
834 : event_name(event_name), | 826 : event_name(event_name), |
835 extension_id(extension_id), | 827 extension_id(extension_id), |
836 listener_url(listener_url), | 828 listener_url(listener_url), |
837 browser_context(browser_context) { | 829 browser_context(browser_context) { |
838 } | 830 } |
839 | 831 |
840 } // namespace extensions | 832 } // namespace extensions |
OLD | NEW |