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

Unified Diff: chrome/renderer/autofill/form_autofill_browsertest.cc

Issue 309063006: Do not autofill element when there is no autofill suggestion from profile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update code as per Ilya's review comments. Created 6 years, 7 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: chrome/renderer/autofill/form_autofill_browsertest.cc
diff --git a/chrome/renderer/autofill/form_autofill_browsertest.cc b/chrome/renderer/autofill/form_autofill_browsertest.cc
index 7d5e4db39ce98372bde73f8605d6848a505d1c33..47d92b189e7ce0c51e159cbc7f99ab8335a67573 100644
--- a/chrome/renderer/autofill/form_autofill_browsertest.cc
+++ b/chrome/renderer/autofill/form_autofill_browsertest.cc
@@ -51,7 +51,8 @@ struct AutofillFieldCase {
const char* const initial_value;
const char* const autocomplete_attribute; // The autocomplete attribute of
// the element.
- bool should_be_autofilled; // Whether the filed should be autofilled.
+ bool is_autofilled; // Whether the FormFieldData field is autofilled.
Ilya Sherman 2014/06/03 20:39:31 It seems like this is always identical to should_b
+ bool should_be_autofilled; // Whether the filed should be autofilled.
const char* const autofill_value; // The value being used to fill the field.
const char* const expected_value; // The expected value after Autofill
// or Preview.
@@ -80,6 +81,10 @@ static const char kFormHtml[] =
" <OPTION value=\"CA\" selected>California</OPTION>"
" <OPTION value=\"TX\">Texas</OPTION>"
" </SELECT>"
+ " <SELECT id=\"select-nonewsuggestion\">"
Ilya Sherman 2014/06/03 20:39:31 nit: Perhaps "select-unchanged"?
+ " <OPTION value=\"CA\" selected>California</OPTION>"
+ " <OPTION value=\"TX\">Texas</OPTION>"
+ " </SELECT>"
" <TEXTAREA id=\"textarea\"></TEXTAREA>"
" <TEXTAREA id=\"textarea-nonempty\">Go&#10;away!</TEXTAREA>"
" <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>"
@@ -215,6 +220,8 @@ class FormAutofillTest : public ChromeRenderViewTest {
EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[i]);
// Fill the form_data for the field.
form_data.fields[i].value = ASCIIToUTF16(field_cases[i].autofill_value);
+ // Set the is_autofilled property for the field.
+ form_data.fields[i].is_autofilled = field_cases[i].is_autofilled;
}
// Autofill the form using the given fill form function.
@@ -1324,39 +1331,46 @@ TEST_F(FormAutofillTest, FindFormForTextAreaElement) {
// Test regular FillForm function.
TEST_F(FormAutofillTest, FillForm) {
static const AutofillFieldCase field_cases[] = {
- // fields: form_control_type, name, initial_value, autocomplete_attribute,
- // should_be_autofilled, autofill_value, expected_value
+ // fields: form_control_type, name, initial_value,
+ // autocomplete_attribute, is_autofilled, should_be_autofilled,
+ // autofill_value, expected_value
// Regular empty fields (firstname & lastname) should be autofilled.
- {"text", "firstname", "", "", true, "filled firstname",
+ {"text", "firstname", "", "", true, true, "filled firstname",
"filled firstname"},
- {"text", "lastname", "", "", true, "filled lastname", "filled lastname"},
+ {"text", "lastname", "", "", true, true, "filled lastname",
+ "filled lastname"},
// hidden fields should not be extracted to form_data.
// Non empty fields should not be autofilled.
- {"text", "notempty", "Hi", "", false, "filled notempty", "Hi"},
+ {"text", "notempty", "Hi", "", false, false, "filled notempty", "Hi"},
// "noautocomplete" should not be extracted to form_data.
// Disabled fields should not be autofilled.
- {"text", "notenabled", "", "", false, "filled notenabled", ""},
+ {"text", "notenabled", "", "", false, false, "filled notenabled", ""},
// Readonly fields should not be autofilled.
- {"text", "readonly", "", "", false, "filled readonly", ""},
+ {"text", "readonly", "", "", false, false, "filled readonly", ""},
// Fields with "visibility: hidden" should not be autofilled.
- {"text", "invisible", "", "", false, "filled invisible", ""},
+ {"text", "invisible", "", "", false, false, "filled invisible", ""},
// Fields with "display:none" should not be autofilled.
- {"text", "displaynone", "", "", false, "filled displaynone", ""},
+ {"text", "displaynone", "", "", false, false, "filled displaynone", ""},
// Regular <input type="month"> should be autofilled.
- {"month", "month", "", "", true, "2017-11", "2017-11"},
+ {"month", "month", "", "", true, true, "2017-11", "2017-11"},
// Non-empty <input type="month"> should not be autofilled.
- {"month", "month-nonempty", "2011-12", "", false, "2017-11", "2011-12"},
+ {"month", "month-nonempty", "2011-12", "", false, false, "2017-11",
+ "2011-12"},
// Regular select fields should be autofilled.
- {"select-one", "select", "", "", true, "TX", "TX"},
+ {"select-one", "select", "", "", true, true, "TX", "TX"},
// Select fields should be autofilled even if they already have a
// non-empty value.
- {"select-one", "select-nonempty", "CA", "", true, "TX", "TX"},
+ {"select-one", "select-nonempty", "CA", "", true, true, "TX", "TX"},
+ // Select fields should not be autofilled if no new value is passed from
+ // autofill profile. The existing value should not be overriden.
+ {"select-one", "select-nonewsuggestion", "CA", "", false, false, "CA",
+ "CA"},
// Regular textarea elements should be autofilled.
- {"textarea", "textarea", "", "", true, "some multi-\nline value",
+ {"textarea", "textarea", "", "", true, true, "some multi-\nline value",
"some multi-\nline value"},
// Non-empty textarea elements should not be autofilled.
- {"textarea", "textarea-nonempty", "Go\naway!", "", false,
+ {"textarea", "textarea-nonempty", "Go\naway!", "", false, false,
"some multi-\nline value", "Go\naway!"},
};
TestFormFillFunctions(kFormHtml, field_cases, arraysize(field_cases),
@@ -1370,42 +1384,49 @@ TEST_F(FormAutofillTest, FillForm) {
TEST_F(FormAutofillTest, FillFormIncludingNonFocusableElements) {
static const AutofillFieldCase field_cases[] = {
- // fields: form_control_type, name, initial_value, autocomplete_attribute,
- // should_be_autofilled, autofill_value, expected_value
+ // fields: form_control_type, name, initial_value,
+ // autocomplete_attribute, is_autofilled, should_be_autofilled,
+ // autofill_value, expected_value
// Regular empty fields (firstname & lastname) should be autofilled.
- {"text", "firstname", "", "", true, "filled firstname",
+ {"text", "firstname", "", "", true, true, "filled firstname",
"filled firstname"},
- {"text", "lastname", "", "", true, "filled lastname", "filled lastname"},
+ {"text", "lastname", "", "", true, true, "filled lastname",
+ "filled lastname"},
// hidden fields should not be extracted to form_data.
// Non empty fields should be overriden.
- {"text", "notempty", "Hi", "", true, "filled notempty",
+ {"text", "notempty", "Hi", "", true, true, "filled notempty",
"filled notempty"},
// "noautocomplete" should not be extracted to form_data.
// Disabled fields should not be autofilled.
- {"text", "notenabled", "", "", false, "filled notenabled", ""},
+ {"text", "notenabled", "", "", false, false, "filled notenabled", ""},
// Readonly fields should not be autofilled.
- {"text", "readonly", "", "", false, "filled readonly", ""},
+ {"text", "readonly", "", "", false, false, "filled readonly", ""},
// Fields with "visibility: hidden" should also be autofilled.
- {"text", "invisible", "", "", true, "filled invisible",
+ {"text", "invisible", "", "", true, true, "filled invisible",
"filled invisible"},
// Fields with "display:none" should also be autofilled.
- {"text", "displaynone", "", "", true, "filled displaynone",
+ {"text", "displaynone", "", "", true, true, "filled displaynone",
"filled displaynone"},
// Regular <input type="month"> should be autofilled.
- {"month", "month", "", "", true, "2017-11", "2017-11"},
+ {"month", "month", "", "", true, true, "2017-11", "2017-11"},
// Non-empty <input type="month"> should be overridden.
- {"month", "month-nonempty", "2011-12", "", true, "2017-11", "2017-11"},
+ {"month", "month-nonempty", "2011-12", "", true, true, "2017-11",
+ "2017-11"},
// Regular select fields should be autofilled.
- {"select-one", "select", "", "", true, "TX", "TX"},
+ {"select-one", "select", "", "", true, true, "TX", "TX"},
// Select fields should be autofilled even if they already have a
// non-empty value.
- {"select-one", "select-nonempty", "CA", "", true, "TX", "TX"},
+ {"select-one", "select-nonempty", "CA", "", true, true, "TX", "TX"},
+ // Select fields should not be autofilled if no new value is passed from
+ // autofill profile. The existing value should not be overriden.
+ {"select-one", "select-nonewsuggestion", "CA", "", false, false, "CA",
+ "CA"},
// Regular textarea elements should be autofilled.
- {"textarea", "textarea", "", "", true, "some multi-\nline value",
+ {"textarea", "textarea", "", "", true, true, "some multi-\nline value",
"some multi-\nline value"},
// Nonempty textarea elements should be overridden.
- {"textarea", "textarea-nonempty", "Go\naway!", "", true,
+ {"textarea", "textarea-nonempty", "Go\naway!", "", true, true,
"some multi-\nline value", "some multi-\nline value"},
};
TestFormFillFunctions(kFormHtml, field_cases, arraysize(field_cases),
@@ -1416,38 +1437,42 @@ TEST_F(FormAutofillTest, FillFormIncludingNonFocusableElements) {
TEST_F(FormAutofillTest, PreviewForm) {
static const AutofillFieldCase field_cases[] = {
// Normal empty fields should be previewed.
- {"text", "firstname", "", "", true, "suggested firstname",
+ {"text", "firstname", "", "", true, true, "suggested firstname",
"suggested firstname"},
- {"text", "lastname", "", "", true, "suggested lastname",
+ {"text", "lastname", "", "", true, true, "suggested lastname",
"suggested lastname"},
// Hidden fields should not be extracted to form_data.
// Non empty fields should not be previewed.
- {"text", "notempty", "Hi", "", false, "suggested notempty", ""},
+ {"text", "notempty", "Hi", "", false, false, "suggested notempty", ""},
// "noautocomplete" should not be extracted to form_data.
// Disabled fields should not be previewed.
- {"text", "notenabled", "", "", false, "suggested notenabled", ""},
+ {"text", "notenabled", "", "", false, false, "suggested notenabled", ""},
// Readonly fields should not be previewed.
- {"text", "readonly", "", "", false, "suggested readonly", ""},
+ {"text", "readonly", "", "", false, false, "suggested readonly", ""},
// Fields with "visibility: hidden" should not be previewed.
- {"text", "invisible", "", "", false, "suggested invisible",
+ {"text", "invisible", "", "", false, false, "suggested invisible",
""},
// Fields with "display:none" should not previewed.
- {"text", "displaynone", "", "", false, "suggested displaynone",
+ {"text", "displaynone", "", "", false, false, "suggested displaynone",
""},
// Regular <input type="month"> should be previewed.
- {"month", "month", "", "", true, "2017-11", "2017-11"},
+ {"month", "month", "", "", true, true, "2017-11", "2017-11"},
// Non-empty <input type="month"> should not be previewed.
- {"month", "month-nonempty", "2011-12", "", false, "2017-11", ""},
+ {"month", "month-nonempty", "2011-12", "", false, false, "2017-11", ""},
// Regular select fields should be previewed.
- {"select-one", "select", "", "", true, "TX", "TX"},
+ {"select-one", "select", "", "", true, true, "TX", "TX"},
// Select fields should be previewed even if they already have a
// non-empty value.
- {"select-one", "select-nonempty", "CA", "", true, "TX", "TX"},
+ {"select-one", "select-nonempty", "CA", "", true, true, "TX", "TX"},
+ // Select fields should not be previewed if no suggestion is passed from
+ // autofill profile.
+ {"select-one", "select-nonewsuggestion", "CA", "", false, false, "",
+ ""},
// Normal textarea elements should be previewed.
- {"textarea", "textarea", "", "", true, "suggested multi-\nline value",
- "suggested multi-\nline value"},
+ {"textarea", "textarea", "", "", true, true,
+ "suggested multi-\nline value", "suggested multi-\nline value"},
// Nonempty textarea elements should not be previewed.
- {"textarea", "textarea-nonempty", "Go\naway!", "", false,
+ {"textarea", "textarea-nonempty", "Go\naway!", "", false, false,
"suggested multi-\nline value", ""},
};
TestFormFillFunctions(kFormHtml, field_cases, arraysize(field_cases),
@@ -2376,6 +2401,9 @@ TEST_F(FormAutofillTest, FillFormMaxLength) {
form.fields[0].value = ASCIIToUTF16("Brother");
form.fields[1].value = ASCIIToUTF16("Jonathan");
form.fields[2].value = ASCIIToUTF16("brotherj@example.com");
+ form.fields[0].is_autofilled = true;
+ form.fields[1].is_autofilled = true;
+ form.fields[2].is_autofilled = true;
FillForm(form, input_element);
// Find the newly-filled form that contains the input element.
@@ -2642,6 +2670,9 @@ TEST_F(FormAutofillTest, FillFormEmptyFormNames) {
form.fields[0].value = ASCIIToUTF16("Red");
form.fields[1].value = ASCIIToUTF16("Yellow");
form.fields[2].value = ASCIIToUTF16("Also Yellow");
+ form.fields[0].is_autofilled = true;
+ form.fields[1].is_autofilled = true;
+ form.fields[2].is_autofilled = true;
FillForm(form, input_element);
// Find the newly-filled form that contains the input element.
@@ -2868,6 +2899,9 @@ TEST_F(FormAutofillTest, FillFormNonEmptyField) {
form.fields[0].value = ASCIIToUTF16("Wyatt");
form.fields[1].value = ASCIIToUTF16("Earp");
form.fields[2].value = ASCIIToUTF16("wyatt@example.com");
+ form.fields[0].is_autofilled = true;
+ form.fields[1].is_autofilled = true;
+ form.fields[2].is_autofilled = true;
PreviewForm(form, input_element);
EXPECT_EQ(2, input_element.selectionStart());
EXPECT_EQ(5, input_element.selectionEnd());

Powered by Google App Engine
This is Rietveld 408576698