| 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 |