121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be
321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file.
421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsencr.define('options.passwordManager', function() {
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  const ArrayDataModel = cr.ui.ArrayDataModel;
721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  const DeletableItemList = options.DeletableItemList;
821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  const DeletableItem = options.DeletableItem;
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  const List = cr.ui.List;
1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  /**
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * Creates a new passwords list item.
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @param {Array} entry An array of the form [url, username, password].
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @constructor
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @extends {cr.ui.ListItem}
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   */
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  function PasswordListItem(entry, showPasswords) {
1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    var el = cr.doc.createElement('div');
1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    el.dataItem = entry;
2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    el.__proto__ = PasswordListItem.prototype;
21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    el.decorate(showPasswords);
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return el;
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  PasswordListItem.prototype = {
2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    __proto__: DeletableItem.prototype,
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    decorate: function(showPasswords) {
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      DeletableItem.prototype.decorate.call(this);
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The URL of the site.
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var urlLabel = this.ownerDocument.createElement('div');
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.classList.add('favicon-cell');
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      urlLabel.classList.add('url');
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.textContent = this.url;
3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.style.backgroundImage = url('chrome://favicon/' + this.url);
3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.contentElement.appendChild(urlLabel);
4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The stored username.
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var usernameLabel = this.ownerDocument.createElement('div');
4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      usernameLabel.className = 'name';
4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      usernameLabel.textContent = this.username;
4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.contentElement.appendChild(usernameLabel);
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The stored password.
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var passwordInputDiv = this.ownerDocument.createElement('div');
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      passwordInputDiv.className = 'password';
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The password input field.
5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var passwordInput = this.ownerDocument.createElement('input');
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      passwordInput.type = 'password';
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      passwordInput.className = 'inactive-password';
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      passwordInput.readOnly = true;
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      passwordInput.value = showPasswords ? this.password : "********";
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      passwordInputDiv.appendChild(passwordInput);
5821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The show/hide button.
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (showPasswords) {
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        var button = this.ownerDocument.createElement('button');
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        button.classList.add('hidden');
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        button.classList.add('password-button');
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        button.textContent = localStrings.getString('passwordShowButton');
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        button.addEventListener('click', this.onClick_, true);
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        passwordInputDiv.appendChild(button);
67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      }
6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.contentElement.appendChild(passwordInputDiv);
7021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
7121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
7221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    selectionChanged: function() {
7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var passwordInput = this.querySelector('input[type=password]');
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      var textInput = this.querySelector('input[type=text]');
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      var input = passwordInput || textInput;
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      var button = input.nextSibling;
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      // |button| doesn't exist when passwords can't be shown.
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      if (!button)
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        return;
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      if (this.selected) {
8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        input.classList.remove('inactive-password');
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        button.classList.remove('hidden');
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      } else {
8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        input.classList.add('inactive-password');
8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        button.classList.add('hidden');
8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      }
8821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
8921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
9121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * On-click event handler. Swaps the type of the input field from password
9221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * to text and back.
9321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * @private
9421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
9521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    onClick_: function(event) {
9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      // The password is the input element previous to the button.
9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      var button = event.currentTarget;
9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      var passwordInput = button.previousSibling;
9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      if (passwordInput.type == 'password') {
10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        passwordInput.type = 'text';
10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        button.textContent = localStrings.getString('passwordHideButton');
10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      } else {
10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        passwordInput.type = 'password';
10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen        button.textContent = localStrings.getString('passwordShowButton');
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      }
10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
10721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
10821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
10921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * Get and set the URL for the entry.
11021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * @type {string}
11121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
11221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get url() {
11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataItem[0];
11421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
11521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    set url(url) {
11621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.dataItem[0] = url;
11721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
11821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
11921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
12021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * Get and set the username for the entry.
12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * @type {string}
12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get username() {
12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataItem[1];
12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    set username(username) {
12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.dataItem[1] = username;
12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * Get and set the password for the entry.
13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * @type {string}
13321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get password() {
13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataItem[2];
13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    set password(password) {
13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.dataItem[2] = password;
13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
14021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
14121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
14221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  /**
14321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * Creates a new PasswordExceptions list item.
14421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @param {Array} entry A pair of the form [url, username].
14521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @constructor
14621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @extends {Deletable.ListItem}
14721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   */
14821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  function PasswordExceptionsListItem(entry) {
14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    var el = cr.doc.createElement('div');
15021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    el.dataItem = entry;
15121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    el.__proto__ = PasswordExceptionsListItem.prototype;
15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    el.decorate();
15321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
15421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    return el;
15521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
15621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
15721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  PasswordExceptionsListItem.prototype = {
15821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    __proto__: DeletableItem.prototype,
15921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
16021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
16121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * Call when an element is decorated as a list item.
16221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
16321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    decorate: function() {
16421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      DeletableItem.prototype.decorate.call(this);
16521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
16621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      // The URL of the site.
16721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      var urlLabel = this.ownerDocument.createElement('div');
16821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.className = 'url';
16921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.classList.add('favicon-cell');
17021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.textContent = this.url;
17121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      urlLabel.style.backgroundImage = url('chrome://favicon/' + this.url);
17221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.contentElement.appendChild(urlLabel);
17321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
17421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
17521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
17621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * Get the url for the entry.
17721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * @type {string}
17821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
17921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get url() {
18021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataItem;
18121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
18221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    set url(url) {
18321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      this.dataItem = url;
18421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
18521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
18621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
18721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  /**
18821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * Create a new passwords list.
18921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @constructor
19021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @extends {cr.ui.List}
19121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   */
19221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  var PasswordsList = cr.ui.define('list');
19321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
19421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  PasswordsList.prototype = {
19521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    __proto__: DeletableItemList.prototype,
19621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    /**
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * Whether passwords can be revealed or not.
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * @type {boolean}
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * @private
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     */
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    showPasswords_: true,
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    /** @inheritDoc */
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    decorate: function() {
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      DeletableItemList.prototype.decorate.call(this);
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Preferences.getInstance().addEventListener(
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          "profile.password_manager_allow_show_passwords",
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          this.onPreferenceChanged_.bind(this));
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    },
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    /**
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * Listener for changes on the preference.
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * @param {Event} event The preference update event.
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     * @private
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen     */
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    onPreferenceChanged_: function(event) {
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      this.showPasswords_ = event.value.value;
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      this.redraw();
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    },
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
22221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
22321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    createItem: function(entry) {
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      return new PasswordListItem(entry, this.showPasswords_);
22521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
22621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
22721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
22821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    deleteItemAtIndex: function(index) {
22921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      PasswordManager.removeSavedPassword(index);
23021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
23121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
23221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
23321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * The length of the list.
23421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
23521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get length() {
23621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataModel.length;
23721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
23821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
24021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  /**
24121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * Create a new passwords list.
24221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @constructor
24321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   * @extends {cr.ui.List}
24421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen   */
24521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  var PasswordExceptionsList = cr.ui.define('list');
24621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
24721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  PasswordExceptionsList.prototype = {
24821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    __proto__: DeletableItemList.prototype,
24921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
25021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
25121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    createItem: function(entry) {
25221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return new PasswordExceptionsListItem(entry);
25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /** @inheritDoc */
25621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    deleteItemAtIndex: function(index) {
25721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      PasswordManager.removePasswordException(index);
25821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
25921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
26021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    /**
26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     * The length of the list.
26221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen     */
26321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    get length() {
26421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return this.dataModel.length;
26521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    },
26621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
26721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
26821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return {
26921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    PasswordListItem: PasswordListItem,
27021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    PasswordExceptionsListItem: PasswordExceptionsListItem,
27121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    PasswordsList: PasswordsList,
27221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    PasswordExceptionsList: PasswordExceptionsList,
27321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  };
27421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen});
275