☠☠ backed out by 05b970ff2aff ☠ ☠ | |
author | steveck-chung <schung@mozilla.com> |
Wed, 09 Aug 2017 15:43:28 +0800 | |
changeset 377168 | 397bc9636e83d3c75895ca2b53749e51df651a13 |
parent 377167 | 08e729b3651719ff260cb3651539fff11a322b2f |
child 377169 | 6819414d32eb9e2a293f5c937d3db745237ea26a |
push id | 32402 |
push user | archaeopteryx@coole-files.de |
push date | Mon, 28 Aug 2017 14:47:04 +0000 |
treeherder | mozilla-central@d5b6d113cf17 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | lchang |
bugs | 1371113 |
milestone | 57.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/extensions/formautofill/FormAutofillHandler.jsm +++ b/browser/extensions/formautofill/FormAutofillHandler.jsm @@ -560,16 +560,17 @@ FormAutofillHandler.prototype = { if (data.address && Object.keys(data.address.record).length < FormAutofillUtils.AUTOFILL_FIELDS_THRESHOLD) { log.debug("No address record saving since there are only", Object.keys(data.address.record).length, "usable fields"); delete data.address; } - if (data.creditCard && !data.creditCard.record["cc-number"]) { - log.debug("No credit card record saving since card number is empty"); + if (data.creditCard && (!data.creditCard.record["cc-number"] || + !FormAutofillUtils.isCCNumber(data.creditCard.record["cc-number"]))) { + log.debug("No credit card record saving since card number is invalid"); delete data.creditCard; } return data; }, };
--- a/browser/extensions/formautofill/FormAutofillParent.jsm +++ b/browser/extensions/formautofill/FormAutofillParent.jsm @@ -321,19 +321,17 @@ FormAutofillParent.prototype = { Services.ppmm.initialProcessData.autofillSavedFieldNames.delete(fieldName); }); Services.ppmm.broadcastAsyncMessage("FormAutofill:savedFieldNames", Services.ppmm.initialProcessData.autofillSavedFieldNames); this._updateStatus(); }, - _onFormSubmit(data, target) { - let {address} = data; - + _onAddressSubmit(address, target) { if (address.guid) { // Avoid updating the fields that users don't modify. let originalAddress = this.profileStorage.addresses.get(address.guid); for (let field in address.record) { if (address.untouchedFields.includes(field) && originalAddress[field]) { address.record[field] = originalAddress[field]; } } @@ -384,9 +382,43 @@ FormAutofillParent.prototype = { {origin: "autofillDoorhanger"}); }); } else { // We want to exclude the first time form filling. Services.telemetry.scalarAdd("formautofill.addresses.fill_type_manual", 1); } } }, + + async _onCreditCardSubmit(creditCard, target) { + // We'll show the credit card doorhanger if: + // - User applys autofill and changed + // - User fills form manually + if (creditCard.guid && + Object.keys(creditCard.record).every(key => creditCard.untouchedFields.includes(key))) { + return; + } + + let state = await FormAutofillDoorhanger.show(target, "creditCard"); + if (state == "cancel") { + return; + } + + if (state == "disable") { + Services.prefs.setBoolPref("extensions.formautofill.creditCards.enabled", false); + return; + } + + await this.profileStorage.creditCards.normalizeCCNumberFields(creditCard.record); + this.profileStorage.creditCards.add(creditCard.record); + }, + + _onFormSubmit(data, target) { + let {address, creditCard} = data; + + if (address) { + this._onAddressSubmit(address, target); + } + if (creditCard) { + this._onCreditCardSubmit(creditCard, target); + } + }, };