Bug 1642058: Add expiration date in card list view under Preferences r=zbraniecki,fluent-reviewers,MattN,flod

***

Differential Revision: https://phabricator.services.mozilla.com/D77953
This commit is contained in:
Adam Roach [:abr] 2020-06-05 19:56:59 +00:00
Родитель 67bca5c4f4
Коммит 1915544e02
6 изменённых файлов: 116 добавлений и 15 удалений

Просмотреть файл

@ -9,6 +9,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title data-localization="manageCreditCardsTitle"/>
<link rel="localization" href="toolkit/payments/payments.ftl"/>
<link rel="stylesheet" href="chrome://global/skin/in-content/common.css" />
<link rel="stylesheet" href="chrome://formautofill/content/manageDialog.css" />
<script src="chrome://formautofill/content/manageDialog.js"></script>

Просмотреть файл

@ -156,12 +156,17 @@ class ManageRecords {
let selectedGuids = this._selectedOptions.map(option => option.value);
this.clearRecordElements();
for (let record of records) {
let { id, args, raw } = this.getLabelInfo(record);
let option = new Option(
this.getLabel(record),
raw ?? "",
record.guid,
false,
selectedGuids.includes(record.guid)
);
if (id) {
document.l10n.setAttributes(option, id, args);
}
option.record = record;
this._elements.records.appendChild(option);
}
@ -345,8 +350,8 @@ class ManageAddresses extends ManageRecords {
});
}
getLabel(address) {
return FormAutofillUtils.getAddressLabel(address);
getLabelInfo(address) {
return { raw: FormAutofillUtils.getAddressLabel(address) };
}
}
@ -411,10 +416,12 @@ class ManageCreditCards extends ManageRecords {
* @param {object} creditCard
* @returns {string}
*/
getLabel(creditCard) {
return CreditCard.getLabel({
getLabelInfo(creditCard) {
return CreditCard.getLabelInfo({
name: creditCard["cc-name"],
number: creditCard["cc-number"],
month: creditCard["cc-exp-month"],
year: creditCard["cc-exp-year"],
});
}

Просмотреть файл

@ -44,6 +44,8 @@ add_task(async function test_removingSingleAndMultipleCreditCards() {
await saveCreditCard(TEST_CREDIT_CARD_1);
await saveCreditCard(TEST_CREDIT_CARD_2);
await saveCreditCard(TEST_CREDIT_CARD_3);
await saveCreditCard(TEST_CREDIT_CARD_4);
await saveCreditCard(TEST_CREDIT_CARD_5);
let win = window.openDialog(
MANAGE_CREDIT_CARDS_DIALOG_URL,
@ -56,25 +58,36 @@ add_task(async function test_removingSingleAndMultipleCreditCards() {
let btnRemove = win.document.querySelector(TEST_SELECTORS.btnRemove);
let btnEdit = win.document.querySelector(TEST_SELECTORS.btnEdit);
is(selRecords.length, 3, "Three credit cards");
is(selRecords[0].text, "**** 7870", "Masked credit card 3");
is(selRecords.length, 5, "Five credit cards");
is(selRecords[0].text, "**** 1881, Chris P. Bacon", "Masked credit card 5");
is(selRecords[1].text, "**** 5100", "Masked credit card 4");
is(
selRecords[1].text,
"**** 1045, Timothy Berners-Lee",
selRecords[2].text,
"**** 7870, Expires on 1/2000",
"Masked credit card 3"
);
is(
selRecords[3].text,
"**** 1045, Timothy Berners-Lee, Expires on 12/" +
(new Date().getFullYear() + 10),
"Masked credit card 2"
);
is(selRecords[2].text, "**** 1111, John Doe", "Masked credit card 1");
is(
selRecords[4].text,
"**** 1111, John Doe, Expires on 4/" + new Date().getFullYear(),
"Masked credit card 1"
);
EventUtils.synthesizeMouseAtCenter(selRecords.children[0], {}, win);
is(btnRemove.disabled, false, "Remove button enabled");
is(btnEdit.disabled, false, "Edit button enabled");
EventUtils.synthesizeMouseAtCenter(btnRemove, {}, win);
await BrowserTestUtils.waitForEvent(selRecords, "RecordsRemoved");
is(selRecords.length, 2, "Two credit cards left");
is(selRecords.length, 4, "Four credit cards left");
EventUtils.synthesizeMouseAtCenter(selRecords.children[0], {}, win);
EventUtils.synthesizeMouseAtCenter(
selRecords.children[1],
selRecords.children[3],
{ shiftKey: true },
win
);

Просмотреть файл

@ -1,7 +1,8 @@
/* exported MANAGE_ADDRESSES_DIALOG_URL, MANAGE_CREDIT_CARDS_DIALOG_URL, EDIT_ADDRESS_DIALOG_URL, EDIT_CREDIT_CARD_DIALOG_URL,
BASE_URL, TEST_ADDRESS_1, TEST_ADDRESS_2, TEST_ADDRESS_3, TEST_ADDRESS_4, TEST_ADDRESS_5, TEST_ADDRESS_CA_1, TEST_ADDRESS_DE_1,
TEST_ADDRESS_IE_1,
TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2, TEST_CREDIT_CARD_3, FORM_URL, CREDITCARD_FORM_URL, CREDITCARD_FORM_IFRAME_URL
TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2, TEST_CREDIT_CARD_3, TEST_CREDIT_CARD_4, TEST_CREDIT_CARD_5,
FORM_URL, CREDITCARD_FORM_URL, CREDITCARD_FORM_IFRAME_URL
FTU_PREF, ENABLED_AUTOFILL_ADDRESSES_PREF, AUTOFILL_CREDITCARDS_AVAILABLE_PREF, ENABLED_AUTOFILL_CREDITCARDS_PREF,
SUPPORTED_COUNTRIES_PREF,
SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, SYNC_CREDITCARDS_PREF, SYNC_CREDITCARDS_AVAILABLE_PREF, CREDITCARDS_USED_STATUS_PREF,
@ -154,6 +155,17 @@ const TEST_CREDIT_CARD_3 = {
"cc-type": "mastercard",
};
const TEST_CREDIT_CARD_4 = {
"cc-number": "5105105105105100",
"cc-type": "mastercard",
};
const TEST_CREDIT_CARD_5 = {
"cc-name": "Chris P. Bacon",
"cc-number": "4012888888881881",
"cc-type": "visa",
};
const MAIN_BUTTON = "button";
const SECONDARY_BUTTON = "secondaryButton";
const MENU_BUTTON = "menubutton";

Просмотреть файл

@ -0,0 +1,44 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# This value isn't used directly, but is defined to avoid duplication
# in the "credit-card-label-*" strings.
#
# Variables:
# $month (String): Numeric month the credit card expires
# $year (String): Four-digit year the credit card expires
credit-card-expiration = Expires on { $month }/{ $year }
## These labels serve as a description of a credit card.
## The description must include a credit card number, and may optionally
## include a cardholder name, an expiration date, or both, so we have
## four variations.
# Label for a credit card with a number only
#
# Variables:
# $number (String): Partially-redacted credit card number
credit-card-label-number = { $number }
# Label for a credit card with a number and name
#
# Variables:
# $number (String): Partially-redacted credit card number
# $name (String): Cardholder name
credit-card-label-number-name = { $number }, { $name }
# Label for a credit card with a number and expiration date
#
# Variables:
# $number (String): Partially-redacted credit card number
credit-card-label-number-expiration = { $number }, { credit-card-expiration }
# Label for a credit card with a number, name, and expiration date
#
# Variables:
# $number (String): Partially-redacted credit card number
# $name (String): Cardholder name
credit-card-label-number-name-expiration =
{ $number }, { $name }, { credit-card-expiration }

Просмотреть файл

@ -212,8 +212,32 @@ class CreditCard {
}
/**
* Get credit card display label. It should display masked numbers and the
* cardholder's name, separated by a comma.
* Get credit card display label. It should display masked numbers, the
* cardholder's name, and the expiration date, separated by a commas.
*/
static getLabelInfo({ number, name, month, year }) {
let formatSelector = ["number"];
if (name) {
formatSelector.push("name");
}
if (month && year) {
formatSelector.push("expiration");
}
let stringId = "credit-card-label-" + formatSelector.join("-");
return {
id: stringId,
args: {
number: CreditCard.getMaskedNumber(number),
name,
month: month?.toString(),
year: year?.toString(),
},
};
}
/**
* !!! DEPRECATED !!!
* Please use getLabelInfo above, as it allows for localization.
*/
static getLabel({ number, name }) {
let parts = [];