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" |
11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chrome/browser/chrome_notification_types.h" | |
15 #include "content/public/browser/child_process_security_policy.h" | 14 #include "content/public/browser/child_process_security_policy.h" |
16 #include "content/public/browser/notification_service.h" | 15 #include "content/public/browser/notification_service.h" |
17 #include "content/public/browser/render_process_host.h" | 16 #include "content/public/browser/render_process_host.h" |
18 #include "extensions/browser/api_activity_monitor.h" | 17 #include "extensions/browser/api_activity_monitor.h" |
19 #include "extensions/browser/extension_host.h" | 18 #include "extensions/browser/extension_host.h" |
20 #include "extensions/browser/extension_prefs.h" | 19 #include "extensions/browser/extension_prefs.h" |
21 #include "extensions/browser/extension_registry.h" | 20 #include "extensions/browser/extension_registry.h" |
22 #include "extensions/browser/extension_system.h" | 21 #include "extensions/browser/extension_system.h" |
23 #include "extensions/browser/extension_util.h" | 22 #include "extensions/browser/extension_util.h" |
24 #include "extensions/browser/extensions_browser_client.h" | 23 #include "extensions/browser/extensions_browser_client.h" |
25 #include "extensions/browser/lazy_background_task_queue.h" | 24 #include "extensions/browser/lazy_background_task_queue.h" |
| 25 #include "extensions/browser/notification_types.h" |
26 #include "extensions/browser/process_manager.h" | 26 #include "extensions/browser/process_manager.h" |
27 #include "extensions/browser/process_map.h" | 27 #include "extensions/browser/process_map.h" |
28 #include "extensions/common/extension.h" | 28 #include "extensions/common/extension.h" |
29 #include "extensions/common/extension_api.h" | 29 #include "extensions/common/extension_api.h" |
30 #include "extensions/common/extension_messages.h" | 30 #include "extensions/common/extension_messages.h" |
31 #include "extensions/common/extension_urls.h" | 31 #include "extensions/common/extension_urls.h" |
32 #include "extensions/common/manifest_handlers/background_info.h" | 32 #include "extensions/common/manifest_handlers/background_info.h" |
33 #include "extensions/common/manifest_handlers/incognito_info.h" | 33 #include "extensions/common/manifest_handlers/incognito_info.h" |
34 #include "extensions/common/permissions/permissions_data.h" | 34 #include "extensions/common/permissions/permissions_data.h" |
35 | 35 |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 listeners_(this) { | 172 listeners_(this) { |
173 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 173 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
174 content::NotificationService::AllSources()); | 174 content::NotificationService::AllSources()); |
175 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 175 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
176 content::NotificationService::AllSources()); | 176 content::NotificationService::AllSources()); |
177 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_ENABLED, | 177 registrar_.Add(this, |
| 178 extensions::NOTIFICATION_EXTENSION_ENABLED, |
178 content::Source<BrowserContext>(browser_context_)); | 179 content::Source<BrowserContext>(browser_context_)); |
179 registrar_.Add(this, | 180 registrar_.Add(this, |
180 chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, | 181 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, |
181 content::Source<BrowserContext>(browser_context_)); | 182 content::Source<BrowserContext>(browser_context_)); |
182 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, | 183 registrar_.Add(this, |
| 184 extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED, |
183 content::Source<BrowserContext>(browser_context_)); | 185 content::Source<BrowserContext>(browser_context_)); |
184 } | 186 } |
185 | 187 |
186 EventRouter::~EventRouter() {} | 188 EventRouter::~EventRouter() {} |
187 | 189 |
188 void EventRouter::AddEventListener(const std::string& event_name, | 190 void EventRouter::AddEventListener(const std::string& event_name, |
189 content::RenderProcessHost* process, | 191 content::RenderProcessHost* process, |
190 const std::string& extension_id) { | 192 const std::string& extension_id) { |
191 listeners_.AddListener(EventListener::ForExtension( | 193 listeners_.AddListener(EventListener::ForExtension( |
192 event_name, extension_id, process, scoped_ptr<DictionaryValue>())); | 194 event_name, extension_id, process, scoped_ptr<DictionaryValue>())); |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 const content::NotificationDetails& details) { | 730 const content::NotificationDetails& details) { |
729 switch (type) { | 731 switch (type) { |
730 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: | 732 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: |
731 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { | 733 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { |
732 content::RenderProcessHost* renderer = | 734 content::RenderProcessHost* renderer = |
733 content::Source<content::RenderProcessHost>(source).ptr(); | 735 content::Source<content::RenderProcessHost>(source).ptr(); |
734 // Remove all event listeners associated with this renderer. | 736 // Remove all event listeners associated with this renderer. |
735 listeners_.RemoveListenersForProcess(renderer); | 737 listeners_.RemoveListenersForProcess(renderer); |
736 break; | 738 break; |
737 } | 739 } |
738 case chrome::NOTIFICATION_EXTENSION_ENABLED: { | 740 case extensions::NOTIFICATION_EXTENSION_ENABLED: { |
739 // If the extension has a lazy background page, make sure it gets loaded | 741 // If the extension has a lazy background page, make sure it gets loaded |
740 // to register the events the extension is interested in. | 742 // to register the events the extension is interested in. |
741 const Extension* extension = | 743 const Extension* extension = |
742 content::Details<const Extension>(details).ptr(); | 744 content::Details<const Extension>(details).ptr(); |
743 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { | 745 if (BackgroundInfo::HasLazyBackgroundPage(extension)) { |
744 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( | 746 LazyBackgroundTaskQueue* queue = ExtensionSystem::Get( |
745 browser_context_)->lazy_background_task_queue(); | 747 browser_context_)->lazy_background_task_queue(); |
746 queue->AddPendingTask(browser_context_, extension->id(), | 748 queue->AddPendingTask(browser_context_, extension->id(), |
747 base::Bind(&DoNothing)); | 749 base::Bind(&DoNothing)); |
748 } | 750 } |
749 break; | 751 break; |
750 } | 752 } |
751 case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { | 753 case extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: { |
752 // Add all registered lazy listeners to our cache. | 754 // Add all registered lazy listeners to our cache. |
753 const Extension* extension = | 755 const Extension* extension = |
754 content::Details<const Extension>(details).ptr(); | 756 content::Details<const Extension>(details).ptr(); |
755 std::set<std::string> registered_events = | 757 std::set<std::string> registered_events = |
756 GetRegisteredEvents(extension->id()); | 758 GetRegisteredEvents(extension->id()); |
757 listeners_.LoadUnfilteredLazyListeners(extension->id(), | 759 listeners_.LoadUnfilteredLazyListeners(extension->id(), |
758 registered_events); | 760 registered_events); |
759 const DictionaryValue* filtered_events = | 761 const DictionaryValue* filtered_events = |
760 GetFilteredEvents(extension->id()); | 762 GetFilteredEvents(extension->id()); |
761 if (filtered_events) | 763 if (filtered_events) |
762 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); | 764 listeners_.LoadFilteredLazyListeners(extension->id(), *filtered_events); |
763 break; | 765 break; |
764 } | 766 } |
765 case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { | 767 case extensions::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED: { |
766 // Remove all registered lazy listeners from our cache. | 768 // Remove all registered lazy listeners from our cache. |
767 UnloadedExtensionInfo* unloaded = | 769 UnloadedExtensionInfo* unloaded = |
768 content::Details<UnloadedExtensionInfo>(details).ptr(); | 770 content::Details<UnloadedExtensionInfo>(details).ptr(); |
769 listeners_.RemoveLazyListenersForExtension(unloaded->extension->id()); | 771 listeners_.RemoveLazyListenersForExtension(unloaded->extension->id()); |
770 break; | 772 break; |
771 } | 773 } |
772 default: | 774 default: |
773 NOTREACHED(); | 775 NOTREACHED(); |
774 return; | 776 return; |
775 } | 777 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
829 const std::string& extension_id, | 831 const std::string& extension_id, |
830 const GURL& listener_url, | 832 const GURL& listener_url, |
831 content::BrowserContext* browser_context) | 833 content::BrowserContext* browser_context) |
832 : event_name(event_name), | 834 : event_name(event_name), |
833 extension_id(extension_id), | 835 extension_id(extension_id), |
834 listener_url(listener_url), | 836 listener_url(listener_url), |
835 browser_context(browser_context) { | 837 browser_context(browser_context) { |
836 } | 838 } |
837 | 839 |
838 } // namespace extensions | 840 } // namespace extensions |
OLD | NEW |