| Index: chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js
|
| diff --git a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js
|
| index f0c52b28b6993c7f3f11d10b16ac21421b67b459..d38235f03cc5fe51c68c306687d8e6c69ee1ec4d 100644
|
| --- a/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js
|
| +++ b/chrome/browser/resources/settings/passwords_and_forms_page/passwords_and_forms_page.js
|
| @@ -27,10 +27,22 @@ PasswordManager.PlaintextPasswordEvent;
|
|
|
| PasswordManager.prototype = {
|
| /**
|
| - * Request the list of saved passwords and observe future changes.
|
| + * Add an observer to the list of saved passwords.
|
| + * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} listener
|
| + */
|
| + addSavedPasswordListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Remove an observer from the list of saved passwords.
|
| + * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} listener
|
| + */
|
| + removeSavedPasswordListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Request the list of saved passwords.
|
| * @param {function(!Array<!PasswordManager.PasswordUiEntry>):void} callback
|
| */
|
| - setSavedPasswordListChangedCallback: assertNotReached,
|
| + getSavedPasswordList: assertNotReached,
|
|
|
| /**
|
| * Should remove the saved password and notify that the list has changed.
|
| @@ -40,30 +52,87 @@ PasswordManager.prototype = {
|
| removeSavedPassword: assertNotReached,
|
|
|
| /**
|
| - * Request the list of password exceptions and observe future changes.
|
| + * Add an observer to the list of password exceptions.
|
| + * @param {function(!Array<!PasswordManager.ExceptionPair>):void} listener
|
| + */
|
| + addExceptionListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Remove an observer from the list of password exceptions.
|
| + * @param {function(!Array<!PasswordManager.ExceptionPair>):void} listener
|
| + */
|
| + removeExceptionListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Request the list of password exceptions.
|
| * @param {function(!Array<!PasswordManager.ExceptionPair>):void} callback
|
| */
|
| - setExceptionListChangedCallback: assertNotReached,
|
| + getExceptionList: assertNotReached,
|
|
|
| /**
|
| * Should remove the password exception and notify that the list has changed.
|
| * @param {!string} exception The exception that should be removed from the
|
| * list. No-op if |exception| is not in the list.
|
| */
|
| - removePasswordException: assertNotReached,
|
| + removeException: assertNotReached,
|
|
|
| /**
|
| - * Register a callback for when a password is requested.
|
| - * @param {function(!Array<!PasswordManager.LoginPair>):void} callback
|
| + * Gets the saved password for a given login pair.
|
| + * @param {!PasswordManager.LoginPair} loginPair The saved password that
|
| + * should be retrieved.
|
| + * @param {function(!PasswordManager.PlaintextPasswordEvent):void} callback
|
| */
|
| - onPlaintextPasswordRequestedCallback: assertNotReached,
|
| + getPlaintextPassword: assertNotReached,
|
| +};
|
| +
|
| +/**
|
| + * Interface for all callbacks to the autofill API.
|
| + * @interface
|
| + */
|
| +function AutofillManager() {}
|
| +
|
| +/** @typedef {chrome.autofillPrivate.AddressEntry} */
|
| +AutofillManager.AddressEntry;
|
| +
|
| +/** @typedef {chrome.autofillPrivate.CreditCardEntry} */
|
| +AutofillManager.CreditCardEntry;
|
|
|
| +AutofillManager.prototype = {
|
| /**
|
| - * Should request the saved password for a given login pair.
|
| - * @param {!PasswordManager.LoginPair} loginPair The saved password that
|
| - * should be retrieved.
|
| + * Add an observer to the list of addresses.
|
| + * @param {function(!Array<!AutofillManager.AddressEntry>):void} listener
|
| + */
|
| + addAddressListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Remove an observer from the list of addresses.
|
| + * @param {function(!Array<!AutofillManager.AddressEntry>):void} listener
|
| */
|
| - requestPlaintextPassword: assertNotReached,
|
| + removeAddressListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Request the list of addresses.
|
| + * @param {function(!Array<!AutofillManager.AddressEntry>):void} callback
|
| + */
|
| + getAddressList: assertNotReached,
|
| +
|
| + /**
|
| + * Add an observer to the list of credit cards.
|
| + * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} listener
|
| + */
|
| + addCreditCardListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Remove an observer from the list of credit cards.
|
| + * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} listener
|
| + */
|
| + removeCreditCardListChangedListener: assertNotReached,
|
| +
|
| + /**
|
| + * Request the list of credit cards.
|
| + * @param {function(!Array<!AutofillManager.CreditCardEntry>):void} callback
|
| + */
|
| + getCreditCardList: assertNotReached,
|
| };
|
|
|
| /**
|
| @@ -78,11 +147,19 @@ PasswordManagerImpl.prototype = {
|
| __proto__: PasswordManager,
|
|
|
| /** @override */
|
| - setSavedPasswordListChangedCallback: function(callback) {
|
| - // Get the list of passwords...
|
| + addSavedPasswordListChangedListener: function(listener) {
|
| + chrome.passwordsPrivate.onSavedPasswordsListChanged.addListener(listener);
|
| + },
|
| +
|
| + /** @override */
|
| + removeSavedPasswordListChangedListener: function(listener) {
|
| + chrome.passwordsPrivate.onSavedPasswordsListChanged.removeListener(
|
| + listener);
|
| + },
|
| +
|
| + /** @override */
|
| + getSavedPasswordList: function(callback) {
|
| chrome.passwordsPrivate.getSavedPasswordList(callback);
|
| - // ...and listen for future changes.
|
| - chrome.passwordsPrivate.onSavedPasswordsListChanged.addListener(callback);
|
| },
|
|
|
| /** @override */
|
| @@ -91,30 +168,85 @@ PasswordManagerImpl.prototype = {
|
| },
|
|
|
| /** @override */
|
| - setExceptionListChangedCallback: function(callback) {
|
| - // Get the list of exceptions...
|
| - chrome.passwordsPrivate.getPasswordExceptionList(callback);
|
| - // ...and listen for future changes.
|
| + addExceptionListChangedListener: function(listener) {
|
| chrome.passwordsPrivate.onPasswordExceptionsListChanged.addListener(
|
| - callback);
|
| + listener);
|
| },
|
|
|
| /** @override */
|
| - removePasswordException: function(exception) {
|
| - chrome.passwordsPrivate.removePasswordException(exception);
|
| + removeExceptionListChangedListener: function(listener) {
|
| + chrome.passwordsPrivate.onPasswordExceptionsListChanged.removeListener(
|
| + listener);
|
| },
|
|
|
| /** @override */
|
| - onPlaintextPasswordRequestedCallback: function(callback) {
|
| - chrome.passwordsPrivate.onPlaintextPasswordRetrieved.addListener(callback);
|
| + getExceptionList: function(callback) {
|
| + chrome.passwordsPrivate.getPasswordExceptionList(callback);
|
| },
|
|
|
| /** @override */
|
| - requestPlaintextPassword: function(loginPair) {
|
| + removeException: function(exception) {
|
| + chrome.passwordsPrivate.removePasswordException(exception);
|
| + },
|
| +
|
| + /** @override */
|
| + getPlaintextPassword: function(loginPair, callback) {
|
| + var listener = function(reply) {
|
| + // Only handle the reply for our loginPair request.
|
| + if (reply.loginPair.originUrl == loginPair.originUrl &&
|
| + reply.loginPair.username == loginPair.username) {
|
| + chrome.passwordsPrivate.onPlaintextPasswordRetrieved.removeListener(
|
| + listener);
|
| + callback(reply);
|
| + }
|
| + };
|
| + chrome.passwordsPrivate.onPlaintextPasswordRetrieved.addListener(listener);
|
| chrome.passwordsPrivate.requestPlaintextPassword(loginPair);
|
| },
|
| };
|
|
|
| +/**
|
| + * Implementation that accesses the private API.
|
| + * @implements {AutofillManager}
|
| + * @constructor
|
| + */
|
| +function AutofillManagerImpl() {}
|
| +cr.addSingletonGetter(AutofillManagerImpl);
|
| +
|
| +AutofillManagerImpl.prototype = {
|
| + __proto__: AutofillManager,
|
| +
|
| + /** @override */
|
| + addAddressListChangedListener: function(listener) {
|
| + chrome.autofillPrivate.onAddressListChanged.addListener(listener);
|
| + },
|
| +
|
| + /** @override */
|
| + removeAddressListChangedListener: function(listener) {
|
| + chrome.autofillPrivate.onAddressListChanged.removeListener(listener);
|
| + },
|
| +
|
| + /** @override */
|
| + getAddressList: function(callback) {
|
| + chrome.autofillPrivate.getAddressList(callback);
|
| + },
|
| +
|
| + /** @override */
|
| + addCreditCardListChangedListener: function(listener) {
|
| + chrome.autofillPrivate.onCreditCardListChanged.addListener(listener);
|
| + },
|
| +
|
| + /** @override */
|
| + removeCreditCardListChangedListener: function(listener) {
|
| + chrome.autofillPrivate.onCreditCardListChanged.removeListener(listener);
|
| + },
|
| +
|
| + /** @override */
|
| + getCreditCardList: function(callback) {
|
| + chrome.autofillPrivate.getCreditCardList(callback);
|
| + },
|
| +};
|
| +
|
| (function() {
|
| 'use strict';
|
|
|
| @@ -144,7 +276,6 @@ Polymer({
|
| */
|
| savedPasswords: {
|
| type: Array,
|
| - value: function() { return []; },
|
| },
|
|
|
| /**
|
| @@ -153,9 +284,24 @@ Polymer({
|
| */
|
| passwordExceptions: {
|
| type: Array,
|
| - value: function() { return []; },
|
| },
|
| - },
|
| +
|
| + /**
|
| + * An array of saved addresses.
|
| + * @type {!Array<!AutofillManager.AddressEntry>}
|
| + */
|
| + addresses: {
|
| + type: Array,
|
| + },
|
| +
|
| + /**
|
| + * An array of saved addresses.
|
| + * @type {!Array<!AutofillManager.CreditCardEntry>}
|
| + */
|
| + creditCards: {
|
| + type: Array,
|
| + },
|
| + },
|
|
|
| listeners: {
|
| 'remove-password-exception': 'removePasswordException_',
|
| @@ -163,19 +309,68 @@ Polymer({
|
| 'show-password': 'showPassword_',
|
| },
|
|
|
| + /** @type {?function(!Array<PasswordManager.PasswordUiEntry>):void} */
|
| + setSavedPasswordsListener_: null,
|
| +
|
| + /** @type {?function(!Array<PasswordManager.ExceptionPair>):void} */
|
| + setPasswordExceptionsListener_: null,
|
| +
|
| + /** @type {?function(!Array<!AutofillManager.AddressEntry>)} */
|
| + setAddressesListener_: null,
|
| +
|
| + /** @type {?function(!Array<!AutofillManager.CreditCardEntry>)} */
|
| + setCreditCardsListener_: null,
|
| +
|
| /** @override */
|
| ready: function() {
|
| - this.passwordManager_ = PasswordManagerImpl.getInstance();
|
| -
|
| - this.passwordManager_.setSavedPasswordListChangedCallback(function(list) {
|
| + // Create listener functions.
|
| + this.setSavedPasswordsListener_ = function(list) {
|
| this.savedPasswords = list;
|
| - }.bind(this));
|
| - this.passwordManager_.setExceptionListChangedCallback(function(list) {
|
| + }.bind(this);
|
| +
|
| + this.setPasswordExceptionsListener_ = function(list) {
|
| this.passwordExceptions = list;
|
| - }.bind(this));
|
| - this.passwordManager_.onPlaintextPasswordRequestedCallback(function(e) {
|
| - this.$$('#passwordSection').setPassword(e.loginPair, e.plaintextPassword);
|
| - }.bind(this));
|
| + }.bind(this);
|
| +
|
| + this.setAddressesListener_ = function(list) {
|
| + this.addresses = list;
|
| + }.bind(this);
|
| +
|
| + this.setCreditCardsListener_ = function(list) {
|
| + this.creditCards = list;
|
| + }.bind(this);
|
| +
|
| + // Set the managers. These can be overridden by tests.
|
| + this.passwordManager_ = PasswordManagerImpl.getInstance();
|
| + this.autofillManager_ = AutofillManagerImpl.getInstance();
|
| +
|
| + // Request initial data.
|
| + this.passwordManager_.getSavedPasswordList(this.setSavedPasswordsListener_);
|
| + this.passwordManager_.getExceptionList(this.setPasswordExceptionsListener_);
|
| + this.autofillManager_.getAddressList(this.setAddressesListener_);
|
| + this.autofillManager_.getCreditCardList(this.setCreditCardsListener_);
|
| +
|
| + // Listen for changes.
|
| + this.passwordManager_.addSavedPasswordListChangedListener(
|
| + this.setSavedPasswordsListener_);
|
| + this.passwordManager_.addExceptionListChangedListener(
|
| + this.setPasswordExceptionsListener_);
|
| + this.autofillManager_.addAddressListChangedListener(
|
| + this.setAddressesListener_);
|
| + this.autofillManager_.addCreditCardListChangedListener(
|
| + this.setCreditCardsListener_);
|
| + },
|
| +
|
| + /** @override */
|
| + detached: function() {
|
| + this.passwordManager_.removeSavedPasswordListChangedListener(
|
| + this.setSavedPasswordsListener_);
|
| + this.passwordManager_.removeExceptionListChangedListener(
|
| + this.setPasswordExceptionsListener_);
|
| + this.autofillManager_.removeAddressListChangedListener(
|
| + this.setAddressesListener_);
|
| + this.autofillManager_.removeCreditCardListChangedListener(
|
| + this.setCreditCardsListener_);
|
| },
|
|
|
| /**
|
| @@ -184,7 +379,7 @@ Polymer({
|
| * @private
|
| */
|
| removePasswordException_: function(event) {
|
| - this.passwordManager_.removePasswordException(event.detail);
|
| + this.passwordManager_.removeException(event.detail);
|
| },
|
|
|
| /**
|
| @@ -229,7 +424,9 @@ Polymer({
|
| * @private
|
| */
|
| showPassword_: function(event) {
|
| - this.passwordManager_.requestPlaintextPassword(event.detail);
|
| + this.passwordManager_.getPlaintextPassword(event.detail, function(e) {
|
| + this.$$('#passwordSection').setPassword(e.loginPair, e.plaintextPassword);
|
| + }.bind(this));
|
| },
|
| });
|
| })();
|
|
|