// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @typedef {{ * creditCardNumber: string, * expirationMonth: string, * expirationYear: string, * guid: string, * nameOnCard: string * }} * @see chrome/browser/ui/webui/options/autofill_options_handler.cc */ var CreditCardData; cr.define('options', function() { var Page = cr.ui.pageManager.Page; var PageManager = cr.ui.pageManager.PageManager; var ArrayDataModel = cr.ui.ArrayDataModel; ///////////////////////////////////////////////////////////////////////////// // AutofillOptions class: /** * Encapsulated handling of Autofill options page. * @constructor * @extends {cr.ui.pageManager.Page} */ function AutofillOptions() { Page.call(this, 'autofill', loadTimeData.getString('autofillOptionsPageTabTitle'), 'autofill-options'); } cr.addSingletonGetter(AutofillOptions); AutofillOptions.prototype = { __proto__: Page.prototype, /** * The address list. * @type {options.DeletableItemList} * @private */ addressList_: null, /** * The credit card list. * @type {options.DeletableItemList} * @private */ creditCardList_: null, /** @override */ initializePage: function() { Page.prototype.initializePage.call(this); this.createAddressList_(); this.createCreditCardList_(); var self = this; $('autofill-add-address').onclick = function(event) { self.showAddAddressOverlay_(); }; $('autofill-add-creditcard').onclick = function(event) { self.showAddCreditCardOverlay_(); }; $('autofill-options-confirm').onclick = function(event) { PageManager.closeOverlay(); }; $('autofill-help').onclick = function(event) { chrome.send('coreOptionsUserMetricsAction', ['Options_AutofillShowAbout']); return true; // Always follow the href }; // TODO(jhawkins): What happens when Autofill is disabled whilst on the // Autofill options page? }, /** * Creates, decorates and initializes the address list. * @private */ createAddressList_: function() { var addressList = $('address-list'); options.autofillOptions.AutofillAddressList.decorate(addressList); this.addressList_ = assertInstanceof(addressList, options.DeletableItemList); this.addressList_.autoExpands = true; }, /** * Creates, decorates and initializes the credit card list. * @private */ createCreditCardList_: function() { var creditCardList = $('creditcard-list'); options.autofillOptions.AutofillCreditCardList.decorate(creditCardList); this.creditCardList_ = assertInstanceof(creditCardList, options.DeletableItemList); this.creditCardList_.autoExpands = true; }, /** * Shows the 'Add address' overlay, specifically by loading the * 'Edit address' overlay and modifying the overlay title. * @private */ showAddAddressOverlay_: function() { var title = loadTimeData.getString('addAddressTitle'); AutofillEditAddressOverlay.setTitle(title); PageManager.showPageByName('autofillEditAddress'); AutofillEditAddressOverlay.prepForNewAddress(); }, /** * Shows the 'Add credit card' overlay, specifically by loading the * 'Edit credit card' overlay and modifying the overlay title. * @private */ showAddCreditCardOverlay_: function() { var title = loadTimeData.getString('addCreditCardTitle'); AutofillEditCreditCardOverlay.setTitle(title); PageManager.showPageByName('autofillEditCreditCard'); AutofillEditCreditCardOverlay.prepForNewCard(); }, /** * Updates the data model for the address list with the values from * |entries|. * @param {!Array} entries The list of addresses. */ setAddressList_: function(entries) { this.addressList_.dataModel = new ArrayDataModel(entries); }, /** * Updates the data model for the credit card list with the values from * |entries|. * @param {!Array} entries The list of credit cards. */ setCreditCardList_: function(entries) { this.creditCardList_.dataModel = new ArrayDataModel(entries); }, /** * Removes the Autofill address or credit card represented by |guid|. * @param {string} guid The GUID of the address to remove. * @param {string=} metricsAction The name of the action to log for metrics. * @private */ removeData_: function(guid, metricsAction) { chrome.send('removeData', [guid]); if (metricsAction) chrome.send('coreOptionsUserMetricsAction', [metricsAction]); }, /** * Shows the 'Edit address' overlay, using the data in |address| to fill the * input fields. |address| is a list with one item, an associative array * that contains the address data. * @private */ showEditAddressOverlay_: function(address) { var title = loadTimeData.getString('editAddressTitle'); AutofillEditAddressOverlay.setTitle(title); AutofillEditAddressOverlay.loadAddress(address); PageManager.showPageByName('autofillEditAddress'); }, /** * Shows the 'Edit credit card' overlay, using the data in |credit_card| to * fill the input fields. |creditCard| is a list with one item, an * associative array that contains the credit card data. * @param {CreditCardData} creditCard * @private */ showEditCreditCardOverlay_: function(creditCard) { var title = loadTimeData.getString('editCreditCardTitle'); AutofillEditCreditCardOverlay.setTitle(title); AutofillEditCreditCardOverlay.loadCreditCard(creditCard); PageManager.showPageByName('autofillEditCreditCard'); }, }; AutofillOptions.setAddressList = function(entries) { AutofillOptions.getInstance().setAddressList_(entries); }; AutofillOptions.setCreditCardList = function(entries) { AutofillOptions.getInstance().setCreditCardList_(entries); }; AutofillOptions.removeData = function(guid, metricsAction) { AutofillOptions.getInstance().removeData_(guid, metricsAction); }; AutofillOptions.editAddress = function(address) { AutofillOptions.getInstance().showEditAddressOverlay_(address); }; /** * @param {CreditCardData} creditCard */ AutofillOptions.editCreditCard = function(creditCard) { AutofillOptions.getInstance().showEditCreditCardOverlay_(creditCard); }; // Export return { AutofillOptions: AutofillOptions }; });