Home | History | Annotate | Download | only in chromeos
      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