Home | History | Annotate | Download | only in options
      1 // Copyright (c) 2011 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   const OptionsPage = options.OptionsPage;
      7   const ArrayDataModel = cr.ui.ArrayDataModel;
      8 
      9   /////////////////////////////////////////////////////////////////////////////
     10   // PasswordManager class:
     11 
     12   /**
     13    * Encapsulated handling of password and exceptions page.
     14    * @constructor
     15    */
     16   function PasswordManager() {
     17     this.activeNavTab = null;
     18     OptionsPage.call(this,
     19                      'passwords',
     20                      templateData.passwordsPageTabTitle,
     21                      'password-manager');
     22   }
     23 
     24   cr.addSingletonGetter(PasswordManager);
     25 
     26   PasswordManager.prototype = {
     27     __proto__: OptionsPage.prototype,
     28 
     29     /**
     30      * The saved passwords list.
     31      * @type {DeletableItemList}
     32      * @private
     33      */
     34     savedPasswordsList_: null,
     35 
     36     /**
     37      * The password exceptions list.
     38      * @type {DeletableItemList}
     39      * @private
     40      */
     41     passwordExceptionsList_: null,
     42 
     43     /** @inheritDoc */
     44     initializePage: function() {
     45       OptionsPage.prototype.initializePage.call(this);
     46 
     47       this.createSavedPasswordsList_();
     48       this.createPasswordExceptionsList_();
     49     },
     50 
     51     /** @inheritDoc */
     52     canShowPage: function() {
     53       return !PersonalOptions.disablePasswordManagement();
     54     },
     55 
     56     /** @inheritDoc */
     57     didShowPage: function() {
     58       // Updating the password lists may cause a blocking platform dialog pop up
     59       // (Mac, Linux), so we delay this operation until the page is shown.
     60       chrome.send('updatePasswordLists');
     61     },
     62 
     63     /**
     64      * Creates, decorates and initializes the saved passwords list.
     65      * @private
     66      */
     67     createSavedPasswordsList_: function() {
     68       this.savedPasswordsList_ = $('saved-passwords-list');
     69       options.passwordManager.PasswordsList.decorate(this.savedPasswordsList_);
     70       this.savedPasswordsList_.autoExpands = true;
     71     },
     72 
     73     /**
     74      * Creates, decorates and initializes the password exceptions list.
     75      * @private
     76      */
     77     createPasswordExceptionsList_: function() {
     78       this.passwordExceptionsList_ = $('password-exceptions-list');
     79       options.passwordManager.PasswordExceptionsList.decorate(
     80           this.passwordExceptionsList_);
     81       this.passwordExceptionsList_.autoExpands = true;
     82     },
     83 
     84     /**
     85      * Updates the visibility of the list and empty list placeholder.
     86      * @param {!List} list The list to toggle visilibility for.
     87      */
     88     updateListVisibility_: function(list) {
     89       var empty = list.dataModel.length == 0;
     90       var listPlaceHolderID = list.id + '-empty-placeholder';
     91       list.hidden = empty;
     92       $(listPlaceHolderID).hidden = !empty;
     93     },
     94 
     95     /**
     96      * Updates the data model for the saved passwords list with the values from
     97      * |entries|.
     98      * @param {Array} entries The list of saved password data.
     99      */
    100     setSavedPasswordsList_: function(entries) {
    101       this.savedPasswordsList_.dataModel = new ArrayDataModel(entries);
    102       this.updateListVisibility_(this.savedPasswordsList_);
    103     },
    104 
    105     /**
    106      * Updates the data model for the password exceptions list with the values
    107      * from |entries|.
    108      * @param {Array} entries The list of password exception data.
    109      */
    110     setPasswordExceptionsList_: function(entries) {
    111       this.passwordExceptionsList_.dataModel = new ArrayDataModel(entries);
    112       this.updateListVisibility_(this.passwordExceptionsList_);
    113     },
    114   };
    115 
    116   /**
    117    * Call to remove a saved password.
    118    * @param rowIndex indicating the row to remove.
    119    */
    120   PasswordManager.removeSavedPassword = function(rowIndex) {
    121       chrome.send('removeSavedPassword', [String(rowIndex)]);
    122   };
    123 
    124   /**
    125    * Call to remove a password exception.
    126    * @param rowIndex indicating the row to remove.
    127    */
    128   PasswordManager.removePasswordException = function(rowIndex) {
    129       chrome.send('removePasswordException', [String(rowIndex)]);
    130   };
    131 
    132   /**
    133    * Call to remove all saved passwords.
    134    * @param tab contentType of the tab currently on.
    135    */
    136   PasswordManager.removeAllPasswords = function() {
    137     chrome.send('removeAllSavedPasswords');
    138   };
    139 
    140   /**
    141    * Call to remove all saved passwords.
    142    * @param tab contentType of the tab currently on.
    143    */
    144   PasswordManager.removeAllPasswordExceptions = function() {
    145     chrome.send('removeAllPasswordExceptions');
    146   };
    147 
    148   PasswordManager.setSavedPasswordsList = function(entries) {
    149     PasswordManager.getInstance().setSavedPasswordsList_(entries);
    150   };
    151 
    152   PasswordManager.setPasswordExceptionsList = function(entries) {
    153     PasswordManager.getInstance().setPasswordExceptionsList_(entries);
    154   };
    155 
    156   // Export
    157   return {
    158     PasswordManager: PasswordManager
    159   };
    160 
    161 });
    162