summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorbrettw <brettw@chromium.org>2014-11-26 13:59:17 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-26 21:59:36 +0000
commit53f188c05bee5645368e7989c0b5a6af7cb0f9c8 (patch)
tree2b2f885474850b4e56fc85bad54958646209dcff /chrome
parentbe884dce38fce642a8aec963d999d837756aab24 (diff)
downloadchromium_src-53f188c05bee5645368e7989c0b5a6af7cb0f9c8.zip
chromium_src-53f188c05bee5645368e7989c0b5a6af7cb0f9c8.tar.gz
chromium_src-53f188c05bee5645368e7989c0b5a6af7cb0f9c8.tar.bz2
Revert of Revert of Add address3 autofill heuristics. (patchset #1 id:1 of https://codereview.chromium.org/757333004/)
Reason for revert: Unreverting this patch. Can not reproduce timeout locally, and the single bot that was having the timeout seems to be having related failures even with my patch reverted. Original issue's description: > Revert of Add address3 autofill heuristics. (patchset #6 id:100001 of https://codereview.chromium.org/741493003/) > > Reason for revert: > Causes AutofillOptionsWebUITest.testOpenAutofillOptions to hang. > > Original issue's description: > > Add address3 autofill heuristics. > > > > We already had "address line 3" typedefs and it's supported in requestAutocomplete, but this was hot hooked up to the heuristic code. > > > > Hooking this up messed up the urban outfitters detection because of the greedy nature (matches empty labels) of the address2 detection. Adding this to address3 triggered a bad case due to bad luck (rather than design, this would also happen in the old code if there was no address3, because the unclassified address3 served to separate the address and unlabeled city). To address this problem, this patch checks for a city before matching lines with empty lines. I believe this should be a good general fix for similar patterns that we would have had with the existing "address line 2" support. > > > > Ignores duplicate form fields when one of them is hidden. Previously if there was a hidden form element and then a visible one of the same autodetected type, it would split the form (however, the reverse didn't split). It's common to have hidden sections with duplicate types in them for different locales. This unsplits llbean and continental. > > > > R=estade@chromium.org, isherman@chromium.org > > > > Committed: https://chromium.googlesource.com/chromium/src/+/c7d64a4aed4c23e9a0a6d8e85a30046fa4bf77e1 > > TBR=isherman@chromium.org,estade@chromium.org > NOTREECHECKS=true > NOTRY=true > > Committed: https://crrev.com/af82794391afb28318736af4bae6b3600d310484 > Cr-Commit-Position: refs/heads/master@{#305853} TBR=isherman@chromium.org,estade@chromium.org NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/757223005 Cr-Commit-Position: refs/heads/master@{#305887}
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/autofill/form_structure_browsertest.cc2
-rw-r--r--chrome/test/data/autofill/heuristics/input/20_llbean.html295
-rw-r--r--chrome/test/data/autofill/heuristics/output/08_register_continental.com.out52
-rw-r--r--chrome/test/data/autofill/heuristics/output/10_register_gymboree.com.out2
-rw-r--r--chrome/test/data/autofill/heuristics/output/17_crbug_224601.out2
-rw-r--r--chrome/test/data/autofill/heuristics/output/20_llbean.out38
6 files changed, 363 insertions, 28 deletions
diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc
index 958dea5..df8a9c3 100644
--- a/chrome/browser/autofill/form_structure_browsertest.cc
+++ b/chrome/browser/autofill/form_structure_browsertest.cc
@@ -26,6 +26,8 @@ const base::FilePath::CharType kTestName[] = FILE_PATH_LITERAL("heuristics");
// Convert the |html| snippet to a data URI.
GURL HTMLToDataURI(const std::string& html) {
+ // GURL requires data URLs to be UTF-8 and will fail below if it's not.
+ CHECK(base::IsStringUTF8(html)) << "Input file is not UTF-8.";
return GURL(std::string("data:text/html;charset=utf-8,") + html);
}
diff --git a/chrome/test/data/autofill/heuristics/input/20_llbean.html b/chrome/test/data/autofill/heuristics/input/20_llbean.html
new file mode 100644
index 0000000..bf7f4a0
--- /dev/null
+++ b/chrome/test/data/autofill/heuristics/input/20_llbean.html
@@ -0,0 +1,295 @@
+<style type="text/css">
+ .hdn { visibility:hidden; }
+ .jpn {}
+ .us {}
+ .canada {}
+</style>
+
+<form id="stepShippingForm" name="stepShippingForm">
+ <label for="shipPersonTitle">Title <i>(optional)</i></label>
+ <select name="personTitle" id="shipPersonTitle">
+ <option value="">Please select:</option>
+ <option value="Mr.">Mr.</option>
+ <option value="Mrs.">Mrs.</option>
+ <option value="Ms.">Ms.</option>
+ <option value="Dr.">Dr.</option>
+ <option value="Sir">Sir</option>
+ </select>
+ <div>
+ <label for="shipFirstName">First Name</label>
+ <input id="shipFirstName" name="firstName" value="" type="text" maxlength="20">
+ </div>
+ <div>
+ <label for="shipMiddleName">Middle Name<i>(optional)</i></label>
+ <input id="shipMiddleName" name="middleName" type="text" maxlength="20">
+ </div>
+ <div>
+ <label for="shipLastName">Last Name</label>
+ <input id="shipLastName" name="lastName" type="text" maxlength="20">
+ </div>
+ <div>
+ <label id="shipGenderLabel">Gender <i>(optional)</i></label>
+ <label><input type="radio" value="M" id="shipMale" name="gender">Male</label>
+ <label><input type="radio" value="F" id="shipFemale" name="gender">Female</label>
+ </div>
+ <div id="shippingAddress">
+ <label for="shipCountry">Country</label>
+ <select name="country" id="shipCountry" size="0" title="Country">
+ <option value="">Select</option>
+ <option value="" disabled="disabled">----------</option>
+ <option value="USA" selected="selected">USA &amp; Territories</option>
+ <option value="CAN">Canada</option>
+ <option value="JPN">jpn</option>
+ <option value="ALB">Albania</option>
+ <option value="DZA">Algeria</option>
+ <option value="AND">Andorra</option>
+ <option value="AGO">Angola</option>
+ <option value="AIA">Anguilla</option>
+ </select>
+ </div>
+ <div>
+ <div class="jpn hdn">
+ <label for="shipJPNPostal">Postal Code</label>
+ <div>
+ <input id="shipJPNPostal" name="JPNPostal" type="text" maxlength="10">
+ </div>
+ </div>
+ <div class="jpn hdn">
+ <label for="shipJPNPrefecture">Prefecture</label>
+ <div>
+ <input id="shipJPNPrefecture" name="JPNPrefecture" type="text" maxlength="20">
+ </div>
+ </div>
+ </div>
+ <div class="jpn hdn">
+ <label for="shipJPNCity">City</label>
+ <input id="shipJPNCity" name="JPNCity" type="text">
+ </div>
+ <div class="hdn">
+ <div>
+ <label for="secondaryName">Business, Attention, or In Care of Name <i>(optional)</i></label>
+ <div>
+ <input id="secondaryName" name="organizationName" type="text" value="" maxlength="40">
+ </div>
+ </div>
+ <div>
+ <label for="businessName"> <input value="BUS" id="businessName" name="orgNameInd" type="radio">Business</label>
+ <label for="inCareOfName"> <input value="C/O" id="inCareOfName" name="orgNameInd" type="radio">In care of</label>
+ <label for="attentionName"> <input value="ATTN" id="attentionName" name="orgNameInd" type="radio">Attention</label>
+ </div>
+ </div>
+ <div>
+ <label for="shipAddress1">Address</label>
+ <input id="shipAddress1" name="address1" type="text" maxlength="35">
+ </div>
+ <div>
+ <label for="shipAddress2">Address Line 2 <i>(optional)</i></label>
+ <input id="shipAddress2" name="address2" type="text" maxlength="35">
+ </div>
+ <div class="hdn">
+ <label for="shipAddress3">Address Line 3 <i>(optional)</i></label>
+ <input id="shipAddress3" name="address3" type="text" maxlength="35">
+ </div>
+ <div class="us">
+ <div>
+ <label for="shipZipCode">Zip Code</label>
+ <div>
+ <input id="shipZipCode" name="zipCode" type="tel" maxlength="10">
+ </div>
+ <input id="shipZipCodeFull" name="zipCodeFull" type="hidden" value="">
+ </div>
+ <div>
+ <label>&nbsp;</label><p>Enter Zip for City and State</p>
+ </div>
+ </div>
+ <div>
+ <div class="us">
+ <label for="shipCity">City</label>
+ <div>
+ <input id="shipCity" name="city" type="text">
+ </div>
+ </div>
+ <div class="us">
+ <label for="shipState">State</label>
+ <div>
+ <select name="state" id="shipState" title="State">
+ <option value="">Please Select:</option>
+ <option value="AL">Alabama (AL)</option>
+ <option value="AK">Alaska (AK)</option>
+ <option value="AS">American Samoa (AS)</option>
+ <option value="AA">APO/FPO Address (AA)</option>
+ <option value="AE">APO/FPO Address (AE)</option>
+ <option value="AP">APO/FPO Address (AP)</option>
+ <option value="AZ">Arizona (AZ)</option>
+ <option value="AR">Arkansas (AR)</option>
+ <option value="CA">California (CA)</option>
+ <option value="CO">Colorado (CO)</option>
+ <option value="CT">Connecticut (CT)</option>
+ <option value="DE">Delaware (DE)</option>
+ <option value="DC">District of Columbia (DC)</option>
+ <option value="FM">Federation of Micronesia (FM)</option>
+ <option value="FL">Florida (FL)</option>
+ <option value="GA">Georgia (GA)</option>
+ <option value="GU">Guam (GU)</option>
+ <option value="HI">Hawaii (HI)</option>
+ <option value="ID">Idaho (ID)</option>
+ <option value="IL">Illinois (IL)</option>
+ <option value="IN">Indiana (IN)</option>
+ <option value="IA">Iowa (IA)</option>
+ <option value="KS">Kansas (KS)</option>
+ <option value="KY">Kentucky (KY)</option>
+ <option value="LA">Louisiana (LA)</option>
+ <option value="ME">Maine (ME)</option>
+ <option value="MH">Marshall Islands (MH)</option>
+ <option value="MD">Maryland (MD)</option>
+ <option value="MA">Massachusetts (MA)</option>
+ <option value="MI">Michigan (MI)</option>
+ <option value="MN">Minnesota (MN)</option>
+ <option value="MS">Mississippi (MS)</option>
+ <option value="MO">Missouri (MO)</option>
+ <option value="MT">Montana (MT)</option>
+ <option value="NE">Nebraska (NE)</option>
+ <option value="NV">Nevada (NV)</option>
+ <option value="NH">New Hampshire (NH)</option>
+ <option value="NJ">New Jersey (NJ)</option>
+ <option value="NM">New Mexico (NM)</option>
+ <option value="NY">New York (NY)</option>
+ <option value="NC">North Carolina (NC)</option>
+ <option value="ND">North Dakota (ND)</option>
+ <option value="MP">Northern Mariana Islands (MP)</option>
+ <option value="OH">Ohio (OH)</option>
+ <option value="OK">Oklahoma (OK)</option>
+ <option value="OR">Oregon (OR)</option>
+ <option value="PW">Palau (PW)</option>
+ <option value="PA">Pennsylvania (PA)</option>
+ <option value="PR">Puerto Rico (PR)</option>
+ <option value="RI">Rhode Island (RI)</option>
+ <option value="SC">South Carolina (SC)</option>
+ <option value="SD">South Dakota (SD)</option>
+ <option value="TN">Tennessee (TN)</option>
+ <option value="TX">Texas (TX)</option>
+ <option value="UT">Utah (UT)</option>
+ <option value="VT">Vermont (VT)</option>
+ <option value="VI">Virgin Islands (VI)</option>
+ <option value="VA">Virginia (VA)</option>
+ <option value="WA">Washington (WA)</option>
+ <option value="WV">West Virginia (WV)</option>
+ <option value="WI">Wisconsin (WI)</option>
+ <option value="WY">Wyoming (WY)</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ <div class="canada hdn">
+ <label for="shipCAPostal">Postal Code</label>
+ <input id="shipCAPostal" name="CAPostal" type="text" maxlength="7">
+ </div>
+ <div>
+ <div class="hdn">
+ <label for="shipCACity">City</label>
+ <div>
+ <input id="shipCACity" name="CACity" type="text" maxlength="25">
+ </div>
+ </div>
+ <div class="canada hdn">
+ <label for="shipCAProvince">Province</label>
+ <div>
+ <select id="shipCAProvince" title="Province (required)" name="CAProvince">
+ <option value=""> Please Select:</option>
+ <option value="AB">Alberta (AB)</option>
+ <option value="BC">British Columbia (BC)</option>
+ <option value="MB">Manitoba (MB)</option>
+ <option value="NB">New Brunswick (NB)</option>
+ <option value="NL">Newfoundland (NL)</option>
+ <option value="NT">Northwest Territories (NT)</option>
+ <option value="NS">Nova Scotia (NS)</option>
+ <option value="NU">Nunavut (NU)</option>
+ <option value="ON">Ontario (ON)</option>
+ <option value="PE">Prince Edward Island (PE)</option>
+ <option value="QC">Quebec (QC)</option>
+ <option value="SK">Saskatchewan (SK)</option>
+ <option value="YT">Yukon Territory (YT)</option>
+ </select>
+ </div>
+ </div>
+ </div>
+ <div>
+ <div class="hdn">
+ <label for="shipINTLCity">City</label>
+ <div>
+ <input id="shipINTLCity" name="INTLCity" type="text" maxlength="25">
+ </div>
+ </div>
+ <div class="intl hdn">
+ <label for="shipINTLCounty">County</label>
+ <div>
+ <input id="shipINTLCounty" name="INTLCounty" type="text" maxlength="20">
+ </div>
+ </div>
+ <div>
+ <div class="intl hdn">
+ <label for="shipINTLPostal">Postal Code</label>
+ <div>
+ <input id="shipINTLPostal" name="INTLPostal" type="text" maxlength="10">
+ </div>
+ </div>
+ </div>
+ <div>
+ <div class="us canada">
+ <label for="shipDaytimePhone">Daytime Phone Number <i class="hdn">(optional)</i></label>
+ <div>
+ <input id="shipDaytimePhone" name="phone1" type="tel" maxlength="20">
+ </div>
+ </div>
+ <div class="intl jpn hdn">
+ <label for="shipIntlPhonePrefix">International Country Code</label>
+ <label for="shipIntlPhone">Daytime Phone Number</label>
+ <div>
+ <input id="shipIntlPhonePrefix" name="intlPhone1Prefix" type="tel" maxlength="4">
+ <input id="shipIntlPhone" name="intlPhone1" type="tel" maxlength="20">
+ </div>
+ </div>
+ <div>
+ <label for="shipHomePhone">
+ <input type="radio" value="H" id="shipHomePhone" name="phone1_Loc" checked="">Home
+ </label>
+ <label for="shipWorkPhone">
+ <input type="radio" value="B" id="shipWorkPhone" name="phone1_Loc">Work
+ </label>
+ <label for="shipMobilePhone">
+ <input type="radio" value="M" id="shipMobilePhone" name="phone1_Loc">Mobile
+ </label>
+ </div>
+ </div>
+ <div class="us canada" id="shipIncludePhoneBlk">
+ <label for="shipCkoutShippingCheck">
+ <input id="shipCkoutShippingCheck" type="checkbox" value="ckoutShippingCheck" name="ckoutShippingCheck" checked="checked">
+ Include phone number
+ </label>
+ </div>
+ <div>
+ <label for="shipModeId">Shipping</label>
+ <div>
+ <label for="shipMode10">
+ <input type="radio" name="shipModeId" id="shipMode10" value="10" checked="checked">Fast
+ </label>
+ <label for="shipMode11">
+ <input type="radio" name="shipModeId" id="shipMode11" value="11">Slow
+ </label>
+ </div>
+ </div>
+ <div id="shipLiabilityBlock">
+ <label for="shipLiability">
+ <input id="shipLiability" type="checkbox" value="on" name="shipLiability">Liability
+ </label>
+ </div>
+ <div id="shipGiftChkBlk">
+ <label for="shipAddGiftMsg">
+ <input type="checkbox" value="addGiftMsg" id="shipAddGiftMsg">Message
+ </label>
+ </div>
+ <div id="shipGiftMsgBlk" class="hdn">
+ <label for="shipGiftMsg">Message</label>
+ <textarea id="shipGiftMsg" name="giftMsg" rows="3" cols="30" maxlength="90"></textarea>
+ </div>
+</form>
diff --git a/chrome/test/data/autofill/heuristics/output/08_register_continental.com.out b/chrome/test/data/autofill/heuristics/output/08_register_continental.com.out
index 6ad5edc..c3fc1ff 100644
--- a/chrome/test/data/autofill/heuristics/output/08_register_continental.com.out
+++ b/chrome/test/data/autofill/heuristics/output/08_register_continental.com.out
@@ -15,30 +15,30 @@ UNKNOWN_TYPE | ctl00$ContentInfo$AddressType$AddressType | Address Type: | rdoAd
UNKNOWN_TYPE | ctl00$ContentInfo$AddressType$AddressType | Home Business/Other | rdoAddTypeBusiness | ctl00$CustomerHeader$ddlCountries_1-default
ADDRESS_HOME_LINE1 | ctl00$ContentInfo$Address$address1$txtAddress1 | Street Address: | | ctl00$CustomerHeader$ddlCountries_1-default
ADDRESS_HOME_LINE2 | ctl00$ContentInfo$Address$address2$txtAddress2 | Street Address: | | ctl00$CustomerHeader$ddlCountries_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$Address$address3$txtAddress2 | Street Address: | | ctl00$CustomerHeader$ddlCountries_1-default
+ADDRESS_HOME_LINE3 | ctl00$ContentInfo$Address$address3$txtAddress2 | Street Address: | | ctl00$CustomerHeader$ddlCountries_1-default
ADDRESS_HOME_CITY | ctl00$ContentInfo$Address$city$txtCity | City/Town/Department: | | ctl00$CustomerHeader$ddlCountries_1-default
-ADDRESS_HOME_STATE | ctl00$ContentInfo$Address$state$txtState | State/Province/Region/County: | | ctl00$ContentInfo$Address$state$txtState_1-default
-ADDRESS_HOME_ZIP | ctl00$ContentInfo$Address$zip$txtZip | ZIP/Postal Code: | | ctl00$ContentInfo$Address$state$txtState_1-default
-ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$Address$country$cboCountry | Country: | US | ctl00$ContentInfo$Address$state$txtState_1-default
-PHONE_HOME_WHOLE_NUMBER | ctl00$ContentInfo$HomePhone$txtNumber$txtPhone | Home PhoneNumber: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$HomePhone$txtExt$txtPhoneExt | Ext./PIN (optional): | | ctl00$ContentInfo$Address$state$txtState_1-default
-ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$HomePhone$cboCountry$cboCountry | Country: | US | ctl00$ContentInfo$Address$state$txtState_1-default
-PHONE_HOME_WHOLE_NUMBER | ctl00$ContentInfo$BusinessPhone$txtNumber$txtPhone | Business/Other PhoneNumber: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$BusinessPhone$txtExt$txtPhoneExt | Ext./PIN (optional): | | ctl00$ContentInfo$Address$state$txtState_1-default
-ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$BusinessPhone$cboCountry$cboCountry | Country: | US | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$HomeAirport$txtAirport | Home Airport (optional): | | ctl00$ContentInfo$Address$state$txtState_1-default
-EMAIL_ADDRESS | ctl00$ContentInfo$Email$txtEmail | E-mail Address: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$chkSubOpStatement | | on | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$chkSubopnewsoffers | | on | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$chkSubcocomspecials | | on | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$chkSubtripnotes | | on | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$NewPin$txtNewPin$txtNewPin | New PIN: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$NewPin$txtConfPin$txtConfPin | Re-type New PIN: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$username$txtUsername | Username: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$password$txtPassword | Password: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$passwordRetype$txtPassword | Re-type Password: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$PINPasswordReminder$PINReminder1$txtPINReminder | PIN Reminder: (cannot include any numbers) | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$Question$txtSecurity | Security Question: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$Answer$txtSecurity | Answer: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$AnswerReType$txtSecurity | Re-type Answer: | | ctl00$ContentInfo$Address$state$txtState_1-default
-UNKNOWN_TYPE | ctl00$ContentInfo$txtAgreement | Username and Password (optional)You have the option to create your own easy to remember username or password to sign in to continental.com. The username can be used in place of your OnePass account number and a password can be used in place of your PIN. PIN/Password ReminderIf you forget your PIN or password, we will provide this reminder to access your account.PIN Reminder: (cannot include any numbers)Security Question | Agreement Between User And Continental AirlinesThis Web site is offered to the user conditioned on acceptance by the user ("User") without modification of the terms, conditions, and notices contained herein. By accessing and using this Web site, the User is deemed to have agreed to all such terms, conditions, and notices (the "Agreement").OnePass Terms and ConditionsContinental Airlines and all OnePass partners reserve the right to change any aspect of the OnePass program at any time within 30 days notice to active members. This right includes, but is not limited to, changes in partner affiliation, rules for earning mileage credit and mileage redemption levels. However, rules for use of travel rewards, cities served, flight schedules, limited seating or space availability, restricted travel dates and specific features of promotional offers are subject to change with or without notice at the discretion of Continental Airlines or the OnePass partner. Continental Airlines is not responsible for unilateral action | ctl00$ContentInfo$Address$state$txtState_1-default
+ADDRESS_HOME_STATE | ctl00$ContentInfo$Address$state$txtState | State/Province/Region/County: | | ctl00$CustomerHeader$ddlCountries_1-default
+ADDRESS_HOME_ZIP | ctl00$ContentInfo$Address$zip$txtZip | ZIP/Postal Code: | | ctl00$CustomerHeader$ddlCountries_1-default
+ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$Address$country$cboCountry | Country: | US | ctl00$CustomerHeader$ddlCountries_1-default
+PHONE_HOME_WHOLE_NUMBER | ctl00$ContentInfo$HomePhone$txtNumber$txtPhone | Home PhoneNumber: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$HomePhone$txtExt$txtPhoneExt | Ext./PIN (optional): | | ctl00$CustomerHeader$ddlCountries_1-default
+ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$HomePhone$cboCountry$cboCountry | Country: | US | ctl00$CustomerHeader$ddlCountries_1-default
+PHONE_HOME_WHOLE_NUMBER | ctl00$ContentInfo$BusinessPhone$txtNumber$txtPhone | Business/Other PhoneNumber: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$BusinessPhone$txtExt$txtPhoneExt | Ext./PIN (optional): | | ctl00$CustomerHeader$ddlCountries_1-default
+ADDRESS_HOME_COUNTRY | ctl00$ContentInfo$BusinessPhone$cboCountry$cboCountry | Country: | US | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$HomeAirport$txtAirport | Home Airport (optional): | | ctl00$CustomerHeader$ddlCountries_1-default
+EMAIL_ADDRESS | ctl00$ContentInfo$Email$txtEmail | E-mail Address: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$chkSubOpStatement | | on | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$chkSubopnewsoffers | | on | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$chkSubcocomspecials | | on | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$chkSubtripnotes | | on | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$NewPin$txtNewPin$txtNewPin | New PIN: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$NewPin$txtConfPin$txtConfPin | Re-type New PIN: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$username$txtUsername | Username: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$password$txtPassword | Password: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$UsernamePassword$passwordRetype$txtPassword | Re-type Password: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$PINPasswordReminder$PINReminder1$txtPINReminder | PIN Reminder: (cannot include any numbers) | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$Question$txtSecurity | Security Question: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$Answer$txtSecurity | Answer: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$SecurityQuestionAnswer$AnswerReType$txtSecurity | Re-type Answer: | | ctl00$CustomerHeader$ddlCountries_1-default
+UNKNOWN_TYPE | ctl00$ContentInfo$txtAgreement | Username and Password (optional)You have the option to create your own easy to remember username or password to sign in to continental.com. The username can be used in place of your OnePass account number and a password can be used in place of your PIN. PIN/Password ReminderIf you forget your PIN or password, we will provide this reminder to access your account.PIN Reminder: (cannot include any numbers)Security Question | Agreement Between User And Continental AirlinesThis Web site is offered to the user conditioned on acceptance by the user ("User") without modification of the terms, conditions, and notices contained herein. By accessing and using this Web site, the User is deemed to have agreed to all such terms, conditions, and notices (the "Agreement").OnePass Terms and ConditionsContinental Airlines and all OnePass partners reserve the right to change any aspect of the OnePass program at any time within 30 days notice to active members. This right includes, but is not limited to, changes in partner affiliation, rules for earning mileage credit and mileage redemption levels. However, rules for use of travel rewards, cities served, flight schedules, limited seating or space availability, restricted travel dates and specific features of promotional offers are subject to change with or without notice at the discretion of Continental Airlines or the OnePass partner. Continental Airlines is not responsible for unilateral action | ctl00$CustomerHeader$ddlCountries_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/10_register_gymboree.com.out b/chrome/test/data/autofill/heuristics/output/10_register_gymboree.com.out
index 5638f76..ddb0a01 100644
--- a/chrome/test/data/autofill/heuristics/output/10_register_gymboree.com.out
+++ b/chrome/test/data/autofill/heuristics/output/10_register_gymboree.com.out
@@ -4,7 +4,7 @@ NAME_FIRST | USER_ACCOUNT<>firstName | First Name* | | LOYALTY_ACCOUNT<>email_1
NAME_LAST | USER_ACCOUNT<>lastName | Last Name* | | LOYALTY_ACCOUNT<>email_1-default
ADDRESS_HOME_LINE1 | LOYALTY_ADDRESS<>address1 | Address Line 1* | | LOYALTY_ACCOUNT<>email_1-default
ADDRESS_HOME_LINE2 | LOYALTY_ADDRESS<>address2 | Address Line 2 | | LOYALTY_ACCOUNT<>email_1-default
-UNKNOWN_TYPE | LOYALTY_ADDRESS<>address3 | Address Line 3 | | LOYALTY_ACCOUNT<>email_1-default
+ADDRESS_HOME_LINE3 | LOYALTY_ADDRESS<>address3 | Address Line 3 | | LOYALTY_ACCOUNT<>email_1-default
ADDRESS_HOME_CITY | LOYALTY_ADDRESS<>city | City* | | LOYALTY_ACCOUNT<>email_1-default
ADDRESS_HOME_STATE | LOYALTY_ADDRESS<>state_cd | State/Province* | | LOYALTY_ACCOUNT<>email_1-default
ADDRESS_HOME_ZIP | LOYALTY_ADDRESS<>postal | Zip/Postal Code*! | | LOYALTY_ACCOUNT<>email_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/17_crbug_224601.out b/chrome/test/data/autofill/heuristics/output/17_crbug_224601.out
index 6feabf5..c71486e 100644
--- a/chrome/test/data/autofill/heuristics/output/17_crbug_224601.out
+++ b/chrome/test/data/autofill/heuristics/output/17_crbug_224601.out
@@ -42,7 +42,7 @@ PHONE_HOME_WHOLE_NUMBER | Register1$txtEveningPhone | Evening phone: | | txtSea
PHONE_HOME_WHOLE_NUMBER | Register1$txtMobilePhone | Mobile phone: | | txtSearch_1-default
ADDRESS_HOME_LINE1 | Register1$txtAddress1 | Address Line 1: * | | txtSearch_1-default
ADDRESS_HOME_LINE2 | Register1$txtAddress2 | Address Line 2: * | | txtSearch_1-default
-UNKNOWN_TYPE | Register1$txtAddress3 | Address Line 3: | | txtSearch_1-default
+ADDRESS_HOME_LINE3 | Register1$txtAddress3 | Address Line 3: | | txtSearch_1-default
UNKNOWN_TYPE | Register1$txtAddress4 | Address Line 4: | | txtSearch_1-default
UNKNOWN_TYPE | Register1$txtAddress5 | Address Line 5: | | txtSearch_1-default
ADDRESS_HOME_ZIP | Register1$txtPostCode | Post Code: * | | txtSearch_1-default
diff --git a/chrome/test/data/autofill/heuristics/output/20_llbean.out b/chrome/test/data/autofill/heuristics/output/20_llbean.out
new file mode 100644
index 0000000..d7c283a
--- /dev/null
+++ b/chrome/test/data/autofill/heuristics/output/20_llbean.out
@@ -0,0 +1,38 @@
+UNKNOWN_TYPE | personTitle | Title (optional) | | personTitle_1-default
+NAME_FIRST | firstName | First Name | | personTitle_1-default
+NAME_MIDDLE | middleName | Middle Name(optional) | | personTitle_1-default
+NAME_LAST | lastName | Last Name | | personTitle_1-default
+UNKNOWN_TYPE | gender | Gender (optional) | M | personTitle_1-default
+UNKNOWN_TYPE | gender | Gender (optional) | F | personTitle_1-default
+ADDRESS_HOME_COUNTRY | country | Country | USA | personTitle_1-default
+ADDRESS_HOME_ZIP | JPNPostal | Postal Code | | personTitle_1-default
+UNKNOWN_TYPE | JPNPrefecture | Prefecture | | personTitle_1-default
+ADDRESS_HOME_CITY | JPNCity | City | | personTitle_1-default
+COMPANY_NAME | organizationName | Business, Attention, or In Care of Name (optional) | | personTitle_1-default
+UNKNOWN_TYPE | orgNameInd | Business, Attention, or In Care of Name (optional) | BUS | personTitle_1-default
+UNKNOWN_TYPE | orgNameInd | Business, Attention, or In Care of Name (optional) | C/O | personTitle_1-default
+UNKNOWN_TYPE | orgNameInd | Business, Attention, or In Care of Name (optional) | ATTN | personTitle_1-default
+ADDRESS_HOME_LINE1 | address1 | Address | | personTitle_1-default
+ADDRESS_HOME_LINE2 | address2 | Address Line 2 (optional) | | personTitle_1-default
+ADDRESS_HOME_LINE3 | address3 | Address Line 3 (optional) | | personTitle_1-default
+ADDRESS_HOME_ZIP | zipCode | Zip Code | | personTitle_1-default
+ADDRESS_HOME_CITY | city | City | | personTitle_1-default
+ADDRESS_HOME_STATE | state | State | | personTitle_1-default
+ADDRESS_HOME_ZIP | CAPostal | Postal Code | | personTitle_1-default
+ADDRESS_HOME_CITY | CACity | City | | personTitle_1-default
+ADDRESS_HOME_STATE | CAProvince | Province | | personTitle_1-default
+ADDRESS_HOME_CITY | INTLCity | City | | personTitle_1-default
+ADDRESS_HOME_STATE | INTLCounty | County | | personTitle_1-default
+ADDRESS_HOME_ZIP | INTLPostal | Postal Code | | personTitle_1-default
+PHONE_HOME_WHOLE_NUMBER | phone1 | Daytime Phone Number (optional) | | personTitle_1-default
+PHONE_HOME_WHOLE_NUMBER | intlPhone1Prefix | International Country Code | | personTitle_1-default
+PHONE_HOME_WHOLE_NUMBER | intlPhone1 | Daytime Phone Number | | personTitle_1-default
+UNKNOWN_TYPE | phone1_Loc | International Country Code Daytime Phone Number | H | personTitle_1-default
+UNKNOWN_TYPE | phone1_Loc | International Country Code Daytime Phone Number | B | personTitle_1-default
+UNKNOWN_TYPE | phone1_Loc | International Country Code Daytime Phone Number | M | personTitle_1-default
+UNKNOWN_TYPE | ckoutShippingCheck | Daytime Phone Number (optional) International Country Code Daytime Phone Number | ckoutShippingCheck | personTitle_1-default
+UNKNOWN_TYPE | shipModeId | Shipping | 10 | personTitle_1-default
+UNKNOWN_TYPE | shipModeId | Shipping | 11 | personTitle_1-default
+UNKNOWN_TYPE | shipLiability | Shipping | on | personTitle_1-default
+UNKNOWN_TYPE | shipAddGiftMsg | Shipping | addGiftMsg | personTitle_1-default
+UNKNOWN_TYPE | giftMsg | Message | | personTitle_1-default