accounts_options.js revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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
5cr.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