diff options
-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; |