summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/resources/md_extensions/service.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/browser/resources/md_extensions/service.js')
-rw-r--r--chromium/chrome/browser/resources/md_extensions/service.js158
1 files changed, 158 insertions, 0 deletions
diff --git a/chromium/chrome/browser/resources/md_extensions/service.js b/chromium/chrome/browser/resources/md_extensions/service.js
new file mode 100644
index 00000000000..a0837206eb1
--- /dev/null
+++ b/chromium/chrome/browser/resources/md_extensions/service.js
@@ -0,0 +1,158 @@
+// 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.
+
+cr.define('extensions', function() {
+ 'use strict';
+
+ /**
+ * @constructor
+ * @implements {extensions.ItemDelegate}
+ * @implements {extensions.SidebarDelegate}
+ */
+ function Service() {}
+
+ Service.prototype = {
+ /** @private {boolean} */
+ promptIsShowing_: false,
+
+ /** @param {extensions.Manager} manager */
+ managerReady: function(manager) {
+ /** @private {extensions.Manager} */
+ this.manager_ = manager;
+ /** @private {extensions.Sidebar} */
+ this.sidebar_ = manager.sidebar;
+ this.sidebar_.setDelegate(this);
+ chrome.developerPrivate.onProfileStateChanged.addListener(
+ this.onProfileStateChanged_.bind(this));
+ chrome.developerPrivate.onItemStateChanged.addListener(
+ this.onItemStateChanged_.bind(this));
+ chrome.developerPrivate.getExtensionsInfo(
+ {includeDisabled: true, includeTerminated: true},
+ function(extensions) {
+ /** @private {Array<chrome.developerPrivate.ExtensionInfo>} */
+ this.extensions_ = extensions;
+ for (let extension of extensions)
+ this.manager_.addItem(extension);
+ }.bind(this));
+ chrome.developerPrivate.getProfileConfiguration(
+ this.onProfileStateChanged_.bind(this));
+ },
+
+ /**
+ * @param {chrome.developerPrivate.ProfileInfo} profileInfo
+ * @private
+ */
+ onProfileStateChanged_: function(profileInfo) {
+ /** @private {chrome.developerPrivate.ProfileInfo} */
+ this.profileInfo_ = profileInfo;
+ this.manager_.set('inDevMode', profileInfo.inDeveloperMode);
+ },
+
+ /**
+ * @param {chrome.developerPrivate.EventData} eventData
+ * @private
+ */
+ onItemStateChanged_: function(eventData) {
+ var currentIndex = this.extensions_.findIndex(function(extension) {
+ return extension.id == eventData.item_id;
+ });
+
+ var EventType = chrome.developerPrivate.EventType;
+ switch (eventData.event_type) {
+ case EventType.VIEW_REGISTERED:
+ case EventType.VIEW_UNREGISTERED:
+ case EventType.INSTALLED:
+ case EventType.LOADED:
+ case EventType.UNLOADED:
+ case EventType.ERROR_ADDED:
+ case EventType.ERRORS_REMOVED:
+ case EventType.PREFS_CHANGED:
+ // |extensionInfo| can be undefined in the case of an extension
+ // being unloaded right before uninstallation. There's nothing to do
+ // here.
+ if (!eventData.extensionInfo)
+ break;
+
+ if (currentIndex >= 0) {
+ this.extensions_[currentIndex] = eventData.extensionInfo;
+ this.manager_.updateItem(eventData.extensionInfo);
+ } else {
+ this.extensions_.push(eventData.extensionInfo);
+ this.manager_.addItem(eventData.extensionInfo);
+ }
+ break;
+ case EventType.UNINSTALLED:
+ this.manager_.removeItem(this.extensions_[currentIndex]);
+ this.extensions_.splice(currentIndex, 1);
+ break;
+ default:
+ assertNotReached();
+ }
+ },
+
+ /** @override */
+ deleteItem: function(id) {
+ if (this.promptIsShowing_)
+ return;
+ this.promptIsShowing_ = true;
+ chrome.management.uninstall(id, {showConfirmDialog: true}, function() {
+ // The "last error" was almost certainly the user canceling the dialog.
+ // Do nothing. We only check it so we don't get noisy logs.
+ /** @suppress {suspiciousCode} */
+ chrome.runtime.lastError;
+ this.promptIsShowing_ = false;
+ }.bind(this));
+ },
+
+ /** @override */
+ setItemEnabled: function(id, isEnabled) {
+ chrome.management.setEnabled(id, isEnabled);
+ },
+
+ /** @override */
+ showItemDetails: function(id) {},
+
+ /** @override */
+ setItemAllowedIncognito: function(id, isAllowedIncognito) {
+ chrome.developerPrivate.updateExtensionConfiguration({
+ extensionId: id,
+ incognitoAccess: isAllowedIncognito,
+ });
+ },
+
+ /** @override */
+ inspectItemView: function(id, view) {
+ chrome.developerPrivate.openDevTools({
+ extensionId: id,
+ renderProcessId: view.renderProcessId,
+ renderViewId: view.renderViewId,
+ incognito: view.incognito,
+ });
+ },
+
+ /** @override */
+ setProfileInDevMode: function(inDevMode) {
+ chrome.developerPrivate.updateProfileConfiguration(
+ {inDeveloperMode: inDevMode});
+ },
+
+ /** @override */
+ loadUnpacked: function() {
+ chrome.developerPrivate.loadUnpacked({failQuietly: true});
+ },
+
+ /** @override */
+ packExtension: function() {
+ },
+
+ /** @override */
+ updateAllExtensions: function() {
+ chrome.developerPrivate.autoUpdate();
+ },
+ };
+
+ cr.addSingletonGetter(Service);
+
+ return {Service: Service};
+});