Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1890)

Unified Diff: components/autofill/core/browser/autofill_manager_unittest.cc

Issue 1583563003: [Autofill] Parse forms that have autocomplete attributes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed android compile and browser test Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 177bb9ba20e0e27463523b9ddd449c14274003b7..f39c4787b59e464718ebfb82eb5284a5020bb57d 100644
--- a/components/autofill/core/browser/autofill_manager_unittest.cc
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc
@@ -1010,6 +1010,41 @@ TEST_F(AutofillManagerTest, OnFormsSeen_DifferentFormStructures) {
download_manager_->VerifyLastQueriedForms(forms);
}
+// Test that no suggestions are returned for a field with an unrecognized
+// autocomplete attribute.
+TEST_F(AutofillManagerTest, GetProfileSuggestions_UnrecognizedAttribute) {
+ FormData form;
+ form.name = ASCIIToUTF16("MyForm");
+ form.origin = GURL("https://myform.com/form.html");
+ form.action = GURL("https://myform.com/submit.html");
+ FormFieldData field;
+ // Set a valid autocomplete attribute for the first name.
+ test::CreateTestFormField("First name", "firstname", "", "text", &field);
+ field.autocomplete_attribute = "given-name";
+ form.fields.push_back(field);
+ // Set no autocomplete attribute for the middle name.
+ test::CreateTestFormField("Middle name", "middle", "", "text", &field);
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+ // Set an unrecognized autocomplete attribute for the last name.
+ test::CreateTestFormField("Last Name", "lastname", "", "text", &field);
+ field.autocomplete_attribute = "unrecognized";
+ form.fields.push_back(field);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ // Suggestions should be returned for the first two fields
+ GetAutofillSuggestions(form, form.fields[0]);
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
+ GetAutofillSuggestions(form, form.fields[1]);
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
+
+ // Suggestions should not be returned for the third field because of its
+ // unrecognized autocomplete attribute.
+ GetAutofillSuggestions(form, form.fields[2]);
+ EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
+}
+
// Test that no suggestions are returned when there are less than three fields
// and none of them have an autocomplete attribute.
TEST_F(AutofillManagerTest, GetProfileSuggestions_SmallFormNoAutocomplete) {
@@ -1898,6 +1933,47 @@ TEST_F(AutofillManagerTest, FillAddressAndCreditCardForm) {
}
}
+// Test that a field with an unrecognized autocomplete attribute is not filled.
+TEST_F(AutofillManagerTest, FillAddressForm_UnrecognizedAttribute) {
+ FormData address_form;
+ address_form.name = ASCIIToUTF16("MyForm");
+ address_form.origin = GURL("https://myform.com/form.html");
+ address_form.action = GURL("https://myform.com/submit.html");
+ FormFieldData field;
+ // Set a valid autocomplete attribute for the first name.
+ test::CreateTestFormField("First name", "firstname", "", "text", &field);
+ field.autocomplete_attribute = "given-name";
+ address_form.fields.push_back(field);
+ // Set no autocomplete attribute for the middle name.
+ test::CreateTestFormField("Middle name", "middle", "", "text", &field);
+ field.autocomplete_attribute = "";
+ address_form.fields.push_back(field);
+ // Set an unrecognized autocomplete attribute for the last name.
+ test::CreateTestFormField("Last name", "lastname", "", "text", &field);
+ field.autocomplete_attribute = "unrecognized";
+ address_form.fields.push_back(field);
+ std::vector<FormData> address_forms(1, address_form);
+ FormsSeen(address_forms);
+
+ // Fill the address form.
+ const char guid[] = "00000000-0000-0000-0000-000000000001";
+ int response_page_id = 0;
+ FormData response_data;
+ FillAutofillFormDataAndSaveResults(
+ kDefaultPageID, address_form, address_form.fields[0],
+ MakeFrontendID(std::string(), guid), &response_page_id, &response_data);
+
+ // The fist and middle names should be filled.
+ ExpectFilledField("First name", "firstname", "Elvis", "text",
+ response_data.fields[0]);
+ ExpectFilledField("Middle name", "middle", "Aaron", "text",
+ response_data.fields[1]);
+
+ // The last name should not be filled.
+ ExpectFilledField("Last name", "lastname", "", "text",
+ response_data.fields[2]);
+}
+
// Test that non credit card related fields with the autocomplete attribute set
// to off are not filled on desktop.
TEST_F(AutofillManagerTest, FillAddressForm_AutocompleteOff) {
@@ -1955,6 +2031,48 @@ TEST_F(AutofillManagerTest, FillAddressForm_AutocompleteOff) {
}
}
+// Test that a field with an unrecognized autocomplete attribute is not filled.
+TEST_F(AutofillManagerTest, FillCreditCardForm_UnrecognizedAttribute) {
+ // Set up the form data.
+ FormData form;
+ form.name = ASCIIToUTF16("MyForm");
+ form.origin = GURL("https://myform.com/form.html");
+ form.action = GURL("https://myform.com/submit.html");
+
+ FormFieldData field;
+ // Set a valid autocomplete attribute on the card name.
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+ field.autocomplete_attribute = "cc-name";
+ form.fields.push_back(field);
+ // Set no autocomplete attribute on the card number.
+ test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+ // Set an unrecognized autocomplete attribute on the expiration month.
+ test::CreateTestFormField("Expiration Date", "ccmonth", "", "text", &field);
+ field.autocomplete_attribute = "unrecognized";
+ form.fields.push_back(field);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ const char guid[] = "00000000-0000-0000-0000-000000000004";
+ int response_page_id = 0;
+ FormData response_data;
+ FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
+ MakeFrontendID(guid, std::string()),
+ &response_page_id, &response_data);
+
+ // The credit card name and number should be filled.
+ ExpectFilledField("Name on Card", "nameoncard", "Elvis Presley", "text",
+ response_data.fields[0]);
+ ExpectFilledField("Card Number", "cardnumber", "4234567890123456", "text",
+ response_data.fields[1]);
+
+ // The expiration month should not be filled.
+ ExpectFilledField("Expiration Date", "ccmonth", "", "text",
+ response_data.fields[2]);
+}
+
// Test that credit card fields are filled even if they have the autocomplete
// attribute set to off.
TEST_F(AutofillManagerTest, FillCreditCardForm_AutocompleteOff) {
@@ -3434,6 +3552,43 @@ TEST_F(AutofillManagerTest, OnDidFillAutofillFormDataAndUnfocus_Upload) {
autofill_manager_->WaitForAsyncUploadProcess();
}
+// Test that no suggestions are returned for a field with an unrecognized
+// autocomplete attribute.
+TEST_F(AutofillManagerTest, GetCreditCardSuggestions_UnrecognizedAttribute) {
+ // Set up the form data.
+ FormData form;
+ form.name = ASCIIToUTF16("MyForm");
+ form.origin = GURL("https://myform.com/form.html");
+ form.action = GURL("https://myform.com/submit.html");
+
+ FormFieldData field;
+ // Set a valid autocomplete attribute on the card name.
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
+ field.autocomplete_attribute = "cc-name";
+ form.fields.push_back(field);
+ // Set no autocomplete attribute on the card number.
+ test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
+ field.autocomplete_attribute = "";
+ form.fields.push_back(field);
+ // Set an unrecognized autocomplete attribute on the expiration month.
+ test::CreateTestFormField("Expiration Date", "ccmonth", "", "text", &field);
+ field.autocomplete_attribute = "unrecognized";
+ form.fields.push_back(field);
+ std::vector<FormData> forms(1, form);
+ FormsSeen(forms);
+
+ // Suggestions should be returned for the first two fields
+ GetAutofillSuggestions(form, form.fields[0]);
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
+ GetAutofillSuggestions(form, form.fields[1]);
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen());
+
+ // Suggestions should not be returned for the third field because of its
+ // unrecognized autocomplete attribute.
+ GetAutofillSuggestions(form, form.fields[2]);
+ EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
+}
+
// Test to verify suggestions appears for forms having credit card number split
// across fields.
TEST_F(AutofillManagerTest, GetCreditCardSuggestionsForNumberSpitAcrossFields) {
« no previous file with comments | « components/autofill/core/browser/autofill_field_unittest.cc ('k') | components/autofill/core/browser/autofill_type.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698