Commit 33df534e authored by sense's avatar sense Committed by Commit bot

Add Mir credit card support to autofill.

BUG=664943

Review-Url: https://codereview.chromium.org/2514753002
Cr-Commit-Position: refs/heads/master@{#435085}
parent 02ca7451
......@@ -341,6 +341,7 @@ Still reading?
<ignore regexp="chrome/android/java/res/drawable-hdpi/infobar_screen_share.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/infobar_subresource_filtering.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/mc_card.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/mir_card.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/pageinfo_bad.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/pageinfo_good.png"/>
<ignore regexp="chrome/android/java/res/drawable-hdpi/pageinfo_warning.png"/>
......
......@@ -83,6 +83,7 @@ public class AutofillPaymentApp implements PaymentApp {
methods.add("diners");
methods.add("jcb");
methods.add("unionpay");
methods.add("mir");
// The spec does not include "generic" card types. That's the type of card for which
// Chrome cannot determine the type.
......
......@@ -171,6 +171,8 @@ public class CardEditor extends EditorBase<AutofillPaymentInstrument>
new CardTypeInfo(R.drawable.pr_jcb, R.string.autofill_cc_jcb));
mCardTypes.put("mastercard",
new CardTypeInfo(R.drawable.pr_mc, R.string.autofill_cc_mastercard));
mCardTypes.put("mir",
new CardTypeInfo(R.drawable.pr_mir, R.string.autofill_cc_mir));
mCardTypes.put("unionpay",
new CardTypeInfo(R.drawable.pr_unionpay, R.string.autofill_cc_union_pay));
mCardTypes.put("visa",
......
......@@ -67,6 +67,7 @@ LINK_RESOURCE_ID(IDR_AUTOFILL_CC_AMEX, R.drawable.amex_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_DISCOVER, R.drawable.discover_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_GENERIC, R.drawable.generic_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_VISA, R.drawable.visa_card)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_SCAN_NEW, android.R.drawable.ic_menu_camera)
LINK_RESOURCE_ID(IDR_AUTOFILL_CC_SCAN_NEW_KEYBOARD_ACCESSORY,
......@@ -83,5 +84,6 @@ LINK_RESOURCE_ID(IDR_AUTOFILL_PR_DISCOVER, R.drawable.pr_discover)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_GENERIC, R.drawable.pr_generic)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_JCB, R.drawable.pr_jcb)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_MASTERCARD, R.drawable.pr_mc)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_MIR, R.drawable.pr_mir)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_UNIONPAY, R.drawable.pr_unionpay)
LINK_RESOURCE_ID(IDR_AUTOFILL_PR_VISA, R.drawable.pr_visa)
......@@ -44,6 +44,7 @@ const struct {
{"genericCC", IDR_AUTOFILL_CC_GENERIC},
{"jcbCC", IDR_AUTOFILL_CC_GENERIC},
{"masterCardCC", IDR_AUTOFILL_CC_MASTERCARD},
{"mirCC", IDR_AUTOFILL_CC_MIR},
{"visaCC", IDR_AUTOFILL_CC_VISA},
#if defined(OS_ANDROID)
{"scanCreditCardIcon", IDR_AUTOFILL_CC_SCAN_NEW},
......
......@@ -27,6 +27,7 @@ const PaymentRequestData kPaymentRequestData[]{
{"discoverCC", "discover", IDR_AUTOFILL_PR_DISCOVER},
{"jcbCC", "jcb", IDR_AUTOFILL_PR_JCB},
{"masterCardCC", "mastercard", IDR_AUTOFILL_PR_MASTERCARD},
{"mirCC", "mir", IDR_AUTOFILL_PR_MIR},
{"unionPayCC", "unionpay", IDR_AUTOFILL_PR_UNIONPAY},
{"visaCC", "visa", IDR_AUTOFILL_PR_VISA},
};
......
......@@ -72,6 +72,8 @@ base::string16 TypeForFill(const std::string& type) {
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_JCB);
if (type == kMasterCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MASTERCARD);
if (type == kMirCard)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_MIR);
if (type == kUnionPay)
return l10n_util::GetStringUTF16(IDS_AUTOFILL_CC_UNION_PAY);
if (type == kVisaCard)
......@@ -137,6 +139,8 @@ int CreditCard::IconResourceId(const std::string& type) {
return IDR_AUTOFILL_CC_GENERIC;
if (type == kMasterCard)
return IDR_AUTOFILL_CC_MASTERCARD;
if (type == kMirCard)
return IDR_AUTOFILL_CC_MIR;
if (type == kUnionPay)
return IDR_AUTOFILL_CC_GENERIC;
if (type == kVisaCard)
......@@ -188,6 +192,9 @@ const char* CreditCard::GetCreditCardType(const base::string16& number) {
if (!base::StringToInt(number.substr(0, 2), &first_two_digits))
return kGenericCard;
if (first_two_digits == 22)
return kMirCard;
if (first_two_digits == 34 || first_two_digits == 37)
return kAmericanExpressCard;
......@@ -865,6 +872,7 @@ const char kDiscoverCard[] = "discoverCC";
const char kGenericCard[] = "genericCC";
const char kJCBCard[] = "jcbCC";
const char kMasterCard[] = "masterCardCC";
const char kMirCard[] = "mirCC";
const char kUnionPay[] = "unionPayCC";
const char kVisaCard[] = "visaCC";
......
......@@ -266,6 +266,7 @@ extern const char kDiscoverCard[];
extern const char kGenericCard[];
extern const char kJCBCard[];
extern const char kMasterCard[];
extern const char kMirCard[];
extern const char kUnionPay[];
extern const char kVisaCard[];
......
......@@ -386,6 +386,8 @@ TEST(CreditCardTest, IconResourceId) {
CreditCard::IconResourceId(kJCBCard));
EXPECT_EQ(IDR_AUTOFILL_CC_MASTERCARD,
CreditCard::IconResourceId(kMasterCard));
EXPECT_EQ(IDR_AUTOFILL_CC_MIR,
CreditCard::IconResourceId(kMirCard));
EXPECT_EQ(IDR_AUTOFILL_CC_VISA,
CreditCard::IconResourceId(kVisaCard));
}
......@@ -659,6 +661,9 @@ TEST(CreditCardTest, GetCreditCardType) {
{ "6247130048162403", kUnionPay, true },
{ "6247130048162403", kUnionPay, true },
{ "622384452162063648", kUnionPay, true },
{ "2204883716636153", kMirCard, true },
{ "2200111234567898", kMirCard, true },
{ "2200481349288130", kMirCard, true },
// Empty string
{ std::string(), kGenericCard, false },
......@@ -670,13 +675,16 @@ TEST(CreditCardTest, GetCreditCardType) {
// Fails Luhn check.
{ "4111111111111112", kVisaCard, false },
{ "6247130048162413", kUnionPay, false },
{ "2204883716636154", kMirCard, false },
// Invalid length.
{ "3434343434343434", kAmericanExpressCard, false },
{ "411111111111116", kVisaCard, false },
{ "220011123456783", kMirCard, false },
// Issuer Identification Numbers (IINs) that Chrome recognizes.
{ "4", kVisaCard, false },
{ "22", kMirCard, false },
{ "34", kAmericanExpressCard, false },
{ "37", kAmericanExpressCard, false },
{ "300", kDinersCard, false },
......@@ -708,6 +716,7 @@ TEST(CreditCardTest, GetCreditCardType) {
{ "62", kUnionPay, false },
// Not enough data to determine an IIN uniquely.
{ "2", kGenericCard, false },
{ "3", kGenericCard, false },
{ "30", kGenericCard, false },
{ "309", kGenericCard, false },
......@@ -721,7 +730,6 @@ TEST(CreditCardTest, GetCreditCardType) {
// Unknown IINs.
{ "0", kGenericCard, false },
{ "1", kGenericCard, false },
{ "2", kGenericCard, false },
{ "306", kGenericCard, false },
{ "307", kGenericCard, false },
{ "308", kGenericCard, false },
......
......@@ -54,6 +54,8 @@ bool IsValidCreditCardNumber(const base::string16& text) {
return false;
if (type == kMasterCard && number.size() != 16)
return false;
if (type == kMirCard && 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)
......
......@@ -66,6 +66,9 @@
<message name="IDS_AUTOFILL_CC_MASTERCARD" desc="MasterCard credit card name." formatter_data="android_java">
MasterCard
</message>
<message name="IDS_AUTOFILL_CC_MIR" desc="Mir credit card name." formatter_data="android_java">
Mir
</message>
<message name="IDS_AUTOFILL_CC_UNION_PAY" desc="China UnionPay credit card name." formatter_data="android_java">
China UnionPay
</message>
......
......@@ -4,6 +4,7 @@
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_DISCOVER" file="autofill/discover.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_GENERIC" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_MASTERCARD" file="autofill/mastercard.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_MIR" file="autofill/mir.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_CC_VISA" file="autofill/visa.png" />
<!-- These are not used on desktop, only Android, so use a placeholder file.
......@@ -25,6 +26,7 @@
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_GENERIC" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_JCB" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_MASTERCARD" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_MIR" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_UNIONPAY" file="autofill/cc-generic.png" />
<structure type="chrome_scaled_image" name="IDR_AUTOFILL_PR_VISA" file="autofill/cc-generic.png" />
......
......@@ -53,6 +53,7 @@ const IconImageMap kCreditCardIconImageMap[] = {
{autofill::kAmericanExpressCard, @"autofill_card_american_express"},
{autofill::kDiscoverCard, @"autofill_card_discover"},
{autofill::kMasterCard, @"autofill_card_mastercard"},
{autofill::kMirCard, @"autofill_card_mir"},
{autofill::kVisaCard, @"autofill_card_visa"},
{autofill::kDinersCard, @"autofill_card_diners"},
{autofill::kGenericCard, @"autofill_card_generic"},
......
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