diff options
9 files changed, 351 insertions, 216 deletions
diff --git a/chrome/browser/resources/options/chromeos/network_list.js b/chrome/browser/resources/options/chromeos/network_list.js index 27deb6d..3d81804 100644 --- a/chrome/browser/resources/options/chromeos/network_list.js +++ b/chrome/browser/resources/options/chromeos/network_list.js @@ -2,15 +2,6 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -// TODO: /** @typedef {chrome.networkingPrivate.ThirdPartyVPNProperties} */ -/** - * @typedef {{ - * ExtensionID: string, - * ProviderName: string - * }} - */ -var ThirdPartyVPNProperties; - /** * Partial definition of the result of networkingPrivate.getProperties()). * TODO(stevenjb): Replace with chrome.networkingPrivate.NetworkStateProperties @@ -29,13 +20,15 @@ var ThirdPartyVPNProperties; * Type: string, * VPN: ?{ * Type: string, - * ThirdPartyVPN: ThirdPartyVPNProperties + * ThirdPartyVPN: chrome.networkingPrivate.ThirdPartyVPNProperties * } * }} * @see extensions/common/api/networking_private.idl */ var NetworkProperties; +/** @typedef {chrome.management.ExtensionInfo} */ var ExtensionInfo; + cr.define('options.network', function() { var ArrayDataModel = cr.ui.ArrayDataModel; var List = cr.ui.List; @@ -118,6 +111,13 @@ cr.define('options.network', function() { var wimaxDeviceState_ = undefined; /** + * The current list of third-party VPN providers. + * @type {!Array<!chrome.networkingPrivate.ThirdPartyVPNProperties>}} + * @private + */ + var vpnProviders_ = []; + + /** * Indicates if mobile data roaming is enabled. * @type {boolean} * @private @@ -917,9 +917,18 @@ cr.define('options.network', function() { chrome.networkingPrivate.onDeviceStateListChanged.addListener( this.onNetworkListChanged_.bind(this)); + chrome.management.onInstalled.addListener( + this.onExtensionAdded_.bind(this)); + chrome.management.onEnabled.addListener( + this.onExtensionAdded_.bind(this)); + chrome.management.onUninstalled.addListener( + this.onExtensionRemoved_.bind(this)); + chrome.management.onDisabled.addListener(function(extension) { + this.onExtensionRemoved_(extension.id); + }.bind(this)); + + chrome.management.getAll(this.onGetAllExtensions_.bind(this)); chrome.networkingPrivate.requestNetworkScan(); - - options.VPNProviders.addObserver(this.onVPNProvidersChanged_.bind(this)); }, /** @@ -938,11 +947,71 @@ cr.define('options.network', function() { }, /** - * Called when the list of VPN providers changes. Refreshes the contents of - * menus that list VPN providers. + * chrome.management.getAll callback. + * @param {!Array<!ExtensionInfo>} extensions + * @private + */ + onGetAllExtensions_: function(extensions) { + vpnProviders_ = []; + for (var extension of extensions) + this.addVpnProvider_(extension); + }, + + /** + * If |extension| is a third-party VPN provider, add it to vpnProviders_. + * @param {!ExtensionInfo} extension + * @private + */ + addVpnProvider_: function(extension) { + if (!extension.enabled || + extension.permissions.indexOf('vpnProvider') == -1) { + return; + } + // Ensure that we haven't already added this provider, e.g. if + // the onExtensionAdded_ callback gets invoked after onGetAllExtensions_ + // for an extension in the returned list. + for (var provider of vpnProviders_) { + if (provider.ExtensionID == extension.id) + return; + } + var newProvider = { + ExtensionID: extension.id, + ProviderName: extension.name + }; + vpnProviders_.push(newProvider); + this.refreshVpnProviders_(); + }, + + /** + * chrome.management.onInstalled or onEnabled event. + * @param {!ExtensionInfo} extension + * @private + */ + onExtensionAdded_: function(extension) { + this.addVpnProvider_(extension); + }, + + /** + * chrome.management.onUninstalled or onDisabled event. + * @param {string} extensionId + * @private + */ + onExtensionRemoved_: function(extensionId) { + for (var i = 0; i < vpnProviders_.length; ++i) { + var provider = vpnProviders_[i]; + if (provider.ExtensionID == extensionId) { + vpnProviders_.splice(i, 1); + this.refreshVpnProviders_(); + break; + } + } + }, + + /** + * Rebuilds the list of VPN providers. * @private */ - onVPNProvidersChanged_: function() { + refreshVpnProviders_: function() { // Refresh the contents of the VPN menu. var index = this.indexOf('VPN'); if (index != undefined) @@ -957,7 +1026,7 @@ cr.define('options.network', function() { /** * Updates the entries in the "add connection" menu, based on the VPN - * providers currently enabled in the primary user's profile. + * providers currently enabled in the user's profile. * @private */ updateAddConnectionMenuEntries_: function() { @@ -1417,23 +1486,28 @@ cr.define('options.network', function() { /** * Generates an "add network" entry for each VPN provider currently enabled in - * the primary user's profile. + * the user's profile. * @return {!Array<{label: string, command: function(), data: !Object}>} The * list of entries. * @private */ function createAddVPNConnectionEntries_() { var entries = []; - var providers = options.VPNProviders.getProviders(); - for (var i = 0; i < providers.length; ++i) { + for (var i = 0; i < vpnProviders_.length; ++i) { + var provider = vpnProviders_[i]; entries.push({ label: loadTimeData.getStringF('addConnectionVPNTemplate', - providers[i].name), - command: createVPNConnectionCallback_( - providers[i].extensionID || undefined), + provider.ProviderName), + command: createVPNConnectionCallback_(provider.ExtensionID), data: {} }); } + // Add an entry for the built-in OpenVPN/L2TP provider. + entries.push({ + label: loadTimeData.getString('vpnBuiltInProvider'), + command: createVPNConnectionCallback_(), + data: {} + }); return entries; } diff --git a/chrome/browser/resources/options/chromeos/vpn_providers.js b/chrome/browser/resources/options/chromeos/vpn_providers.js deleted file mode 100644 index 9ec7145..0000000 --- a/chrome/browser/resources/options/chromeos/vpn_providers.js +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -/** - * @fileoverview A singleton that keeps track of the VPN providers enabled in - * the primary user's profile. - */ - -cr.define('options', function() { - /** - * @constructor - */ - function VPNProviders() { - } - - cr.addSingletonGetter(VPNProviders); - - VPNProviders.prototype = { - /** - * The VPN providers enabled in the primary user's profile. Each provider - * has a name. Third-party VPN providers additionally have an extension ID. - * @type {!Array<{name: string, extensionID: ?string}>} - * @private - */ - providers_: [], - - /** - * Observers who will be called when the list of VPN providers changes. - * @type {!Array<!function()>} - */ - observers_: [], - - /** - * The VPN providers enabled in the primary user's profile. - * @type {!Array<{name: string, extensionID: ?string}>} - */ - get providers() { - return this.providers_; - }, - set providers(providers) { - this.providers_ = providers; - for (var i = 0; i < this.observers_.length; ++i) - this.observers_[i](); - }, - - /** - * Adds an observer to be called when the list of VPN providers changes. - * @param {!function()} observer The observer to add. - * @private - */ - addObserver_: function(observer) { - this.observers_.push(observer); - }, - }; - - /** - * Adds an observer to be called when the list of VPN providers changes. Note - * that an observer may in turn call setProviders() but should be careful not - * to get stuck in an infinite loop as every change to the list of VPN - * providers will cause the observers to be called again. - * @param {!function()} observer The observer to add. - */ - VPNProviders.addObserver = function(observer) { - VPNProviders.getInstance().addObserver_(observer); - }; - - /** - * Returns the list of VPN providers enabled in the primary user's profile. - * @return {!Array<{name: string, extensionID: ?string}>} The list of VPN - * providers enabled in the primary user's profile. - */ - VPNProviders.getProviders = function() { - return VPNProviders.getInstance().providers; - }; - - /** - * Replaces the list of VPN providers enabled in the primary user's profile. - * @param {!Array<{name: string, extensionID: ?string}>} providers The list - * of VPN providers enabled in the primary user's profile. - */ - VPNProviders.setProviders = function(providers) { - VPNProviders.getInstance().providers = providers; - }; - - // Export - return { - VPNProviders: VPNProviders - }; -}); diff --git a/chrome/browser/resources/options/compiled_resources.gyp b/chrome/browser/resources/options/compiled_resources.gyp index a5ccac8..5b92fa5 100644 --- a/chrome/browser/resources/options/compiled_resources.gyp +++ b/chrome/browser/resources/options/compiled_resources.gyp @@ -46,6 +46,7 @@ # no possibility to use gyp variable expansion to it, so we don't use # <(CLOSURE_DIR) in the "externs" line. 'externs': [ + '../../../../third_party/closure_compiler/externs/management.js', '../../../../third_party/closure_compiler/externs/networking_private.js', '../../../../third_party/closure_compiler/externs/chrome_send.js', '../../../../ui/webui/resources/cr_elements/v1_0/network/cr_network_icon_externs.js', diff --git a/chrome/browser/resources/options/options_bundle.js b/chrome/browser/resources/options/options_bundle.js index 075754a..30be7eb 100644 --- a/chrome/browser/resources/options/options_bundle.js +++ b/chrome/browser/resources/options/options_bundle.js @@ -20,7 +20,6 @@ <include src="../help/channel_change_page.js"> <include src="../../../../ui/webui/resources/js/chromeos/ui_account_tweaks.js"> <include src="chromeos/onc_data.js"> -<include src="chromeos/vpn_providers.js"> <include src="chromeos/change_picture_options.js"> <include src="chromeos/internet_detail_ip_address_field.js"> <include src="chromeos/internet_detail.js"> diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc index a91b591..99fed2f 100644 --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc @@ -13,7 +13,6 @@ #include "base/basictypes.h" #include "base/bind.h" #include "base/bind_helpers.h" -#include "base/memory/scoped_ptr.h" #include "base/values.h" #include "chrome/browser/chromeos/enrollment_dialog_view.h" #include "chrome/browser/chromeos/mobile_config.h" @@ -36,16 +35,9 @@ #include "content/public/browser/web_ui.h" #include "extensions/browser/api/vpn_provider/vpn_service.h" #include "extensions/browser/api/vpn_provider/vpn_service_factory.h" -#include "extensions/browser/extension_registry.h" -#include "extensions/common/extension.h" -#include "extensions/common/extension_set.h" -#include "extensions/common/permissions/api_permission.h" -#include "extensions/common/permissions/permissions_data.h" #include "third_party/cros_system_api/dbus/service_constants.h" -#include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h" #include "ui/chromeos/network/network_connect.h" -#include "ui/chromeos/strings/grit/ui_chromeos_strings.h" namespace chromeos { namespace options { @@ -55,9 +47,6 @@ namespace { // Keys for the initial "localized" dictionary values. const char kLoggedInAsOwnerKey[] = "loggedInAsOwner"; -// Functions we call in JavaScript. -const char kSetVPNProvidersFunction[] = "options.VPNProviders.setProviders"; - // JS methods to show additional UI. const char kShowMorePlanInfoMessage[] = "showMorePlanInfo"; const char kSimOperationMessage[] = "simOperation"; @@ -73,8 +62,6 @@ const char kTagSimOpConfigure[] = "configure"; const char kTagSimOpSetLocked[] = "setLocked"; const char kTagSimOpSetUnlocked[] = "setUnlocked"; const char kTagSimOpUnlock[] = "unlock"; -const char kTagVPNProviderName[] = "name"; -const char kTagVPNProviderExtensionID[] = "extensionID"; const NetworkState* GetNetworkState(const std::string& service_path) { return NetworkHandler::Get()->network_state_handler()-> @@ -88,41 +75,18 @@ std::string ServicePathFromGuid(const std::string& guid) { return network ? network->path() : ""; } -bool IsVPNProvider(const extensions::Extension* extension) { - return extension->permissions_data()->HasAPIPermission( - extensions::APIPermission::kVpnProvider); -} - Profile* GetProfileForPrimaryUser() { return chromeos::ProfileHelper::Get()->GetProfileByUser( user_manager::UserManager::Get()->GetPrimaryUser()); } -extensions::ExtensionRegistry* GetExtensionRegistryForPrimaryUser() { - return extensions::ExtensionRegistry::Get(GetProfileForPrimaryUser()); -} - -scoped_ptr<base::DictionaryValue> BuildVPNProviderDictionary( - const std::string& name, - const std::string& third_party_provider_extension_id) { - scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); - dict->SetString(kTagVPNProviderName, name); - if (!third_party_provider_extension_id.empty()) { - dict->SetString(kTagVPNProviderExtensionID, - third_party_provider_extension_id); - } - return dict.Pass(); -} - } // namespace InternetOptionsHandler::InternetOptionsHandler() : weak_factory_(this) { - GetExtensionRegistryForPrimaryUser()->AddObserver(this); } InternetOptionsHandler::~InternetOptionsHandler() { - GetExtensionRegistryForPrimaryUser()->RemoveObserver(this); } void InternetOptionsHandler::GetLocalizedValues( @@ -130,8 +94,7 @@ void InternetOptionsHandler::GetLocalizedValues( DCHECK(localized_strings); internet_options_strings::RegisterLocalizedStrings(localized_strings); - // TODO(stevenjb): Find a better way to populate initial data before - // InitializePage() gets called. + // TODO(stevenjb): Find a better way to populate initial data. std::string owner; chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); bool logged_in_as_owner = LoginState::Get()->GetLoggedInUserType() == @@ -139,10 +102,6 @@ void InternetOptionsHandler::GetLocalizedValues( localized_strings->SetBoolean(kLoggedInAsOwnerKey, logged_in_as_owner); } -void InternetOptionsHandler::InitializePage() { - UpdateVPNProviders(); -} - void InternetOptionsHandler::RegisterMessages() { web_ui()->RegisterMessageCallback(kAddVPNConnectionMessage, base::Bind(&InternetOptionsHandler::AddVPNConnection, @@ -161,26 +120,6 @@ void InternetOptionsHandler::RegisterMessages() { base::Unretained(this))); } -void InternetOptionsHandler::OnExtensionLoaded( - content::BrowserContext* browser_context, - const extensions::Extension* extension) { - if (IsVPNProvider(extension)) - UpdateVPNProviders(); -} - -void InternetOptionsHandler::OnExtensionUnloaded( - content::BrowserContext* browser_context, - const extensions::Extension* extension, - extensions::UnloadedExtensionInfo::Reason reason) { - if (IsVPNProvider(extension)) - UpdateVPNProviders(); -} - -void InternetOptionsHandler::OnShutdown( - extensions::ExtensionRegistry* registry) { - registry->RemoveObserver(this); -} - void InternetOptionsHandler::ShowMorePlanInfoCallback( const base::ListValue* args) { if (!web_ui()) @@ -229,26 +168,6 @@ void InternetOptionsHandler::SimOperationCallback(const base::ListValue* args) { //////////////////////////////////////////////////////////////////////////////// -void InternetOptionsHandler::UpdateVPNProviders() { - extensions::ExtensionRegistry* const registry = - GetExtensionRegistryForPrimaryUser(); - - base::ListValue vpn_providers; - const extensions::ExtensionSet& extensions = registry->enabled_extensions(); - for (const auto& extension : extensions) { - if (IsVPNProvider(extension.get())) { - vpn_providers.Append(BuildVPNProviderDictionary( - extension->name(), extension->id()).release()); - } - } - // Add the built-in OpenVPN/L2TP provider. - vpn_providers.Append( - BuildVPNProviderDictionary( - l10n_util::GetStringUTF8(IDS_NETWORK_VPN_BUILT_IN_PROVIDER), - std::string() /* third_party_provider_extension_id */).release()); - web_ui()->CallJavascriptFunction(kSetVPNProvidersFunction, vpn_providers); -} - gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); } diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.h b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.h index 17c3030..d3c7da2 100644 --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.h +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.h @@ -10,7 +10,6 @@ #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/options/options_ui.h" -#include "extensions/browser/extension_registry_observer.h" #include "ui/gfx/native_widget_types.h" class Browser; @@ -28,8 +27,7 @@ namespace chromeos { namespace options { // ChromeOS internet options page UI handler. -class InternetOptionsHandler : public ::options::OptionsPageUIHandler, - public extensions::ExtensionRegistryObserver { +class InternetOptionsHandler : public ::options::OptionsPageUIHandler { public: InternetOptionsHandler(); ~InternetOptionsHandler() override; @@ -37,27 +35,14 @@ class InternetOptionsHandler : public ::options::OptionsPageUIHandler, private: // OptionsPageUIHandler void GetLocalizedValues(base::DictionaryValue* localized_strings) override; - void InitializePage() override; // WebUIMessageHandler (from OptionsPageUIHandler) void RegisterMessages() override; - // ExtensionRegistryObserver - void OnExtensionLoaded(content::BrowserContext* browser_context, - const extensions::Extension* extension) override; - void OnExtensionUnloaded( - content::BrowserContext* browser_context, - const extensions::Extension* extension, - extensions::UnloadedExtensionInfo::Reason reason) override; - void OnShutdown(extensions::ExtensionRegistry* registry) override; - // Callbacks to set network state properties. void ShowMorePlanInfoCallback(const base::ListValue* args); void SimOperationCallback(const base::ListValue* args); - // Updates the list of VPN providers enabled in the primary user's profile. - void UpdateVPNProviders(); - // Gets the native window for hosting dialogs, etc. gfx::NativeWindow GetNativeWindow() const; @@ -69,10 +54,6 @@ class InternetOptionsHandler : public ::options::OptionsPageUIHandler, void AddNonVPNConnection(const base::ListValue* args); void ConfigureNetwork(const base::ListValue* args); - // Requests that a list of VPN providers enabled in the primary user's - // profile be sent to JavaScript. - void LoadVPNProvidersCallback(const base::ListValue* args); - // Weak pointer factory so we can start connections at a later time // without worrying that they will actually try to happen after the lifetime // of this object. diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc index 7493004..86ffa09 100644 --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.cc @@ -8,6 +8,7 @@ #include "base/values.h" #include "chrome/grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" +#include "ui/chromeos/strings/grit/ui_chromeos_strings.h" namespace chromeos { namespace internet_options_strings { @@ -31,6 +32,7 @@ StringResource kStringResources[] = { IDS_OPTIONS_SETTINGS_SECTION_THIRD_PARTY_VPN_NAME_TEMPLATE}, {"defaultThirdPartyProviderName", IDS_OPTIONS_SETTINGS_SECTION_DEFAULT_THIRD_PARTY_PROVIDER_NAME}, + {"vpnBuiltInProvider", IDS_NETWORK_VPN_BUILT_IN_PROVIDER}, {"joinOtherNetwork", IDS_OPTIONS_SETTINGS_NETWORK_OTHER}, {"networkDisabled", IDS_OPTIONS_SETTINGS_NETWORK_DISABLED}, {"turnOffWifi", IDS_OPTIONS_SETTINGS_NETWORK_DISABLE_WIFI}, diff --git a/extensions/common/api/_api_features.json b/extensions/common/api/_api_features.json index 46eade6..bba4b4f 100644 --- a/extensions/common/api/_api_features.json +++ b/extensions/common/api/_api_features.json @@ -195,7 +195,10 @@ "matches": [ "chrome://extensions/*", "chrome://extensions-frame/*", - "chrome://chrome/extensions/*" + "chrome://chrome/extensions/*", + "chrome://md-settings/*", + "chrome://settings/*", + "chrome://settings-frame/*" ] }], "management.getPermissionWarningsByManifest": { diff --git a/third_party/closure_compiler/externs/management.js b/third_party/closure_compiler/externs/management.js new file mode 100644 index 0000000..9233173 --- /dev/null +++ b/third_party/closure_compiler/externs/management.js @@ -0,0 +1,246 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file was generated by: +// ./tools/json_schema_compiler/compiler.py. +// NOTE: The format of types has changed. 'FooType' is now +// 'chrome.management.FooType'. +// Please run the closure compiler before committing changes. +// See https://code.google.com/p/chromium/wiki/ClosureCompilation. + +/** @fileoverview Externs generated from namespace: management */ + +/** + * @const + */ +chrome.management = {}; + +/** + * Information about an icon belonging to an extension, app, or theme. + * @typedef {{ + * size: number, + * url: string + * }} + * @see https://developer.chrome.com/extensions/management#type-IconInfo + */ +chrome.management.IconInfo; + +/** + * @enum {string} + * @see https://developer.chrome.com/extensions/management#type-LaunchType + */ +chrome.management.LaunchType = { + OPEN_AS_REGULAR_TAB: 'OPEN_AS_REGULAR_TAB', + OPEN_AS_PINNED_TAB: 'OPEN_AS_PINNED_TAB', + OPEN_AS_WINDOW: 'OPEN_AS_WINDOW', + OPEN_FULL_SCREEN: 'OPEN_FULL_SCREEN', +}; + +/** + * @enum {string} + * @see https://developer.chrome.com/extensions/management#type-ExtensionDisabledReason + */ +chrome.management.ExtensionDisabledReason = { + UNKNOWN: 'unknown', + PERMISSIONS_INCREASE: 'permissions_increase', +}; + +/** + * @enum {string} + * @see https://developer.chrome.com/extensions/management#type-ExtensionType + */ +chrome.management.ExtensionType = { + EXTENSION: 'extension', + HOSTED_APP: 'hosted_app', + PACKAGED_APP: 'packaged_app', + LEGACY_PACKAGED_APP: 'legacy_packaged_app', + THEME: 'theme', +}; + +/** + * @enum {string} + * @see https://developer.chrome.com/extensions/management#type-ExtensionInstallType + */ +chrome.management.ExtensionInstallType = { + ADMIN: 'admin', + DEVELOPMENT: 'development', + NORMAL: 'normal', + SIDELOAD: 'sideload', + OTHER: 'other', +}; + +/** + * Information about an installed extension, app, or theme. + * @typedef {{ + * id: string, + * name: string, + * shortName: string, + * description: string, + * version: string, + * mayDisable: boolean, + * enabled: boolean, + * disabledReason: (!chrome.management.ExtensionDisabledReason|undefined), + * isApp: boolean, + * type: !chrome.management.ExtensionType, + * appLaunchUrl: (string|undefined), + * homepageUrl: (string|undefined), + * updateUrl: (string|undefined), + * offlineEnabled: boolean, + * optionsUrl: string, + * icons: (!Array<!chrome.management.IconInfo>|undefined), + * permissions: !Array<string>, + * hostPermissions: !Array<string>, + * installType: !chrome.management.ExtensionInstallType, + * launchType: (!chrome.management.LaunchType|undefined), + * availableLaunchTypes: (!Array<!chrome.management.LaunchType>|undefined) + * }} + * @see https://developer.chrome.com/extensions/management#type-ExtensionInfo + */ +chrome.management.ExtensionInfo; + +/** + * Returns a list of information about installed extensions and apps. + * @param {function(!Array<!chrome.management.ExtensionInfo>):void=} callback + * @see https://developer.chrome.com/extensions/management#method-getAll + */ +chrome.management.getAll = function(callback) {}; + +/** + * Returns information about the installed extension, app, or theme that has the + * given ID. + * @param {string} id The ID from an item of $(ref:management.ExtensionInfo). + * @param {function(!chrome.management.ExtensionInfo):void=} callback + * @see https://developer.chrome.com/extensions/management#method-get + */ +chrome.management.get = function(id, callback) {}; + +/** + * Returns information about the calling extension, app, or theme. Note: This + * function can be used without requesting the 'management' permission in the + * manifest. + * @param {function(!chrome.management.ExtensionInfo):void=} callback + * @see https://developer.chrome.com/extensions/management#method-getSelf + */ +chrome.management.getSelf = function(callback) {}; + +/** + * Returns a list of <a href='permission_warnings'>permission warnings</a> for + * the given extension id. + * @param {string} id The ID of an already installed extension. + * @param {function(!Array<string>):void=} callback + * @see https://developer.chrome.com/extensions/management#method-getPermissionWarningsById + */ +chrome.management.getPermissionWarningsById = function(id, callback) {}; + +/** + * Returns a list of <a href='permission_warnings'>permission warnings</a> for + * the given extension manifest string. Note: This function can be used without + * requesting the 'management' permission in the manifest. + * @param {string} manifestStr Extension manifest JSON string. + * @param {function(!Array<string>):void=} callback + * @see https://developer.chrome.com/extensions/management#method-getPermissionWarningsByManifest + */ +chrome.management.getPermissionWarningsByManifest = function(manifestStr, callback) {}; + +/** + * Enables or disables an app or extension. + * @param {string} id This should be the id from an item of + * $(ref:management.ExtensionInfo). + * @param {boolean} enabled Whether this item should be enabled or disabled. + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-setEnabled + */ +chrome.management.setEnabled = function(id, enabled, callback) {}; + +/** + * Uninstalls a currently installed app or extension. + * @param {string} id This should be the id from an item of + * $(ref:management.ExtensionInfo). + * @param {{ + * showConfirmDialog: (boolean|undefined) + * }=} options + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-uninstall + */ +chrome.management.uninstall = function(id, options, callback) {}; + +/** + * Uninstalls the calling extension. Note: This function can be used without + * requesting the 'management' permission in the manifest. + * @param {{ + * showConfirmDialog: (boolean|undefined) + * }=} options + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-uninstallSelf + */ +chrome.management.uninstallSelf = function(options, callback) {}; + +/** + * Launches an application. + * @param {string} id The extension id of the application. + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-launchApp + */ +chrome.management.launchApp = function(id, callback) {}; + +/** + * Display options to create shortcuts for an app. On Mac, only packaged app + * shortcuts can be created. + * @param {string} id This should be the id from an app item of + * $(ref:management.ExtensionInfo). + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-createAppShortcut + */ +chrome.management.createAppShortcut = function(id, callback) {}; + +/** + * Set the launch type of an app. + * @param {string} id This should be the id from an app item of + * $(ref:management.ExtensionInfo). + * @param {!chrome.management.LaunchType} launchType The target launch type. + * Always check and make sure this launch type is in + * $(ref:ExtensionInfo.availableLaunchTypes), because the available launch + * types vary on different platforms and configurations. + * @param {function():void=} callback + * @see https://developer.chrome.com/extensions/management#method-setLaunchType + */ +chrome.management.setLaunchType = function(id, launchType, callback) {}; + +/** + * Generate an app for a URL. Returns the generated bookmark app. + * @param {string} url The URL of a web page. The scheme of the URL can only be + * "http" or "https". + * @param {string} title The title of the generated app. + * @param {function(!chrome.management.ExtensionInfo):void=} callback + * @see https://developer.chrome.com/extensions/management#method-generateAppForLink + */ +chrome.management.generateAppForLink = function(url, title, callback) {}; + +/** + * Fired when an app or extension has been installed. + * @type {!ChromeEvent} + * @see https://developer.chrome.com/extensions/management#event-onInstalled + */ +chrome.management.onInstalled; + +/** + * Fired when an app or extension has been uninstalled. + * @type {!ChromeEvent} + * @see https://developer.chrome.com/extensions/management#event-onUninstalled + */ +chrome.management.onUninstalled; + +/** + * Fired when an app or extension has been enabled. + * @type {!ChromeEvent} + * @see https://developer.chrome.com/extensions/management#event-onEnabled + */ +chrome.management.onEnabled; + +/** + * Fired when an app or extension has been disabled. + * @type {!ChromeEvent} + * @see https://developer.chrome.com/extensions/management#event-onDisabled + */ +chrome.management.onDisabled; |