Index: chrome/browser/resources/extensions/extensions.js |
diff --git a/chrome/browser/resources/extensions/extensions.js b/chrome/browser/resources/extensions/extensions.js |
index fbf7b3cb2a4dcc18f7b7bbd05364d9aa12e2ac26..145d54d0edaa85e4d2b72f2857edc7907d9283ad 100644 |
--- a/chrome/browser/resources/extensions/extensions.js |
+++ b/chrome/browser/resources/extensions/extensions.js |
@@ -196,6 +196,8 @@ cr.define('extensions', function() { |
/** @const */ |
var supervised = profileInfo.isSupervised; |
+ var developerModeControlledByPolicy = |
+ profileInfo.isDeveloperModeControlledByPolicy; |
var pageDiv = $('extension-settings'); |
pageDiv.classList.toggle('profile-is-supervised', supervised); |
@@ -203,7 +205,13 @@ cr.define('extensions', function() { |
var devControlsCheckbox = $('toggle-dev-on'); |
devControlsCheckbox.checked = profileInfo.inDeveloperMode; |
- devControlsCheckbox.disabled = supervised; |
+ devControlsCheckbox.disabled = |
+ supervised || developerModeControlledByPolicy; |
+ |
+ // This is necessary e.g. if developer mode is now disabled by policy |
+ // but extension developer tools were visible. |
+ this.updateDevControlsVisibility_(false); |
+ this.updateDevToggleControlledIndicator_(developerModeControlledByPolicy); |
$('load-unpacked').disabled = !profileInfo.canLoadUnpacked; |
var extensionList = $('extension-settings-list'); |
@@ -219,6 +227,36 @@ cr.define('extensions', function() { |
}, |
/** |
+ * Shows or hides the 'controlled by policy' indicator on the dev-toggle |
+ * checkbox. |
+ * @param {boolean} devModeControlledByPolicy true if the indicator |
+ * should be showing. |
+ * @private |
+ */ |
+ updateDevToggleControlledIndicator_: function(devModeControlledByPolicy) { |
+ var controlledIndicator = document.querySelector( |
+ '#dev-toggle .controlled-setting-indicator'); |
+ |
+ if (!(controlledIndicator instanceof cr.ui.ControlledIndicator)) |
+ cr.ui.ControlledIndicator.decorate(controlledIndicator); |
+ |
+ // We control the visibility of the ControlledIndicator by setting or |
+ // removing the 'controlled-by' attribute (see controlled_indicator.css). |
+ var isVisible = controlledIndicator.getAttribute('controlled-by'); |
+ if (devModeControlledByPolicy && !isVisible) { |
+ var controlledBy = 'policy'; |
+ controlledIndicator.setAttribute( |
+ 'controlled-by', controlledBy); |
+ controlledIndicator.setAttribute( |
+ 'text' + controlledBy, |
+ loadTimeData.getString('extensionControlledSettingPolicy')); |
+ } else if (!devModeControlledByPolicy && isVisible) { |
+ // This hides the element - see above. |
+ controlledIndicator.removeAttribute('controlled-by'); |
+ } |
+ }, |
+ |
+ /** |
* Shows the loading spinner and hides elements that shouldn't be visible |
* while loading. |
* @param {boolean} isLoading |