15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/scoped_observer.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/task/cancelable_task_tracker.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/extensions/bookmark_app_helper.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/extensions/chrome_extension_function.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_install_prompt.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_uninstall_dialog.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/web_application_info.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/favicon_base/favicon_types.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/browser_context_keyed_api_factory.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h" 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionService; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionUninstallDialog; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class ExtensionRegistry; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ManagementFunction : public ChromeSyncExtensionFunction { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementFunction() {} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class AsyncManagementFunction : public ChromeAsyncExtensionFunction { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~AsyncManagementFunction() {} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionService* service(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementGetAllFunction : public ManagementFunction { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.getAll", MANAGEMENT_GETALL) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementGetAllFunction() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementGetFunction : public ManagementFunction { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.get", MANAGEMENT_GET) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementGetFunction() {} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ManagementGetSelfFunction : public ManagementFunction { 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DECLARE_EXTENSION_FUNCTION("management.getSelf", MANAGEMENT_GETSELF) 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ManagementGetSelfFunction() {} 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ExtensionFunction: 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool RunSync() OVERRIDE; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementGetPermissionWarningsByIdFunction : public ManagementFunction { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.getPermissionWarningsById", 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MANAGEMENT_GETPERMISSIONWARNINGSBYID) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementGetPermissionWarningsByIdFunction() {} 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementGetPermissionWarningsByManifestFunction 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : public ChromeAsyncExtensionFunction { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION( 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "management.getPermissionWarningsByManifest", 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MANAGEMENT_GETPERMISSIONWARNINGSBYMANIFEST); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when utility process finishes. 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void OnParseSuccess(scoped_ptr<base::DictionaryValue> parsed_manifest); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnParseFailure(const std::string& error); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementGetPermissionWarningsByManifestFunction() {} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 102010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementLaunchAppFunction : public ManagementFunction { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.launchApp", MANAGEMENT_LAUNCHAPP) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementLaunchAppFunction() {} 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool RunSync() OVERRIDE; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementSetEnabledFunction : public AsyncManagementFunction, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ExtensionInstallPrompt::Delegate { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.setEnabled", MANAGEMENT_SETENABLED) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagementSetEnabledFunction(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementSetEnabledFunction(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionFunction: 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionInstallPrompt::Delegate. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InstallUIProceed() OVERRIDE; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InstallUIAbort(bool user_initiated) OVERRIDE; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extension_id_; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used for prompting to re-enable items with permissions escalation updates. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionInstallPrompt> install_prompt_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementUninstallFunctionBase : public AsyncManagementFunction, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ExtensionUninstallDialog::Delegate { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagementUninstallFunctionBase(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetAutoConfirmForTest(bool should_proceed); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionUninstallDialog::Delegate implementation. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensionUninstallAccepted() OVERRIDE; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensionUninstallCanceled() OVERRIDE; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementUninstallFunctionBase(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool Uninstall(const std::string& extension_id, bool show_confirm_dialog); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If should_uninstall is true, this method does the actual uninstall. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |show_uninstall_dialog|, then this function will be called by one of the 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Accepted/Canceled callbacks. Otherwise, it's called directly from RunAsync. 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Finish(bool should_uninstall); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string extension_id_; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementUninstallFunction : public ManagementUninstallFunctionBase { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.uninstall", MANAGEMENT_UNINSTALL) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagementUninstallFunction(); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementUninstallFunction(); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ManagementUninstallSelfFunction : public ManagementUninstallFunctionBase { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.uninstallSelf", 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MANAGEMENT_UNINSTALLSELF); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ManagementUninstallSelfFunction(); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementUninstallSelfFunction(); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 188010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 189010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 190010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 191010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ManagementCreateAppShortcutFunction : public AsyncManagementFunction { 192010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 193010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.createAppShortcut", 194010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) MANAGEMENT_CREATEAPPSHORTCUT); 195010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 196010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ManagementCreateAppShortcutFunction(); 197010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 198010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void OnCloseShortcutPrompt(bool created); 199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 200010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static void SetAutoConfirmForTest(bool should_proceed); 201010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 202010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) protected: 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~ManagementCreateAppShortcutFunction(); 204010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class ManagementSetLaunchTypeFunction : public ManagementFunction { 209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.setLaunchType", 211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MANAGEMENT_SETLAUNCHTYPE); 212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected: 214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual ~ManagementSetLaunchTypeFunction() {} 215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool RunSync() OVERRIDE; 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ManagementGenerateAppForLinkFunction : public AsyncManagementFunction { 22046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 22146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DECLARE_EXTENSION_FUNCTION("management.generateAppForLink", 22246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MANAGEMENT_GENERATEAPPFORLINK); 22346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ManagementGenerateAppForLinkFunction(); 22546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected: 22746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~ManagementGenerateAppForLinkFunction(); 22846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 22946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool RunAsync() OVERRIDE; 23046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 23246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void OnFaviconForApp(const favicon_base::FaviconImageResult& image_result); 2336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void FinishCreateBookmarkApp(const Extension* extension, 23446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WebApplicationInfo& web_app_info); 23546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string title_; 23746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL launch_url_; 23846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 23946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<BookmarkAppHelper> bookmark_app_helper_; 24046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 24146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Used for favicon loading tasks. 24246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::CancelableTaskTracker cancelable_task_tracker_; 24346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 24446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class ManagementEventRouter : public ExtensionRegistryObserver { 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) explicit ManagementEventRouter(content::BrowserContext* context); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementEventRouter(); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // ExtensionRegistryObserver implementation. 2526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnExtensionLoaded(content::BrowserContext* browser_context, 2536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const Extension* extension) OVERRIDE; 2546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnExtensionUnloaded( 2556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::BrowserContext* browser_context, 2566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const Extension* extension, 2576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) UnloadedExtensionInfo::Reason reason) OVERRIDE; 2586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnExtensionInstalled(content::BrowserContext* browser_context, 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension, 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool is_update) OVERRIDE; 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnExtensionUninstalled( 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::BrowserContext* browser_context, 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const Extension* extension, 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::UninstallReason reason) OVERRIDE; 2656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 2666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Dispatches management api events to listening extensions. 2676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void BroadcastEvent(const Extension* extension, const char* event_name); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content::BrowserContext* browser_context_; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 2726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) extension_registry_observer_; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ManagementEventRouter); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class ManagementAPI : public BrowserContextKeyedAPI, 2786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public EventRouter::Observer { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) explicit ManagementAPI(content::BrowserContext* context); 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ManagementAPI(); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedService implementation. 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // BrowserContextKeyedAPI implementation. 287a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static BrowserContextKeyedAPIFactory<ManagementAPI>* GetFactoryInstance(); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // EventRouter::Observer implementation. 2906d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 293a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) friend class BrowserContextKeyedAPIFactory<ManagementAPI>; 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) content::BrowserContext* browser_context_; 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 297a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // BrowserContextKeyedAPI implementation. 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const char* service_name() { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "ManagementAPI"; 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const bool kServiceIsNULLWhileTesting = true; 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Created lazily upon OnListenerAdded. 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ManagementEventRouter> management_event_router_; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ManagementAPI); 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_API_MANAGEMENT_MANAGEMENT_API_H_ 312