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

Unified Diff: chrome/browser/resources/options/managed_user_settings.js

Issue 11783008: Add a lock to the managed user settings page and require authentication for unlocking. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix problem with some WebUI tests. Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/managed_user_settings.js
diff --git a/chrome/browser/resources/options/managed_user_settings.js b/chrome/browser/resources/options/managed_user_settings.js
index 3300cdb0c3fe3993464176a08e38b32cec7ba940..56990ef7da3cc797ac0f8d6b3bb19e74428fa5ba 100644
--- a/chrome/browser/resources/options/managed_user_settings.js
+++ b/chrome/browser/resources/options/managed_user_settings.js
@@ -28,10 +28,29 @@ cr.define('options', function() {
cr.addSingletonGetter(ManagedUserSettings);
+ // Represents the three possible authentication states.
+ var ManagedUserAuthentication = {
+ // The manager of the managed account is not authenticated.
+ UNAUTHENTICATED: 'unauthenticated',
+
+ // The authentication is currently being checked.
+ CHECKING: 'checking',
+
+ // The manager of the managed account is authenticated.
+ AUTHENTICATED: 'authenticated'
+ };
+
ManagedUserSettings.prototype = {
// Inherit from SettingsDialog.
__proto__: SettingsDialog.prototype,
+ // The current authentication state of the manager of the managed account.
+ authenticationState: ManagedUserAuthentication.UNAUTHENTICATED,
+
+ // True if the local passphrase of the manager of the managed account is
+ // set. If it is not set, no authentication is required.
+ isPassphraseSet: false,
+
/**
* Initialize the page.
* @override
@@ -48,24 +67,111 @@ cr.define('options', function() {
OptionsPage.navigateToPage('setPassphrase');
};
+ $('use-passphrase-checkbox').onclick = function() {
+ $('set-passphrase').disabled = !$('use-passphrase-checkbox').checked;
+ };
+
+ var self = this;
+ $('unlock-settings').onclick = function() {
+ if (self.authenticationState == ManagedUserAuthentication.CHECKING)
+ return;
+ chrome.send('displayPassphraseDialog',
+ ['options.ManagedUserSettings.isAuthenticated']);
+ self.authenticationState = ManagedUserAuthentication.CHECKING;
+ };
},
+
/** @override */
handleConfirm: function() {
+ if ($('use-passphrase-checkbox').checked && !this.isPassphraseSet) {
+ OptionsPage.navigateToPage('setPassphrase');
+ return;
+ }
+ if (!$('use-passphrase-checkbox').checked)
+ chrome.send('resetPassphrase');
chrome.send('confirmManagedUserSettings');
SettingsDialog.prototype.handleConfirm.call(this);
},
+
+ // Enables or disables all controls based on the authentication state of
+ // the managed user. If |enable| is true, the controls will be enabled.
+ enableControls: function(enable) {
+ $('set-passphrase').disabled = !enable;
+ $('get-content-packs-button').disabled = !enable;
+ $('contentpacks-allow').setDisabled('notManagedUserModifiable', !enable);
+ $('contentpacks-warn').setDisabled('notManagedUserModifiable', !enable);
+ $('contentpacks-block').setDisabled('notManagedUserModifiable', !enable);
+ $('safe-search-checkbox').setDisabled(
+ 'notManagedUserModifiable', !enable);
+ // TODO(akuegel): Add disable-signin-checkbox and
+ // disable-history-deletion-checkbox once these features are implemented
+ $('use-passphrase-checkbox').disabled = !enable;
+ $('unlock-settings').disabled = enable;
+ },
+
+ // Is called when the passphrase dialog is closed. |success| is true
+ // if the authentication was successful.
+ isAuthenticated_: function(success) {
+ if (success) {
+ this.authenticationState = ManagedUserAuthentication.AUTHENTICATED;
+ this.enableControls(true);
+ } else {
+ this.authenticationState = ManagedUserAuthentication.UNAUTHENTICATED;
+ }
+ },
+
+ // Reset the authentication to UNAUTHENTICATED when the managed user
+ // settings dialog is closed.
+ didClosePage: function() {
+ // Reset the authentication of the custodian.
+ this.authenticationState = ManagedUserAuthentication.UNAUTHENTICATED;
+ chrome.send('endAuthentication');
+ },
+ };
+
+ // Is called when the page is initialized. |hasPassphrase| is true if there
+ // is a local passphrase required to unlock the controls of the page.
+ // Also, the "use passphrase" checkbox will be initialized accordingly.
+ ManagedUserSettings.initializeSetPassphraseButton = function(hasPassphrase) {
+ $('set-passphrase').disabled = !hasPassphrase;
+ $('use-passphrase-checkbox').checked = hasPassphrase;
+ var instance = ManagedUserSettings.getInstance();
+ instance.isPassphraseSet = hasPassphrase;
+ if (hasPassphrase) {
+ instance.authenticationState = ManagedUserAuthentication.UNAUTHENTICATED;
+ instance.enableControls(false);
+ } else {
+ instance.authenticationState = ManagedUserAuthentication.AUTHENTICATED;
+ $('unlock-settings').disabled = true;
+ }
+ };
+
+ // Is called when the passphrase dialog is closed. |success| is true
+ // if the authentication was successful.
+ ManagedUserSettings.isAuthenticated = function(success) {
+ ManagedUserSettings.getInstance().isAuthenticated_(success);
+ };
+
+ // Is called whenever the local passphrase has changed. |isPassphraseSet|
+ // is true if the local passphrase is non-empty.
+ ManagedUserSettings.passphraseChanged = function(isPassphraseSet) {
+ ManagedUserSettings.getInstance().isPassphraseSet = isPassphraseSet;
};
var ManagedUserSettingsForTesting = {
getSetPassphraseButton: function() {
return $('set-passphrase');
+ },
+ getUnlockButton: function() {
+ return $('unlock-settings');
}
};
- // Export
+ // Export
return {
ManagedUserSettings: ManagedUserSettings,
- ManagedUserSettingsForTesting: ManagedUserSettingsForTesting
+ ManagedUserSettingsForTesting: ManagedUserSettingsForTesting,
+ ManagedUserAuthentication: ManagedUserAuthentication
};
});

Powered by Google App Engine
This is Rietveld 408576698