diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/autofill/form_structure_unittest.cc | 108 | ||||
-rw-r--r-- | chrome/browser/autofill/name_field.cc | 8 |
2 files changed, 114 insertions, 2 deletions
diff --git a/chrome/browser/autofill/form_structure_unittest.cc b/chrome/browser/autofill/form_structure_unittest.cc index 3d7df4c..6c61a158 100644 --- a/chrome/browser/autofill/form_structure_unittest.cc +++ b/chrome/browser/autofill/form_structure_unittest.cc @@ -188,4 +188,112 @@ TEST(FormStructureTest, Heuristics) { EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(7)->heuristic_type()); } +TEST(FormStructureTest, HeuristicsSample8) { + scoped_ptr<FormStructure> form_structure; + webkit_glue::FormFieldValues values; + + values.method = ASCIIToUTF16("post"); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Your First Name:"), + ASCIIToUTF16("bill.first"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Your Last Name:"), + ASCIIToUTF16("bill.last"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Street Address Line 1:"), + ASCIIToUTF16("bill.street1"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Street Address Line 2:"), + ASCIIToUTF16("bill.street2"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("City:"), + ASCIIToUTF16("bill.city"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("State (U.S.):"), + ASCIIToUTF16("bill.state"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Zip/Postal Code:"), + ASCIIToUTF16("BillTo.PostalCode"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Country:"), + ASCIIToUTF16("bill.country"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(ASCIIToUTF16("Phone Number:"), + ASCIIToUTF16("BillTo.Phone"), + string16(), + ASCIIToUTF16("text"), + WebInputElement::Text)); + values.elements.push_back( + webkit_glue::FormField(string16(), + ASCIIToUTF16("Submit"), + string16(), + ASCIIToUTF16("submit"), + WebInputElement::Submit)); + form_structure.reset(new FormStructure(values)); + EXPECT_TRUE(form_structure->IsAutoFillable()); + + // Check that heuristics are initialized as UNKNOWN_TYPE. + std::vector<AutoFillField*>::const_iterator iter; + size_t i; + for (iter = form_structure->begin(), i = 0; + iter != form_structure->end(); + ++iter, ++i) { + // Expect last element to be NULL. + if (i == form_structure->field_count()) { + ASSERT_EQ(static_cast<AutoFillField*>(NULL), *iter); + } else { + ASSERT_NE(static_cast<AutoFillField*>(NULL), *iter); + EXPECT_EQ(UNKNOWN_TYPE, (*iter)->heuristic_type()); + } + } + + // Compute heuristic types. + form_structure->GetHeuristicAutoFillTypes(); + + // Check that heuristics are no longer UNKNOWN_TYPE. + // First name. + EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); + // Last name. + EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); + // Address. + EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(2)->heuristic_type()); + // Address. + EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(3)->heuristic_type()); + // City. + EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(4)->heuristic_type()); + // State. + EXPECT_EQ(ADDRESS_HOME_STATE, form_structure->field(5)->heuristic_type()); + // Zip. + EXPECT_EQ(ADDRESS_HOME_ZIP, form_structure->field(6)->heuristic_type()); + // Zip. + EXPECT_EQ(ADDRESS_HOME_COUNTRY, form_structure->field(7)->heuristic_type()); + // Phone. + EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, + form_structure->field(8)->heuristic_type()); +} + } // namespace diff --git a/chrome/browser/autofill/name_field.cc b/chrome/browser/autofill/name_field.cc index 34264d1..d1e6fb3 100644 --- a/chrome/browser/autofill/name_field.cc +++ b/chrome/browser/autofill/name_field.cc @@ -72,7 +72,9 @@ FirstLastNameField* FirstLastNameField::Parse2( // asks, in stuffy English style, for just initials and a surname, // so we match "initials" here (and just fill in a first name there, // American-style). - if (!ParseText(&q, ASCIIToUTF16("first name|firstname|initials|fname"), + // The ".*first$" matches fields ending in "first" (example in sample8.html). + if (!ParseText(&q, + ASCIIToUTF16("first name|firstname|initials|fname|.*first$"), &v.first_name_)) return NULL; @@ -89,7 +91,9 @@ FirstLastNameField* FirstLastNameField::Parse2( ParseText(&q, ASCIIToUTF16("middle name|mname"), &v.middle_name_); } - if (!ParseText(&q, ASCIIToUTF16("last name|lastname|lname|surname"), + // The ".*last$" matches fields ending in "last" (example in sample8.html). + if (!ParseText(&q, + ASCIIToUTF16("last name|lastname|lname|surname|.*last$"), &v.last_name_)) return NULL; |