| Index: chrome/browser/resources/options/extension_list.js
|
| diff --git a/chrome/browser/resources/options/extension_list.js b/chrome/browser/resources/options/extension_list.js
|
| deleted file mode 100644
|
| index d674c47b034fda0e96ca39701eddae325f57946c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/resources/options/extension_list.js
|
| +++ /dev/null
|
| @@ -1,773 +0,0 @@
|
| -// Copyright (c) 2012 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('options', function() {
|
| - 'use strict';
|
| -
|
| - /**
|
| - * A lookup helper function to find the first node that has an id (starting
|
| - * at |node| and going up the parent chain).
|
| - * @param {Element} node The node to start looking at.
|
| - */
|
| - function findIdNode(node) {
|
| - while (node && !node.id) {
|
| - node = node.parentNode;
|
| - }
|
| - return node;
|
| - }
|
| -
|
| - /**
|
| - * Creates a new list of extensions.
|
| - * @param {Object=} opt_propertyBag Optional properties.
|
| - * @constructor
|
| - * @extends {cr.ui.div}
|
| - */
|
| - var ExtensionsList = cr.ui.define('div');
|
| -
|
| - var handlersInstalled = false;
|
| -
|
| - /**
|
| - * @type {Object.<string, boolean>} A map from extension id to a boolean
|
| - * indicating whether its details section is expanded. This persists
|
| - * between calls to decorate.
|
| - */
|
| - var showingDetails = {};
|
| -
|
| - /**
|
| - * @type {Object.<string, boolean>} A map from extension id to a boolean
|
| - * indicating whether the incognito warning is showing. This persists
|
| - * between calls to decorate.
|
| - */
|
| - var showingWarning = {};
|
| -
|
| - ExtensionsList.prototype = {
|
| - __proto__: HTMLDivElement.prototype,
|
| -
|
| - /** @inheritDoc */
|
| - decorate: function() {
|
| - this.initControlsAndHandlers_();
|
| -
|
| - this.deleteExistingExtensionNodes_();
|
| -
|
| - this.showExtensionNodes_();
|
| - },
|
| -
|
| - /**
|
| - * Initializes the controls (toggle section and button) and installs
|
| - * handlers.
|
| - * @private
|
| - */
|
| - initControlsAndHandlers_: function() {
|
| - // Make sure developer mode section is set correctly as per saved setting.
|
| - var toggleButton = $('toggle-dev-on');
|
| - var toggleSection = $('dev');
|
| - if (this.data_.developerMode) {
|
| - toggleSection.classList.add('dev-open');
|
| - toggleSection.classList.remove('dev-closed');
|
| - toggleButton.checked = true;
|
| - } else {
|
| - toggleSection.classList.remove('dev-open');
|
| - toggleSection.classList.add('dev-closed');
|
| - }
|
| -
|
| - // Instal global event handlers.
|
| - if (!handlersInstalled) {
|
| - var searchPage = SearchPage.getInstance();
|
| - searchPage.addEventListener('searchChanged',
|
| - this.searchChangedHandler_.bind(this));
|
| -
|
| - // Support full keyboard accessibility without making things ugly
|
| - // for users who click, by hiding some focus outlines when the user
|
| - // clicks anywhere, but showing them when the user presses any key.
|
| - this.ownerDocument.body.classList.add('hide-some-focus-outlines');
|
| - this.ownerDocument.addEventListener('click', (function(e) {
|
| - this.ownerDocument.body.classList.add('hide-some-focus-outlines');
|
| - return true;
|
| - }).bind(this), true);
|
| - this.ownerDocument.addEventListener('keydown', (function(e) {
|
| - this.ownerDocument.body.classList.remove('hide-some-focus-outlines');
|
| - return true;
|
| - }).bind(this), true);
|
| -
|
| - handlersInstalled = true;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Deletes the existing Extension nodes from the page to make room for new
|
| - * ones.
|
| - * @private
|
| - */
|
| - deleteExistingExtensionNodes_: function() {
|
| - while (this.hasChildNodes()){
|
| - this.removeChild(this.firstChild);
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Handles decorating the details section.
|
| - * @param {Element} details The div that the details should be attached to.
|
| - * @param {Object} extension The extension we are showing the details for.
|
| - * @private
|
| - */
|
| - showExtensionNodes_: function() {
|
| - // Iterate over the extension data and add each item to the list.
|
| - for (var i = 0; i < this.data_.extensions.length; i++) {
|
| - var extension = this.data_.extensions[i];
|
| - var id = extension.id;
|
| -
|
| - var wrapper = this.ownerDocument.createElement('div');
|
| -
|
| - var expanded = showingDetails[id];
|
| - var butterbar = showingWarning[id];
|
| -
|
| - wrapper.classList.add(expanded ? 'extension-list-item-expanded' :
|
| - 'extension-list-item-collaped');
|
| - if (!extension.enabled)
|
| - wrapper.classList.add('disabled');
|
| - wrapper.id = id;
|
| - this.appendChild(wrapper);
|
| -
|
| - var vboxOuter = this.ownerDocument.createElement('div');
|
| - vboxOuter.classList.add('vbox');
|
| - vboxOuter.classList.add('extension-list-item');
|
| - wrapper.appendChild(vboxOuter);
|
| -
|
| - var hbox = this.ownerDocument.createElement('div');
|
| - hbox.classList.add('hbox');
|
| - vboxOuter.appendChild(hbox);
|
| -
|
| - // Add a container div for the zippy, so we can extend the hit area.
|
| - var container = this.ownerDocument.createElement('div');
|
| - // Clicking anywhere on the div expands/collapses the details.
|
| - container.classList.add('extension-zippy-container');
|
| - container.title = expanded ?
|
| - localStrings.getString('extensionSettingsHideDetails') :
|
| - localStrings.getString('extensionSettingsShowDetails');
|
| - container.tabIndex = 0;
|
| - container.setAttribute('role', 'button');
|
| - container.setAttribute('aria-controls', extension.id + '_details');
|
| - container.setAttribute('aria-expanded', expanded);
|
| - container.addEventListener('click', this.handleZippyClick_.bind(this));
|
| - container.addEventListener('keydown',
|
| - this.handleZippyKeyDown_.bind(this));
|
| - hbox.appendChild(container);
|
| -
|
| - // On the far left we have the zippy icon.
|
| - var div = this.ownerDocument.createElement('div');
|
| - div.id = id + '_zippy';
|
| - div.classList.add('extension-zippy-default');
|
| - div.classList.add(expanded ? 'extension-zippy-expanded' :
|
| - 'extension-zippy-collapsed');
|
| - container.appendChild(div);
|
| -
|
| - // Next to it, we have the extension icon.
|
| - var icon = this.ownerDocument.createElement('img');
|
| - icon.classList.add('extension-icon');
|
| - icon.src = extension.icon;
|
| - hbox.appendChild(icon);
|
| -
|
| - // Start a vertical box for showing the details.
|
| - var vbox = this.ownerDocument.createElement('div');
|
| - vbox.classList.add('vbox');
|
| - vbox.classList.add('stretch');
|
| - vbox.classList.add('details-view');
|
| - hbox.appendChild(vbox);
|
| -
|
| - div = this.ownerDocument.createElement('div');
|
| - vbox.appendChild(div);
|
| -
|
| - // Title comes next.
|
| - var title = this.ownerDocument.createElement('span');
|
| - title.classList.add('extension-title');
|
| - title.textContent = extension.name;
|
| - vbox.appendChild(title);
|
| -
|
| - // Followed by version.
|
| - var version = this.ownerDocument.createElement('span');
|
| - version.classList.add('extension-version');
|
| - version.textContent = extension.version;
|
| - vbox.appendChild(version);
|
| -
|
| - // And the additional info label (unpacked/crashed).
|
| - if (extension.terminated || extension.isUnpacked) {
|
| - var version = this.ownerDocument.createElement('span');
|
| - version.classList.add('extension-version');
|
| - version.textContent = extension.terminated ?
|
| - localStrings.getString('extensionSettingsCrashMessage') :
|
| - localStrings.getString('extensionSettingsInDevelopment');
|
| - vbox.appendChild(version);
|
| - }
|
| -
|
| - div = this.ownerDocument.createElement('div');
|
| - vbox.appendChild(div);
|
| -
|
| - // And below that we have description (if provided).
|
| - if (extension.description.length > 0) {
|
| - var description = this.ownerDocument.createElement('span');
|
| - description.classList.add('extension-description');
|
| - description.textContent = extension.description;
|
| - vbox.appendChild(description);
|
| - }
|
| -
|
| - // Immediately following the description, we have the
|
| - // Options link (optional).
|
| - if (extension.options_url) {
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.classList.add('extension-links-trailing');
|
| - link.textContent = localStrings.getString('extensionSettingsOptions');
|
| - link.href = '#';
|
| - link.addEventListener('click', this.handleOptions_.bind(this));
|
| - vbox.appendChild(link);
|
| - }
|
| -
|
| - if (extension.allow_activity) {
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.classList.add('extension-links-trailing');
|
| - link.textContent =
|
| - localStrings.getString('extensionSettingsActivity');
|
| - link.href = 'chrome://extension-activity?extensionId=' + extension.id;
|
| - vbox.appendChild(link);
|
| - }
|
| -
|
| - // Then the optional Visit Website link.
|
| - if (extension.homepageUrl) {
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.classList.add('extension-links-trailing');
|
| - link.textContent =
|
| - localStrings.getString('extensionSettingsVisitWebsite');
|
| - link.href = extension.homepageUrl;
|
| - vbox.appendChild(link);
|
| - }
|
| -
|
| - if (extension.warnings.length > 0) {
|
| - var warningsDiv = this.ownerDocument.createElement('div');
|
| - warningsDiv.classList.add('extension-warnings');
|
| -
|
| - var warningsHeader = this.ownerDocument.createElement('span');
|
| - warningsHeader.classList.add('extension-warnings-title');
|
| - warningsHeader.textContent =
|
| - localStrings.getString('extensionSettingsWarningsTitle');
|
| - warningsDiv.appendChild(warningsHeader);
|
| -
|
| - var warningList = this.ownerDocument.createElement('ul');
|
| - for (var j = 0; j < extension.warnings.length; ++j) {
|
| - var warningEntry = this.ownerDocument.createElement('li');
|
| - warningEntry.textContent = extension.warnings[j];
|
| - warningList.appendChild(warningEntry);
|
| - }
|
| - warningsDiv.appendChild(warningList);
|
| -
|
| - vbox.appendChild(warningsDiv);
|
| - }
|
| -
|
| - // And now the details section that is normally hidden.
|
| - var details = this.ownerDocument.createElement('div');
|
| - details.classList.add('vbox');
|
| - vbox.appendChild(details);
|
| -
|
| - this.decorateDetailsSection_(details, extension, expanded, butterbar);
|
| -
|
| - // And on the right of the details we have the Enable/Enabled checkbox.
|
| - div = this.ownerDocument.createElement('div');
|
| - hbox.appendChild(div);
|
| -
|
| - var section = this.ownerDocument.createElement('section');
|
| - section.classList.add('extension-enabling');
|
| - div.appendChild(section);
|
| -
|
| - if (!extension.terminated) {
|
| - // The Enable checkbox.
|
| - var input = this.ownerDocument.createElement('input');
|
| - input.addEventListener('click', this.handleEnable_.bind(this));
|
| - input.type = 'checkbox';
|
| - input.name = 'toggle-' + id;
|
| - input.disabled = !extension.mayDisable;
|
| - if (extension.enabled)
|
| - input.checked = true;
|
| - input.id = 'toggle-' + id;
|
| - section.appendChild(input);
|
| - var label = this.ownerDocument.createElement('label');
|
| - label.classList.add('extension-enabling-label');
|
| - if (extension.enabled)
|
| - label.classList.add('extension-enabling-label-bold');
|
| - label.htmlFor = 'toggle-' + id;
|
| - label.id = 'toggle-' + id + '-label';
|
| - if (extension.enabled) {
|
| - // Enabled (with a d).
|
| - label.textContent =
|
| - localStrings.getString('extensionSettingsEnabled');
|
| - } else {
|
| - // Enable (no d).
|
| - label.textContent =
|
| - localStrings.getString('extensionSettingsEnable');
|
| - }
|
| - section.appendChild(label);
|
| - } else {
|
| - // Extension has been terminated, show a Reload link.
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.classList.add('extension-links-trailing');
|
| - link.id = extension.id;
|
| - link.textContent =
|
| - localStrings.getString('extensionSettingsReload');
|
| - link.href = '#';
|
| - link.addEventListener('click', this.handleReload_.bind(this));
|
| - section.appendChild(link);
|
| - }
|
| -
|
| - // And, on the far right we have the uninstall button.
|
| - var button = this.ownerDocument.createElement('button');
|
| - button.classList.add('extension-delete');
|
| - button.id = id;
|
| - if (!extension.mayDisable)
|
| - button.disabled = true;
|
| - button.textContent = localStrings.getString('extensionSettingsRemove');
|
| - button.addEventListener('click', this.handleUninstall_.bind(this));
|
| - hbox.appendChild(button);
|
| - }
|
| -
|
| - // Do one pass to find what the size of the checkboxes should be.
|
| - var minCheckboxWidth = Infinity;
|
| - var maxCheckboxWidth = 0;
|
| - for (var i = 0; i < this.data_.extensions.length; ++i) {
|
| - var label = $('toggle-' + this.data_.extensions[i].id + '-label');
|
| - if (label.offsetWidth > maxCheckboxWidth)
|
| - maxCheckboxWidth = label.offsetWidth;
|
| - if (label.offsetWidth < minCheckboxWidth)
|
| - minCheckboxWidth = label.offsetWidth;
|
| - }
|
| -
|
| - // Do another pass, making sure checkboxes line up.
|
| - var difference = maxCheckboxWidth - minCheckboxWidth;
|
| - for (var i = 0; i < this.data_.extensions.length; ++i) {
|
| - var label = $('toggle-' + this.data_.extensions[i].id + '-label');
|
| - if (label.offsetWidth < maxCheckboxWidth)
|
| - label.style.WebkitMarginEnd = difference.toString() + 'px';
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Handles decorating the details section.
|
| - * @param {Element} details The div that the details should be attached to.
|
| - * @param {Object} extension The extension we are shoting the details for.
|
| - * @param {boolean} expanded Whether to show the details expanded or not.
|
| - * @param {boolean} showButterbar Whether to show the incognito warning or
|
| - * not.
|
| - * @private
|
| - */
|
| - decorateDetailsSection_: function(details, extension,
|
| - expanded, showButterbar) {
|
| - // This container div is needed because vbox display
|
| - // overrides display:hidden.
|
| - var detailsContents = this.ownerDocument.createElement('div');
|
| - detailsContents.classList.add(expanded ? 'extension-details-visible' :
|
| - 'extension-details-hidden');
|
| - detailsContents.id = extension.id + '_details';
|
| - details.appendChild(detailsContents);
|
| -
|
| - var div = this.ownerDocument.createElement('div');
|
| - div.classList.add('informative-text');
|
| - detailsContents.appendChild(div);
|
| -
|
| - // Keep track of how many items we'll show in the details section.
|
| - var itemsShown = 0;
|
| -
|
| - if (this.data_.developerMode) {
|
| - // First we have the id.
|
| - var content = this.ownerDocument.createElement('div');
|
| - content.textContent =
|
| - localStrings.getString('extensionSettingsExtensionId') +
|
| - ' ' + extension.id;
|
| - div.appendChild(content);
|
| - itemsShown++;
|
| -
|
| - // Then, the path, if provided by unpacked extension.
|
| - if (extension.isUnpacked) {
|
| - content = this.ownerDocument.createElement('div');
|
| - content.textContent =
|
| - localStrings.getString('extensionSettingsExtensionPath') +
|
| - ' ' + extension.path;
|
| - div.appendChild(content);
|
| - itemsShown++;
|
| - }
|
| -
|
| - // Then, the 'managed, cannot uninstall/disable' message.
|
| - if (!extension.mayDisable) {
|
| - content = this.ownerDocument.createElement('div');
|
| - content.textContent =
|
| - localStrings.getString('extensionSettingsPolicyControlled');
|
| - div.appendChild(content);
|
| - itemsShown++;
|
| - }
|
| -
|
| - // Then active views:
|
| - if (extension.views.length > 0) {
|
| - var table = this.ownerDocument.createElement('table');
|
| - table.classList.add('extension-inspect-table');
|
| - div.appendChild(table);
|
| - var tr = this.ownerDocument.createElement('tr');
|
| - table.appendChild(tr);
|
| - var td = this.ownerDocument.createElement('td');
|
| - td.classList.add('extension-inspect-left-column');
|
| - tr.appendChild(td);
|
| - var span = this.ownerDocument.createElement('span');
|
| - td.appendChild(span);
|
| - span.textContent =
|
| - localStrings.getString('extensionSettingsInspectViews');
|
| -
|
| - td = this.ownerDocument.createElement('td');
|
| - for (var i = 0; i < extension.views.length; ++i) {
|
| - // Then active views:
|
| - content = this.ownerDocument.createElement('div');
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.classList.add('extension-links-view');
|
| - link.textContent = extension.views[i].path;
|
| - link.id = extension.id;
|
| - link.href = '#';
|
| - link.addEventListener('click', this.sendInspectMessage_.bind(this));
|
| - content.appendChild(link);
|
| -
|
| - if (extension.views[i].incognito) {
|
| - var incognito = this.ownerDocument.createElement('span');
|
| - incognito.classList.add('extension-links-view');
|
| - incognito.textContent =
|
| - localStrings.getString('viewIncognito');
|
| - content.appendChild(incognito);
|
| - }
|
| -
|
| - td.appendChild(content);
|
| - tr.appendChild(td);
|
| -
|
| - itemsShown++;
|
| - }
|
| - }
|
| - }
|
| -
|
| - var content = this.ownerDocument.createElement('div');
|
| - detailsContents.appendChild(content);
|
| -
|
| - // Then Reload:
|
| - if (extension.enabled && extension.allow_reload) {
|
| - this.addLinkTo_(content,
|
| - localStrings.getString('extensionSettingsReload'),
|
| - extension.id,
|
| - this.handleReload_.bind(this));
|
| - itemsShown++;
|
| - }
|
| -
|
| - // Then Show (Browser Action) Button:
|
| - if (extension.enabled && extension.enable_show_button) {
|
| - this.addLinkTo_(content,
|
| - localStrings.getString('extensionSettingsShowButton'),
|
| - extension.id,
|
| - this.handleShowButton_.bind(this));
|
| - itemsShown++;
|
| - }
|
| -
|
| - if (extension.enabled) {
|
| - // The 'allow in incognito' checkbox.
|
| - var label = this.ownerDocument.createElement('label');
|
| - label.classList.add('extension-checkbox-label');
|
| - content.appendChild(label);
|
| - var input = this.ownerDocument.createElement('input');
|
| - input.addEventListener('click',
|
| - this.handleToggleEnableIncognito_.bind(this));
|
| - input.id = extension.id;
|
| - input.type = 'checkbox';
|
| - if (extension.enabledIncognito)
|
| - input.checked = true;
|
| - label.appendChild(input);
|
| - var span = this.ownerDocument.createElement('span');
|
| - span.classList.add('extension-checkbox-span');
|
| - span.textContent =
|
| - localStrings.getString('extensionSettingsEnableIncognito');
|
| - label.appendChild(span);
|
| - itemsShown++;
|
| - }
|
| -
|
| - if (extension.enabled && extension.wantsFileAccess) {
|
| - // The 'allow access to file URLs' checkbox.
|
| - label = this.ownerDocument.createElement('label');
|
| - label.classList.add('extension-checkbox-label');
|
| - content.appendChild(label);
|
| - var input = this.ownerDocument.createElement('input');
|
| - input.addEventListener('click',
|
| - this.handleToggleAllowFileUrls_.bind(this));
|
| - input.id = extension.id;
|
| - input.type = 'checkbox';
|
| - if (extension.allowFileAccess)
|
| - input.checked = true;
|
| - label.appendChild(input);
|
| - var span = this.ownerDocument.createElement('span');
|
| - span.classList.add('extension-checkbox-span');
|
| - span.textContent =
|
| - localStrings.getString('extensionSettingsAllowFileAccess');
|
| - label.appendChild(span);
|
| - itemsShown++;
|
| - }
|
| -
|
| - if (extension.enabled && !extension.is_hosted_app) {
|
| - // And add a hidden warning message for allowInIncognito.
|
| - content = this.ownerDocument.createElement('div');
|
| - content.id = extension.id + '_incognitoWarning';
|
| - content.classList.add('butter-bar');
|
| - content.hidden = !showButterbar;
|
| - detailsContents.appendChild(content);
|
| -
|
| - var span = this.ownerDocument.createElement('span');
|
| - span.innerHTML =
|
| - localStrings.getString('extensionSettingsIncognitoWarning');
|
| - content.appendChild(span);
|
| - itemsShown++;
|
| - }
|
| -
|
| - var zippy = extension.id + '_zippy';
|
| - $(zippy).hidden = !itemsShown;
|
| -
|
| - // If this isn't expanded now, make sure the newly-added controls
|
| - // are not part of the tab order.
|
| - if (!expanded) {
|
| - var detailsControls = details.querySelectorAll('a, input');
|
| - for (var i = 0; i < detailsControls.length; i++)
|
| - detailsControls[i].tabIndex = -1;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * A helper function to add contextual actions for extensions (action links)
|
| - * to the page.
|
| - */
|
| - addLinkTo_: function(parent, linkText, id, handler) {
|
| - var link = this.ownerDocument.createElement('a');
|
| - link.className = 'extension-links-trailing';
|
| - link.textContent = linkText;
|
| - link.id = id;
|
| - link.href = '#';
|
| - link.addEventListener('click', handler);
|
| - parent.appendChild(link);
|
| - },
|
| -
|
| - /**
|
| - * A lookup helper function to find an extension based on an id.
|
| - * @param {string} id The |id| of the extension to look up.
|
| - * @private
|
| - */
|
| - getExtensionWithId_: function(id) {
|
| - for (var i = 0; i < this.data_.extensions.length; ++i) {
|
| - if (this.data_.extensions[i].id == id)
|
| - return this.data_.extensions[i];
|
| - }
|
| - return null;
|
| - },
|
| -
|
| - /**
|
| - * Handles a key down on the zippy icon.
|
| - * @param {Event} e Key event.
|
| - * @private
|
| - */
|
| - handleZippyKeyDown_: function(e) {
|
| - if (e.keyCode == 13 || e.keyCode == 32) // Enter or Space.
|
| - this.handleZippyClick_(e);
|
| - },
|
| -
|
| - /**
|
| - * Handles the mouseclick on the zippy icon (that expands and collapses the
|
| - * details section).
|
| - * @param {Event} e Mouse event.
|
| - * @private
|
| - */
|
| - handleZippyClick_: function(e) {
|
| - var node = findIdNode(e.target.parentNode);
|
| - var iter = this.firstChild;
|
| - while (iter) {
|
| - var zippy = $(iter.id + '_zippy');
|
| - var details = $(iter.id + '_details');
|
| - var container = zippy.parentElement;
|
| - if (iter.id == node.id) {
|
| - // Toggle visibility.
|
| - if (iter.classList.contains('extension-list-item-expanded')) {
|
| - // Hide yo kids! Hide yo wife!
|
| - showingDetails[iter.id] = false;
|
| - zippy.classList.remove('extension-zippy-expanded');
|
| - zippy.classList.add('extension-zippy-collapsed');
|
| - details.classList.remove('extension-details-visible');
|
| - details.classList.add('extension-details-hidden');
|
| - iter.classList.remove('extension-list-item-expanded');
|
| - iter.classList.add('extension-list-item-collaped');
|
| - container.setAttribute('aria-expanded', 'false');
|
| - container.title =
|
| - localStrings.getString('extensionSettingsShowDetails');
|
| - var detailsControls = details.querySelectorAll('a, input');
|
| - for (var i = 0; i < detailsControls.length; i++)
|
| - detailsControls[i].tabIndex = -1;
|
| -
|
| - // Hide yo incognito warning.
|
| - var butterBar =
|
| - this.querySelector('#' + iter.id + '_incognitoWarning');
|
| - if (butterBar !== null) {
|
| - butterBar.hidden = true;
|
| - showingWarning[iter.id] = false;
|
| - }
|
| - } else {
|
| - // Show the contents.
|
| - showingDetails[iter.id] = true;
|
| - zippy.classList.remove('extension-zippy-collapsed');
|
| - zippy.classList.add('extension-zippy-expanded');
|
| - details.classList.remove('extension-details-hidden');
|
| - details.classList.add('extension-details-visible');
|
| - iter.classList.remove('extension-list-item-collaped');
|
| - iter.classList.add('extension-list-item-expanded');
|
| - container.setAttribute('aria-expanded', 'true');
|
| - container.title =
|
| - localStrings.getString('extensionSettingsHideDetails');
|
| - var detailsControls = details.querySelectorAll('a, input');
|
| - for (var i = 0; i < detailsControls.length; i++)
|
| - detailsControls[i].tabIndex = 0;
|
| - }
|
| - }
|
| - iter = iter.nextSibling;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Handles the 'searchChanged' event. This is used to limit the number of
|
| - * items to show in the list, when the user is searching for items with the
|
| - * search box. Otherwise, if one match is found, the whole list of
|
| - * extensions would be shown when we only want the matching items to be
|
| - * found.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - searchChangedHandler_: function(e) {
|
| - var searchString = e.searchText;
|
| - var child = this.firstChild;
|
| - while (child) {
|
| - var extension = this.getExtensionWithId_(child.id);
|
| - if (searchString.length == 0) {
|
| - // Show all.
|
| - child.classList.remove('search-suppress');
|
| - } else {
|
| - // If the search string does not appear within the text of the
|
| - // extension, then hide it.
|
| - if ((extension.name.toLowerCase().indexOf(searchString) < 0) &&
|
| - (extension.version.toLowerCase().indexOf(searchString) < 0) &&
|
| - (extension.description.toLowerCase().indexOf(searchString) < 0)) {
|
| - // Hide yo extension!
|
| - child.classList.add('search-suppress');
|
| - } else {
|
| - // Show yourself!
|
| - child.classList.remove('search-suppress');
|
| - }
|
| - }
|
| - child = child.nextSibling;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Handles the Reload Extension functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleReload_: function(e) {
|
| - var node = findIdNode(e.target);
|
| - chrome.send('extensionSettingsReload', [node.id]);
|
| - },
|
| -
|
| - /**
|
| - * Handles the Show (Browser Action) Button functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleShowButton_: function(e) {
|
| - var node = findIdNode(e.target);
|
| - chrome.send('extensionSettingsShowButton', [node.id]);
|
| - },
|
| -
|
| - /**
|
| - * Handles the Enable/Disable Extension functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleEnable_: function(e) {
|
| - var node = findIdNode(e.target.parentNode);
|
| - var extension = this.getExtensionWithId_(node.id);
|
| - chrome.send('extensionSettingsEnable',
|
| - [node.id, extension.enabled ? 'false' : 'true']);
|
| - chrome.send('extensionSettingsRequestExtensionsData');
|
| - },
|
| -
|
| - /**
|
| - * Handles the Uninstall Extension functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleUninstall_: function(e) {
|
| - var node = findIdNode(e.target.parentNode);
|
| - chrome.send('extensionSettingsUninstall', [node.id]);
|
| - chrome.send('extensionSettingsRequestExtensionsData');
|
| - },
|
| -
|
| - /**
|
| - * Handles the View Options link.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleOptions_: function(e) {
|
| - var node = findIdNode(e.target.parentNode);
|
| - var extension = this.getExtensionWithId_(node.id);
|
| - chrome.send('extensionSettingsOptions', [extension.id]);
|
| - e.preventDefault();
|
| - },
|
| -
|
| - /**
|
| - * Handles the Enable Extension In Incognito functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleToggleEnableIncognito_: function(e) {
|
| - var node = findIdNode(e.target);
|
| - var butterBar = document.getElementById(node.id + '_incognitoWarning');
|
| - butterBar.hidden = !e.target.checked;
|
| - showingWarning[node.id] = e.target.checked;
|
| - chrome.send('extensionSettingsEnableIncognito',
|
| - [node.id, String(e.target.checked)]);
|
| - },
|
| -
|
| - /**
|
| - * Handles the Allow On File URLs functionality.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - handleToggleAllowFileUrls_: function(e) {
|
| - var node = findIdNode(e.target);
|
| - chrome.send('extensionSettingsAllowFileAccess',
|
| - [node.id, String(e.target.checked)]);
|
| - },
|
| -
|
| - /**
|
| - * Tell the C++ ExtensionDOMHandler to inspect the page detailed in
|
| - * |viewData|.
|
| - * @param {Event} e Change event.
|
| - * @private
|
| - */
|
| - sendInspectMessage_: function(e) {
|
| - var extension = this.getExtensionWithId_(e.srcElement.id);
|
| - for (var i = 0; i < extension.views.length; ++i) {
|
| - if (extension.views[i].path == e.srcElement.innerText) {
|
| - // TODO(aa): This is ghetto, but WebUIBindings doesn't support sending
|
| - // anything other than arrays of strings, and this is all going to get
|
| - // replaced with V8 extensions soon anyway.
|
| - chrome.send('extensionSettingsInspect', [
|
| - String(extension.views[i].renderProcessId),
|
| - String(extension.views[i].renderViewId)
|
| - ]);
|
| - }
|
| - }
|
| - },
|
| - };
|
| -
|
| - return {
|
| - ExtensionsList: ExtensionsList
|
| - };
|
| -});
|
|
|