// 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() { var OptionsPage = options.OptionsPage; ///////////////////////////////////////////////////////////////////////////// // AccountsOptions class: /** * Encapsulated handling of ChromeOS accounts options page. * @constructor */ function AccountsOptions(model) { OptionsPage.call(this, 'accounts', loadTimeData.getString('accountsPageTabTitle'), 'accountsPage'); // Whether to show the whitelist. this.showWhitelist_ = false; } cr.addSingletonGetter(AccountsOptions); AccountsOptions.prototype = { // Inherit AccountsOptions from OptionsPage. __proto__: OptionsPage.prototype, /** * Initializes AccountsOptions page. */ initializePage: function() { // Call base class implementation to starts preference initialization. OptionsPage.prototype.initializePage.call(this); // Set up accounts page. var userList = $('userList'); userList.addEventListener('remove', this.handleRemoveUser_); var userNameEdit = $('userNameEdit'); options.accounts.UserNameEdit.decorate(userNameEdit); userNameEdit.addEventListener('add', this.handleAddUser_); // If the current user is not the owner, do not show the user list. // If the current user is not the owner, or the device is enterprise // managed, show a warning that settings cannot be modified. this.showWhitelist_ = UIAccountTweaks.currentUserIsOwner(); if (this.showWhitelist_) { options.accounts.UserList.decorate(userList); } else { $('ownerOnlyWarning').hidden = false; this.managed = AccountsOptions.whitelistIsManaged(); } this.addEventListener('visibleChange', this.handleVisibleChange_); $('useWhitelistCheck').addEventListener('change', this.handleUseWhitelistCheckChange_.bind(this)); Preferences.getInstance().addEventListener( $('useWhitelistCheck').pref, this.handleUseWhitelistPrefChange_.bind(this)); $('accounts-options-overlay-confirm').onclick = OptionsPage.closeOverlay.bind(OptionsPage); }, /** * Update user list control state. * @private */ updateControls_: function() { $('userList').disabled = $('userNameEdit').disabled = !this.showWhitelist_ || AccountsOptions.whitelistIsManaged() || !$('useWhitelistCheck').checked; }, /** * Handler for OptionsPage's visible property change event. * @private * @param {Event} e Property change event. */ handleVisibleChange_: function(e) { if (this.visible) { this.updateControls_(); if (this.showWhitelist_) $('userList').redraw(); } }, /** * Handler for allow guest check change. * @private */ handleUseWhitelistCheckChange_: function(e) { // Whitelist existing users when guest login is being disabled. if ($('useWhitelistCheck').checked) { chrome.send('whitelistExistingUsers'); } this.updateControls_(); }, /** * handler for allow guest pref change. * @private */ handleUseWhitelistPrefChange_: function(e) { this.updateControls_(); }, /** * Handler for "add" event fired from userNameEdit. * @private * @param {Event} e Add event fired from userNameEdit. */ handleAddUser_: function(e) { chrome.send('whitelistUser', [e.user.email, e.user.name]); }, /** * Handler for "remove" event fired from userList. * @private * @param {Event} e Remove event fired from userList. */ handleRemoveUser_: function(e) { chrome.send('unwhitelistUser', [e.user.username]); } }; /** * Returns whether the whitelist is managed by policy or not. */ AccountsOptions.whitelistIsManaged = function() { return loadTimeData.getBoolean('whitelist_is_managed'); }; /** * Update account picture. * @param {string} username User for which to update the image. */ AccountsOptions.updateAccountPicture = function(username) { if (this.showWhitelist_) $('userList').updateAccountPicture(username); }; // Export return { AccountsOptions: AccountsOptions }; });