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 3 // found in the LICENSE file. 4 5 cr.define('options', function() { 6 var OptionsPage = options.OptionsPage; 7 8 ///////////////////////////////////////////////////////////////////////////// 9 // AccountsOptions class: 10 11 /** 12 * Encapsulated handling of ChromeOS accounts options page. 13 * @constructor 14 */ 15 function AccountsOptions(model) { 16 OptionsPage.call(this, 'accounts', 17 loadTimeData.getString('accountsPageTabTitle'), 18 'accountsPage'); 19 // Whether to show the whitelist. 20 this.showWhitelist_ = false; 21 } 22 23 cr.addSingletonGetter(AccountsOptions); 24 25 AccountsOptions.prototype = { 26 // Inherit AccountsOptions from OptionsPage. 27 __proto__: OptionsPage.prototype, 28 29 /** 30 * Initializes AccountsOptions page. 31 */ 32 initializePage: function() { 33 // Call base class implementation to starts preference initialization. 34 OptionsPage.prototype.initializePage.call(this); 35 36 // Set up accounts page. 37 var userList = $('userList'); 38 userList.addEventListener('remove', this.handleRemoveUser_); 39 40 var userNameEdit = $('userNameEdit'); 41 options.accounts.UserNameEdit.decorate(userNameEdit); 42 userNameEdit.addEventListener('add', this.handleAddUser_); 43 44 // If the current user is not the owner, do not show the user list. 45 // If the current user is not the owner, or the device is enterprise 46 // managed, show a warning that settings cannot be modified. 47 this.showWhitelist_ = UIAccountTweaks.currentUserIsOwner(); 48 if (this.showWhitelist_) { 49 options.accounts.UserList.decorate(userList); 50 } else { 51 $('ownerOnlyWarning').hidden = false; 52 this.managed = AccountsOptions.whitelistIsManaged(); 53 } 54 55 this.addEventListener('visibleChange', this.handleVisibleChange_); 56 57 $('useWhitelistCheck').addEventListener('change', 58 this.handleUseWhitelistCheckChange_.bind(this)); 59 60 Preferences.getInstance().addEventListener( 61 $('useWhitelistCheck').pref, 62 this.handleUseWhitelistPrefChange_.bind(this)); 63 64 $('accounts-options-overlay-confirm').onclick = 65 OptionsPage.closeOverlay.bind(OptionsPage); 66 }, 67 68 /** 69 * Update user list control state. 70 * @private 71 */ 72 updateControls_: function() { 73 $('userList').disabled = 74 $('userNameEdit').disabled = !this.showWhitelist_ || 75 AccountsOptions.whitelistIsManaged() || 76 !$('useWhitelistCheck').checked; 77 }, 78 79 /** 80 * Handler for OptionsPage's visible property change event. 81 * @private 82 * @param {Event} e Property change event. 83 */ 84 handleVisibleChange_: function(e) { 85 if (this.visible) { 86 this.updateControls_(); 87 if (this.showWhitelist_) 88 $('userList').redraw(); 89 } 90 }, 91 92 /** 93 * Handler for allow guest check change. 94 * @private 95 */ 96 handleUseWhitelistCheckChange_: function(e) { 97 // Whitelist existing users when guest login is being disabled. 98 if ($('useWhitelistCheck').checked) { 99 chrome.send('whitelistExistingUsers'); 100 } 101 102 this.updateControls_(); 103 }, 104 105 /** 106 * handler for allow guest pref change. 107 * @private 108 */ 109 handleUseWhitelistPrefChange_: function(e) { 110 this.updateControls_(); 111 }, 112 113 /** 114 * Handler for "add" event fired from userNameEdit. 115 * @private 116 * @param {Event} e Add event fired from userNameEdit. 117 */ 118 handleAddUser_: function(e) { 119 chrome.send('whitelistUser', [e.user.email, e.user.name]); 120 chrome.send('coreOptionsUserMetricsAction', 121 ['Options_WhitelistedUser_Add']); 122 }, 123 124 /** 125 * Handler for "remove" event fired from userList. 126 * @private 127 * @param {Event} e Remove event fired from userList. 128 */ 129 handleRemoveUser_: function(e) { 130 chrome.send('unwhitelistUser', [e.user.username]); 131 chrome.send('coreOptionsUserMetricsAction', 132 ['Options_WhitelistedUser_Remove']); 133 } 134 }; 135 136 137 /** 138 * Returns whether the whitelist is managed by policy or not. 139 */ 140 AccountsOptions.whitelistIsManaged = function() { 141 return loadTimeData.getBoolean('whitelist_is_managed'); 142 }; 143 144 /** 145 * Update account picture. 146 * @param {string} username User for which to update the image. 147 */ 148 AccountsOptions.updateAccountPicture = function(username) { 149 if (this.showWhitelist_) 150 $('userList').updateAccountPicture(username); 151 }; 152 153 // Export 154 return { 155 AccountsOptions: AccountsOptions 156 }; 157 158 }); 159