OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #ifndef EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ | 5 #ifndef EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ |
6 #define EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ | 6 #define EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
| 10 #include "base/scoped_observer.h" |
10 #include "content/public/browser/notification_observer.h" | 11 #include "content/public/browser/notification_observer.h" |
11 #include "content/public/browser/notification_registrar.h" | 12 #include "content/public/browser/notification_registrar.h" |
12 #include "extensions/browser/api/runtime/runtime_api_delegate.h" | 13 #include "extensions/browser/api/runtime/runtime_api_delegate.h" |
13 #include "extensions/browser/browser_context_keyed_api_factory.h" | 14 #include "extensions/browser/browser_context_keyed_api_factory.h" |
14 #include "extensions/browser/extension_function.h" | 15 #include "extensions/browser/extension_function.h" |
| 16 #include "extensions/browser/extension_registry_observer.h" |
15 #include "extensions/browser/process_manager_observer.h" | 17 #include "extensions/browser/process_manager_observer.h" |
16 #include "extensions/browser/update_observer.h" | 18 #include "extensions/browser/update_observer.h" |
17 #include "extensions/common/api/runtime.h" | 19 #include "extensions/common/api/runtime.h" |
18 | 20 |
19 namespace base { | 21 namespace base { |
20 class Version; | 22 class Version; |
21 } | 23 } |
22 | 24 |
23 namespace content { | 25 namespace content { |
24 class BrowserContext; | 26 class BrowserContext; |
25 } | 27 } |
26 | 28 |
27 namespace extensions { | 29 namespace extensions { |
28 | 30 |
29 namespace core_api { | 31 namespace core_api { |
30 namespace runtime { | 32 namespace runtime { |
31 struct PlatformInfo; | 33 struct PlatformInfo; |
32 } | 34 } |
33 } | 35 } |
34 | 36 |
35 class Extension; | 37 class Extension; |
36 class ExtensionHost; | 38 class ExtensionHost; |
| 39 class ExtensionRegistry; |
37 | 40 |
38 // Runtime API dispatches onStartup, onInstalled, and similar events to | 41 // Runtime API dispatches onStartup, onInstalled, and similar events to |
39 // extensions. There is one instance shared between a browser context and | 42 // extensions. There is one instance shared between a browser context and |
40 // its related incognito instance. | 43 // its related incognito instance. |
41 class RuntimeAPI : public BrowserContextKeyedAPI, | 44 class RuntimeAPI : public BrowserContextKeyedAPI, |
42 public content::NotificationObserver, | 45 public content::NotificationObserver, |
| 46 public ExtensionRegistryObserver, |
43 public UpdateObserver, | 47 public UpdateObserver, |
44 public ProcessManagerObserver { | 48 public ProcessManagerObserver { |
45 public: | 49 public: |
46 static BrowserContextKeyedAPIFactory<RuntimeAPI>* GetFactoryInstance(); | 50 static BrowserContextKeyedAPIFactory<RuntimeAPI>* GetFactoryInstance(); |
47 | 51 |
48 explicit RuntimeAPI(content::BrowserContext* context); | 52 explicit RuntimeAPI(content::BrowserContext* context); |
49 virtual ~RuntimeAPI(); | 53 virtual ~RuntimeAPI(); |
50 | 54 |
51 // content::NotificationObserver overrides: | 55 // content::NotificationObserver overrides: |
52 virtual void Observe(int type, | 56 virtual void Observe(int type, |
53 const content::NotificationSource& source, | 57 const content::NotificationSource& source, |
54 const content::NotificationDetails& details) OVERRIDE; | 58 const content::NotificationDetails& details) OVERRIDE; |
55 | 59 |
56 void ReloadExtension(const std::string& extension_id); | 60 void ReloadExtension(const std::string& extension_id); |
57 bool CheckForUpdates(const std::string& extension_id, | 61 bool CheckForUpdates(const std::string& extension_id, |
58 const RuntimeAPIDelegate::UpdateCheckCallback& callback); | 62 const RuntimeAPIDelegate::UpdateCheckCallback& callback); |
59 void OpenURL(const GURL& uninstall_url); | 63 void OpenURL(const GURL& uninstall_url); |
60 bool GetPlatformInfo(core_api::runtime::PlatformInfo* info); | 64 bool GetPlatformInfo(core_api::runtime::PlatformInfo* info); |
61 bool RestartDevice(std::string* error_message); | 65 bool RestartDevice(std::string* error_message); |
62 | 66 |
63 private: | 67 private: |
64 friend class BrowserContextKeyedAPIFactory<RuntimeAPI>; | 68 friend class BrowserContextKeyedAPIFactory<RuntimeAPI>; |
65 | 69 |
66 void OnExtensionsReady(); | 70 // ExtensionRegistryObserver implementation. |
67 void OnExtensionLoaded(const Extension* extension); | 71 virtual void OnExtensionLoaded(content::BrowserContext* browser_context, |
68 void OnExtensionInstalled(const Extension* extension); | 72 const Extension* extension) OVERRIDE; |
69 void OnExtensionUninstalled(const Extension* extension); | 73 virtual void OnExtensionWillBeInstalled( |
| 74 content::BrowserContext* browser_context, |
| 75 const Extension* extension, |
| 76 bool is_update, |
| 77 bool from_ephemeral, |
| 78 const std::string& old_name) OVERRIDE; |
| 79 virtual void OnExtensionUninstalled(content::BrowserContext* browser_context, |
| 80 const Extension* extension, |
| 81 UninstallReason reason) OVERRIDE; |
70 | 82 |
71 // BrowserContextKeyedAPI implementation: | 83 // BrowserContextKeyedAPI implementation: |
72 static const char* service_name() { return "RuntimeAPI"; } | 84 static const char* service_name() { return "RuntimeAPI"; } |
73 static const bool kServiceRedirectedInIncognito = true; | 85 static const bool kServiceRedirectedInIncognito = true; |
74 static const bool kServiceIsNULLWhileTesting = true; | 86 static const bool kServiceIsNULLWhileTesting = true; |
75 virtual void Shutdown() OVERRIDE; | 87 virtual void Shutdown() OVERRIDE; |
76 | 88 |
77 // extensions::UpdateObserver overrides: | 89 // extensions::UpdateObserver overrides: |
78 virtual void OnAppUpdateAvailable(const Extension* extension) OVERRIDE; | 90 virtual void OnAppUpdateAvailable(const Extension* extension) OVERRIDE; |
79 virtual void OnChromeUpdateAvailable() OVERRIDE; | 91 virtual void OnChromeUpdateAvailable() OVERRIDE; |
80 | 92 |
81 // ProcessManagerObserver implementation: | 93 // ProcessManagerObserver implementation: |
82 virtual void OnBackgroundHostStartup(const Extension* extension) OVERRIDE; | 94 virtual void OnBackgroundHostStartup(const Extension* extension) OVERRIDE; |
83 | 95 |
84 scoped_ptr<RuntimeAPIDelegate> delegate_; | 96 scoped_ptr<RuntimeAPIDelegate> delegate_; |
85 | 97 |
86 content::BrowserContext* browser_context_; | 98 content::BrowserContext* browser_context_; |
87 | 99 |
88 // True if we should dispatch the chrome.runtime.onInstalled event with | 100 // True if we should dispatch the chrome.runtime.onInstalled event with |
89 // reason "chrome_update" upon loading each extension. | 101 // reason "chrome_update" upon loading each extension. |
90 bool dispatch_chrome_updated_event_; | 102 bool dispatch_chrome_updated_event_; |
91 | 103 |
92 content::NotificationRegistrar registrar_; | 104 content::NotificationRegistrar registrar_; |
93 | 105 |
| 106 // Listen to extension notifications. |
| 107 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> |
| 108 extension_registry_observer_; |
| 109 |
94 DISALLOW_COPY_AND_ASSIGN(RuntimeAPI); | 110 DISALLOW_COPY_AND_ASSIGN(RuntimeAPI); |
95 }; | 111 }; |
96 | 112 |
97 class RuntimeEventRouter { | 113 class RuntimeEventRouter { |
98 public: | 114 public: |
99 // Dispatches the onStartup event to all currently-loaded extensions. | 115 // Dispatches the onStartup event to all currently-loaded extensions. |
100 static void DispatchOnStartupEvent(content::BrowserContext* context, | 116 static void DispatchOnStartupEvent(content::BrowserContext* context, |
101 const std::string& extension_id); | 117 const std::string& extension_id); |
102 | 118 |
103 // Dispatches the onInstalled event to the given extension. | 119 // Dispatches the onInstalled event to the given extension. |
(...skipping 13 matching lines...) Expand all Loading... |
117 content::BrowserContext* context); | 133 content::BrowserContext* context); |
118 | 134 |
119 // Dispatches the onRestartRequired event to the given app. | 135 // Dispatches the onRestartRequired event to the given app. |
120 static void DispatchOnRestartRequiredEvent( | 136 static void DispatchOnRestartRequiredEvent( |
121 content::BrowserContext* context, | 137 content::BrowserContext* context, |
122 const std::string& app_id, | 138 const std::string& app_id, |
123 core_api::runtime::OnRestartRequired::Reason reason); | 139 core_api::runtime::OnRestartRequired::Reason reason); |
124 | 140 |
125 // Does any work needed at extension uninstall (e.g. load uninstall url). | 141 // Does any work needed at extension uninstall (e.g. load uninstall url). |
126 static void OnExtensionUninstalled(content::BrowserContext* context, | 142 static void OnExtensionUninstalled(content::BrowserContext* context, |
127 const std::string& extension_id); | 143 const std::string& extension_id, |
| 144 UninstallReason reason); |
128 }; | 145 }; |
129 | 146 |
130 class RuntimeGetBackgroundPageFunction : public UIThreadExtensionFunction { | 147 class RuntimeGetBackgroundPageFunction : public UIThreadExtensionFunction { |
131 public: | 148 public: |
132 DECLARE_EXTENSION_FUNCTION("runtime.getBackgroundPage", | 149 DECLARE_EXTENSION_FUNCTION("runtime.getBackgroundPage", |
133 RUNTIME_GETBACKGROUNDPAGE) | 150 RUNTIME_GETBACKGROUNDPAGE) |
134 | 151 |
135 protected: | 152 protected: |
136 virtual ~RuntimeGetBackgroundPageFunction() {} | 153 virtual ~RuntimeGetBackgroundPageFunction() {} |
137 virtual ResponseAction Run() OVERRIDE; | 154 virtual ResponseAction Run() OVERRIDE; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 RUNTIME_GETPACKAGEDIRECTORYENTRY) | 214 RUNTIME_GETPACKAGEDIRECTORYENTRY) |
198 | 215 |
199 protected: | 216 protected: |
200 virtual ~RuntimeGetPackageDirectoryEntryFunction() {} | 217 virtual ~RuntimeGetPackageDirectoryEntryFunction() {} |
201 virtual ResponseAction Run() OVERRIDE; | 218 virtual ResponseAction Run() OVERRIDE; |
202 }; | 219 }; |
203 | 220 |
204 } // namespace extensions | 221 } // namespace extensions |
205 | 222 |
206 #endif // EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ | 223 #endif // EXTENSIONS_BROWSER_API_RUNTIME_RUNTIME_API_H_ |
OLD | NEW |