diff options
author | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 19:02:41 +0000 |
---|---|---|
committer | jhawkins@chromium.org <jhawkins@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-28 19:02:41 +0000 |
commit | 34c190328b287081617fc0f36592ac4a45c2a213 (patch) | |
tree | 50dd0bc4de3bae23f5f2fc48eb863fe38a2f6f7c /chrome | |
parent | b2cc9fb19dc373296efe4db346d8ec9b58af5111 (diff) | |
download | chromium_src-34c190328b287081617fc0f36592ac4a45c2a213.zip chromium_src-34c190328b287081617fc0f36592ac4a45c2a213.tar.gz chromium_src-34c190328b287081617fc0f36592ac4a45c2a213.tar.bz2 |
AutoFill: Skip past hidden input fields when parsing for
heuristics.
BUG=57105
TEST=FormStructureTest.HeuristicsHiddenFields
Review URL: http://codereview.chromium.org/4193005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64290 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/autofill/form_field.cc | 6 | ||||
-rw-r--r-- | chrome/browser/autofill/form_structure_unittest.cc | 118 |
2 files changed, 124 insertions, 0 deletions
diff --git a/chrome/browser/autofill/form_field.cc b/chrome/browser/autofill/form_field.cc index 24b45ed..95b1e55 100644 --- a/chrome/browser/autofill/form_field.cc +++ b/chrome/browser/autofill/form_field.cc @@ -207,6 +207,12 @@ bool FormField::ParseText(std::vector<AutoFillField*>::const_iterator* iter, const string16& pattern, AutoFillField** dest, bool match_label_only) { + // Some forms have one or more hidden fields before each visible input; skip + // past these. + while (**iter && LowerCaseEqualsASCII((**iter)->form_control_type(), + kControlTypeHidden)) + (*iter)++; + AutoFillField* field = **iter; if (!field) return false; diff --git a/chrome/browser/autofill/form_structure_unittest.cc b/chrome/browser/autofill/form_structure_unittest.cc index f9f808a..73317a3 100644 --- a/chrome/browser/autofill/form_structure_unittest.cc +++ b/chrome/browser/autofill/form_structure_unittest.cc @@ -319,6 +319,124 @@ TEST(FormStructureTest, HeuristicsContactInfo) { EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(8)->heuristic_type()); } +TEST(FormStructureTest, HeuristicsHiddenFields) { + scoped_ptr<FormStructure> form_structure; + FormData form; + + form.method = ASCIIToUTF16("post"); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("First Name"), + ASCIIToUTF16("firstname"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden1"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Last Name"), + ASCIIToUTF16("lastname"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden2"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("EMail"), + ASCIIToUTF16("email"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden3"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Phone"), + ASCIIToUTF16("phone"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden4"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Fax"), + ASCIIToUTF16("fax"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden5"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Address"), + ASCIIToUTF16("address"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden6"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("City"), + ASCIIToUTF16("city"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden7"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("Zip code"), + ASCIIToUTF16("zipcode"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("hidden8"), + string16(), + ASCIIToUTF16("hidden"), + 0)); + form.fields.push_back(webkit_glue::FormField(string16(), + ASCIIToUTF16("Submit"), + string16(), + ASCIIToUTF16("submit"), + 0)); + form_structure.reset(new FormStructure(form)); + EXPECT_TRUE(form_structure->IsAutoFillable()); + + // Expect the correct number of fields. + ASSERT_EQ(17U, form_structure->field_count()); + ASSERT_EQ(8U, form_structure->autofill_count()); + + // First name. + EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); + // Last name. + EXPECT_EQ(NAME_LAST, form_structure->field(2)->heuristic_type()); + // Email. + EXPECT_EQ(EMAIL_ADDRESS, form_structure->field(4)->heuristic_type()); + // Phone. + EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, + form_structure->field(6)->heuristic_type()); + // Fax. + EXPECT_EQ(PHONE_FAX_WHOLE_NUMBER, form_structure->field(8)->heuristic_type()); + // Address. + EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(10)->heuristic_type()); + // City. + EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(12)->heuristic_type()); + // Zip. + EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(14)->heuristic_type()); + // Submit. + EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(16)->heuristic_type()); +} + TEST(FormStructureTest, HeuristicsSample8) { scoped_ptr<FormStructure> form_structure; FormData form; |