Commit 4aa810b2 authored by Hwanseung Lee's avatar Hwanseung Lee Committed by Commit Bot

[Autofill] Add Troy card for autofill.

Add Troy card which card number have prefix 2205 or 9792
for autofill

Bug: 1026289
Skip-Translation-Screenshots-Check: True
Change-Id: I72b7b363c2ec63cb5ba1192b996773bcdf2d2e67
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1952628Reviewed-by: default avatarDominic Battré <battre@chromium.org>
Reviewed-by: default avatarFriedrich [CET] <fhorschig@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Hwanseung Lee <hs1217.lee@samsung.com>
Cr-Commit-Position: refs/heads/master@{#791882}
parent 2641a901
......@@ -137,6 +137,7 @@ chrome_java_resources = [
"java/res/drawable-hdpi/tabswitcher_border_frame_shadow.9.png",
"java/res/drawable-hdpi/toolbar_shadow_focused.png",
"java/res/drawable-hdpi/toolbar_shadow_normal.png",
"java/res/drawable-hdpi/troy_card.png",
"java/res/drawable-hdpi/unionpay_card.png",
"java/res/drawable-hdpi/verify_checkmark.png",
"java/res/drawable-ldrtl-hdpi-v17/btn_suggestion_refine.png",
......@@ -285,6 +286,7 @@ chrome_java_resources = [
"java/res/drawable-mdpi/tabswitcher_border_frame_shadow.9.png",
"java/res/drawable-mdpi/toolbar_shadow_focused.png",
"java/res/drawable-mdpi/toolbar_shadow_normal.png",
"java/res/drawable-mdpi/troy_card.png",
"java/res/drawable-mdpi/unionpay_card.png",
"java/res/drawable-mdpi/verify_checkmark.png",
"java/res/drawable-night/homepage_promo_illustration_vector.xml",
......@@ -420,6 +422,7 @@ chrome_java_resources = [
"java/res/drawable-xhdpi/tabswitcher_border_frame_shadow.9.png",
"java/res/drawable-xhdpi/toolbar_shadow_focused.png",
"java/res/drawable-xhdpi/toolbar_shadow_normal.png",
"java/res/drawable-xhdpi/troy_card.png",
"java/res/drawable-xhdpi/unionpay_card.png",
"java/res/drawable-xhdpi/verify_checkmark.png",
"java/res/drawable-xxhdpi-v21/navigation_bubble_shadow.9.png",
......@@ -531,6 +534,7 @@ chrome_java_resources = [
"java/res/drawable-xxhdpi/tabswitcher_border_frame_shadow.9.png",
"java/res/drawable-xxhdpi/toolbar_shadow_focused.png",
"java/res/drawable-xxhdpi/toolbar_shadow_normal.png",
"java/res/drawable-xxhdpi/troy_card.png",
"java/res/drawable-xxhdpi/unionpay_card.png",
"java/res/drawable-xxhdpi/verify_checkmark.png",
"java/res/drawable-xxxhdpi-v21/navigation_bubble_shadow.9.png",
......@@ -638,6 +642,7 @@ chrome_java_resources = [
"java/res/drawable-xxxhdpi/tabswitcher_border_frame_shadow.9.png",
"java/res/drawable-xxxhdpi/toolbar_shadow_focused.png",
"java/res/drawable-xxxhdpi/toolbar_shadow_normal.png",
"java/res/drawable-xxxhdpi/troy_card.png",
"java/res/drawable-xxxhdpi/unionpay_card.png",
"java/res/drawable-xxxhdpi/verify_checkmark.png",
"java/res/drawable/accessibility_tab_switcher_divider.xml",
......
......@@ -90,6 +90,8 @@ class CreditCardAccessorySheetViewBinder {
return R.drawable.mc_card;
case "mirCC":
return R.drawable.mir_card;
case "troyCC":
return R.drawable.troy_card;
case "unionPayCC":
return R.drawable.unionpay_card;
case "visaCC":
......
......@@ -59,6 +59,7 @@ LINK_RESOURCE_ID(IDR_AUTOFILL_CC_GENERIC, R.drawable.ic_credit_card_black)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_JCB, R.drawable.jcb_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_MASTERCARD, R.drawable.mc_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_MIR, R.drawable.mir_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_TROY, R.drawable.troy_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_UNIONPAY, R.drawable.unionpay_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_VISA, R.drawable.visa_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_GOOGLE_ISSUED_CARD,
......
......@@ -30,6 +30,7 @@ const struct {
{kJCBCard, IDR_AUTOFILL_CC_JCB},
{kMasterCard, IDR_AUTOFILL_CC_MASTERCARD},
{kMirCard, IDR_AUTOFILL_CC_MIR},
{kTroyCard, IDR_AUTOFILL_CC_TROY},
{kUnionPay, IDR_AUTOFILL_CC_UNIONPAY},
{kVisaCard, IDR_AUTOFILL_CC_VISA},
{kGoogleIssuedCard, IDR_AUTOFILL_GOOGLE_ISSUED_CARD},
......
......@@ -51,6 +51,7 @@ const PaymentRequestData kPaymentRequestData[]{
{autofill::kMasterCard, "mastercard", IDR_AUTOFILL_CC_MASTERCARD,
IDS_AUTOFILL_CC_MASTERCARD},
{autofill::kMirCard, "mir", IDR_AUTOFILL_CC_MIR, IDS_AUTOFILL_CC_MIR},
{autofill::kTroyCard, "troy", IDR_AUTOFILL_CC_TROY, IDS_AUTOFILL_CC_TROY},
{autofill::kUnionPay, "unionpay", IDR_AUTOFILL_CC_UNIONPAY,
IDS_AUTOFILL_CC_UNION_PAY},
{autofill::kVisaCard, "visa", IDR_AUTOFILL_CC_VISA, IDS_AUTOFILL_CC_VISA},
......
......@@ -74,6 +74,8 @@ base::string16 NetworkForFill(const std::string& network) {
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MASTERCARD);
if (network == kMirCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MIR);
if (network == kTroyCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_TROY);
if (network == kUnionPay)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_UNION_PAY);
if (network == kVisaCard)
......@@ -166,6 +168,8 @@ int CreditCard::IconResourceId(const std::string& network) {
return IDR_AUTOFILL_CC_MASTERCARD;
if (network == kMirCard)
return IDR_AUTOFILL_CC_MIR;
if (network == kTroyCard)
return IDR_AUTOFILL_CC_TROY;
if (network == kUnionPay)
return IDR_AUTOFILL_CC_UNIONPAY;
if (network == kVisaCard)
......@@ -185,7 +189,7 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
// https://developer.ean.com/general-info/valid-card-types,
// http://www.bincodes.com/, and
// http://www.fraudpractice.com/FL-binCC.html.
// (Last updated: May 29, 2017)
// (Last updated: February 2020; added Troy)
//
// Card Type Prefix(es) Length
// --------------------------------------------------------------------------
......@@ -197,6 +201,7 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
// JCB 3528-3589 16
// Mastercard 2221-2720, 51-55 16
// MIR 2200-2204 16
// Troy 2205, 9792 16
// UnionPay 62 16-19
// Determine the network for the given |number| by going from the longest
......@@ -223,6 +228,9 @@ const char* CreditCard::GetCardNetwork(const base::string16& number) {
if (first_four_digits >= 2200 && first_four_digits <= 2204)
return kMirCard;
if (first_four_digits == 2205 || first_four_digits == 9792)
return kTroyCard;
if (first_four_digits >= 2221 && first_four_digits <= 2720)
return kMasterCard;
......@@ -1058,6 +1066,7 @@ const char kGoogleIssuedCard[] = "googleIssuedCC";
const char kJCBCard[] = "jcbCC";
const char kMasterCard[] = "masterCardCC";
const char kMirCard[] = "mirCC";
const char kTroyCard[] = "troyCC";
const char kUnionPay[] = "unionPayCC";
const char kVisaCard[] = "visaCC";
......
......@@ -390,6 +390,7 @@ extern const char kGoogleIssuedCard[];
extern const char kJCBCard[];
extern const char kMasterCard[];
extern const char kMirCard[];
extern const char kTroyCard[];
extern const char kUnionPay[];
extern const char kVisaCard[];
......
......@@ -881,6 +881,7 @@ TEST(CreditCardTest, IconResourceId) {
EXPECT_EQ(IDR_AUTOFILL_CC_MASTERCARD,
CreditCard::IconResourceId(kMasterCard));
EXPECT_EQ(IDR_AUTOFILL_CC_MIR, CreditCard::IconResourceId(kMirCard));
EXPECT_EQ(IDR_AUTOFILL_CC_TROY, CreditCard::IconResourceId(kTroyCard));
EXPECT_EQ(IDR_AUTOFILL_CC_UNIONPAY, CreditCard::IconResourceId(kUnionPay));
EXPECT_EQ(IDR_AUTOFILL_CC_VISA, CreditCard::IconResourceId(kVisaCard));
}
......@@ -1602,6 +1603,8 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"4514161111111119", kEloCard, true},
GetCardNetworkTestCase{"5090111111111113", kEloCard, true},
GetCardNetworkTestCase{"6277801111111112", kEloCard, true},
GetCardNetworkTestCase{"2205111111111112", kTroyCard, true},
GetCardNetworkTestCase{"9792111111111116", kTroyCard, true},
// Existence of separators should not change the result, especially for
// prefixes that go past the first separator.
......@@ -1609,6 +1612,8 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"4111-1111-1111-1111", kVisaCard, true},
GetCardNetworkTestCase{"4312 7411 1111 1112", kEloCard, true},
GetCardNetworkTestCase{"4312-7411-1111-1112", kEloCard, true},
GetCardNetworkTestCase{"2205 1111 1111 1112", kTroyCard, true},
GetCardNetworkTestCase{"2205-1111-1111-1112", kTroyCard, true},
// Empty string
GetCardNetworkTestCase{"", kGenericCard, false},
......@@ -1648,6 +1653,7 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"2202", kMirCard, false},
GetCardNetworkTestCase{"2203", kMirCard, false},
GetCardNetworkTestCase{"2204", kMirCard, false},
GetCardNetworkTestCase{"2205", kTroyCard, false},
GetCardNetworkTestCase{"2221", kMasterCard, false},
GetCardNetworkTestCase{"2720", kMasterCard, false},
GetCardNetworkTestCase{"300", kDinersCard, false},
......@@ -1685,7 +1691,8 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"647", kDiscoverCard, false},
GetCardNetworkTestCase{"648", kDiscoverCard, false},
GetCardNetworkTestCase{"649", kDiscoverCard, false},
GetCardNetworkTestCase{"65", kDiscoverCard, false}));
GetCardNetworkTestCase{"65", kDiscoverCard, false},
GetCardNetworkTestCase{"9792", kTroyCard, false}));
class GetCardNetworkTestBatch4
: public testing::TestWithParam<GetCardNetworkTestCase> {};
......@@ -1712,6 +1719,7 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"60", kGenericCard, false},
GetCardNetworkTestCase{"601", kGenericCard, false},
GetCardNetworkTestCase{"64", kGenericCard, false},
GetCardNetworkTestCase{"9", kGenericCard, false},
// Unknown IINs.
GetCardNetworkTestCase{"0", kGenericCard, false},
......@@ -1751,7 +1759,16 @@ INSTANTIATE_TEST_SUITE_P(
GetCardNetworkTestCase{"69", kGenericCard, false},
GetCardNetworkTestCase{"7", kGenericCard, false},
GetCardNetworkTestCase{"8", kGenericCard, false},
GetCardNetworkTestCase{"9", kGenericCard, false},
GetCardNetworkTestCase{"90", kGenericCard, false},
GetCardNetworkTestCase{"91", kGenericCard, false},
GetCardNetworkTestCase{"92", kGenericCard, false},
GetCardNetworkTestCase{"93", kGenericCard, false},
GetCardNetworkTestCase{"94", kGenericCard, false},
GetCardNetworkTestCase{"95", kGenericCard, false},
GetCardNetworkTestCase{"97", kGenericCard, false},
GetCardNetworkTestCase{"979", kGenericCard, false},
GetCardNetworkTestCase{"98", kGenericCard, false},
GetCardNetworkTestCase{"99", kGenericCard, false},
// Oddball case: Unknown issuer, but valid Luhn check and plausible
// length.
......
......@@ -81,6 +81,8 @@ bool HasCorrectLength(const base::string16& number) {
return false;
if (type == kMirCard && number.size() != 16)
return false;
if (type == kTroyCard && number.size() != 16)
return false;
if (type == kUnionPay && (number.size() < 16 || number.size() > 19))
return false;
if (type == kVisaCard && number.size() != 13 && number.size() != 16 &&
......
......@@ -375,7 +375,7 @@ TEST_P(AutofillCCNumberValidationTest, IsValidCreditCardNumber) {
static const std::set<std::string> kAllBasicCardNetworks{
"amex", "discover", "diners", "elo", "jcb",
"mastercard", "mir", "unionpay", "visa"};
"mastercard", "mir", "troy", "unionpay", "visa"};
INSTANTIATE_TEST_SUITE_P(
CreditCardNumber,
......@@ -471,6 +471,7 @@ INSTANTIATE_TEST_SUITE_P(
GetCvcLengthForCardTypeCase{kJCBCard, GENERAL_CVC_LENGTH},
GetCvcLengthForCardTypeCase{kMasterCard, GENERAL_CVC_LENGTH},
GetCvcLengthForCardTypeCase{kMirCard, GENERAL_CVC_LENGTH},
GetCvcLengthForCardTypeCase{kTroyCard, GENERAL_CVC_LENGTH},
GetCvcLengthForCardTypeCase{kUnionPay, GENERAL_CVC_LENGTH},
GetCvcLengthForCardTypeCase{kVisaCard, GENERAL_CVC_LENGTH}));
......
......@@ -79,6 +79,9 @@
<message name="IDS_AUTOFILL_CC_MIR" desc="Mir credit card name." formatter_data="android_java">
Mir
</message>
<message name="IDS_AUTOFILL_CC_TROY" desc="Troy credit card name.">
Troy
</message>
<message name="IDS_AUTOFILL_CC_UNION_PAY" desc="China UnionPay credit card name." formatter_data="android_java">
China UnionPay
</message>
......
......@@ -10,6 +10,7 @@
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_MIR" file="autofill/mir.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_UNIONPAY" file="autofill/unionpay.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_VISA" file="autofill/visa.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_TROY" file="autofill/troy.png" />
<if expr="_google_chrome">
<then>
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_GOOGLE_ISSUED_CARD" file="autofill/cc-generic.png" />
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment