Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 <include src="extension_error.js"> | 5 <include src="extension_error.js"> |
| 6 | 6 |
| 7 /////////////////////////////////////////////////////////////////////////////// | 7 /////////////////////////////////////////////////////////////////////////////// |
| 8 // ExtensionFocusRow: | 8 // ExtensionFocusRow: |
| 9 | 9 |
| 10 /** | 10 /** |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 624 // becomes enabled/disabled. It also might not become enabled or | 624 // becomes enabled/disabled. It also might not become enabled or |
| 625 // disabled, because the user might e.g. get prompted when enabling | 625 // disabled, because the user might e.g. get prompted when enabling |
| 626 // and choose not to. | 626 // and choose not to. |
| 627 e.preventDefault(); | 627 e.preventDefault(); |
| 628 }); | 628 }); |
| 629 | 629 |
| 630 // 'Remove' button. | 630 // 'Remove' button. |
| 631 var trashTemplate = $('template-collection').querySelector('.trash'); | 631 var trashTemplate = $('template-collection').querySelector('.trash'); |
| 632 var trash = trashTemplate.cloneNode(true); | 632 var trash = trashTemplate.cloneNode(true); |
| 633 trash.title = loadTimeData.getString('extensionUninstall'); | 633 trash.title = loadTimeData.getString('extensionUninstall'); |
| 634 trash.hidden = !extension.userMayModify; | |
|
Marc Treib
2015/05/19 13:21:51
Handled by css, no need to do it again here.
| |
| 635 trash.setAttribute('column-type', 'trash'); | 634 trash.setAttribute('column-type', 'trash'); |
| 636 trash.addEventListener('click', function(e) { | 635 trash.addEventListener('click', function(e) { |
| 637 trash.classList.add('open'); | 636 trash.classList.add('open'); |
| 638 trash.classList.toggle('mouse-clicked', e.detail > 0); | 637 trash.classList.toggle('mouse-clicked', e.detail > 0); |
| 639 if (this.uninstallIsShowing_) | 638 if (this.uninstallIsShowing_) |
| 640 return; | 639 return; |
| 641 this.uninstallIsShowing_ = true; | 640 this.uninstallIsShowing_ = true; |
| 642 chrome.management.uninstall(extension.id, | 641 chrome.management.uninstall(extension.id, |
| 643 {showConfirmDialog: true}, | 642 {showConfirmDialog: true}, |
| 644 function() { | 643 function() { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 687 * @private | 686 * @private |
| 688 */ | 687 */ |
| 689 updateNode_: function(extension, row) { | 688 updateNode_: function(extension, row) { |
| 690 var isActive = | 689 var isActive = |
| 691 extension.state == chrome.developerPrivate.ExtensionState.ENABLED; | 690 extension.state == chrome.developerPrivate.ExtensionState.ENABLED; |
| 692 row.classList.toggle('inactive-extension', !isActive); | 691 row.classList.toggle('inactive-extension', !isActive); |
| 693 | 692 |
| 694 // Hack to keep the closure compiler happy about |remove|. | 693 // Hack to keep the closure compiler happy about |remove|. |
| 695 // TODO(hcarmona): Remove this hack when the closure compiler is updated. | 694 // TODO(hcarmona): Remove this hack when the closure compiler is updated. |
| 696 var node = /** @type {Element} */ (row); | 695 var node = /** @type {Element} */ (row); |
| 697 node.classList.remove('policy-controlled', 'may-not-modify', | 696 node.classList.remove('controlled', 'may-not-remove'); |
| 698 'may-not-remove'); | |
| 699 var classes = []; | 697 var classes = []; |
| 700 if (!extension.userMayModify) { | 698 if (extension.controlledBy) { |
| 701 classes.push('policy-controlled', 'may-not-modify'); | 699 classes.push('controlled'); |
| 702 } else if (extension.dependentExtensions.length > 0) { | 700 } else if (!extension.userMayModify || |
| 703 classes.push('may-not-remove', 'may-not-modify'); | 701 extension.mustRemainInstalled || |
| 704 } else if (extension.mustRemainInstalled) { | 702 extension.dependentExtensions.length > 0) { |
| 705 classes.push('may-not-remove'); | 703 classes.push('may-not-remove'); |
| 706 } else if (extension.disableReasons.suspiciousInstall || | |
| 707 extension.disableReasons.corruptInstall || | |
| 708 extension.disableReasons.updateRequired) { | |
| 709 classes.push('may-not-modify'); | |
|
Marc Treib
2015/05/19 13:21:51
The may-not-modify class doesn't actually do anyth
| |
| 710 } | 704 } |
| 711 row.classList.add.apply(row.classList, classes); | 705 row.classList.add.apply(row.classList, classes); |
| 712 | 706 |
| 713 var item = row.querySelector('.extension-list-item'); | 707 var item = row.querySelector('.extension-list-item'); |
| 714 item.style.backgroundImage = 'url(' + extension.iconUrl + ')'; | 708 item.style.backgroundImage = 'url(' + extension.iconUrl + ')'; |
| 715 | 709 |
| 716 this.setText_(row, '.extension-title', extension.name); | 710 this.setText_(row, '.extension-title', extension.name); |
| 717 this.setText_(row, '.extension-version', extension.version); | 711 this.setText_(row, '.extension-version', extension.version); |
| 718 this.setText_(row, '.location-text', extension.locationText || ''); | 712 this.setText_(row, '.location-text', extension.locationText || ''); |
| 719 this.setText_(row, '.blacklist-text', extension.blacklistText || ''); | 713 this.setText_(row, '.blacklist-text', extension.blacklistText || ''); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 835 this.updateVisibility_(row, '.corrupted-repair-button', canRepair); | 829 this.updateVisibility_(row, '.corrupted-repair-button', canRepair); |
| 836 | 830 |
| 837 // The 'Enabled' checkbox. | 831 // The 'Enabled' checkbox. |
| 838 var isOK = !isTerminated && !canRepair; | 832 var isOK = !isTerminated && !canRepair; |
| 839 this.updateVisibility_(row, '.enable-checkbox', isOK, function(item) { | 833 this.updateVisibility_(row, '.enable-checkbox', isOK, function(item) { |
| 840 var enableCheckboxDisabled = | 834 var enableCheckboxDisabled = |
| 841 !extension.userMayModify || | 835 !extension.userMayModify || |
| 842 extension.disableReasons.suspiciousInstall || | 836 extension.disableReasons.suspiciousInstall || |
| 843 extension.disableReasons.corruptInstall || | 837 extension.disableReasons.corruptInstall || |
| 844 extension.disableReasons.updateRequired || | 838 extension.disableReasons.updateRequired || |
| 845 extension.installedByCustodian || | |
| 846 extension.dependentExtensions.length > 0; | 839 extension.dependentExtensions.length > 0; |
| 847 item.querySelector('input').disabled = enableCheckboxDisabled; | 840 item.querySelector('input').disabled = enableCheckboxDisabled; |
| 848 item.querySelector('input').checked = isActive; | 841 item.querySelector('input').checked = isActive; |
| 849 }); | 842 }); |
| 850 | 843 |
| 851 // Button for extensions controlled by policy. | 844 // Indicator for extensions controlled by policy. |
| 852 var controlNode = row.querySelector('.enable-controls'); | 845 var controlNode = row.querySelector('.enable-controls'); |
| 853 var indicator = | 846 var indicator = |
| 854 controlNode.querySelector('.controlled-extension-indicator'); | 847 controlNode.querySelector('.controlled-extension-indicator'); |
| 855 var needsIndicator = isOK && | 848 var needsIndicator = isOK && extension.controlledBy; |
| 856 !extension.userMayModify && | |
| 857 extension.policyText; | |
| 858 // TODO(treib): If userMayModify is false, but policyText is empty, that | |
| 859 // indicates this extension is controlled by something else than | |
| 860 // enterprise policy (such as the profile being supervised). For now, just | |
| 861 // don't show the indicator in this case. We should really handle this | |
| 862 // better though (ie use a different text and icon). | |
| 863 | 849 |
| 864 if (needsIndicator && !indicator) { | 850 if (needsIndicator && !indicator) { |
| 865 indicator = new cr.ui.ControlledIndicator(); | 851 indicator = new cr.ui.ControlledIndicator(); |
| 866 indicator.classList.add('controlled-extension-indicator'); | 852 indicator.classList.add('controlled-extension-indicator'); |
| 867 indicator.setAttribute('controlled-by', 'policy'); | 853 indicator.setAttribute('controlled-by', extension.controlledBy); |
| 868 var textPolicy = extension.policyText || ''; | 854 var text = extension.controlledByText || ''; |
| 869 indicator.setAttribute('textpolicy', textPolicy); | 855 indicator.setAttribute('text' + extension.controlledBy, text); |
| 870 indicator.image.setAttribute('aria-label', textPolicy); | 856 indicator.image.setAttribute('aria-label', text); |
| 871 controlNode.appendChild(indicator); | 857 controlNode.appendChild(indicator); |
| 872 indicator.querySelector('div').setAttribute('column-type', | 858 indicator.querySelector('div').setAttribute('column-type', |
| 873 'enterprise'); | 859 'enterprise'); |
| 874 } else if (!needsIndicator && indicator) { | 860 } else if (!needsIndicator && indicator) { |
| 875 controlNode.removeChild(indicator); | 861 controlNode.removeChild(indicator); |
| 876 } | 862 } |
| 877 | 863 |
| 878 // Developer mode //////////////////////////////////////////////////////// | 864 // Developer mode //////////////////////////////////////////////////////// |
| 879 | 865 |
| 880 // First we have the id. | 866 // First we have the id. |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1162 this.createNode_(extension, nextExt ? $(nextExt.id) : null); | 1148 this.createNode_(extension, nextExt ? $(nextExt.id) : null); |
| 1163 } | 1149 } |
| 1164 } | 1150 } |
| 1165 }; | 1151 }; |
| 1166 | 1152 |
| 1167 return { | 1153 return { |
| 1168 ExtensionList: ExtensionList, | 1154 ExtensionList: ExtensionList, |
| 1169 ExtensionListDelegate: ExtensionListDelegate | 1155 ExtensionListDelegate: ExtensionListDelegate |
| 1170 }; | 1156 }; |
| 1171 }); | 1157 }); |
| OLD | NEW |