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
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_
8 #include "base/compiler_specific.h"
9 #include "chrome/browser/extensions/chrome_extension_function.h"
10 #include "chrome/browser/extensions/extension_install_prompt.h"
11 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
12 #include "components/keyed_service/core/keyed_service.h"
13 #include "content/public/browser/notification_observer.h"
14 #include "content/public/browser/notification_registrar.h"
15 #include "extensions/browser/browser_context_keyed_api_factory.h"
16 #include "extensions/browser/event_router.h"
18 class ExtensionService;
19 class ExtensionUninstallDialog;
21 namespace extensions {
23 class ManagementFunction : public ChromeSyncExtensionFunction {
25 virtual ~ManagementFunction() {}
27 ExtensionService* service();
30 class AsyncManagementFunction : public ChromeAsyncExtensionFunction {
32 virtual ~AsyncManagementFunction() {}
34 ExtensionService* service();
37 class ManagementGetAllFunction : public ManagementFunction {
39 DECLARE_EXTENSION_FUNCTION("management.getAll", MANAGEMENT_GETALL)
42 virtual ~ManagementGetAllFunction() {}
45 virtual bool RunSync() OVERRIDE;
48 class ManagementGetFunction : public ManagementFunction {
50 DECLARE_EXTENSION_FUNCTION("management.get", MANAGEMENT_GET)
53 virtual ~ManagementGetFunction() {}
56 virtual bool RunSync() OVERRIDE;
59 class ManagementGetPermissionWarningsByIdFunction : public ManagementFunction {
61 DECLARE_EXTENSION_FUNCTION("management.getPermissionWarningsById",
62 MANAGEMENT_GETPERMISSIONWARNINGSBYID)
65 virtual ~ManagementGetPermissionWarningsByIdFunction() {}
68 virtual bool RunSync() OVERRIDE;
71 class ManagementGetPermissionWarningsByManifestFunction
72 : public ChromeAsyncExtensionFunction {
74 DECLARE_EXTENSION_FUNCTION(
75 "management.getPermissionWarningsByManifest",
76 MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST);
78 // Called when utility process finishes.
79 void OnParseSuccess(scoped_ptr<base::DictionaryValue> parsed_manifest);
80 void OnParseFailure(const std::string& error);
83 virtual ~ManagementGetPermissionWarningsByManifestFunction() {}
86 virtual bool RunAsync() OVERRIDE;
89 class ManagementLaunchAppFunction : public ManagementFunction {
91 DECLARE_EXTENSION_FUNCTION("management.launchApp", MANAGEMENT_LAUNCHAPP)
94 virtual ~ManagementLaunchAppFunction() {}
97 virtual bool RunSync() OVERRIDE;
100 class ManagementSetEnabledFunction : public AsyncManagementFunction,
101 public ExtensionInstallPrompt::Delegate {
103 DECLARE_EXTENSION_FUNCTION("management.setEnabled", MANAGEMENT_SETENABLED)
105 ManagementSetEnabledFunction();
108 virtual ~ManagementSetEnabledFunction();
110 // ExtensionFunction:
111 virtual bool RunAsync() OVERRIDE;
113 // ExtensionInstallPrompt::Delegate.
114 virtual void InstallUIProceed() OVERRIDE;
115 virtual void InstallUIAbort(bool user_initiated) OVERRIDE;
118 std::string extension_id_;
120 // Used for prompting to re-enable items with permissions escalation updates.
121 scoped_ptr<ExtensionInstallPrompt> install_prompt_;
124 class ManagementUninstallFunctionBase : public AsyncManagementFunction,
125 public ExtensionUninstallDialog::Delegate {
127 ManagementUninstallFunctionBase();
129 static void SetAutoConfirmForTest(bool should_proceed);
131 // ExtensionUninstallDialog::Delegate implementation.
132 virtual void ExtensionUninstallAccepted() OVERRIDE;
133 virtual void ExtensionUninstallCanceled() OVERRIDE;
136 virtual ~ManagementUninstallFunctionBase();
138 bool Uninstall(const std::string& extension_id, bool show_confirm_dialog);
141 // If should_uninstall is true, this method does the actual uninstall.
142 // If |show_uninstall_dialog|, then this function will be called by one of the
143 // Accepted/Canceled callbacks. Otherwise, it's called directly from RunAsync.
144 void Finish(bool should_uninstall);
146 std::string extension_id_;
147 scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
150 class ManagementUninstallFunction : public ManagementUninstallFunctionBase {
152 DECLARE_EXTENSION_FUNCTION("management.uninstall", MANAGEMENT_UNINSTALL)
154 ManagementUninstallFunction();
157 virtual ~ManagementUninstallFunction();
159 virtual bool RunAsync() OVERRIDE;
162 class ManagementUninstallSelfFunction : public ManagementUninstallFunctionBase {
164 DECLARE_EXTENSION_FUNCTION("management.uninstallSelf",
165 MANAGEMENT_UNINSTALLSELF);
167 ManagementUninstallSelfFunction();
170 virtual ~ManagementUninstallSelfFunction();
172 virtual bool RunAsync() OVERRIDE;
175 class ManagementCreateAppShortcutFunction : public AsyncManagementFunction {
177 DECLARE_EXTENSION_FUNCTION("management.createAppShortcut",
178 MANAGEMENT_CREATEAPPSHORTCUT);
180 ManagementCreateAppShortcutFunction();
182 void OnCloseShortcutPrompt(bool created);
184 static void SetAutoConfirmForTest(bool should_proceed);
187 virtual ~ManagementCreateAppShortcutFunction();
189 virtual bool RunAsync() OVERRIDE;
192 class ManagementEventRouter : public content::NotificationObserver {
194 explicit ManagementEventRouter(Profile* profile);
195 virtual ~ManagementEventRouter();
198 // content::NotificationObserver implementation.
199 virtual void Observe(int type,
200 const content::NotificationSource& source,
201 const content::NotificationDetails& details) OVERRIDE;
203 content::NotificationRegistrar registrar_;
207 DISALLOW_COPY_AND_ASSIGN(ManagementEventRouter);
210 class ManagementAPI : public BrowserContextKeyedAPI,
211 public extensions::EventRouter::Observer {
213 explicit ManagementAPI(content::BrowserContext* context);
214 virtual ~ManagementAPI();
216 // KeyedService implementation.
217 virtual void Shutdown() OVERRIDE;
219 // BrowserContextKeyedAPI implementation.
220 static BrowserContextKeyedAPIFactory<ManagementAPI>* GetFactoryInstance();
222 // EventRouter::Observer implementation.
223 virtual void OnListenerAdded(const extensions::EventListenerInfo& details)
227 friend class BrowserContextKeyedAPIFactory<ManagementAPI>;
229 content::BrowserContext* browser_context_;
231 // BrowserContextKeyedAPI implementation.
232 static const char* service_name() {
233 return "ManagementAPI";
235 static const bool kServiceIsNULLWhileTesting = true;
237 // Created lazily upon OnListenerAdded.
238 scoped_ptr<ManagementEventRouter> management_event_router_;
240 DISALLOW_COPY_AND_ASSIGN(ManagementAPI);
243 } // namespace extensions
245 #endif // CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_