diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-26 22:54:40 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-26 22:54:40 +0000 |
commit | b7f984678cc378f9432f354c99578c1fdba6b6b6 (patch) | |
tree | 07166c09e0d112b0d884ac148d3033a6d3424007 | |
parent | 30f0ead27c120f784cb0b81d7d6852e0bdcac421 (diff) | |
download | chromium_src-b7f984678cc378f9432f354c99578c1fdba6b6b6.zip chromium_src-b7f984678cc378f9432f354c99578c1fdba6b6b6.tar.gz chromium_src-b7f984678cc378f9432f354c99578c1fdba6b6b6.tar.bz2 |
Autofill address line 2 is not applied to ebay.com
Fixes heuristics to include "suite" and "unit" when matching address line 2.
BUG=48197
TEST=FormStructureTest.TwoAddressLinesSkipSuite, FormStructureTest.TwoAddressLinesDontSkipSuite
Review URL: http://codereview.chromium.org/3134042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@57596 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/autofill/address_field.cc | 15 | ||||
-rw-r--r-- | chrome/browser/autofill/autofill_download_unittest.cc | 2 | ||||
-rw-r--r-- | chrome/browser/autofill/form_structure_unittest.cc | 94 |
3 files changed, 97 insertions, 14 deletions
diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc index 4d52a4c..f21f532 100644 --- a/chrome/browser/autofill/address_field.cc +++ b/chrome/browser/autofill/address_field.cc @@ -210,12 +210,6 @@ bool AddressField::ParseAddressLines( return false; } - // Some pages (e.g. expedia_checkout.html) have an apartment or - // suite number at this point. The occasional page (e.g. - // Ticketmaster3.html) calls this a unit number. We ignore this - // field since we can't fill it yet. - ParseText(iter, ASCIIToUTF16("suite|unit")); - // Optionally parse more address lines, which may have empty labels. // Some pages have 3 address lines (eg SharperImageModifyAccount.html) // Some pages even have 4 address lines (e.g. uk/ShoesDirect2.html)! @@ -225,7 +219,7 @@ bool AddressField::ParseAddressLines( if (!ParseEmptyText(iter, &address_field->address2_)) ParseText(iter, pattern, &address_field->address2_); } else { - pattern = ASCIIToUTF16("address2|street|street_line2|addr2"); + pattern = ASCIIToUTF16("address2|street|street_line2|addr2|suite|unit"); string16 label_pattern = ASCIIToUTF16("address"); if (!ParseEmptyText(iter, &address_field->address2_)) if (!ParseText(iter, pattern, &address_field->address2_)) @@ -239,8 +233,11 @@ bool AddressField::ParseAddressLines( kEcmlBillToAddress3, '|'); ParseText(iter, pattern); } else { - pattern = ASCIIToUTF16("line3"); - ParseLabelText(iter, pattern, NULL); + pattern = ASCIIToUTF16("address3|street|street_line3|addr3|line3"); + string16 label_pattern = ASCIIToUTF16("address"); + if (!ParseEmptyText(iter, NULL)) + if (!ParseText(iter, pattern, NULL)) + ParseLabelText(iter, label_pattern, NULL); } } diff --git a/chrome/browser/autofill/autofill_download_unittest.cc b/chrome/browser/autofill/autofill_download_unittest.cc index 4e81323..baecd97 100644 --- a/chrome/browser/autofill/autofill_download_unittest.cc +++ b/chrome/browser/autofill/autofill_download_unittest.cc @@ -148,7 +148,7 @@ TEST(AutoFillDownloadTest, QueryAndUploadTest) { ASCIIToUTF16("text"), 0)); form.fields.push_back(webkit_glue::FormField(ASCIIToUTF16("city"), - ASCIIToUTF16("address2"), + ASCIIToUTF16("city"), string16(), ASCIIToUTF16("text"), 0)); diff --git a/chrome/browser/autofill/form_structure_unittest.cc b/chrome/browser/autofill/form_structure_unittest.cc index 9055578..b2d0435 100644 --- a/chrome/browser/autofill/form_structure_unittest.cc +++ b/chrome/browser/autofill/form_structure_unittest.cc @@ -741,6 +741,94 @@ TEST(FormStructureTest, ThreeAddressLines) { EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); } +// This example comes from expedia.com where they use a "Suite" label to +// indicate a suite or apartment number. We interpret this as address line 2. +// And the following "Street address second line" we interpret as address line +// 3 and discard. +// See http://crbug.com/48197 for details. +TEST(FormStructureTest, ThreeAddressLinesExpedia) { + scoped_ptr<FormStructure> form_structure; + FormData form; + + form.method = ASCIIToUTF16("post"); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Street:"), + ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads1"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Suite or Apt:"), + ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adap"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Street address second line"), + ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_ads2"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("City:"), + ASCIIToUTF16("FOPIH_RgWebCC_0_IHAddress_adct"), + string16(), + ASCIIToUTF16("text"), + 0)); + form_structure.reset(new FormStructure(form)); + EXPECT_TRUE(form_structure->IsAutoFillable()); + ASSERT_EQ(4U, form_structure->field_count()); + ASSERT_EQ(3U, form_structure->autofill_count()); + + // Address Line 1. + EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); + // Suite / Apt. + EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); + // Address Line 3. + EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(2)->heuristic_type()); + // City. + EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(3)->heuristic_type()); +} + +// This example comes from ebay.com where the word "suite" appears in the label +// and the name "address2" clearly indicates that this is the address line 2. +// See http://crbug.com/48197 for details. +TEST(FormStructureTest, TwoAddressLinesEbay) { + scoped_ptr<FormStructure> form_structure; + FormData form; + + form.method = ASCIIToUTF16("post"); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Address Line1"), + ASCIIToUTF16("address1"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("Floor number, suite number, etc"), + ASCIIToUTF16("address2"), + string16(), + ASCIIToUTF16("text"), + 0)); + form.fields.push_back( + webkit_glue::FormField(ASCIIToUTF16("City"), + ASCIIToUTF16("city"), + string16(), + ASCIIToUTF16("text"), + 0)); + form_structure.reset(new FormStructure(form)); + EXPECT_TRUE(form_structure->IsAutoFillable()); + ASSERT_EQ(3U, form_structure->field_count()); + ASSERT_EQ(3U, form_structure->autofill_count()); + + // Address Line 1. + EXPECT_EQ(ADDRESS_HOME_LINE1, form_structure->field(0)->heuristic_type()); + // Address Line 2. + EXPECT_EQ(ADDRESS_HOME_LINE2, form_structure->field(1)->heuristic_type()); + // City. + EXPECT_EQ(ADDRESS_HOME_CITY, form_structure->field(2)->heuristic_type()); +} + TEST(FormStructureTest, HeuristicsStateWithProvince) { scoped_ptr<FormStructure> form_structure; FormData form; @@ -852,15 +940,13 @@ TEST(FormStructureTest, HeuristicsWithBilling) { form_structure.reset(new FormStructure(form)); EXPECT_TRUE(form_structure->IsAutoFillable()); ASSERT_EQ(11U, form_structure->field_count()); - ASSERT_EQ(10U, form_structure->autofill_count()); + ASSERT_EQ(11U, form_structure->autofill_count()); EXPECT_EQ(NAME_FIRST, form_structure->field(0)->heuristic_type()); EXPECT_EQ(NAME_LAST, form_structure->field(1)->heuristic_type()); EXPECT_EQ(COMPANY_NAME, form_structure->field(2)->heuristic_type()); EXPECT_EQ(ADDRESS_BILLING_LINE1, form_structure->field(3)->heuristic_type()); - // Note: We'd expect this to match ADDRESS_BILLING_LINE2, but due to toolbar - // heuristics for other pages we skip fields with label including "suite". - EXPECT_EQ(UNKNOWN_TYPE, form_structure->field(4)->heuristic_type()); + EXPECT_EQ(ADDRESS_BILLING_LINE2, form_structure->field(4)->heuristic_type()); EXPECT_EQ(ADDRESS_BILLING_CITY, form_structure->field(5)->heuristic_type()); EXPECT_EQ(ADDRESS_BILLING_STATE, form_structure->field(6)->heuristic_type()); EXPECT_EQ(ADDRESS_BILLING_COUNTRY, |