Chromium Code Reviews| Index: components/autofill/core/browser/autofill_manager_unittest.cc |
| diff --git a/components/autofill/core/browser/autofill_manager_unittest.cc b/components/autofill/core/browser/autofill_manager_unittest.cc |
| index 1d9dcfb1cbdeae1e4122753a85cb2ddbf241a8e7..a74b7fe53dce914918b4d20afa3b472fac2c3b83 100644 |
| --- a/components/autofill/core/browser/autofill_manager_unittest.cc |
| +++ b/components/autofill/core/browser/autofill_manager_unittest.cc |
| @@ -31,6 +31,7 @@ |
| #include "components/autofill/core/browser/test_autofill_client.h" |
| #include "components/autofill/core/browser/test_autofill_driver.h" |
| #include "components/autofill/core/browser/test_autofill_external_delegate.h" |
| +#include "components/autofill/core/browser/validation.h" |
| #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
| #include "components/autofill/core/common/autofill_pref_names.h" |
| #include "components/autofill/core/common/autofill_switches.h" |
| @@ -149,6 +150,28 @@ class TestPersonalDataManager : public PersonalDataManager { |
| local_credit_cards_.clear(); |
| } |
| + // Create Elvis card with whitespace in the credit card number. |
| + void CreateTestCreditCardWithWhitespace() { |
| + ClearCreditCards(); |
| + CreditCard* credit_card = new CreditCard; |
| + test::SetCreditCardInfo(credit_card, "Elvis Presley", |
| + "4234 5678 9012 3456", // Visa |
| + "04", "2012"); |
| + credit_card->set_guid("00000000-0000-0000-0000-000000000008"); |
| + local_credit_cards_.push_back(credit_card); |
| + } |
| + |
| + // Create Elvis card with separator characters in the credit card number. |
| + void CreateTestCreditCardWithSeparators() { |
| + ClearCreditCards(); |
| + CreditCard* credit_card = new CreditCard; |
| + test::SetCreditCardInfo(credit_card, "Elvis Presley", |
| + "4234-5678-9012-3456", // Visa |
| + "04", "2012"); |
| + credit_card->set_guid("00000000-0000-0000-0000-000000000009"); |
| + local_credit_cards_.push_back(credit_card); |
| + } |
| + |
| void CreateTestCreditCardsYearAndMonth(const char* year, const char* month) { |
| ClearCreditCards(); |
| CreditCard* credit_card = new CreditCard; |
| @@ -186,7 +209,7 @@ class TestPersonalDataManager : public PersonalDataManager { |
| void CreateTestCreditCards(ScopedVector<CreditCard>* credit_cards) { |
| CreditCard* credit_card = new CreditCard; |
| test::SetCreditCardInfo(credit_card, "Elvis Presley", |
| - "4234 5678 9012 3456", // Visa |
| + "4234567890123456", // Visa |
|
bondd
2015/10/22 17:10:02
Removed spaces because they're tested explicitly e
|
| "04", "2012"); |
| credit_card->set_guid("00000000-0000-0000-0000-000000000004"); |
| credit_cards->push_back(credit_card); |
| @@ -724,6 +747,7 @@ class AutofillManagerTest : public testing::Test { |
| // useful for building up more complex test forms. |
| void CreateTestCreditCardFormData(FormData* form, |
| bool is_https, |
| + bool cc_autocomplete_off, |
|
Evan Stade
2015/10/22 23:02:43
am I missing something? When is this ever true?
a
bondd
2015/10/23 03:32:35
It was called via TestSaveCreditCards, but you are
|
| bool use_month_type) { |
| form->name = ASCIIToUTF16("MyForm"); |
| if (is_https) { |
| @@ -739,6 +763,8 @@ class AutofillManagerTest : public testing::Test { |
| test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field); |
| form->fields.push_back(field); |
| test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field); |
| + if (cc_autocomplete_off) |
| + field.should_autocomplete = false; |
| form->fields.push_back(field); |
| if (use_month_type) { |
| test::CreateTestFormField( |
| @@ -753,15 +779,15 @@ class AutofillManagerTest : public testing::Test { |
| } |
| } |
| - // Tests if credit card data gets saved |
| - void TestSaveCreditCards(bool is_https) { |
| + // Tests if credit card data gets saved. |
| + void TestSaveCreditCards(bool is_https, bool cc_autocomplete_off) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, is_https, false); |
| + CreateTestCreditCardFormData(&form, is_https, cc_autocomplete_off, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| - // Edit the data, and submit |
| + // Edit the data, and submit. |
| form.fields[1].value = ASCIIToUTF16("4111111111111111"); |
| form.fields[2].value = ASCIIToUTF16("11"); |
| form.fields[3].value = ASCIIToUTF16("2017"); |
| @@ -775,7 +801,7 @@ class AutofillManagerTest : public testing::Test { |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| "sync-url", "https://google.com"); |
| - CreateTestCreditCardFormData(form, true, false); |
| + CreateTestCreditCardFormData(form, true, false, false); |
| FormsSeen(std::vector<FormData>(1, *form)); |
| *card = CreditCard(CreditCard::MASKED_SERVER_CARD, "a123"); |
| test::SetCreditCardInfo(card, "John Dillinger", "1881" /* Visa */, "01", |
| @@ -1082,7 +1108,7 @@ TEST_F(AutofillManagerTest, GetProfileSuggestionsAutofillDisabledByUser) { |
| TEST_F(AutofillManagerTest, GetCreditCardSuggestionsEmptyValue) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1107,7 +1133,7 @@ TEST_F(AutofillManagerTest, GetCreditCardSuggestionsEmptyValue) { |
| TEST_F(AutofillManagerTest, GetCreditCardSuggestionsMatchCharacter) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1129,7 +1155,7 @@ TEST_F(AutofillManagerTest, GetCreditCardSuggestionsMatchCharacter) { |
| TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonCCNumber) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1162,7 +1188,7 @@ TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonCCNumber) { |
| TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonHTTPS) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, false, false); |
| + CreateTestCreditCardFormData(&form, false, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1196,7 +1222,7 @@ TEST_F(AutofillManagerTest, GetCreditCardSuggestionsRepeatedObfuscatedNumber) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1225,7 +1251,7 @@ TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestions) { |
| // Set up our form data. |
| FormData form; |
| test::CreateTestAddressFormData(&form); |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1263,7 +1289,7 @@ TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestionsNonHttps) { |
| // Set up our form data. |
| FormData form; |
| test::CreateTestAddressFormData(&form); |
| - CreateTestCreditCardFormData(&form, false, false); |
| + CreateTestCreditCardFormData(&form, false, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1478,7 +1504,7 @@ TEST_F(AutofillManagerTest, FillAddressForm) { |
| TEST_F(AutofillManagerTest, WillFillCreditCardNumber) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1525,7 +1551,7 @@ TEST_F(AutofillManagerTest, WillFillCreditCardNumber) { |
| TEST_F(AutofillManagerTest, FillCreditCardForm) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1539,6 +1565,48 @@ TEST_F(AutofillManagerTest, FillCreditCardForm) { |
| response_page_id, response_data, kDefaultPageID, false); |
| } |
| +// Test that whitespace is stripped from the credit card number. |
| +TEST_F(AutofillManagerTest, FillCreditCardFormStripCardNumberWhitespace) { |
| + // Same as the SetUp(), but generate Elvis card with whitespace in credit |
| + // card number. |
| + personal_data_.CreateTestCreditCardWithWhitespace(); |
| + // Set up our form data. |
| + FormData form; |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| + std::vector<FormData> forms(1, form); |
| + FormsSeen(forms); |
| + |
| + const char guid[] = "00000000-0000-0000-0000-000000000008"; |
| + int response_page_id = 0; |
| + FormData response_data; |
| + FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), |
| + MakeFrontendID(guid, std::string()), |
| + &response_page_id, &response_data); |
| + ExpectFilledCreditCardFormElvis(response_page_id, response_data, |
| + kDefaultPageID, false); |
| +} |
| + |
| +// Test that separator characters are stripped from the credit card number. |
| +TEST_F(AutofillManagerTest, FillCreditCardFormStripCardNumberSeparators) { |
| + // Same as the SetUp(), but generate Elvis card with separator characters in |
| + // credit card number. |
| + personal_data_.CreateTestCreditCardWithSeparators(); |
| + // Set up our form data. |
| + FormData form; |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| + std::vector<FormData> forms(1, form); |
| + FormsSeen(forms); |
| + |
| + const char guid[] = "00000000-0000-0000-0000-000000000009"; |
| + int response_page_id = 0; |
| + FormData response_data; |
| + FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), |
| + MakeFrontendID(guid, std::string()), |
| + &response_page_id, &response_data); |
| + ExpectFilledCreditCardFormElvis(response_page_id, response_data, |
| + kDefaultPageID, false); |
| +} |
| + |
| // Test that we correctly fill a credit card form with month input type. |
| // 1. year empty, month empty |
| TEST_F(AutofillManagerTest, FillCreditCardFormNoYearNoMonth) { |
| @@ -1547,7 +1615,7 @@ TEST_F(AutofillManagerTest, FillCreditCardFormNoYearNoMonth) { |
| personal_data_.CreateTestCreditCardsYearAndMonth("", ""); |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, true); |
| + CreateTestCreditCardFormData(&form, true, false, true); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1570,7 +1638,7 @@ TEST_F(AutofillManagerTest, FillCreditCardFormNoYearMonth) { |
| personal_data_.CreateTestCreditCardsYearAndMonth("", "04"); |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, true); |
| + CreateTestCreditCardFormData(&form, true, false, true); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1592,7 +1660,7 @@ TEST_F(AutofillManagerTest, FillCreditCardFormYearNoMonth) { |
| personal_data_.CreateTestCreditCardsYearAndMonth("2012", ""); |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, true); |
| + CreateTestCreditCardFormData(&form, true, false, true); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1615,7 +1683,7 @@ TEST_F(AutofillManagerTest, FillCreditCardFormYearMonth) { |
| personal_data_.CreateTestCreditCardsYearAndMonth("2012", "04"); |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, true); |
| + CreateTestCreditCardFormData(&form, true, false, true); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1634,7 +1702,7 @@ TEST_F(AutofillManagerTest, FillAddressAndCreditCardForm) { |
| // Set up our form data. |
| FormData form; |
| test::CreateTestAddressFormData(&form); |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -1983,7 +2051,7 @@ TEST_F(AutofillManagerTest, FillAutofilledForm) { |
| test::CreateTestAddressFormData(&form); |
| // Mark one of the address fields as autofilled. |
| form.fields[4].is_autofilled = true; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -2595,12 +2663,36 @@ TEST_F(AutofillManagerTest, FormSubmittedWithDefaultValues) { |
| // Tests that credit card data are saved for forms on https |
| TEST_F(AutofillManagerTest, ImportFormDataCreditCardHTTPS) { |
| - TestSaveCreditCards(true); |
| + TestSaveCreditCards(true, false); |
| } |
| // Tests that credit card data are saved for forms on http |
| TEST_F(AutofillManagerTest, ImportFormDataCreditCardHTTP) { |
| - TestSaveCreditCards(false); |
| + TestSaveCreditCards(false, false); |
| +} |
| + |
| +// Tests that credit card data are saved when autocomplete=off for CC field. |
| +TEST_F(AutofillManagerTest, CreditCardSavedWhenAutocompleteOff) { |
| + TestSaveCreditCards(false, true); |
| +} |
| + |
| +// Tests that credit card data are not saved when CC number does not pass the |
| +// Luhn test. |
| +TEST_F(AutofillManagerTest, InvalidCreditCardNumberIsNotSaved) { |
| + // Set up our form data. |
| + FormData form; |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| + std::vector<FormData> forms(1, form); |
| + FormsSeen(forms); |
| + |
| + // Edit the data, and submit. |
| + std::string card("4408041234567890"); |
| + ASSERT_FALSE(autofill::IsValidCreditCardNumber(ASCIIToUTF16(card))); |
| + form.fields[1].value = ASCIIToUTF16(card); |
| + form.fields[2].value = ASCIIToUTF16("11"); |
| + form.fields[3].value = ASCIIToUTF16("2017"); |
| + EXPECT_CALL(autofill_client_, ConfirmSaveCreditCard(_)).Times(0); |
| + FormSubmitted(form); |
| } |
| TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) { |
| @@ -3225,7 +3317,7 @@ TEST_F(AutofillManagerTest, DisplayCreditCardSuggestionsWithMatchingTokens) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |
| @@ -3256,7 +3348,7 @@ TEST_F(AutofillManagerTest, NoCreditCardSuggestionsForNonPrefixTokenMatch) { |
| // Set up our form data. |
| FormData form; |
| - CreateTestCreditCardFormData(&form, true, false); |
| + CreateTestCreditCardFormData(&form, true, false, false); |
| std::vector<FormData> forms(1, form); |
| FormsSeen(forms); |