summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-26 22:54:40 +0000
committerdhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-26 22:54:40 +0000
commitb7f984678cc378f9432f354c99578c1fdba6b6b6 (patch)
tree07166c09e0d112b0d884ac148d3033a6d3424007
parent30f0ead27c120f784cb0b81d7d6852e0bdcac421 (diff)
downloadchromium_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.cc15
-rw-r--r--chrome/browser/autofill/autofill_download_unittest.cc2
-rw-r--r--chrome/browser/autofill/form_structure_unittest.cc94
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,