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 487eb1084fabbe40b69366b83d8448538aadb3c1..87dccd93ac19629f0feeed01a45cc5714c262148 100644 |
--- a/components/autofill/core/browser/autofill_manager_unittest.cc |
+++ b/components/autofill/core/browser/autofill_manager_unittest.cc |
@@ -35,6 +35,7 @@ |
#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" |
+#include "components/autofill/core/common/autofill_util.h" |
#include "components/autofill/core/common/form_data.h" |
#include "components/autofill/core/common/form_field_data.h" |
#include "grit/components_strings.h" |
@@ -1895,6 +1896,89 @@ TEST_F(AutofillManagerTest, FillAddressAndCreditCardForm) { |
} |
} |
+// Test that non credit card related fields with the autocomplete attribute set |
+// to off are not filled on desktop. |
+TEST_F(AutofillManagerTest, FillAddressForm_AutocompleteOff) { |
+ 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; |
+ test::CreateTestFormField("First name", "firstname", "", "text", &field); |
+ address_form.fields.push_back(field); |
+ test::CreateTestFormField("Middle name", "middle", "", "text", &field); |
+ field.should_autocomplete = false; |
+ address_form.fields.push_back(field); |
+ test::CreateTestFormField("Last name", "lastname", "", "text", &field); |
+ field.should_autocomplete = true; |
+ address_form.fields.push_back(field); |
+ test::CreateTestFormField("Address Line 1", "addr1", "", "text", &field); |
+ field.should_autocomplete = false; |
+ 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 name should be filled. |
+ ExpectFilledField("First name", "firstname", "Elvis", "text", |
+ response_data.fields[0]); |
+ |
+ // The middle name should not be filled on desktop. |
+ if (IsDesktopPlatform()) { |
+ ExpectFilledField("Middle name", "middle", "", "text", |
+ response_data.fields[1]); |
+ } else { |
+ ExpectFilledField("Middle name", "middle", "Aaron", "text", |
+ response_data.fields[1]); |
+ } |
+ |
+ // The last name should be filled. |
+ ExpectFilledField("Last name", "lastname", "Presley", "text", |
+ response_data.fields[2]); |
+ |
+ // The address line 1 should not be filled on desktop. |
+ if (IsDesktopPlatform()) { |
+ ExpectFilledField("Address Line 1", "addr1", "", "text", |
+ response_data.fields[3]); |
+ } else { |
+ ExpectFilledField("Address Line 1", "addr1", "3734 Elvis Presley Blvd.", |
+ "text", response_data.fields[3]); |
+ } |
+} |
+ |
+// Test that credit card fields are filled even if they have the autocomplete |
+// attribute set to off. |
+TEST_F(AutofillManagerTest, FillCreditCardForm_AutocompleteOff) { |
+ // Set up our form data. |
+ FormData form; |
+ CreateTestCreditCardFormData(&form, true, false); |
+ |
+ // Set the autocomplete=off on all fields. |
+ for (FormFieldData field : form.fields) |
+ field.should_autocomplete = false; |
+ |
+ 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); |
+ |
+ // All fields should be filled. |
+ ExpectFilledCreditCardFormElvis(response_page_id, response_data, |
+ kDefaultPageID, false); |
+} |
+ |
// Test that non-focusable field is ignored while inferring boundaries between |
// sections: http://crbug.com/231160 |
TEST_F(AutofillManagerTest, FillFormWithNonFocusableFields) { |
@@ -3870,4 +3954,72 @@ TEST_F(AutofillManagerTest, ShouldUploadForm) { |
EXPECT_FALSE(autofill_manager_->ShouldUploadForm(form_structure_3)); |
} |
+// Verify that no suggestions are shown on desktop for non credit card related |
+// fields if the initiating field has the "autocomplete" attribute set to off. |
+TEST_F(AutofillManagerTest, DisplaySuggestions_AutocompleteOff_AddressField) { |
+ // Set up an address form. |
+ FormData mixed_form; |
+ mixed_form.name = ASCIIToUTF16("MyForm"); |
+ mixed_form.origin = GURL("https://myform.com/form.html"); |
+ mixed_form.action = GURL("https://myform.com/submit.html"); |
+ FormFieldData field; |
+ test::CreateTestFormField("First name", "firstname", "", "text", &field); |
+ field.should_autocomplete = false; |
+ mixed_form.fields.push_back(field); |
+ test::CreateTestFormField("Last name", "lastname", "", "text", &field); |
+ field.should_autocomplete = true; |
+ mixed_form.fields.push_back(field); |
+ test::CreateTestFormField("Address", "address", "", "text", &field); |
+ field.should_autocomplete = true; |
+ mixed_form.fields.push_back(field); |
+ std::vector<FormData> mixed_forms(1, mixed_form); |
+ FormsSeen(mixed_forms); |
+ |
+ // Suggestions should not be displayed on desktop for this field. |
+ GetAutofillSuggestions(mixed_form, mixed_form.fields[0]); |
+ if (IsDesktopPlatform()) { |
+ EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); |
+ } else { |
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); |
+ } |
+ |
+ // Suggestions should always be displayed for all the other fields. |
+ for (size_t i = 1U; i < mixed_form.fields.size(); ++i) { |
+ GetAutofillSuggestions(mixed_form, mixed_form.fields[i]); |
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); |
+ } |
+} |
+ |
+// Verify that suggestions are shown on desktop for credit card related fields |
+// even if the initiating field field has the "autocomplete" attribute set to |
+// off. |
+TEST_F(AutofillManagerTest, |
+ DisplaySuggestions_AutocompleteOff_CreditCardField) { |
+ // Set up a credit card form. |
+ FormData mixed_form; |
+ mixed_form.name = ASCIIToUTF16("MyForm"); |
+ mixed_form.origin = GURL("https://myform.com/form.html"); |
+ mixed_form.action = GURL("https://myform.com/submit.html"); |
+ FormFieldData field; |
+ test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field); |
+ field.should_autocomplete = false; |
+ mixed_form.fields.push_back(field); |
+ test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field); |
+ field.should_autocomplete = true; |
+ mixed_form.fields.push_back(field); |
+ test::CreateTestFormField("Expiration Month", "ccexpiresmonth", "", "text", |
+ &field); |
+ field.should_autocomplete = false; |
+ mixed_form.fields.push_back(field); |
+ mixed_form.fields.push_back(field); |
+ std::vector<FormData> mixed_forms(1, mixed_form); |
+ FormsSeen(mixed_forms); |
+ |
+ // Suggestions should always be displayed. |
+ for (const FormFieldData& field : mixed_form.fields) { |
+ GetAutofillSuggestions(mixed_form, field); |
+ EXPECT_TRUE(external_delegate_->on_suggestions_returned_seen()); |
+ } |
+} |
+ |
} // namespace autofill |