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

Side by Side Diff: chrome/renderer/autofill/form_autofill_browsertest.cc

Issue 621503003: Exclude readonly and disabled elements from autofill form. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fold checks on ReadOnly and Enabled into IsAutofillable() function. Created 6 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/test/data/autofill/heuristics/output/02_checkout_cafepress.com.out » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "base/strings/string_util.h" 10 #include "base/strings/string_util.h"
(...skipping 1437 matching lines...) Expand 10 before | Expand all | Expand 10 after
1448 // should_be_autofilled, autofill_value, expected_value 1448 // should_be_autofilled, autofill_value, expected_value
1449 1449
1450 // Regular empty fields (firstname & lastname) should be autofilled. 1450 // Regular empty fields (firstname & lastname) should be autofilled.
1451 {"text", "firstname", "", "", true, "filled firstname", 1451 {"text", "firstname", "", "", true, "filled firstname",
1452 "filled firstname"}, 1452 "filled firstname"},
1453 {"text", "lastname", "", "", true, "filled lastname", "filled lastname"}, 1453 {"text", "lastname", "", "", true, "filled lastname", "filled lastname"},
1454 // hidden fields should not be extracted to form_data. 1454 // hidden fields should not be extracted to form_data.
1455 // Non empty fields should not be autofilled. 1455 // Non empty fields should not be autofilled.
1456 {"text", "notempty", "Hi", "", false, "filled notempty", "Hi"}, 1456 {"text", "notempty", "Hi", "", false, "filled notempty", "Hi"},
1457 // "noautocomplete" should not be extracted to form_data. 1457 // "noautocomplete" should not be extracted to form_data.
1458 // Disabled fields should not be autofilled. 1458 // Disabled fields should not be extracted to form_data.
1459 {"text", "notenabled", "", "", false, "filled notenabled", ""}, 1459 // Readonly fields should not be extracted to form_data.
1460 // Readonly fields should not be autofilled.
1461 {"text", "readonly", "", "", false, "filled readonly", ""},
1462 // Fields with "visibility: hidden" should not be autofilled. 1460 // Fields with "visibility: hidden" should not be autofilled.
1463 {"text", "invisible", "", "", false, "filled invisible", ""}, 1461 {"text", "invisible", "", "", false, "filled invisible", ""},
1464 // Fields with "display:none" should not be autofilled. 1462 // Fields with "display:none" should not be autofilled.
1465 {"text", "displaynone", "", "", false, "filled displaynone", ""}, 1463 {"text", "displaynone", "", "", false, "filled displaynone", ""},
1466 // Regular <input type="month"> should be autofilled. 1464 // Regular <input type="month"> should be autofilled.
1467 {"month", "month", "", "", true, "2017-11", "2017-11"}, 1465 {"month", "month", "", "", true, "2017-11", "2017-11"},
1468 // Non-empty <input type="month"> should not be autofilled. 1466 // Non-empty <input type="month"> should not be autofilled.
1469 {"month", "month-nonempty", "2011-12", "", false, "2017-11", "2011-12"}, 1467 {"month", "month-nonempty", "2011-12", "", false, "2017-11", "2011-12"},
1470 // Regular select fields should be autofilled. 1468 // Regular select fields should be autofilled.
1471 {"select-one", "select", "", "", true, "TX", "TX"}, 1469 {"select-one", "select", "", "", true, "TX", "TX"},
(...skipping 26 matching lines...) Expand all
1498 1496
1499 // Regular empty fields (firstname & lastname) should be autofilled. 1497 // Regular empty fields (firstname & lastname) should be autofilled.
1500 {"text", "firstname", "", "", true, "filled firstname", 1498 {"text", "firstname", "", "", true, "filled firstname",
1501 "filled firstname"}, 1499 "filled firstname"},
1502 {"text", "lastname", "", "", true, "filled lastname", "filled lastname"}, 1500 {"text", "lastname", "", "", true, "filled lastname", "filled lastname"},
1503 // hidden fields should not be extracted to form_data. 1501 // hidden fields should not be extracted to form_data.
1504 // Non empty fields should be overriden. 1502 // Non empty fields should be overriden.
1505 {"text", "notempty", "Hi", "", true, "filled notempty", 1503 {"text", "notempty", "Hi", "", true, "filled notempty",
1506 "filled notempty"}, 1504 "filled notempty"},
1507 // "noautocomplete" should not be extracted to form_data. 1505 // "noautocomplete" should not be extracted to form_data.
1508 // Disabled fields should not be autofilled. 1506 // Disabled fields should not be extracted to form_data.
1509 {"text", "notenabled", "", "", false, "filled notenabled", ""}, 1507 // Readonly fields should not be extracted to form_data.
1510 // Readonly fields should not be autofilled.
1511 {"text", "readonly", "", "", false, "filled readonly", ""},
1512 // Fields with "visibility: hidden" should also be autofilled. 1508 // Fields with "visibility: hidden" should also be autofilled.
1513 {"text", "invisible", "", "", true, "filled invisible", 1509 {"text", "invisible", "", "", true, "filled invisible",
1514 "filled invisible"}, 1510 "filled invisible"},
1515 // Fields with "display:none" should also be autofilled. 1511 // Fields with "display:none" should also be autofilled.
1516 {"text", "displaynone", "", "", true, "filled displaynone", 1512 {"text", "displaynone", "", "", true, "filled displaynone",
1517 "filled displaynone"}, 1513 "filled displaynone"},
1518 // Regular <input type="month"> should be autofilled. 1514 // Regular <input type="month"> should be autofilled.
1519 {"month", "month", "", "", true, "2017-11", "2017-11"}, 1515 {"month", "month", "", "", true, "2017-11", "2017-11"},
1520 // Non-empty <input type="month"> should be overridden. 1516 // Non-empty <input type="month"> should be overridden.
1521 {"month", "month-nonempty", "2011-12", "", true, "2017-11", "2017-11"}, 1517 {"month", "month-nonempty", "2011-12", "", true, "2017-11", "2017-11"},
(...skipping 21 matching lines...) Expand all
1543 static const AutofillFieldCase field_cases[] = { 1539 static const AutofillFieldCase field_cases[] = {
1544 // Normal empty fields should be previewed. 1540 // Normal empty fields should be previewed.
1545 {"text", "firstname", "", "", true, "suggested firstname", 1541 {"text", "firstname", "", "", true, "suggested firstname",
1546 "suggested firstname"}, 1542 "suggested firstname"},
1547 {"text", "lastname", "", "", true, "suggested lastname", 1543 {"text", "lastname", "", "", true, "suggested lastname",
1548 "suggested lastname"}, 1544 "suggested lastname"},
1549 // Hidden fields should not be extracted to form_data. 1545 // Hidden fields should not be extracted to form_data.
1550 // Non empty fields should not be previewed. 1546 // Non empty fields should not be previewed.
1551 {"text", "notempty", "Hi", "", false, "suggested notempty", ""}, 1547 {"text", "notempty", "Hi", "", false, "suggested notempty", ""},
1552 // "noautocomplete" should not be extracted to form_data. 1548 // "noautocomplete" should not be extracted to form_data.
1553 // Disabled fields should not be previewed. 1549 // Disabled fields should not be extracted to form_data.
1554 {"text", "notenabled", "", "", false, "suggested notenabled", ""}, 1550 // Readonly fields should not be extracted to form_data.
1555 // Readonly fields should not be previewed.
1556 {"text", "readonly", "", "", false, "suggested readonly", ""},
1557 // Fields with "visibility: hidden" should not be previewed. 1551 // Fields with "visibility: hidden" should not be previewed.
1558 {"text", "invisible", "", "", false, "suggested invisible", 1552 {"text", "invisible", "", "", false, "suggested invisible",
1559 ""}, 1553 ""},
1560 // Fields with "display:none" should not previewed. 1554 // Fields with "display:none" should not previewed.
1561 {"text", "displaynone", "", "", false, "suggested displaynone", 1555 {"text", "displaynone", "", "", false, "suggested displaynone",
1562 ""}, 1556 ""},
1563 // Regular <input type="month"> should be previewed. 1557 // Regular <input type="month"> should be previewed.
1564 {"month", "month", "", "", true, "2017-11", "2017-11"}, 1558 {"month", "month", "", "", true, "2017-11", "2017-11"},
1565 // Non-empty <input type="month"> should not be previewed. 1559 // Non-empty <input type="month"> should not be previewed.
1566 {"month", "month-nonempty", "2011-12", "", false, "2017-11", ""}, 1560 {"month", "month-nonempty", "2011-12", "", false, "2017-11", ""},
(...skipping 1537 matching lines...) Expand 10 before | Expand all | Expand 10 after
3104 FormFieldData field2; 3098 FormFieldData field2;
3105 EXPECT_TRUE(FindFormAndFieldForFormControlElement(firstname, 3099 EXPECT_TRUE(FindFormAndFieldForFormControlElement(firstname,
3106 &form2, 3100 &form2,
3107 &field2, 3101 &field2,
3108 autofill::REQUIRE_NONE)); 3102 autofill::REQUIRE_NONE));
3109 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name); 3103 EXPECT_EQ(ASCIIToUTF16("TestForm"), form2.name);
3110 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin); 3104 EXPECT_EQ(GURL(web_frame->document().url()), form2.origin);
3111 EXPECT_EQ(GURL("http://buh.com"), form2.action); 3105 EXPECT_EQ(GURL("http://buh.com"), form2.action);
3112 3106
3113 const std::vector<FormFieldData>& fields2 = form2.fields; 3107 const std::vector<FormFieldData>& fields2 = form2.fields;
3114 ASSERT_EQ(9U, fields2.size()); 3108 ASSERT_EQ(6U, fields2.size());
3115 3109
3116 FormFieldData expected; 3110 FormFieldData expected;
3117 expected.form_control_type = "text"; 3111 expected.form_control_type = "text";
3118 expected.max_length = WebInputElement::defaultMaxLength(); 3112 expected.max_length = WebInputElement::defaultMaxLength();
3119 3113
3120 expected.name = ASCIIToUTF16("firstname"); 3114 expected.name = ASCIIToUTF16("firstname");
3121 expected.value = base::string16(); 3115 expected.value = base::string16();
3122 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]); 3116 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[0]);
3123 3117
3124 expected.name = ASCIIToUTF16("lastname"); 3118 expected.name = ASCIIToUTF16("lastname");
3125 expected.value = base::string16(); 3119 expected.value = base::string16();
3126 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]); 3120 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[1]);
3127 3121
3128 expected.name = ASCIIToUTF16("noAC"); 3122 expected.name = ASCIIToUTF16("noAC");
3129 expected.value = ASCIIToUTF16("one"); 3123 expected.value = ASCIIToUTF16("one");
3130 expected.autocomplete_attribute = "off"; 3124 expected.autocomplete_attribute = "off";
3131 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]); 3125 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[2]);
3132 expected.autocomplete_attribute = std::string(); // reset 3126 expected.autocomplete_attribute = std::string(); // reset
3133 3127
3134 expected.name = ASCIIToUTF16("notenabled");
3135 expected.value = ASCIIToUTF16("no clear");
3136 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[3]);
3137
3138 expected.form_control_type = "month"; 3128 expected.form_control_type = "month";
3139 expected.max_length = 0; 3129 expected.max_length = 0;
3140 expected.name = ASCIIToUTF16("month"); 3130 expected.name = ASCIIToUTF16("month");
3141 expected.value = base::string16(); 3131 expected.value = base::string16();
3142 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[4]); 3132 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[3]);
3143
3144 expected.name = ASCIIToUTF16("month-disabled");
3145 expected.value = ASCIIToUTF16("2012-11");
3146 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[5]);
3147 3133
3148 expected.form_control_type = "textarea"; 3134 expected.form_control_type = "textarea";
3149 expected.name = ASCIIToUTF16("textarea"); 3135 expected.name = ASCIIToUTF16("textarea");
3150 expected.value = base::string16(); 3136 expected.value = base::string16();
3151 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[6]); 3137 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[4]);
3152
3153 expected.name = ASCIIToUTF16("textarea-disabled");
3154 expected.value = ASCIIToUTF16(" Banana! ");
3155 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[7]);
3156 3138
3157 expected.name = ASCIIToUTF16("textarea-noAC"); 3139 expected.name = ASCIIToUTF16("textarea-noAC");
3158 expected.value = ASCIIToUTF16("Carrot?"); 3140 expected.value = ASCIIToUTF16("Carrot?");
3159 expected.autocomplete_attribute = "off"; 3141 expected.autocomplete_attribute = "off";
3160 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[8]); 3142 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields2[5]);
3161 expected.autocomplete_attribute = std::string(); // reset 3143 expected.autocomplete_attribute = std::string(); // reset
3162 3144
3163 // Verify that the cursor position has been updated. 3145 // Verify that the cursor position has been updated.
3164 EXPECT_EQ(0, firstname.selectionStart()); 3146 EXPECT_EQ(0, firstname.selectionStart());
3165 EXPECT_EQ(0, firstname.selectionEnd()); 3147 EXPECT_EQ(0, firstname.selectionEnd());
3166 } 3148 }
3167 3149
3168 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) { 3150 TEST_F(FormAutofillTest, ClearFormWithNodeContainingSelectOne) {
3169 LoadHTML( 3151 LoadHTML(
3170 "<FORM name='TestForm' action='http://buh.com' method='post'>" 3152 "<FORM name='TestForm' action='http://buh.com' method='post'>"
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
3674 expected.max_length = WebInputElement::defaultMaxLength(); 3656 expected.max_length = WebInputElement::defaultMaxLength();
3675 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]); 3657 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[1]);
3676 3658
3677 expected.name = ASCIIToUTF16("country"); 3659 expected.name = ASCIIToUTF16("country");
3678 expected.value = ASCIIToUTF16("AL"); 3660 expected.value = ASCIIToUTF16("AL");
3679 expected.form_control_type = "select-one"; 3661 expected.form_control_type = "select-one";
3680 expected.max_length = 0; 3662 expected.max_length = 0;
3681 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]); 3663 EXPECT_FORM_FIELD_DATA_EQUALS(expected, fields[2]);
3682 } 3664 }
3683 } // namespace autofill 3665 } // namespace autofill
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/autofill/heuristics/output/02_checkout_cafepress.com.out » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698