/chromium-webcl/src/chrome/browser/extensions/api/management/management_api.h

https://bitbucket.org/peixuan/chromium_r197479_base · C Header · 228 lines · 144 code · 62 blank · 22 comment · 0 complexity · 4554d1d19d1e4dfa535030eda86e54a0 MD5 · raw file

  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.
  4. #ifndef CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_
  5. #define CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_
  6. #include "base/compiler_specific.h"
  7. #include "chrome/browser/extensions/api/profile_keyed_api_factory.h"
  8. #include "chrome/browser/extensions/event_router.h"
  9. #include "chrome/browser/extensions/extension_function.h"
  10. #include "chrome/browser/extensions/extension_install_prompt.h"
  11. #include "chrome/browser/extensions/extension_uninstall_dialog.h"
  12. #include "chrome/browser/profiles/profile_keyed_service.h"
  13. #include "content/public/browser/notification_observer.h"
  14. #include "content/public/browser/notification_registrar.h"
  15. class ExtensionService;
  16. class ExtensionUninstallDialog;
  17. namespace extensions {
  18. class ManagementFunction : public SyncExtensionFunction {
  19. protected:
  20. virtual ~ManagementFunction() {}
  21. ExtensionService* service();
  22. };
  23. class AsyncManagementFunction : public AsyncExtensionFunction {
  24. protected:
  25. virtual ~AsyncManagementFunction() {}
  26. ExtensionService* service();
  27. };
  28. class ManagementGetAllFunction : public ManagementFunction {
  29. public:
  30. DECLARE_EXTENSION_FUNCTION("management.getAll", MANAGEMENT_GETALL)
  31. protected:
  32. virtual ~ManagementGetAllFunction() {}
  33. // ExtensionFunction:
  34. virtual bool RunImpl() OVERRIDE;
  35. };
  36. class ManagementGetFunction : public ManagementFunction {
  37. public:
  38. DECLARE_EXTENSION_FUNCTION("management.get", MANAGEMENT_GET)
  39. protected:
  40. virtual ~ManagementGetFunction() {}
  41. // ExtensionFunction:
  42. virtual bool RunImpl() OVERRIDE;
  43. };
  44. class ManagementGetPermissionWarningsByIdFunction : public ManagementFunction {
  45. public:
  46. DECLARE_EXTENSION_FUNCTION("management.getPermissionWarningsById",
  47. MANAGEMENT_GETPERMISSIONWARNINGSBYID)
  48. protected:
  49. virtual ~ManagementGetPermissionWarningsByIdFunction() {}
  50. // ExtensionFunction:
  51. virtual bool RunImpl() OVERRIDE;
  52. };
  53. class ManagementGetPermissionWarningsByManifestFunction
  54. : public AsyncExtensionFunction {
  55. public:
  56. DECLARE_EXTENSION_FUNCTION(
  57. "management.getPermissionWarningsByManifest",
  58. MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST);
  59. // Called when utility process finishes.
  60. void OnParseSuccess(base::DictionaryValue* parsed_manifest);
  61. void OnParseFailure(const std::string& error);
  62. protected:
  63. virtual ~ManagementGetPermissionWarningsByManifestFunction() {}
  64. // ExtensionFunction:
  65. virtual bool RunImpl() OVERRIDE;
  66. };
  67. class ManagementLaunchAppFunction : public ManagementFunction {
  68. public:
  69. DECLARE_EXTENSION_FUNCTION("management.launchApp", MANAGEMENT_LAUNCHAPP)
  70. protected:
  71. virtual ~ManagementLaunchAppFunction() {}
  72. // ExtensionFunction:
  73. virtual bool RunImpl() OVERRIDE;
  74. };
  75. class ManagementSetEnabledFunction : public AsyncManagementFunction,
  76. public ExtensionInstallPrompt::Delegate {
  77. public:
  78. DECLARE_EXTENSION_FUNCTION("management.setEnabled", MANAGEMENT_SETENABLED)
  79. ManagementSetEnabledFunction();
  80. protected:
  81. virtual ~ManagementSetEnabledFunction();
  82. // ExtensionFunction:
  83. virtual bool RunImpl() OVERRIDE;
  84. // ExtensionInstallPrompt::Delegate.
  85. virtual void InstallUIProceed() OVERRIDE;
  86. virtual void InstallUIAbort(bool user_initiated) OVERRIDE;
  87. private:
  88. std::string extension_id_;
  89. // Used for prompting to re-enable items with permissions escalation updates.
  90. scoped_ptr<ExtensionInstallPrompt> install_prompt_;
  91. };
  92. class ManagementUninstallFunctionBase : public AsyncManagementFunction,
  93. public ExtensionUninstallDialog::Delegate {
  94. public:
  95. ManagementUninstallFunctionBase();
  96. static void SetAutoConfirmForTest(bool should_proceed);
  97. // ExtensionUninstallDialog::Delegate implementation.
  98. virtual void ExtensionUninstallAccepted() OVERRIDE;
  99. virtual void ExtensionUninstallCanceled() OVERRIDE;
  100. protected:
  101. virtual ~ManagementUninstallFunctionBase();
  102. bool Uninstall(const std::string& extension_id, bool show_confirm_dialog);
  103. private:
  104. // If should_uninstall is true, this method does the actual uninstall.
  105. // If |show_uninstall_dialog|, then this function will be called by one of the
  106. // Accepted/Canceled callbacks. Otherwise, it's called directly from RunImpl.
  107. void Finish(bool should_uninstall);
  108. std::string extension_id_;
  109. scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
  110. };
  111. class ManagementUninstallFunction : public ManagementUninstallFunctionBase {
  112. public:
  113. DECLARE_EXTENSION_FUNCTION("management.uninstall", MANAGEMENT_UNINSTALL)
  114. ManagementUninstallFunction();
  115. private:
  116. virtual ~ManagementUninstallFunction();
  117. virtual bool RunImpl() OVERRIDE;
  118. };
  119. class ManagementUninstallSelfFunction : public ManagementUninstallFunctionBase {
  120. public:
  121. DECLARE_EXTENSION_FUNCTION("management.uninstallSelf",
  122. MANAGEMENT_UNINSTALLSELF);
  123. ManagementUninstallSelfFunction();
  124. private:
  125. virtual ~ManagementUninstallSelfFunction();
  126. virtual bool RunImpl() OVERRIDE;
  127. };
  128. class ManagementEventRouter : public content::NotificationObserver {
  129. public:
  130. explicit ManagementEventRouter(Profile* profile);
  131. virtual ~ManagementEventRouter();
  132. private:
  133. // content::NotificationObserver implementation.
  134. virtual void Observe(int type,
  135. const content::NotificationSource& source,
  136. const content::NotificationDetails& details) OVERRIDE;
  137. content::NotificationRegistrar registrar_;
  138. Profile* profile_;
  139. DISALLOW_COPY_AND_ASSIGN(ManagementEventRouter);
  140. };
  141. class ManagementAPI : public ProfileKeyedAPI,
  142. public extensions::EventRouter::Observer {
  143. public:
  144. explicit ManagementAPI(Profile* profile);
  145. virtual ~ManagementAPI();
  146. // ProfileKeyedService implementation.
  147. virtual void Shutdown() OVERRIDE;
  148. // ProfileKeyedAPI implementation.
  149. static ProfileKeyedAPIFactory<ManagementAPI>* GetFactoryInstance();
  150. // EventRouter::Observer implementation.
  151. virtual void OnListenerAdded(const extensions::EventListenerInfo& details)
  152. OVERRIDE;
  153. private:
  154. friend class ProfileKeyedAPIFactory<ManagementAPI>;
  155. Profile* profile_;
  156. // ProfileKeyedAPI implementation.
  157. static const char* service_name() {
  158. return "ManagementAPI";
  159. }
  160. static const bool kServiceIsNULLWhileTesting = true;
  161. // Created lazily upon OnListenerAdded.
  162. scoped_ptr<ManagementEventRouter> management_event_router_;
  163. DISALLOW_COPY_AND_ASSIGN(ManagementAPI);
  164. };
  165. } // namespace extensions
  166. #endif // CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_