Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: chrome/browser/resources/extensions/extension_list.js

Issue 1051273002: Update chrome://extensions for supervised users (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update test data Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 621 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 // becomes enabled/disabled. It also might not become enabled or 632 // becomes enabled/disabled. It also might not become enabled or
633 // disabled, because the user might e.g. get prompted when enabling 633 // disabled, because the user might e.g. get prompted when enabling
634 // and choose not to. 634 // and choose not to.
635 e.preventDefault(); 635 e.preventDefault();
636 }); 636 });
637 637
638 // 'Remove' button. 638 // 'Remove' button.
639 var trashTemplate = $('template-collection').querySelector('.trash'); 639 var trashTemplate = $('template-collection').querySelector('.trash');
640 var trash = trashTemplate.cloneNode(true); 640 var trash = trashTemplate.cloneNode(true);
641 trash.title = loadTimeData.getString('extensionUninstall'); 641 trash.title = loadTimeData.getString('extensionUninstall');
642 trash.hidden = !extension.userMayModify;
643 trash.setAttribute('column-type', 'trash'); 642 trash.setAttribute('column-type', 'trash');
644 trash.addEventListener('click', function(e) { 643 trash.addEventListener('click', function(e) {
645 trash.classList.add('open'); 644 trash.classList.add('open');
646 trash.classList.toggle('mouse-clicked', e.detail > 0); 645 trash.classList.toggle('mouse-clicked', e.detail > 0);
647 if (this.uninstallIsShowing_) 646 if (this.uninstallIsShowing_)
648 return; 647 return;
649 this.uninstallIsShowing_ = true; 648 this.uninstallIsShowing_ = true;
650 chrome.management.uninstall(extension.id, 649 chrome.management.uninstall(extension.id,
651 {showConfirmDialog: true}, 650 {showConfirmDialog: true},
652 function() { 651 function() {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 * @private 694 * @private
696 */ 695 */
697 updateNode_: function(extension, row) { 696 updateNode_: function(extension, row) {
698 var isActive = 697 var isActive =
699 extension.state == chrome.developerPrivate.ExtensionState.ENABLED; 698 extension.state == chrome.developerPrivate.ExtensionState.ENABLED;
700 row.classList.toggle('inactive-extension', !isActive); 699 row.classList.toggle('inactive-extension', !isActive);
701 700
702 // Hack to keep the closure compiler happy about |remove|. 701 // Hack to keep the closure compiler happy about |remove|.
703 // TODO(hcarmona): Remove this hack when the closure compiler is updated. 702 // TODO(hcarmona): Remove this hack when the closure compiler is updated.
704 var node = /** @type {Element} */ (row); 703 var node = /** @type {Element} */ (row);
705 node.classList.remove('policy-controlled', 'may-not-modify', 704 node.classList.remove('controlled', 'may-not-remove');
706 'may-not-remove');
707 var classes = []; 705 var classes = [];
708 if (!extension.userMayModify) { 706 if (extension.controlledInfo) {
709 classes.push('policy-controlled', 'may-not-modify'); 707 classes.push('controlled');
710 } else if (extension.dependentExtensions.length > 0) { 708 } else if (!extension.userMayModify ||
711 classes.push('may-not-remove', 'may-not-modify'); 709 extension.mustRemainInstalled ||
712 } else if (extension.mustRemainInstalled) { 710 extension.dependentExtensions.length > 0) {
713 classes.push('may-not-remove'); 711 classes.push('may-not-remove');
714 } else if (extension.disableReasons.suspiciousInstall ||
715 extension.disableReasons.corruptInstall ||
716 extension.disableReasons.updateRequired) {
717 classes.push('may-not-modify');
718 } 712 }
719 row.classList.add.apply(row.classList, classes); 713 row.classList.add.apply(row.classList, classes);
720 714
721 var item = row.querySelector('.extension-list-item'); 715 var item = row.querySelector('.extension-list-item');
722 item.style.backgroundImage = 'url(' + extension.iconUrl + ')'; 716 item.style.backgroundImage = 'url(' + extension.iconUrl + ')';
723 717
724 this.setText_(row, '.extension-title', extension.name); 718 this.setText_(row, '.extension-title', extension.name);
725 this.setText_(row, '.extension-version', extension.version); 719 this.setText_(row, '.extension-version', extension.version);
726 this.setText_(row, '.location-text', extension.locationText || ''); 720 this.setText_(row, '.location-text', extension.locationText || '');
727 this.setText_(row, '.blacklist-text', extension.blacklistText || ''); 721 this.setText_(row, '.blacklist-text', extension.blacklistText || '');
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 this.updateVisibility_(row, '.corrupted-repair-button', canRepair); 837 this.updateVisibility_(row, '.corrupted-repair-button', canRepair);
844 838
845 // The 'Enabled' checkbox. 839 // The 'Enabled' checkbox.
846 var isOK = !isTerminated && !canRepair; 840 var isOK = !isTerminated && !canRepair;
847 this.updateVisibility_(row, '.enable-checkbox', isOK, function(item) { 841 this.updateVisibility_(row, '.enable-checkbox', isOK, function(item) {
848 var enableCheckboxDisabled = 842 var enableCheckboxDisabled =
849 !extension.userMayModify || 843 !extension.userMayModify ||
850 extension.disableReasons.suspiciousInstall || 844 extension.disableReasons.suspiciousInstall ||
851 extension.disableReasons.corruptInstall || 845 extension.disableReasons.corruptInstall ||
852 extension.disableReasons.updateRequired || 846 extension.disableReasons.updateRequired ||
853 extension.installedByCustodian ||
854 extension.dependentExtensions.length > 0; 847 extension.dependentExtensions.length > 0;
855 item.querySelector('input').disabled = enableCheckboxDisabled; 848 item.querySelector('input').disabled = enableCheckboxDisabled;
856 item.querySelector('input').checked = isActive; 849 item.querySelector('input').checked = isActive;
857 }); 850 });
858 851
859 // Button for extensions controlled by policy. 852 // Indicator for extensions controlled by policy.
860 var controlNode = row.querySelector('.enable-controls'); 853 var controlNode = row.querySelector('.enable-controls');
861 var indicator = 854 var indicator =
862 controlNode.querySelector('.controlled-extension-indicator'); 855 controlNode.querySelector('.controlled-extension-indicator');
863 var needsIndicator = isOK && 856 var needsIndicator = isOK && extension.controlledInfo;
864 !extension.userMayModify &&
865 extension.policyText;
866 // TODO(treib): If userMayModify is false, but policyText is empty, that
867 // indicates this extension is controlled by something else than
868 // enterprise policy (such as the profile being supervised). For now, just
869 // don't show the indicator in this case. We should really handle this
870 // better though (ie use a different text and icon).
871 857
872 if (needsIndicator && !indicator) { 858 if (needsIndicator && !indicator) {
873 indicator = new cr.ui.ControlledIndicator(); 859 indicator = new cr.ui.ControlledIndicator();
874 indicator.classList.add('controlled-extension-indicator'); 860 indicator.classList.add('controlled-extension-indicator');
875 indicator.setAttribute('controlled-by', 'policy'); 861 var ControllerType = chrome.developerPrivate.ControllerType;
876 var textPolicy = extension.policyText || ''; 862 var controlledByStr = '';
877 indicator.setAttribute('textpolicy', textPolicy); 863 switch (extension.controlledInfo.type) {
878 indicator.image.setAttribute('aria-label', textPolicy); 864 case ControllerType.POLICY:
865 controlledByStr = 'policy';
866 break;
867 case ControllerType.CHILD_CUSTODIAN:
868 controlledByStr = 'child-custodian';
869 break;
870 case ControllerType.SUPERVISED_USER_CUSTODIAN:
871 controlledByStr = 'supervised-user-custodian';
872 break;
873 }
874 indicator.setAttribute('controlled-by', controlledByStr);
875 var text = extension.controlledInfo.text;
876 indicator.setAttribute('text' + controlledByStr, text);
877 indicator.image.setAttribute('aria-label', text);
879 controlNode.appendChild(indicator); 878 controlNode.appendChild(indicator);
880 indicator.querySelector('div').setAttribute('column-type', 879 indicator.querySelector('div').setAttribute('column-type',
881 'enterprise'); 880 'enterprise');
882 } else if (!needsIndicator && indicator) { 881 } else if (!needsIndicator && indicator) {
883 controlNode.removeChild(indicator); 882 controlNode.removeChild(indicator);
884 } 883 }
885 884
886 // Developer mode //////////////////////////////////////////////////////// 885 // Developer mode ////////////////////////////////////////////////////////
887 886
888 // First we have the id. 887 // First we have the id.
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 this.createNode_(extension, nextExt ? $(nextExt.id) : null); 1169 this.createNode_(extension, nextExt ? $(nextExt.id) : null);
1171 } 1170 }
1172 } 1171 }
1173 }; 1172 };
1174 1173
1175 return { 1174 return {
1176 ExtensionList: ExtensionList, 1175 ExtensionList: ExtensionList,
1177 ExtensionListDelegate: ExtensionListDelegate 1176 ExtensionListDelegate: ExtensionListDelegate
1178 }; 1177 };
1179 }); 1178 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698