Bug 1349489 - Part 2: Add test fixtures for autofill field name heuristics.; r?MattN draft
authorSean Lee <selee@mozilla.com>
Fri, 21 Apr 2017 15:20:26 +0800
changeset 570526 08a7e1b2d69d2a93bddd288d05532b8a37bd2d8e
parent 570525 71f6d35e2fe4e488306ca3c6a3bd5562bca02158
child 570651 30c147ed2c8d82031e3fd0dd3cfb722e8d308ef5
push id56520
push userbmo:selee@mozilla.com
push dateSat, 29 Apr 2017 04:36:28 +0000
reviewersMattN
bugs1349489
milestone55.0a1
Bug 1349489 - Part 2: Add test fixtures for autofill field name heuristics.; r?MattN MozReview-Commit-ID: IuvSEpSHVtK
browser/extensions/formautofill/FormAutofillHeuristics.jsm
browser/extensions/formautofill/test/fixtures/autocomplete_basic.html
browser/extensions/formautofill/test/fixtures/third_party/BestBuy/Checkout_Payment.html
browser/extensions/formautofill/test/fixtures/third_party/BestBuy/Checkout_ShippingAddress.html
browser/extensions/formautofill/test/fixtures/third_party/BestBuy/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_BillingPaymentInfo.html
browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_Logon.html
browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_ShippingInfo.html
browser/extensions/formautofill/test/fixtures/third_party/CostCo/Payment.html
browser/extensions/formautofill/test/fixtures/third_party/CostCo/ShippingAddress.html
browser/extensions/formautofill/test/fixtures/third_party/CostCo/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/HomeDepot/Checkout_ShippingPayment.html
browser/extensions/formautofill/test/fixtures/third_party/HomeDepot/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/Macys/Checkout_Payment.html
browser/extensions/formautofill/test/fixtures/third_party/Macys/Checkout_ShippingAddress.html
browser/extensions/formautofill/test/fixtures/third_party/Macys/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/NewEgg/BillingInfo.html
browser/extensions/formautofill/test/fixtures/third_party/NewEgg/Login.html
browser/extensions/formautofill/test/fixtures/third_party/NewEgg/ShippingInfo.html
browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/Payment.html
browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/ShippingAddress.html
browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/QVC/PaymentMethod.html
browser/extensions/formautofill/test/fixtures/third_party/QVC/SignIn.html
browser/extensions/formautofill/test/fixtures/third_party/QVC/YourInformation.html
browser/extensions/formautofill/test/fixtures/third_party/README
browser/extensions/formautofill/test/fixtures/third_party/Sears/PaymentOptions.html
browser/extensions/formautofill/test/fixtures/third_party/Sears/ShippingAddress.html
browser/extensions/formautofill/test/fixtures/third_party/Staples/Basic.html
browser/extensions/formautofill/test/fixtures/third_party/Staples/Basic_ac_on.html
browser/extensions/formautofill/test/fixtures/third_party/Staples/PaymentBilling.html
browser/extensions/formautofill/test/fixtures/third_party/Staples/PaymentBilling_ac_on.html
browser/extensions/formautofill/test/fixtures/third_party/Walmart/Checkout.html
browser/extensions/formautofill/test/fixtures/third_party/Walmart/Payment.html
browser/extensions/formautofill/test/fixtures/third_party/Walmart/Shipping.html
browser/extensions/formautofill/test/unit/head.js
browser/extensions/formautofill/test/unit/heuristics/test_basic.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_BestBuy.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_CDW.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_CostCo.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_HomeDepot.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_Macys.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_NewEgg.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_OfficeDepot.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_QVC.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_Sears.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_Staples.js
browser/extensions/formautofill/test/unit/heuristics/third_party/test_Walmart.js
browser/extensions/formautofill/test/unit/xpcshell.ini
toolkit/modules/tests/modules/MockDocument.jsm
--- a/browser/extensions/formautofill/FormAutofillHeuristics.jsm
+++ b/browser/extensions/formautofill/FormAutofillHeuristics.jsm
@@ -7,16 +7,21 @@
  */
 
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["FormAutofillHeuristics"];
 
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
+Cu.import("resource://formautofill/FormAutofillUtils.jsm");
+
+this.log = null;
+FormAutofillUtils.defineLazyLogGetter(this, this.EXPORTED_SYMBOLS[0]);
+
 /**
  * Returns the autocomplete information of fields according to heuristics.
  */
 this.FormAutofillHeuristics = {
   VALID_FIELDS: [
     "given-name",
     "additional-name",
     "family-name",
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/autocomplete_basic.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta charset="utf-8">
+  <title>Form Autofill Demo Page</title>
+</head>
+<body>
+  <h1>Form Autofill Demo Page</h1>
+  <form id="form">
+    <p><label>organization: <input type="text" id="organization" name="organization" autocomplete="organization" /></label></p>
+    <p><label>streetAddress: <input type="text" id="street-address" name="street-address" autocomplete="street-address" /></label></p>
+    <p><label>addressLevel2: <input type="text" id="address-level2" name="address-level2" autocomplete="address-level2" /></label></p>
+    <p><label>addressLevel1: <input type="text" id="address-level1" name="address-level1" autocomplete="address-level1" /></label></p>
+    <p><label>postalCode: <input type="text" id="postal-code" name="postal-code" autocomplete="postal-code" /></label></p>
+    <p><label>country: <input type="text" id="country" name="country" autocomplete="country" /></label></p>
+    <p><label>tel: <input type="text" id="tel" name="tel" autocomplete="tel" /></label></p>
+    <p><label>email: <input type="text" id="email" name="email" autocomplete="email" /></label></p>
+    <p><input type="submit" /></p>
+    <p><button type="reset">Reset</button></p>
+  </form>
+</body>
+</html>
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/BestBuy/Checkout_Payment.html
@@ -0,0 +1,283 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <title>Checkout – Best Buy</title>
+   </head>
+   <body>
+      <form name="frmSearch" action="https://www.bestbuy.com/site/searchpage.jsp" method="GET">
+         <input type="text" value="" name="st" maxlength="90" placeholder="Search Best Buy" id="gh-search-input" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false">
+         <input type="hidden" value="UTF-8" name="_dyncharset">
+         <input type="hidden" value="pcat17071" name="id">
+         <input type="hidden" value="page" name="type">
+         <input type="hidden" value="Global" name="sc">
+         <input type="hidden" value="1" name="cp">
+         <input type="hidden" value="" name="nrp">
+         <input type="hidden" value="" name="sp">
+         <input type="hidden" value="" name="qp">
+         <input type="hidden" value="n" name="list">
+         <input type="hidden" value="true" name="af">
+         <input type="hidden" value="y" name="iht">
+         <input type="hidden" value="All Categories" name="usc">
+         <input type="hidden" value="960" name="ks">
+         <input type="hidden" id="keys" value="keys" name="keys">
+      </form>
+      <form action="https://www-ssl.bestbuy.com/site/olspage.jsp?id=pcat17009&amp;type=page&amp;fastTrack=true" id="footer-email-form">
+         <label for="footerEmailSignup">GET THE LATEST DEALS &amp; MORE</label>
+         <input type="text" id="footerEmailSignup" name="email" placeholder="Enter E-Mail Address">
+         <input type="submit" value="Sign Up"
+title="Sign Up">
+      </form>
+      <form action="javascript://">
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.firstName">
+               <span>
+                  <p>First Name</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.firstName" name="firstName" maxlength="29" value="Tester">
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.lastName">
+               <span>
+                  <p>Last Name</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.lastName" name="lastName" maxlength="30" value="Mo">
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.street">
+               <span>
+                  <p>Address</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.street" name="street" maxlength="35" value="331 E EVELYN AVE">
+               </div>
+            </label>
+         </div>
+         <div>
+            <label id="fulfillment.fulfillmentGroups.0.fulfillment.address.city" for="fulfillment.fulfillmentGroups.0.fulfillment.address.city">
+               <span>
+                  <p>City</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.city" name="city" maxlength="30" value="MOUNTAIN VIEW">
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.state">
+               <span>
+                  <p>State</p>
+               </span>
+               <div>
+                  <select id="fulfillment.fulfillmentGroups.0.fulfillment.address.state" name="state">
+                     <option value="">Select a state</option>
+                     <option value="AL">AL - Alabama</option>
+                     <option value="AK">AK - Alaska</option>
+                     <option value="AP">AP - Armed Forces Pacific</option>
+                     <option value="AE">AE - Armed Force Europe</option>
+                     <option value="AA">AA - Armed Forces America</option>
+                     <option value="AZ">AZ - Arizona</option>
+                     <option value="AR">AR - Arkansas</option>
+                     <option value="CA">CA - California</option>
+                     <option value="CO">CO - Colorado</option>
+                     <option value="CT">CT - Connecticut</option>
+                     <option value="DC">DC - Washington D.C.</option>
+                     <option value="DE">DE - Delaware</option>
+                     <option value="FL">FL - Florida</option>
+                     <option value="GA">GA - Georgia</option>
+                     <option value="GU">GU - Guam</option>
+                     <option value="HI">HI - Hawaii</option>
+                     <option value="ID">ID - Idaho</option>
+                     <option value="IL">IL - Illinois</option>
+                     <option value="IN">IN - Indiana</option>
+                     <option value="IA">IA - Iowa</option>
+                     <option value="KS">KS - Kansas</option>
+                     <option value="KY">KY - Kentucky</option>
+                     <option value="LA">LA - Louisiana</option>
+                     <option value="ME">ME - Maine</option>
+                     <option value="MD">MD - Maryland</option>
+                     <option value="MA">MA - Massachusetts</option>
+                     <option value="MI">MI - Michigan</option>
+                     <option value="MN">MN - Minnesota</option>
+                     <option value="MS">MS - Mississippi</option>
+                     <option value="MO">MO - Missouri</option>
+                     <option value="MT">MT - Montana</option>
+                     <option value="NE">NE - Nebraska</option>
+                     <option value="NV">NV - Nevada</option>
+                     <option value="NH">NH - New Hampshire</option>
+                     <option value="NJ">NJ - New Jersey</option>
+                     <option value="NM">NM - New Mexico</option>
+                     <option value="NY">NY - New York</option>
+                     <option value="NC">NC - North Carolina</option>
+                     <option value="ND">ND - North Dakota</option>
+                     <option value="OH">OH - Ohio</option>
+                     <option value="OK">OK - Oklahoma</option>
+                     <option value="OR">OR - Oregon</option>
+                     <option value="PA">PA - Pennsylvania</option>
+                     <option value="RI">RI - Rhode Island</option>
+                     <option value="SC">SC - South Carolina</option>
+                     <option value="SD">SD - South Dakota</option>
+                     <option value="TN">TN - Tennessee</option>
+                     <option value="TX">TX - Texas</option>
+                     <option value="UT">UT - Utah</option>
+                     <option value="VT">VT - Vermont</option>
+                     <option value="VA">VA - Virginia</option>
+                     <option value="VI">VI - Virgin Islands</option>
+                     <option value="WA">WA - Washington</option>
+                     <option value="WV">WV - West Virginia</option>
+                     <option value="WI">WI - Wisconsin</option>
+                     <option value="WY">WY - Wyoming</option>
+                  </select>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.zipcode">
+               <span>
+                  <p>ZIP Code</p>
+               </span>
+               <div>
+                  <input type="tel" id="fulfillment.fulfillmentGroups.0.fulfillment.address.zipcode" name="zipcode" maxlength="5" value="94041">
+               </div>
+            </label>
+         </div>
+      </form>
+      <div role="search">
+         <div id="app">
+            <div>
+               <div>
+                  <div>
+                     <div>
+                        <section>
+                           <div>
+                              <div>
+                                 <section>
+                                    <section>
+                                       <div>
+                                          <ul>
+                                             <li>
+                                                <label for="ispu-fulfillmentci779178028329">
+                                                   <div>
+                                                      <input type="radio" id="ispu-fulfillmentci779178028329" name="fulfillment-options-list__radio_0" value="on">
+<i>
+</i>
+                                                   </div>
+                                                   <strong>
+                                                      <span>Tomorrow</span>
+                                                      <span>
+                                                         <p> at a Best Buy store</p>
+                                                      </span>
+                                                   </strong>
+                                                   <div>
+                                                      <span>
+                                                         <p>Store pick ups are usually ready within one hour and held for up to 8 days</p>
+                                                      </span>
+                                                   </div>
+                                                </label>
+                                             </li>
+                                          </ul>
+                                       </div>
+                                       <div>
+                                          <ul>
+                                             <li>
+                                                <label for="0losTwo Day">
+                                                   <div>
+                                                      <input type="radio" id="0losTwo Day" name="fulfillment-options-list__radio_0" value="on">
+<i>
+</i>
+                                                   </div>
+                                                   <strong>
+<span>Wed, Mar 22</span>
+</strong>- Two Day Shipping
+                                                </label>
+                                             </li>
+                                             <li>
+                                                <label for="0losOne Day">
+                                                   <div>
+                                                      <input type="radio" id="0losOne Day" name="fulfillment-options-list__radio_0" value="on">
+<i>
+</i>
+                                                   </div>
+                                                   <strong>
+<span>Tue, Mar 21</span>
+</strong>- One Day Shipping
+                                                </label>
+                                             </li>
+                                             <li>
+                                                <label for="0losSame Day">
+                                                   <div>
+                                                      <input type="radio" id="0losSame Day" name="fulfillment-options-list__radio_0" value="on">
+<i>
+</i>
+                                                   </div>
+                                                   <strong>
+<span>Tomorrow</span>
+</strong>- Same Day Shipping
+                                                </label>
+                                             </li>
+                                          </ul>
+                                       </div>
+                                    </section>
+                                    <section>
+                                       <label for="save-for-billing-address-0">
+                                          <div>
+                                             <input type="checkbox" id="save-for-billing-address-0" value="on">
+<i>
+</i>
+                                          </div>
+                                          <span>
+                                             <p>Save this as my billing address</p>
+                                          </span>
+                                       </label>
+                                    </section>
+                                 </section>
+                              </div>
+                              <div>
+                                 <section>
+                                    <div>
+                                       <label for="user.emailAddress">
+                                          <span>
+                                             <p>E-mail Address</p>
+                                          </span>
+                                          <div>
+                                             <input id="user.emailAddress" name="emailAddress" value="formautofilltester@dummy.com">
+                                          </div>
+                                       </label>
+                                    </div>
+                                    <div>
+                                       <label for="user.phone">
+                                          <span>
+                                             <p>Phone Number</p>
+                                          </span>
+                                          <div>
+                                             <input type="tel" id="user.phone" name="phone" maxlength="12" value="732 222 3232">
+                                          </div>
+                                       </label>
+                                    </div>
+                                    <div>
+                                       <label for="text-updates">
+                                          <div>
+                                             <input type="checkbox" id="text-updates" value="on">
+                                          </div>
+                                          <span>
+                                             <p>Send me text notifications for my order</p>
+                                          </span>
+                                       </label>
+                                    </div>
+                                 </section>
+                              </div>
+                           </div>
+                        </section>
+                     </div>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/BestBuy/Checkout_ShippingAddress.html
@@ -0,0 +1,326 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <title>Checkout – Best Buy</title>
+   </head>
+   <body>
+      <form name="frmSearch" action="https://www.bestbuy.com/site/searchpage.jsp" method="GET">
+         <label for="gh-search-input">Search Best Buy</label>
+         <input type="text" value="" name="st" maxlength="90" placeholder="Search Best Buy" id="gh-search-input" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" />
+         <input type="hidden" value="UTF-8" name="_dyncharset" />
+         <input type="hidden" value="pcat17071" name="id" />
+         <input type="hidden" value="page" name="type" />
+         <input type="hidden" value="Global" name="sc" />
+         <input type="hidden" value="1" name="cp" />
+         <input type="hidden" value="" name="nrp" />
+         <input type="hidden" value="" name="sp" />
+         <input type="hidden" value="" name="qp" />
+         <input type="hidden" value="n" name="list" />
+         <input type="hidden" value="true" name="af" />
+         <input type="hidden" value="y" name="iht" />
+         <input type="hidden" value="All Categories" name="usc" />
+         <input type="hidden" value="960" name="ks" />
+         <input type="hidden" id="keys" value="keys" name="keys" />
+      </form>
+      <form action="javascript://">
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.firstName">
+               <span>
+                  <p>First Name</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.firstName" name="firstName" maxlength="29" value=""
+title="overall type: NAME_FIRST
+                     server type: NAME_FIRST
+                     heuristic type: NAME_FIRST
+                     label: First Name
+                     parseable name: firstName
+                     field signature: 1855613035
+                     form signature: 670076259790528644"
+autofill-prediction="NAME_FIRST"
+/>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.lastName">
+               <span>
+                  <p>Last Name</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.lastName" name="lastName" maxlength="30" value=""
+title="overall type: NAME_LAST
+                     server type: NAME_LAST
+                     heuristic type: NAME_LAST
+                     label: Last Name
+                     parseable name: lastName
+                     field signature: 4163345999
+                     form signature: 670076259790528644"
+autofill-prediction="NAME_LAST"
+/>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.street">
+               <span>
+                  <p>Address</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.street" name="street" maxlength="35" value=""
+title="overall type: ADDRESS_HOME_STREET_ADDRESS
+                     server type: ADDRESS_HOME_STREET_ADDRESS
+                     heuristic type: ADDRESS_HOME_LINE1
+                     label: Address
+                     parseable name: street
+                     field signature: 3370790275
+                     form signature: 670076259790528644"
+autofill-prediction="ADDRESS_HOME_STREET_ADDRESS"
+/>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label id="fulfillment.fulfillmentGroups.0.fulfillment.address.city" for="fulfillment.fulfillmentGroups.0.fulfillment.address.city">
+               <span>
+                  <p>City</p>
+               </span>
+               <div>
+                  <input type="text" id="fulfillment.fulfillmentGroups.0.fulfillment.address.city" name="city" maxlength="30" value=""
+title="overall type: ADDRESS_HOME_CITY
+                     server type: ADDRESS_HOME_CITY
+                     heuristic type: ADDRESS_HOME_CITY
+                     label: City
+                     parseable name: city
+                     field signature: 2098554694
+                     form signature: 670076259790528644"
+autofill-prediction="ADDRESS_HOME_CITY"
+/>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.state">
+               <span>
+                  <p>State</p>
+               </span>
+               <div>
+                  <select id="fulfillment.fulfillmentGroups.0.fulfillment.address.state" name="state"
+title="overall type: ADDRESS_HOME_STATE
+                     server type: ADDRESS_HOME_STATE
+                     heuristic type: ADDRESS_HOME_STATE
+                     label: State
+                     parseable name: state
+                     field signature: 1878375253
+                     form signature: 670076259790528644"
+autofill-prediction="ADDRESS_HOME_STATE"
+/>
+                     <option value="">Select a state</option>
+                     <option value="AL">AL - Alabama</option>
+                     <option value="AK">AK - Alaska</option>
+                     <option value="AP">AP - Armed Forces Pacific</option>
+                     <option value="AE">AE - Armed Forces Europe</option>
+                     <option value="AA">AA - Armed Forces America</option>
+                     <option value="AZ">AZ - Arizona</option>
+                     <option value="AR">AR - Arkansas</option>
+                     <option value="CA">CA - California</option>
+                     <option value="CO">CO - Colorado</option>
+                     <option value="CT">CT - Connecticut</option>
+                     <option value="DC">DC - Washington D.C.</option>
+                     <option value="DE">DE - Delaware</option>
+                     <option value="FL">FL - Florida</option>
+                     <option value="GA">GA - Georgia</option>
+                     <option value="GU">GU - Guam</option>
+                     <option value="HI">HI - Hawaii</option>
+                     <option value="ID">ID - Idaho</option>
+                     <option value="IL">IL - Illinois</option>
+                     <option value="IN">IN - Indiana</option>
+                     <option value="IA">IA - Iowa</option>
+                     <option value="KS">KS - Kansas</option>
+                     <option value="KY">KY - Kentucky</option>
+                     <option value="LA">LA - Louisiana</option>
+                     <option value="ME">ME - Maine</option>
+                     <option value="MD">MD - Maryland</option>
+                     <option value="MA">MA - Massachusetts</option>
+                     <option value="MI">MI - Michigan</option>
+                     <option value="MN">MN - Minnesota</option>
+                     <option value="MS">MS - Mississippi</option>
+                     <option value="MO">MO - Missouri</option>
+                     <option value="MT">MT - Montana</option>
+                     <option value="NE">NE - Nebraska</option>
+                     <option value="NV">NV - Nevada</option>
+                     <option value="NH">NH - New Hampshire</option>
+                     <option value="NJ">NJ - New Jersey</option>
+                     <option value="NM">NM - New Mexico</option>
+                     <option value="NY">NY - New York</option>
+                     <option value="NC">NC - North Carolina</option>
+                     <option value="ND">ND - North Dakota</option>
+                     <option value="OH">OH - Ohio</option>
+                     <option value="OK">OK - Oklahoma</option>
+                     <option value="OR">OR - Oregon</option>
+                     <option value="PA">PA - Pennsylvania</option>
+                     <option value="RI">RI - Rhode Island</option>
+                     <option value="SC">SC - South Carolina</option>
+                     <option value="SD">SD - South Dakota</option>
+                     <option value="TN">TN - Tennessee</option>
+                     <option value="TX">TX - Texas</option>
+                     <option value="UT">UT - Utah</option>
+                     <option value="VT">VT - Vermont</option>
+                     <option value="VA">VA - Virginia</option>
+                     <option value="VI">VI - Virgin Islands</option>
+                     <option value="WA">WA - Washington</option>
+                     <option value="WV">WV - West Virginia</option>
+                     <option value="WI">WI - Wisconsin</option>
+                     <option value="WY">WY - Wyoming</option>
+                  </select>
+               </div>
+            </label>
+         </div>
+         <div>
+            <label for="fulfillment.fulfillmentGroups.0.fulfillment.address.zipcode">
+               <span>
+                  <p>ZIP Code</p>
+               </span>
+               <div>
+                  <input type="tel" id="fulfillment.fulfillmentGroups.0.fulfillment.address.zipcode" name="zipcode" maxlength="5" value=""
+title="overall type: ADDRESS_HOME_ZIP
+                     server type: ADDRESS_HOME_ZIP
+                     heuristic type: ADDRESS_HOME_ZIP
+                     label: ZIP Code
+                     parseable name: zipcode
+                     field signature: 390262106
+                     form signature: 670076259790528644"
+autofill-prediction="ADDRESS_HOME_ZIP"
+/>
+               </div>
+            </label>
+         </div>
+      </form>
+      <form action="https://www-ssl.bestbuy.com/site/olspage.jsp?id=pcat17009&amp;type=page&amp;fastTrack=true" id="footer-email-form">
+<label for="footerEmailSignup">GET THE LATEST DEALS &amp; MORE</label>
+         <input type="text" id="footerEmailSignup" name="email" placeholder="Enter E-Mail Address" />
+         <input type="submit" value="Sign Up"
+title="Sign Up" />
+      </form>
+      <div id="checkout-container">
+         <div id="app">
+            <div>
+               <div>
+                  <div>
+                     <div>
+                        <section>
+                           <div>
+                              <div>
+                                 <section>
+                                    <section>
+                                       <div>
+                                          <ul>
+                                             <li>
+                                                <label for="ispu-fulfillmentci779178028329">
+                                                   <div>
+                                                      <input type="radio" id="ispu-fulfillmentci779178028329" name="fulfillment-options-list__radio_0" value="on" />
+                                                   </div>
+                                                   <strong>
+                                                      <span>Tomorrow</span>
+                                                      <span>
+                                                         <p> at a Best Buy store</p>
+                                                      </span>
+                                                   </strong>
+                                                   <div>
+                                                      <span>
+                                                         <p>Store pick ups are usually ready within one hour and held for up to 8 days</p>
+                                                      </span>
+                                                   </div>
+                                                </label>
+                                             </li>
+                                          </ul>
+                                       </div>
+                                       <div>
+                                          <ul>
+                                             <li>
+                                                <label for="0losTwo Day">
+                                                   <div>
+                                                      <input type="radio" id="0losTwo Day" name="fulfillment-options-list__radio_0" value="on" />
+                                                   </div>
+                                                   <strong>
+<span>Wed, Mar 22</span>
+</strong> - Two Day Shipping
+                                                   <p>
+                                                      Some items may arrive slower. See
+                                                      <span>
+<span>
+<p>Order Summary</p>
+</span>
+</span> for details.
+                                                   </p>
+                                                </label>
+                                             </li>
+                                             <li>
+                                                <label for="0losOne Day">
+                                                   <div>
+                                                      <input type="radio" id="0losOne Day" name="fulfillment-options-list__radio_0" value="on" />
+                                                   </div>
+                                                   <strong>
+<span>Tue, Mar 21</span>
+</strong> - One Day Shipping
+                                                </label>
+                                             </li>
+                                          </ul>
+                                       </div>
+                                    </section>
+                                    <section>
+                                       <label for="save-for-billing-address-0">
+                                          <div>
+                                             <input type="checkbox" id="save-for-billing-address-0" value="on" />
+                                          </div>
+                                          <span>
+                                             <p>Save this as my billing address</p>
+                                          </span>
+                                       </label>
+                                    </section>
+                                 </section>
+                              </div>
+                              <div>
+                                 <section>
+                                    <div>
+                                       <label for="user.emailAddress">
+                                          <span>
+                                             <p>E-mail Address</p>
+                                          </span>
+                                          <div>
+                                             <input id="user.emailAddress" name="emailAddress" value="" />
+                                          </div>
+                                       </label>
+                                    </div>
+                                    <div>
+                                       <label for="user.phone">
+                                          <span>
+                                             <p>Phone Number</p>
+                                          </span>
+                                          <div>
+                                             <input type="tel" id="user.phone" name="phone" maxlength="12" value="" />
+                                          </div>
+                                       </label>
+                                    </div>
+                                    <div>
+                                       <label for="text-updates">
+                                          <div>
+                                             <input type="checkbox" id="text-updates" value="on" />
+                                          </div>
+                                          <span>
+                                             <p>Send me text notifications for my order</p>
+                                          </span>
+                                       </label>
+                                    </div>
+                                 </section>
+                              </div>
+                           </div>
+                        </section>
+                     </div>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/BestBuy/SignIn.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <title>Sign In to BestBuy.com</title>
+   </head>
+   <body>
+      <form action="https://www-ssl.bestbuy.com/" name="ciaSignOn" >
+         <div>
+            <label for="fld-e">E-Mail Address</label>
+            <input type="email" name="email_MAGIC_HASH_1" id="fld-e" required="" />
+         </div>
+         <div>
+            <label for="fld-p1">Password</label>
+            <div>
+               <input type="password" name="password_MAGIC_HASH_2" id="fld-p1" required="" />
+            </div>
+         </div>
+         <input type="hidden" name="Salmon" value="MAGIC_HASH_3" />
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_BillingPaymentInfo.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>
+         Checkout
+      </title>
+   </head>
+   <body id="MasterPageBodyTag">
+      <form name="form1" method="post" action="https://www.cdw.com/shop/checkout/guest/BillingAndPayment.aspx" id="form1">
+         <div>
+         </div>
+         <div>
+            <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="669B25B9">
+            <input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="">
+         </div>
+         <div>
+            <div>
+               <div>
+               </div>
+               <div>
+                  <div>
+                  </div>
+                  <div id="newBillingAddressOptions">
+                     <div>
+                        <div>
+                           <input value="same" name="ctl00$ctl00$MainContentRoot$Body$addressOption" type="radio" id="sameAsShippingAddress" checked="checked"
+title="overall type: UNKNOWN_TYPE
+                              server type: NO_SERVER_DATA
+                              heuristic type: UNKNOWN_TYPE
+                              label: Use my Shipping Address as my Billing Address
+                              parseable name: addressOption
+                              field signature: 825932642
+                              form signature: 11231346808802434240"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                           <label id="lbl1" for="sameAsShippingAddress">Use my Shipping Address as my Billing Address</label>
+                        </div>
+                        <div id="sameShippingAddress">
+                           <div>
+                              <span id="shippingAddressFirstName">Tester</span>
+                              <span id="shippingAddressLastName">Mo</span>
+                           </div>
+                           <div>
+                              <span id="shippingCompany">Mozilla</span>
+                           </div>
+                           <div id="shippingAddressLine1">331 E. Evelyn Avenue</div>
+                           <div>
+                              <span id="shippingAddressCity">Mountain View</span>,
+                              <span id="shippingAddressState">CA</span>
+                              <span id="shippingAddressPostalCode">94041</span>
+                           </div>
+                        </div>
+                        <div>
+                           <input value="new" name="ctl00$ctl00$MainContentRoot$Body$addressOption" type="radio" id="createNewAddress"
+title="overall type: UNKNOWN_TYPE
+                              server type: NO_SERVER_DATA
+                              heuristic type: UNKNOWN_TYPE
+                              label: Enter Billing Address
+                              parseable name: addressOption
+                              field signature: 825932642
+                              form signature: 11231346808802434240"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                           <label id="lbl2" for="createNewAddress">Enter Billing Address</label>
+                        </div>
+                     </div>
+                  </div>
+                  <div id="newBillingAddress">
+                     <fieldset>
+                        <div>
+                           <label for="firstName">First Name (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$firstName" type="text" id="firstName" maxlength="75"
+title="overall type: NAME_FIRST
+                              server type: NAME_FIRST
+                              heuristic type: NAME_FIRST
+                              label: First Name (required)
+                              parseable name: ctl00$firstName
+                              field signature: 759447197
+                              form signature: 11231346808802434240"
+autofill-prediction="NAME_FIRST"
+>
+                        </div>
+                        <div>
+                           <label for="lastName">Last Name (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$lastName" type="text" id="lastName" maxlength="75"
+title="overall type: NAME_LAST
+                              server type: NAME_LAST
+                              heuristic type: NAME_LAST
+                              label: Last Name (required)
+                              parseable name: ctl00$lastName
+                              field signature: 2226109235
+                              form signature: 11231346808802434240"
+autofill-prediction="NAME_LAST"
+>
+                        </div>
+                        <div>
+                           <label for="company">Company</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$company" type="text" id="company" maxlength="100"
+title="overall type: COMPANY_NAME
+                              server type: COMPANY_NAME
+                              heuristic type: COMPANY_NAME
+                              label: Company
+                              parseable name: ctl00$company
+                              field signature: 474096225
+                              form signature: 11231346808802434240"
+autofill-prediction="COMPANY_NAME"
+>
+                        </div>
+                        <div>
+                           <label for="address1">Address Line 1 (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$address1" type="text" id="address1" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1
+                              server type: ADDRESS_HOME_LINE1
+                              heuristic type: ADDRESS_HOME_LINE1
+                              label: Address Line 1 (required)
+                              parseable name: ctl00$address1
+                              field signature: 3936848337
+                              form signature: 11231346808802434240"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+                        </div>
+                        <div>
+                           <label for="address2">Address Line 2 </label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$address2" type="text" id="address2" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2
+                              server type: ADDRESS_HOME_LINE2
+                              heuristic type: ADDRESS_HOME_LINE2
+                              label: Address Line 2
+                              parseable name: ctl00$address2
+                              field signature: 3389805014
+                              form signature: 11231346808802434240"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+                        </div>
+                        <div>
+                           <div>
+                              <label for="city">City (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$city" type="text" id="city" maxlength="25"
+title="overall type: ADDRESS_HOME_CITY
+                                 server type: ADDRESS_HOME_CITY
+                                 heuristic type: ADDRESS_HOME_CITY
+                                 label: City (required)
+                                 parseable name: ctl00$city
+                                 field signature: 794505091
+                                 form signature: 11231346808802434240"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                           </div>
+                           <div>
+                              <label for="stateProvince">State (required)</label>
+                              <select name="ctl00$ctl00$MainContentRoot$Body$ctl00$stateProvince" id="stateProvince"
+title="overall type: ADDRESS_HOME_STATE
+                                 server type: NO_SERVER_DATA
+                                 heuristic type: ADDRESS_HOME_STATE
+                                 label: State (required)
+                                 parseable name: ctl00$stateProvince
+                                 field signature: 548222440
+                                 form signature: 11231346808802434240"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                 <option selected="selected" value="">Choose a state</option>
+                                 <option value="AL-US">AL-Alabama</option>
+                                 <option value="AK-US">AK-Alaska</option>
+                                 <option value="AS-AS">AS-American Samoa</option>
+                                 <option value="AZ-US">AZ-Arizona</option>
+                                 <option value="AR-US">AR-Arkansas</option>
+                                 <option value="AE-US">AE-Armed Forces Africa</option>
+                                 <option value="AA-US">AA-Armed Forces Americas</option>
+                                 <option value="AE-US">AE-Armed Forces Canada</option>
+                                 <option value="AE-US">AE-Armed Forces Europe</option>
+                                 <option value="AE-US">AE-Armed Forces Middle East</option>
+                                 <option value="AP-US">AP-Armed Forces Pacific</option>
+                                 <option value="CA-US">CA-California</option>
+                                 <option value="CO-US">CO-Colorado</option>
+                                 <option value="CT-US">CT-Connecticut</option>
+                                 <option value="DE-US">DE-Delaware</option>
+                                 <option value="DC-US">DC-District of Columbia</option>
+                                 <option value="FM-FM">FM-Federated States of Micronesia</option>
+                                 <option value="FL-US">FL-Florida</option>
+                                 <option value="GA-US">GA-Georgia</option>
+                                 <option value="GU-GU">GU-Guam</option>
+                                 <option value="HI-US">HI-Hawaii</option>
+                                 <option value="ID-US">ID-Idaho</option>
+                                 <option value="IL-US">IL-Illinois</option>
+                                 <option value="IN-US">IN-Indiana</option>
+                                 <option value="IA-US">IA-Iowa</option>
+                                 <option value="KS-US">KS-Kansas</option>
+                                 <option value="KY-US">KY-Kentucky</option>
+                                 <option value="LA-US">LA-Louisiana</option>
+                                 <option value="ME-US">ME-Maine</option>
+                                 <option value="MH-MH">MH-Marshall Islands</option>
+                                 <option value="MD-US">MD-Maryland</option>
+                                 <option value="MA-US">MA-Massachusetts</option>
+                                 <option value="MI-US">MI-Michigan</option>
+                                 <option value="MN-US">MN-Minnesota</option>
+                                 <option value="MS-US">MS-Mississippi</option>
+                                 <option value="MO-US">MO-Missouri</option>
+                                 <option value="MT-US">MT-Montana</option>
+                                 <option value="NE-US">NE-Nebraska</option>
+                                 <option value="NV-US">NV-Nevada</option>
+                                 <option value="NH-US">NH-New Hampshire</option>
+                                 <option value="NJ-US">NJ-New Jersey</option>
+                                 <option value="NM-US">NM-New Mexico</option>
+                                 <option value="NY-US">NY-New York</option>
+                                 <option value="NC-US">NC-North Carolina</option>
+                                 <option value="ND-US">ND-North Dakota</option>
+                                 <option value="MP-MP">MP-Norther Mariana Islands</option>
+                                 <option value="OH-US">OH-Ohio</option>
+                                 <option value="OK-US">OK-Oklahoma</option>
+                                 <option value="OR-US">OR-Oregon</option>
+                                 <option value="PA-US">PA-Pennsylvania</option>
+                                 <option value="PR-PR">PR-Puerto Rico</option>
+                                 <option value="PW-PW">PW-Palau</option>
+                                 <option value="RI-US">RI-Rhode Island</option>
+                                 <option value="SC-US">SC-South Carolina</option>
+                                 <option value="SD-US">SD-South Dakota</option>
+                                 <option value="TN-US">TN-Tennessee</option>
+                                 <option value="TX-US">TX-Texas</option>
+                                 <option value="UT-US">UT-Utah</option>
+                                 <option value="VT-US">VT-Vermont</option>
+                                 <option value="VI-US">VI-Virgin Islands</option>
+                                 <option value="VA-US">VA-Virginia</option>
+                                 <option value="WA-US">WA-Washington</option>
+                                 <option value="WV-US">WV-West Virginia</option>
+                                 <option value="WI-US">WI-Wisconsin</option>
+                                 <option value="WY-US">WY-Wyoming</option>
+                              </select>
+                           </div>
+                           <div>
+                              <label for="zipCode">ZIP Code (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$zipCode" type="text" id="zipCode" maxlength="5"
+title="overall type: ADDRESS_HOME_ZIP
+                                 server type: ADDRESS_HOME_ZIP
+                                 heuristic type: ADDRESS_HOME_ZIP
+                                 label: ZIP Code (required)
+                                 parseable name: ctl00$zipCode
+                                 field signature: 4227103349
+                                 form signature: 11231346808802434240"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                           </div>
+                           <div>
+                              <label for="zipCodeExtn">ZIP Extn</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$zipCodeExtn" type="text" id="zipCodeExtn" maxlength="4"
+title="overall type: UNKNOWN_TYPE
+                                 server type: NO_SERVER_DATA
+                                 heuristic type: UNKNOWN_TYPE
+                                 label: ZIP Extn
+                                 parseable name: ctl00$zipCodeExtn
+                                 field signature: 2328453303
+                                 form signature: 11231346808802434240"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                           </div>
+                        </div>
+                     </fieldset>
+                  </div>
+               </div>
+               <div>
+                  <div>  The billing address above must match what appears on this credit card's statement.</div>
+                  <div>
+                     <div>
+                        <label for="creditCardType">Card Type (required)</label>
+                        <select name="ctl00$ctl00$MainContentRoot$Body$creditCardType" id="creditCardType"
+title="overall type: CREDIT_CARD_TYPE
+                           server type: NO_SERVER_DATA
+                           heuristic type: CREDIT_CARD_TYPE
+                           label: Card Type (required)
+                           parseable name: creditCardType
+                           field signature: 4008988516
+                           form signature: 11231346808802434240"
+autofill-prediction="CREDIT_CARD_TYPE"
+>
+                           <option value="Select Type">Select Type</option>
+                           <option value="American Express">American Express</option>
+                           <option value="Discover Network">Discover Network</option>
+                           <option value="MasterCard">MasterCard</option>
+                           <option value="Visa">Visa</option>
+                        </select>
+                     </div>
+                     <div>
+                        <label for="creditCardNumber">Credit Card Number (req)</label>
+                        <input name="ctl00$ctl00$MainContentRoot$Body$creditCardNumber" type="text" id="creditCardNumber" maxlength="16" autocomplete="off"
+title="overall type: CREDIT_CARD_NUMBER
+                           server type: NO_SERVER_DATA
+                           heuristic type: CREDIT_CARD_NUMBER
+                           label: Credit Card Number (req)
+                           parseable name: creditCardNumber
+                           field signature: 466166649
+                           form signature: 11231346808802434240"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                        <input name="ctl00$ctl00$MainContentRoot$Body$creditCardNumber_en" type="hidden" id="creditCardNumber_en" keydelimiter="**"  exponent="010001"  clearonsubmit="true"  >
+                     </div>
+                     <div>
+                        <label for="expiryMonth">Expiration Date (req)</label>
+                        <span>
+                           <select name="ctl00$ctl00$MainContentRoot$Body$expiryMonth" id="expiryMonth"
+title="overall type: CREDIT_CARD_EXP_MONTH
+                              server type: CREDIT_CARD_EXP_MONTH
+                              heuristic type: CREDIT_CARD_EXP_MONTH
+                              label: Expiration Date (req) CVV (req)
+                              parseable name: expiryMonth
+                              field signature: 1744226145
+                              form signature: 11231346808802434240"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                              <option value="">mm</option>
+                              <option value="1">01</option>
+                              <option value="2">02</option>
+                              <option value="3">03</option>
+                              <option value="4">04</option>
+                              <option value="5">05</option>
+                              <option value="6">06</option>
+                              <option value="7">07</option>
+                              <option value="8">08</option>
+                              <option value="9">09</option>
+                              <option value="10">10</option>
+                              <option value="11">11</option>
+                              <option value="12">12</option>
+                           </select>
+                           <select name="ctl00$ctl00$MainContentRoot$Body$expiryYear" id="expiryYear"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                              server type: NO_SERVER_DATA
+                              heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                              label: Expiration Date (req)
+                              parseable name: expiryYear
+                              field signature: 3338586057
+                              form signature: 11231346808802434240"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                              <option value="">yy</option>
+                              <option value="2017">17</option>
+                              <option value="2018">18</option>
+                              <option value="2019">19</option>
+                              <option value="2020">20</option>
+                              <option value="2021">21</option>
+                              <option value="2022">22</option>
+                              <option value="2023">23</option>
+                              <option value="2024">24</option>
+                              <option value="2025">25</option>
+                              <option value="2026">26</option>
+                           </select>
+                        </span>
+                     </div>
+                     <div>
+                        <label for="expiryMonth">CVV&nbsp;(req)</label>
+                        <input name="ctl00$ctl00$MainContentRoot$Body$CreditCardCvvText" type="text" id="CreditCardCvvText" maxlength="4"
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                           server type: NO_SERVER_DATA
+                           heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                           label: CVV (req)
+                           parseable name: CreditCardCvvText
+                           field signature: 2577719477
+                           form signature: 11231346808802434240"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                        <div>
+                           <i>
+</i>
+                           <div>
+                              <div>
+                                 <div>
+                                    <span>What is a CVV?</span>
+<br>
+                                    <span>For Visa, MasterCard &amp; Discover, the three digits on the back of your card.</span>
+<br>
+                                    <span> For American Express, the 4 digits on the front of your card.</span>
+<br>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <input type="submit" name="ctl00$ctl00$MainContentRoot$Body$saveButton" value="Next" id="saveButton">
+                  <div>
+<a
+title="Go to Verisign">
+                     <img src="./Checkout-BillingPaymentInfo_files/verisign.gif" alt="Verisign Secured" border="0">
+</a>
+                  </div>
+                  <div>
+<a target="_blank"
+title="Go to BBB">
+                     <img src="./Checkout-BillingPaymentInfo_files/BetterBusinessBureau-horizontal" alt="BBB Accredited Busines">
+</a>
+                  </div>
+               </div>
+            </div>
+            <div>
+               <ul>
+                  <li id="shippingAddressStep">
+                     <a id="shippingAddressEdit">Edit</a>
+                     <div id="shippingAddressStepDetails">
+                        <div>
+                           Address:
+                        </div>
+                        <div>
+                           <div>
+                              <span id="shippingAddressFirstName">Tester</span>
+                              <span id="shippingAddressLastName">Mo</span>
+                           </div>
+                           <div>
+                              <span id="shippingCompany">Mozilla</span>
+                           </div>
+                           <div id="shippingAddressLine1">331 E. Evelyn Avenue</div>
+                           <div>
+                              <span id="shippingAddressCity">Mountain View</span>,
+                              <span id="shippingAddressState">CA</span>
+                              <span id="shippingAddressPostalCode">94041</span>
+                           </div>
+                        </div>
+                        <div>
+                           <div>
+                              Contact Info:
+                           </div>
+                           <div>
+                              <div>
+                                 <span id="contactEmail">formautofilltester@gmail.com</span>
+                              </div>
+                              <div>
+                                 <span id="contactPhone">650-903-0800 650</span>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </li>
+                  <li id="shippingMethodStep">
+                     <a id="shippingMethodEdit">Edit</a>
+                     <div id="shippingMethodStepDetails">
+                        <div>Shipping Method</div>
+                        <div>
+                           <div id="shippingMethodName">UPS Ground (2-3 days)</div>
+                           <div id="shippingMethodDesc">2-3 business days</div>
+                           <div id="shippingMethodCost">$19.99</div>
+                        </div>
+                     </div>
+                  </li>
+                  <li id="billingAndPaymentStep">
+                     <a id="billingAndPaymentEdit">Edit</a>
+                     <div id="billingAndPaymentStepDetails">
+                        <div>
+                           Billing Address
+                        </div>
+                        <div>
+                           <div>
+                              <span id="billingAddressFirstName">
+</span>
+                              <span id="billingAddressLastName">
+</span>
+                           </div>
+                           <div id="billingAddressEmail">
+</div>
+                           <div id="billingAddressLine1">
+</div>
+                           <div id="billingAddressLine2">
+</div>
+                           <div>
+                              <span id="billingAddressCity">
+</span>,
+                              <span id="billingAddressState">
+</span>
+                              <span id="billingAddressPostalCode">
+</span>
+                           </div>
+                        </div>
+                        <div>Payment Method</div>
+                        <div id="paymentMethod">
+</div>
+                     </div>
+                  </li>
+                  <li>
+                  </li>
+               </ul>
+            </div>
+            <input type="text" name="Representative" id="Representative" value=""
+title="overall type: UNKNOWN_TYPE
+               server type: NO_SERVER_DATA
+               heuristic type: UNKNOWN_TYPE
+               label: Billing and Payment
+               parseable name: Representative
+               field signature: 716948211
+               form signature: 11231346808802434240"
+autofill-prediction="UNKNOWN_TYPE"
+>
+         </div>
+         <input id="__RequestVerificationTokencw" name="__RequestVerificationTokencw" type="hidden" >
+      </form>
+      <div>
+         <div>
+            <div>
+            </div>
+            <ul>
+               <li>
+                  <a id="button-log-on">Account Log On</a>
+                  <span>&nbsp;or&nbsp;</span>
+                  <a tabindex="2" id="button-create-account">Create Account</a>
+               </li>
+               <li>
+<a id="button-cart">
+                  <i>
+</i> Cart (<span id="headerCartCount">1</span>)
+                  <span id="headerCartTotal"> - $6,568.99</span>
+</a>
+               </li>
+            </ul>
+         </div>
+         <input type="hidden" id="HdnFreeShippingProductCartIndicator" clientidmode="static" value="0">
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_Logon.html
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>
+         Logon Checkout
+      </title>
+   </head>
+   <body id="MasterPageBodyTag">
+      <form name="LogonFormServer" method="post" action="https://www.cdw.com/shop/eaccount/logon/logon.aspx?site=" id="LogonFormServer" autocomplete="off">
+         <div>
+            <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
+            <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
+            <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE">
+         </div>
+         <div>
+            <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="C774B3FE">
+            <input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="">
+         </div>
+         <p>You don't need an account to place an order but you will have the option to create one after completing your purchase.</p>
+         <div id="gcoVisualCaptchaContainer">
+            <div id="divCaptcha" valign="top">
+               <div id="VisualCaptchaContainer">
+                  <p>Click or touch the <span>House</span>
+</p>
+                  <div>
+                     <div>
+<img >
+</div>
+                  </div>
+                  <div>
+<a
+title="Refresh">
+</a>
+</div>
+               </div>
+               <input type="hidden" name="ctl01$ctl00$MainContentRoot$Body$guestCheckoutButton$hidVisualCaptchaToken" id="hidVisualCaptchaToken" value="72fcbb43-d2de-4d9f-8ba3-17d3df45888e">
+               <input type="hidden" name="ctl01$ctl00$MainContentRoot$Body$guestCheckoutButton$hidVisualCaptchaSelectedXAxis" id="hidVisualCaptchaSelectedXAxis" value="">
+               <input type="hidden" name="ctl01$ctl00$MainContentRoot$Body$guestCheckoutButton$hidVisualCaptchaSelectedYAxis" id="hidVisualCaptchaSelectedYAxis" value="">
+               <div>
+                  <span id="valVisualCaptchaInvalid">
+<span>!</span> The validation code entered is incorrect</span>
+               </div>
+            </div>
+            <div>
+               <a id="guestbutton">Checkout as Guest</a>
+               <input type="submit" name="ctl01$ctl00$MainContentRoot$Body$guestCheckoutButton$guestCheckOutButton" value="Continue" id="guestCheckOutButton" disabled="disabled">
+            </div>
+         </div>
+         <br>
+         <div id="sitePolicy">
+            <div>
+               <a
+title="Go to Privacy Policy" target="_blank">Privacy Policy</a> | <a title="Go to Terms and Conditions" target="_blank">Terms and Conditions</a>
+            </div>
+            <a
+title="Go to Verisign">
+            <img src="./Logon Checkout_files/verisign.gif" border="0">
+            </a>
+         </div>
+         <input id="__RequestVerificationTokencw" name="__RequestVerificationTokencw" type="hidden">
+      </form>
+      <form name="LogonForm" id="LogonForm" method="post" action="https://www.cdw.com/shop/Eaccount/logon/LogOnProcessor.aspx?UI=CheckoutSimplifiedUI" autocomplete="off">
+         <div id="divLogon">
+            <section>
+               <div>
+                  <span id="lblUserName">User Name</span>
+                  <a tabindex="70">Forgot user name?</a>
+                  <div id="divUserName">
+                     <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$UserName" type="text" id="UserName" tabindex="10" maxlength="50">
+                  </div>
+               </div>
+               <div>
+                  <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$SavePassword" type="checkbox" id="SavePassword" tabindex="12" value="1">
+                  <label for="SavePassword">
+                  Remember my user name on this computer
+                  <img id="question-image" src="./Logon Checkout_files/tooltip-question-mark.jpg"
+title="">
+</label>
+                  <div id="remember-tooltip">
+                     <img src="./Logon Checkout_files/remember-me-tooltip.jpg" usemap="#closepopup">
+                     <map name="closepopup" id="closepopup">
+                        <area alt=""
+title="" shape="circle" coords="368,23,15.5">
+                     </map>
+                  </div>
+               </div>
+               <div>
+                  <span id="lblUserPass">Password</span>
+                  <a tabindex="80">Forgot password?</a>
+                  <div id="divPassword">
+                     <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$UserPassword" type="password" id="UserPassword" tabindex="11" maxlength="50">
+                  </div>
+               </div>
+               <div id="divCaptcha" valign="top">
+               </div>
+               <div id="DivInvalidCredentialsErrorMessage">
+                  <span>!</span> You have entered an invalid username and/or password. Please re-enter your information.
+               </div>
+               <div id="DivInvalidCaptcha">
+                  <span>!</span>
+                  <span id="CaptchaErrorMessage">
+</span>
+               </div>
+               <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$LogOnButton" type="submit" id="LogOnButton" tabindex="13" value="Log On" border="0">
+            </section>
+         </div>
+         <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$WebSite" type="hidden" id="WebSite">
+         <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$Target" type="hidden" id="Target" value="/shop/Checkout/ValidateCheckout.aspx?Standard=1&amp;cm_re=CRT-_-PZ-_-SC+Standard+Checkout+Button">
+         <input name="ctl01$ctl00$MainContentRoot$Body$LogonControl$ErrorCount" type="hidden" id="ErrorCount">
+         <span id="tagManEventControl">
+</span>
+      </form>
+      <div>
+         <input type="hidden" id="HdnFreeShippingProductCartIndicator" clientidmode="static" value="0">
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CDW/Checkout_ShippingInfo.html
@@ -0,0 +1,376 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>
+         Checkout
+      </title>
+   </head>
+   <body id="MasterPageBodyTag">
+      <form name="form1" method="post" action="https://www.cdw.com/shop/checkout/guest/ShippingAddress.aspx" id="form1">
+         <div>
+            <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
+            <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
+            <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE">
+         </div>
+         <div>
+            <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR">
+            <input type="hidden" name="__VIEWSTATEENCRYPTED" id="__VIEWSTATEENCRYPTED" value="">
+         </div>
+         <div>
+            <div>
+               <div>
+               </div>
+               <div>
+                  <div>
+                     <div>
+                        <div>
+                           <label for="firstName">First Name (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$firstName" type="text" id="firstName" maxlength="75"
+title="overall type: NAME_FIRST
+                              server type: NAME_FIRST
+                              heuristic type: NAME_FIRST
+                              label: First Name (required)
+                              parseable name: tl00$firstName
+                              field signature: 759447197
+                              form signature: 7628530229511417656"
+autofill-prediction="NAME_FIRST"
+>
+                        </div>
+                        <div>
+                           <label for="lastName">Last Name (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$lastName" type="text" id="lastName" maxlength="75"
+title="overall type: NAME_LAST
+                              server type: NAME_LAST
+                              heuristic type: NAME_LAST
+                              label: Last Name (required)
+                              parseable name: tl00$lastName
+                              field signature: 2226109235
+                              form signature: 7628530229511417656"
+autofill-prediction="NAME_LAST"
+>
+                        </div>
+                        <div>
+                           <label for="company">Company</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$company" type="text" id="company" maxlength="100"
+title="overall type: COMPANY_NAME
+                              server type: COMPANY_NAME
+                              heuristic type: COMPANY_NAME
+                              label: Company
+                              parseable name: tl00$company
+                              field signature: 474096225
+                              form signature: 7628530229511417656"
+autofill-prediction="COMPANY_NAME"
+>
+                        </div>
+                        <div>
+                           <label for="address1">Address Line 1 (required)</label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$address1" type="text" id="address1" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1
+                              server type: ADDRESS_HOME_LINE1
+                              heuristic type: ADDRESS_HOME_LINE1
+                              label: Address Line 1 (required)
+                              parseable name: tl00$address1
+                              field signature: 3936848337
+                              form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+                        </div>
+                        <div>
+                           <label for="address2">Address Line 2 </label>
+                           <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$address2" type="text" id="address2" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2
+                              server type: ADDRESS_HOME_LINE2
+                              heuristic type: ADDRESS_HOME_LINE2
+                              label: Address Line 2
+                              parseable name: tl00$address2
+                              field signature: 3389805014
+                              form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+                        </div>
+                        <div>
+                           <div>
+                              <label for="city">City (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$city" type="text" id="city" maxlength="25"
+title="overall type: ADDRESS_HOME_CITY
+                                 server type: ADDRESS_HOME_CITY
+                                 heuristic type: ADDRESS_HOME_CITY
+                                 label: City (required)
+                                 parseable name: tl00$city
+                                 field signature: 794505091
+                                 form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                           </div>
+                           <div>
+                              <label for="stateProvince">State (required)</label>
+                              <select name="ctl00$ctl00$MainContentRoot$Body$ctl00$stateProvince" id="stateProvince"
+title="overall type: ADDRESS_HOME_STATE
+                                 server type: NO_SERVER_DATA
+                                 heuristic type: ADDRESS_HOME_STATE
+                                 label: State (required)
+                                 parseable name: tl00$stateProvince
+                                 field signature: 548222440
+                                 form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                 <option selected="selected" value="">Choose a state</option>
+                                 <option value="AL-US">AL-Alabama</option>
+                                 <option value="AK-US">AK-Alaska</option>
+                                 <option value="AS-AS">AS-American Samoa</option>
+                                 <option value="AZ-US">AZ-Arizona</option>
+                                 <option value="AR-US">AR-Arkansas</option>
+                                 <option value="AE-US">AE-Armed Forces Africa</option>
+                                 <option value="AA-US">AA-Armed Forces Americas</option>
+                                 <option value="AE-US">AE-Armed Forces Canada</option>
+                                 <option value="AE-US">AE-Armed Forces Europe</option>
+                                 <option value="AE-US">AE-Armed Forces Middle East</option>
+                                 <option value="AP-US">AP-Armed Forces Pacific</option>
+                                 <option value="CA-US">CA-California</option>
+                                 <option value="CO-US">CO-Colorado</option>
+                                 <option value="CT-US">CT-Connecticut</option>
+                                 <option value="DE-US">DE-Delaware</option>
+                                 <option value="DC-US">DC-District of Columbia</option>
+                                 <option value="FM-FM">FM-Federated States of Micronesia</option>
+                                 <option value="FL-US">FL-Florida</option>
+                                 <option value="GA-US">GA-Georgia</option>
+                                 <option value="GU-GU">GU-Guam</option>
+                                 <option value="HI-US">HI-Hawaii</option>
+                                 <option value="ID-US">ID-Idaho</option>
+                                 <option value="IL-US">IL-Illinois</option>
+                                 <option value="IN-US">IN-Indiana</option>
+                                 <option value="IA-US">IA-Iowa</option>
+                                 <option value="KS-US">KS-Kansas</option>
+                                 <option value="KY-US">KY-Kentucky</option>
+                                 <option value="LA-US">LA-Louisiana</option>
+                                 <option value="ME-US">ME-Maine</option>
+                                 <option value="MH-MH">MH-Marshall Islands</option>
+                                 <option value="MD-US">MD-Maryland</option>
+                                 <option value="MA-US">MA-Massachusetts</option>
+                                 <option value="MI-US">MI-Michigan</option>
+                                 <option value="MN-US">MN-Minnesota</option>
+                                 <option value="MS-US">MS-Mississippi</option>
+                                 <option value="MO-US">MO-Missouri</option>
+                                 <option value="MT-US">MT-Montana</option>
+                                 <option value="NE-US">NE-Nebraska</option>
+                                 <option value="NV-US">NV-Nevada</option>
+                                 <option value="NH-US">NH-New Hampshire</option>
+                                 <option value="NJ-US">NJ-New Jersey</option>
+                                 <option value="NM-US">NM-New Mexico</option>
+                                 <option value="NY-US">NY-New York</option>
+                                 <option value="NC-US">NC-North Carolina</option>
+                                 <option value="ND-US">ND-North Dakota</option>
+                                 <option value="MP-MP">MP-Norther Mariana Islands</option>
+                                 <option value="OH-US">OH-Ohio</option>
+                                 <option value="OK-US">OK-Oklahoma</option>
+                                 <option value="OR-US">OR-Oregon</option>
+                                 <option value="PA-US">PA-Pennsylvania</option>
+                                 <option value="PR-PR">PR-Puerto Rico</option>
+                                 <option value="PW-PW">PW-Palau</option>
+                                 <option value="RI-US">RI-Rhode Island</option>
+                                 <option value="SC-US">SC-South Carolina</option>
+                                 <option value="SD-US">SD-South Dakota</option>
+                                 <option value="TN-US">TN-Tennessee</option>
+                                 <option value="TX-US">TX-Texas</option>
+                                 <option value="UT-US">UT-Utah</option>
+                                 <option value="VT-US">VT-Vermont</option>
+                                 <option value="VI-US">VI-Virgin Islands</option>
+                                 <option value="VA-US">VA-Virginia</option>
+                                 <option value="WA-US">WA-Washington</option>
+                                 <option value="WV-US">WV-West Virginia</option>
+                                 <option value="WI-US">WI-Wisconsin</option>
+                                 <option value="WY-US">WY-Wyoming</option>
+                              </select>
+                           </div>
+                           <div>
+                              <label for="zipCode">ZIP Code (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$zipCode" type="text" id="zipCode" maxlength="5"
+title="overall type: ADDRESS_HOME_ZIP
+                                 server type: ADDRESS_HOME_ZIP
+                                 heuristic type: ADDRESS_HOME_ZIP
+                                 label: ZIP Code (required)
+                                 parseable name: tl00$zipCode
+                                 field signature: 4227103349
+                                 form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                           </div>
+                           <div>
+                              <label for="zipCodeExtn">ZIP Extn</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$ctl00$zipCodeExtn" type="text" id="zipCodeExtn" maxlength="4"
+title="overall type: UNKNOWN_TYPE
+                                 server type: NO_SERVER_DATA
+                                 heuristic type: UNKNOWN_TYPE
+                                 label: ZIP Extn
+                                 parseable name: tl00$zipCodeExtn
+                                 field signature: 2328453303
+                                 form signature: 7628530229511417656"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                           </div>
+                        </div>
+                     </div>
+                     <div>
+                        <div>We will only contact you about your order and shipping.</div>
+                        <div>
+                           <div>
+                              <label for="contactEmail">Email (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$contactEmail" type="text" id="contactEmail" maxlength="75"
+title="overall type: EMAIL_ADDRESS
+                                 server type: EMAIL_ADDRESS
+                                 heuristic type: EMAIL_ADDRESS
+                                 label: Email (required)
+                                 parseable name: ontactEmail
+                                 field signature: 123947042
+                                 form signature: 7628530229511417656"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                           </div>
+                           <div>
+                              <label for="contactPhoneNumber">Phone (required)</label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$contactPhoneNumber" type="text" id="contactPhoneNumber" maxlength="15"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER
+                                 server type: PHONE_HOME_CITY_AND_NUMBER
+                                 heuristic type: PHONE_HOME_WHOLE_NUMBER
+                                 label: Phone (required)
+                                 parseable name: ontactPhoneNumber
+                                 field signature: 1588916982
+                                 form signature: 7628530229511417656"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+                           </div>
+                           <div>
+                              <label for="contactPhoneExtension">Extn </label>
+                              <input name="ctl00$ctl00$MainContentRoot$Body$contactPhoneExtension" type="text" id="contactPhoneExtension" maxlength="5"
+title="overall type: PHONE_HOME_CITY_CODE
+                                 server type: PHONE_HOME_CITY_CODE
+                                 heuristic type: PHONE_HOME_EXTENSION
+                                 label: Extn
+                                 parseable name: ontactPhoneExtension
+                                 field signature: 1782290665
+                                 form signature: 7628530229511417656"
+autofill-prediction="PHONE_HOME_CITY_CODE"
+>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+               <button id="saveButton" type="button">Next</button>
+               <input type="text" name="Representative" id="Representative" value=""
+title="overall type: ADDRESS_HOME_STREET_ADDRESS
+                  server type: ADDRESS_HOME_STREET_ADDRESS
+                  heuristic type: ADDRESS_HOME_LINE1
+                  label: Shipping Address Next
+                  parseable name: Representative
+                  field signature: 716948211
+                  form signature: 7628530229511417656"
+autofill-prediction="ADDRESS_HOME_STREET_ADDRESS"
+>
+            </div>
+            <div>
+               <ul>
+                  <li id="shippingAddressStep">
+                     <a id="shippingAddressEdit">Edit</a>
+                     <div id="shippingAddressStepDetails">
+                        <div>
+                           Address:
+                        </div>
+                        <div>
+                           <div>
+                              <span id="shippingAddressFirstName">
+</span>
+                              <span id="shippingAddressLastName">
+</span>
+                           </div>
+                           <div>
+                              <span id="shippingCompany">
+</span>
+                           </div>
+                           <div id="shippingAddressLine1">
+</div>
+                           <div id="shippingAddressLine2">
+</div>
+                           <div>
+                              <span id="shippingAddressCity">
+</span>,
+                              <span id="shippingAddressState">
+</span>
+                              <span id="shippingAddressPostalCode">
+</span>
+                           </div>
+                        </div>
+                        <div>
+                           <div>
+                              Contact Info:
+                           </div>
+                           <div>
+                              <div>
+                                 <span id="contactEmail">
+</span>
+                              </div>
+                              <div>
+                                 <span id="contactPhone">
+</span>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </li>
+                  <li id="shippingMethodStep">
+                     <a id="shippingMethodEdit">Edit</a>
+                     <div id="shippingMethodStepDetails">
+                        <div>Shipping Method</div>
+                        <div>
+                           <div id="shippingMethodName">-</div>
+                           <div id="shippingMethodDesc">-</div>
+                           <div id="shippingMethodCost">-</div>
+                        </div>
+                     </div>
+                  </li>
+                  <li id="billingAndPaymentStep">
+                     <a id="billingAndPaymentEdit">Edit</a>
+                     <div id="billingAndPaymentStepDetails">
+                        <div>
+                           Billing Address
+                        </div>
+                        <div>
+                           <div>
+                              <span id="billingAddressFirstName">
+</span>
+                              <span id="billingAddressLastName">
+</span>
+                           </div>
+                           <div id="billingAddressEmail">
+</div>
+                           <div id="billingAddressLine1">
+</div>
+                           <div id="billingAddressLine2">
+</div>
+                           <div>
+                              <span id="billingAddressCity">
+</span>,
+                              <span id="billingAddressState">
+</span>
+                              <span id="billingAddressPostalCode">
+</span>
+                           </div>
+                        </div>
+                        <div>Payment Method</div>
+                        <div id="paymentMethod">
+</div>
+                     </div>
+                  </li>
+                  <li>
+                  </li>
+               </ul>
+            </div>
+         </div>
+         <input id="__RequestVerificationTokencw" name="__RequestVerificationTokencw" type="hidden">
+      </form>
+      <div>
+         <input type="hidden" id="HdnFreeShippingProductCartIndicator" clientidmode="static" value="0">
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CostCo/Payment.html
@@ -0,0 +1,892 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <meta feature="9.1.4">
+      <title>Costco - Payment</title>
+      <meta name="currentBuildNumber" content="3.0.29057.0">
+      <meta name="ServerName" content="www.costco.com ">
+      <meta name="LocalAddress" content="xxx.xxx.xxx.48">
+      <meta name="LocalName" content="TP26">
+   </head>
+   <body>
+      <form name="CheckoutPaymentForm" id="CheckoutPaymentForm" method="post" action="https://www.costco.com/CostcoBillingPayment">
+         <input type="hidden" name="selfAddressId" id="hiddenSelfAddressId" value="">
+         <input type="hidden" id="billHiddenInput0" name="billHideenInput" value="">
+         <input type="hidden" id="billAddrId" name="billAddrId" value="">
+         <input type="hidden" id="membershipNumber" name="membershipNum">
+         <input type="hidden" name="orderItemsCount" value="1">
+         <input type="hidden" value="" id="selectedAddressId" name="selectedAddressId">
+         <input type="hidden" name="orderId" value="644156669" id="WC_CheckoutPaymentsAndBillingAddressf_orderId">
+         <input type="hidden" name="storeId" value="10301" id="CheckoutPayment_inputs_1">
+         <input type="hidden" name="catalogId" value="10701" id="CheckoutPayment_inputs_2">
+         <input type="hidden" name="langId" value="-1" id="CheckoutPayment_inputs_3">
+         <input type="hidden" name="curr_year" value="2017" id="CheckoutPayment_inputs_5">
+         <input type="hidden" name="curr_month" value="3" id="CheckoutPayment_inputs_6">
+         <input type="hidden" name="curr_date" value="19" id="CheckoutPayment_inputs_7">
+         <input type="hidden" name="URL" value="OrderPrepare?URL=CheckoutReviewView">
+         <input type="hidden" name="xCreditCardId" value="">
+         <input type="hidden" name="ccLastFour" value="">
+         <input type="hidden" name="checkCCValue" value="false">
+         <input type="hidden" name="backURL" value="">
+         <input type="hidden" name="piAmount" value="84.99000">
+         <input type="hidden" name="cardNumberValueHolder" value="">
+         <input type="hidden" name="authToken" value="312">
+         <div>
+            <label for="billMeLater">
+            <input type="radio" checked="checked" id="billMeLater" name="billMeLater" value="no"
+title="overall type: UNKNOWN_TYPE
+               server type: NO_SERVER_DATA
+               heuristic type: UNKNOWN_TYPE
+               label: Payment Method
+               parseable name: billMeLater
+               field signature: 1700925171
+               form signature: 4979691664972472743"
+autofill-prediction="UNKNOWN_TYPE"
+>
+            </label>
+            <br>
+            <div>
+               <div>
+                  <label for="payMethodId">Card Type</label>
+                  <select name="payMethodId" id="payMethodId"
+title="overall type: CREDIT_CARD_TYPE
+                     server type: CREDIT_CARD_TYPE
+                     heuristic type: CREDIT_CARD_TYPE
+                     label: Card Type
+                     parseable name: payMethodId
+                     field signature: 3668211827
+                     form signature: 4979691664972472743"
+autofill-prediction="CREDIT_CARD_TYPE"
+>
+                     <option value="Costco Credit Card">Costco Credit Card</option>
+                     <option value="Discover">Discover</option>
+                     <option value="Master Card">MasterCard</option>
+                     <option value="VISA" selected="selected">VISA</option>
+                  </select>
+               </div>
+               <div>
+                  <label for="account">Card number</label>
+                  <input
+title="overall type: CREDIT_CARD_NUMBER
+                     server type: NO_SERVER_DATA
+                     heuristic type: CREDIT_CARD_NUMBER
+                     label: Card number
+                     parseable name: account
+                     field signature: 3715653537
+                     form signature: 4979691664972472743" type="text" id="account" name="account" value="" autocomplete="off"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <label for="expire_month">Expiration Date</label>
+                  <select
+title="overall type: CREDIT_CARD_EXP_MONTH
+                     server type: CREDIT_CARD_EXP_MONTH
+                     heuristic type: CREDIT_CARD_EXP_MONTH
+                     label: Expiration Date
+                     parseable name: expire_month
+                     field signature: 3078539387
+                     form signature: 4979691664972472743" id="expire_month" name="expire_month"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                     <option value="Month">Month</option>
+                     <option value="01">1</option>
+                     <option value="02">2</option>
+                     <option value="03">3</option>
+                     <option value="04">4</option>
+                     <option value="05">5</option>
+                     <option value="06">6</option>
+                     <option value="07">7</option>
+                     <option value="08">8</option>
+                     <option value="09">9</option>
+                     <option value="10">10</option>
+                     <option value="11">11</option>
+                     <option value="12">12</option>
+                  </select>
+                  <select
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     server type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     label: Expiration Date
+                     parseable name: expire_year
+                     field signature: 2521850425
+                     form signature: 4979691664972472743" name="expire_year"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                     <option value="Year">Year</option>
+                     <option value="2017">2017</option>
+                     <option value="2018">2018</option>
+                     <option value="2019">2019</option>
+                     <option value="2020">2020</option>
+                     <option value="2021">2021</option>
+                     <option value="2022">2022</option>
+                     <option value="2023">2023</option>
+                     <option value="2024">2024</option>
+                     <option value="2025">2025</option>
+                     <option value="2026">2026</option>
+                     <option value="2027">2027</option>
+                  </select>
+               </div>
+               <div>
+                  <label for="cc_cvc">CVV Code</label>
+                  <input
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                     server type: NO_SERVER_DATA
+                     heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                     label: CVV Code
+                     parseable name: cc_cvc
+                     field signature: 1956128288
+                     form signature: 4979691664972472743" type="text" id="cc_cvc" name="cc_cvc" value="" maxlength="4" autocomplete="off"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                  <span>&nbsp;<span>?</span>
+</span>
+               </div>
+            </div>
+            <div>
+               <label for="cc_nameoncard">Cardholder Name</label>
+               <input
+title="overall type: CREDIT_CARD_NAME_FULL
+                  server type: CREDIT_CARD_NAME_FULL
+                  heuristic type: CREDIT_CARD_NAME_FULL
+                  label: Cardholder Name
+                  parseable name: cc_nameoncard
+                  field signature: 1086986730
+                  form signature: 4979691664972472743" type="text" id="cc_nameoncard" name="cc_nameoncard" value="" autocomplete="off"
+autofill-prediction="CREDIT_CARD_NAME_FULL"
+>
+            </div>
+            <div>
+               <input
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Save this as my default payment card
+                  parseable name: save_CC
+                  field signature: 3060743727
+                  form signature: 4979691664972472743" type="checkbox" name="save_CC" id="save_CC"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label for="save_CC">Save this as my default payment card</label>
+            </div>
+         </div>
+      </form>
+      <form name="CashCardForm" method="post" action="https://www.costco.com/CostcoCashCardProcess" id="CashCardForm">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="orderId" value="644156669">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="addressId" value="">
+         <input type="hidden" name="cc_payMethodId" value="CostcoCashCard">
+         <input type="hidden" name="action" value="">
+         <input type="hidden" name="URL" value="CheckoutPaymentView">
+         <input type="hidden" name="account" value="">
+         <input type="hidden" name="expire_month" value="">
+         <input type="hidden" name="expire_year" value="">
+         <input type="hidden" name="cc_nameoncard" value="">
+         <input type="hidden" name="payMethodId" value="">
+         <input type="hidden" name="xCreditCardId" value="">
+         <input type="hidden" name="ccLastFour" value="">
+         <input type="hidden" name="authToken" value="312404731%2cKsqvty%2bpMJ%2bCAl3XeIkCxSEgLa4%3d">
+         <div>
+            <div>
+               <label for="cash_account">Costco Cash Card Number</label>
+               <input
+title="Costco Cash Card Number" type="text" id="cash_account" name="cash_account" value="" maxlength="19" autocomplete="off">
+            </div>
+            <div>
+               <label for="cash_pin">PIN</label>
+               <input
+title="PIN" type="password" id="cash_pin" name="cash_pin" value="" maxlength="8" autocomplete="off">
+               <span>&nbsp;<span>?</span>
+</span>
+               <div>
+                  <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;More Info - Costco Cash Card</span>
+                  <span>
+                  <i>Costco Cash</i> Card Number</span>
+                  <span>This image highlights the unique number</span>
+                  <img src="./Costco - Payment_files/cashcard-us.gif" alt="cashcard-us.gif">
+                  <span>used to identify your <i>Costco Cash</i> card.</span>
+                  <span> Pin Number</span>
+                  <span>This number is used to access your</span>
+                  <span>
+                  <i>Costco Cash</i> card. The image shows</span>
+                  <span>where this number is located.</span>
+                  <span>@ 1998-2016 Costco Wholesale Corporation. All rights reserved.</span>
+               </div>
+            </div>
+         </div>
+      </form>
+      <form name="RefreshBilling" method="post" action="https://www.costco.com/CostcoBillingPayment" id="RefreshBilling">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="orderId" value="644156669">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="actionType" value="refresh">
+         <input type="hidden" name="authToken" value="312404731%2cKsqvty%2bpMJ%2bCAl3XeIkCxSEgLa4%3d">
+         <input type="hidden" name="deviceId" value="">
+      </form>
+      <form name="PromotionCodeForm" method="post" action="https://www.costco.com/CostcoManagePromotionCmd" id="PromotionCodeForm">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="orderId" value="644156669">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="taskType" value="A">
+         <input type="hidden" name="URL" value="OrderCalculate?updatePrices=1&amp;calculationUsageId=-1&amp;URL=OrderPrepare?URL=CostcoPostPromotionCodeAddRemove&amp;orderId=.">
+         <input type="hidden" name="errorViewName" value="CheckoutPaymentView">
+         <input type="hidden" name="account" value="">
+         <input type="hidden" name="expire_month" value="">
+         <input type="hidden" name="expire_year" value="">
+         <input type="hidden" name="cc_nameoncard" value="">
+         <input type="hidden" name="payMethodId" value="">
+         <input type="hidden" name="xCreditCardId" value="">
+         <input type="hidden" name="ccLastFour" value="">
+         <input type="hidden" name="checkCCValue" value="false">
+         <input type="hidden" id="billHiddenInput0" name="billHideenInput" value="">
+         <input type="hidden" id="billAddrId" name="billAddrId" value="">
+         <input type="hidden" name="addressId" value="">
+         <input type="hidden" name="cc_cvc" value="">
+         <input type="hidden" name="piAmount" value="84.99000">
+         <div>
+            <label for="PromotionCodeForm_1">Promo Code</label>
+            <input
+title="Promo Code" type="text" size="10" name="promoCode" id="PromotionCodeForm_1" value="">
+         </div>
+      </form>
+      <form id="AddressFormModal-Form" name="AddressFormModal-Form" autocomplete="on" method="post">
+         <div>
+            <input type="hidden" name="addressType" value="B">
+            <p id="addressFormModalRequired" tabindex="-1">
+<span>*</span> Required fields</p>
+            <div id="personName">
+               <div>
+                  <label for="addressFormModalFirstName">FIRST NAME<span>*</span>
+</label>
+                  <input id="addressFormModalFirstName" name="addressFormModalFirstName"
+title="overall type: NAME_FIRST
+                     server type: NAME_FIRST
+                     heuristic type: NAME_FIRST
+                     label: FIRST NAME*
+                     parseable name: addressFormModalFirstName
+                     field signature: 2222266781
+                     form signature: 8397269939060577503" type="text" maxlength="40"
+autofill-prediction="NAME_FIRST"
+>
+               </div>
+               <div>
+                  <label for="addressFormModalMiddleInitial">M.I.</label>
+                  <input id="addressFormModalMiddleInitial" name="addressFormModalMiddleInitial"
+title="overall type: NAME_MIDDLE_INITIAL
+                     server type: NAME_MIDDLE_INITIAL
+                     heuristic type: NAME_MIDDLE_INITIAL
+                     label: M.I.
+                     parseable name: addressFormModalMiddleInitial
+                     field signature: 3540652809
+                     form signature: 8397269939060577503" type="text" maxlength="1"
+autofill-prediction="NAME_MIDDLE_INITIAL"
+>
+               </div>
+               <div>
+                  <label for="addressFormModalLastName">LAST NAME<span>*</span>
+</label>
+                  <input id="addressFormModalLastName" name="addressFormModalLastName"
+title="overall type: NAME_LAST
+                     server type: NAME_LAST
+                     heuristic type: NAME_LAST
+                     label: LAST NAME*
+                     parseable name: addressFormModalLastName
+                     field signature: 4218996568
+                     form signature: 8397269939060577503" type="text" maxlength="40"
+autofill-prediction="NAME_LAST"
+>
+               </div>
+            </div>
+            <div>
+               <label for="addressFormModalCompany">COMPANY NAME</label>
+               <input id="addressFormModalCompany" name="addressFormModalCompany" type="text" maxlength="40"
+title="overall type: COMPANY_NAME
+                  server type: COMPANY_NAME
+                  heuristic type: COMPANY_NAME
+                  label: COMPANY NAME
+                  parseable name: addressFormModalCompany
+                  field signature: 1845178698
+                  form signature: 8397269939060577503"
+autofill-prediction="COMPANY_NAME"
+>
+            </div>
+            <div>
+               <label for="addressFormModalCountry">COUNTRY<span>*</span>
+</label>
+               <select id="addressFormModalCountry" name="addressFormModalCountry"
+title="overall type: ADDRESS_HOME_COUNTRY
+                  server type: ADDRESS_HOME_COUNTRY
+                  heuristic type: ADDRESS_HOME_COUNTRY
+                  label: COUNTRY*
+                  parseable name: addressFormModalCountry
+                  field signature: 4052501735
+                  form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                  <option value="CA">Canada</option>
+                  <option value="US">United States</option>
+               </select>
+            </div>
+            <div id="streetAddress">
+               <legend>
+                  <label for="addressFormModalAddressLine1">STREET ADDRESS<span>*</span>
+</label>
+               </legend>
+               <div>
+                  <input id="addressFormModalAddressLine1" name="addressFormModalAddressLine1" placeholder="Address Line 1" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1
+                     server type: ADDRESS_HOME_LINE1
+                     heuristic type: ADDRESS_HOME_LINE1
+                     label: STREET ADDRESS*
+                     parseable name: addressFormModalAddressLine1
+                     field signature: 1532865404
+                     form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+               </div>
+               <div>
+                  <input id="addressFormModalAddressLine2" name="addressFormModalAddressLine2" placeholder="Address Line 2" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2
+                     server type: ADDRESS_HOME_LINE2
+                     heuristic type: ADDRESS_HOME_LINE2
+                     label: Address Line 2
+                     parseable name: addressFormModalAddressLine2
+                     field signature: 2315514959
+                     form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+               </div>
+            </div>
+            <div id="city">
+               <label for="addressFormModalCity">CITY<span>*</span>
+</label>
+               <input id="addressFormModalCity" name="addressFormModalCity" type="text" maxlength="40"
+title="overall type: ADDRESS_HOME_CITY
+                  server type: ADDRESS_HOME_CITY
+                  heuristic type: ADDRESS_HOME_CITY
+                  label: CITY*
+                  parseable name: addressFormModalCity
+                  field signature: 4130865920
+                  form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+            </div>
+            <div id="stateAndZip">
+               <div>
+                  <label for="addressFormModalState">STATE / PROVINCE<span>*</span>
+</label>
+                  <select id="addressFormModalState" name="addressFormModalState"
+title="overall type: ADDRESS_HOME_STATE
+                     server type: ADDRESS_HOME_STATE
+                     heuristic type: ADDRESS_HOME_STATE
+                     label: STATE / PROVINCE*
+                     parseable name: addressFormModalState
+                     field signature: 4026908515
+                     form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                     <option value="NO_STATE_TYPE_SELECTED" selected="selected">* Select</option>
+                     <option value="Aa">AA - Armed Forces America</option>
+                     <option value="Ae">AE - Armed Forces Europe</option>
+                     <option value="AL">Alabama</option>
+                     <option value="AK">Alaska</option>
+                     <option value="Ap">AP - Armed Forces Pacific</option>
+                     <option value="AZ">Arizona</option>
+                     <option value="AR">Arkansas</option>
+                     <option value="CA">California</option>
+                     <option value="CO">Colorado</option>
+                     <option value="CT">Connecticut</option>
+                     <option value="DE">Delaware</option>
+                     <option value="DC">District of Columbia</option>
+                     <option value="FL">Florida</option>
+                     <option value="GA">Georgia</option>
+                     <option value="HI">Hawaii</option>
+                     <option value="ID">Idaho</option>
+                     <option value="IL">Illinois</option>
+                     <option value="IN">Indiana</option>
+                     <option value="IA">Iowa</option>
+                     <option value="KS">Kansas</option>
+                     <option value="KY">Kentucky</option>
+                     <option value="LA">Louisiana</option>
+                     <option value="ME">Maine</option>
+                     <option value="MD">Maryland</option>
+                     <option value="MA">Massachusetts</option>
+                     <option value="MI">Michigan</option>
+                     <option value="MN">Minnesota</option>
+                     <option value="MS">Mississippi</option>
+                     <option value="MO">Missouri</option>
+                     <option value="MT">Montana</option>
+                     <option value="NE">Nebraska</option>
+                     <option value="NV">Nevada</option>
+                     <option value="NH">New Hampshire</option>
+                     <option value="NJ">New Jersey</option>
+                     <option value="NM">New Mexico</option>
+                     <option value="NY">New York</option>
+                     <option value="NC">North Carolina</option>
+                     <option value="ND">North Dakota</option>
+                     <option value="OH">Ohio</option>
+                     <option value="OK">Oklahoma</option>
+                     <option value="OR">Oregon</option>
+                     <option value="PA">Pennsylvania</option>
+                     <option value="PR">Puerto Rico</option>
+                     <option value="RI">Rhode Island</option>
+                     <option value="SC">South Carolina</option>
+                     <option value="SD">South Dakota</option>
+                     <option value="TN">Tennessee</option>
+                     <option value="TX">Texas</option>
+                     <option value="UT">Utah</option>
+                     <option value="VT">Vermont</option>
+                     <option value="VA">Virginia</option>
+                     <option value="WA">Washington</option>
+                     <option value="WV">West Virginia</option>
+                     <option value="WI">Wisconsin</option>
+                     <option value="WY">Wyoming</option>
+                  </select>
+               </div>
+               <div>
+                  <label for="addressFormModalZip">ZIP / POSTAL CODE<span>*</span>
+</label>
+                  <input id="addressFormModalZip" name="addressFormModalZip" type="text" maxlength="10"
+title="overall type: ADDRESS_HOME_ZIP
+                     server type: ADDRESS_HOME_ZIP
+                     heuristic type: ADDRESS_HOME_ZIP
+                     label: ZIP / POSTAL CODE*
+                     parseable name: addressFormModalZip
+                     field signature: 2383002781
+                     form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+               </div>
+            </div>
+            <div id="phoneNumber">
+               <label for="addressFormModalPhoneNumber">PHONE NUMBER<span>*</span>
+</label>
+               <input id="addressFormModalPhoneNumber" name="addressFormModalPhoneNumber" type="text" maxlength="32"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER
+                  server type: PHONE_HOME_CITY_AND_NUMBER
+                  heuristic type: PHONE_HOME_WHOLE_NUMBER
+                  label: PHONE NUMBER*
+                  parseable name: addressFormModalPhoneNumber
+                  field signature: 1884423068
+                  form signature: 8397269939060577503"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+            </div>
+            <div id="email">
+              <label for="addressFormModalEmail" id="addressFormModalEmailLabel">EMAIL<span>*</span>
+</label>
+               <input id="addressFormModalEmail" name="addressFormModalEmail" type="text" maxlength="40"
+title="overall type: EMAIL_ADDRESS
+                  server type: EMAIL_ADDRESS
+                  heuristic type: EMAIL_ADDRESS
+                  label: EMAIL*
+                  parseable name: addressFormModalEmail
+                  field signature: 1977954575
+                  form signature: 8397269939060577503"
+autofill-prediction="EMAIL_ADDRESS"
+>
+            </div>
+            <div id="addressNickname">
+               <label for="addressFormModalAddressNickName">ADDRESS NICKNAME<span>*</span>
+                  <span>&nbsp;<span>?</span>
+</span>
+                  <span>The Address Nickname is a short name you create to help you easily identify this address within your address book.</span>
+               </label>
+               <input id="addressFormModalAddressNickName" name="addressFormModalAddressNickName" type="text" maxlength="35" placeholder="Holly at school, Mom, etc."
+title="overall type: ADDRESS_HOME_STREET_ADDRESS
+                  server type: ADDRESS_HOME_STREET_ADDRESS
+                  heuristic type: UNKNOWN_TYPE
+                  label: ADDRESS NICKNAME* The Address Nickname is a short name you create to help you easily identify this a
+                  parseable name: addressFormModalAddressNickName
+                  field signature: 605446661
+                  form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_STREET_ADDRESS"
+>
+            </div>
+            <div>
+               <input name="saveAddressCheckbox" id="saveAddressCheckbox" type="checkbox"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Add to address book.
+                  parseable name: saveAddressCheckbox
+                  field signature: 784127875
+                  form signature: 8397269939060577503"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label for="saveAddressCheckbox">Add to address book. </label>
+            </div>
+            <div>
+               <input name="setDefaultCheckbox" id="setDefaultCheckbox" type="checkbox" disabled="true"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Save as default shipping address in Address Book
+                  parseable name: setDefaultCheckbox
+                  field signature: 1479095059
+                  form signature: 8397269939060577503"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label for="setDefaultCheckbox" id="setDefaultCheckboxModalLabel">Save as default billing address in Address Book</label>
+            </div>
+         </div>
+      </form>
+      <form id="AddressFormInline-Form" name="AddressFormInline-Form" autocomplete="on" method="post">
+         <div>
+            <input type="hidden" name="addressType" value="B">
+            <p id="addressFormInlineRequired" tabindex="-1">
+<span>*</span> Required fields</p>
+            <div id="personName">
+               <div>
+                  <label for="addressFormInlineFirstName">FIRST NAME<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineFirstName" name="addressFormInlineFirstName"
+title="overall type: NAME_FIRST
+                        server type: NAME_FIRST
+                        heuristic type: NAME_FIRST
+                        label: FIRST NAME*
+                        parseable name: addressFormInlineFirstName
+                        field signature: 3938958812
+                        form signature: 16870043504464996221" type="text" maxlength="40"
+autofill-prediction="NAME_FIRST"
+>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineMiddleInitial">M.I.</label>
+                  <div>
+                     <input id="addressFormInlineMiddleInitial" name="addressFormInlineMiddleInitial"
+title="overall type: NAME_MIDDLE_INITIAL
+                        server type: NAME_MIDDLE_INITIAL
+                        heuristic type: NAME_MIDDLE_INITIAL
+                        label: M.I.
+                        parseable name: addressFormInlineMiddleInitial
+                        field signature: 3429701181
+                        form signature: 16870043504464996221" type="text" maxlength="1"
+autofill-prediction="NAME_MIDDLE_INITIAL"
+>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineLastName">LAST NAME<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineLastName" name="addressFormInlineLastName"
+title="overall type: NAME_LAST
+                        server type: NAME_LAST
+                        heuristic type: NAME_LAST
+                        label: LAST NAME*
+                        parseable name: addressFormInlineLastName
+                        field signature: 2108416564
+                        form signature: 16870043504464996221" type="text" maxlength="40"
+autofill-prediction="NAME_LAST"
+>
+                  </div>
+               </div>
+            </div>
+            <div id="city">
+               <label for="addressFormInlineCompany">COMPANY NAME</label>
+               <div>
+                  <input id="addressFormInlineCompany" name="addressFormInlineCompany" type="text" maxlength="40"
+title="overall type: COMPANY_NAME
+                     server type: COMPANY_NAME
+                     heuristic type: COMPANY_NAME
+                     label: COMPANY NAME
+                     parseable name: addressFormInlineCompany
+                     field signature: 4087238350
+                     form signature: 16870043504464996221"
+autofill-prediction="COMPANY_NAME"
+>
+               </div>
+            </div>
+            <div>
+               <label for="addressFormInlineCountry">COUNTRY<span>*</span>
+</label>
+               <div>
+                  <select id="addressFormInlineCountry" name="addressFormInlineCountry"
+title="overall type: ADDRESS_HOME_COUNTRY
+                     server type: ADDRESS_HOME_COUNTRY
+                     heuristic type: ADDRESS_HOME_COUNTRY
+                     label: COUNTRY*
+                     parseable name: addressFormInlineCountry
+                     field signature: 695762362
+                     form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                     <option value="CA">Canada</option>
+                     <option value="US">United States</option>
+                  </select>
+               </div>
+            </div>
+            <div id="streetAddress">
+               <legend>
+                  <label for="addressFormInlineAddressLine1">STREET ADDRESS<span>*</span>
+</label>
+               </legend>
+               <div>
+                  <input id="addressFormInlineAddressLine1" name="addressFormInlineAddressLine1" placeholder="Address Line 1" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1
+                     server type: ADDRESS_HOME_LINE1
+                     heuristic type: ADDRESS_HOME_LINE1
+                     label: STREET ADDRESS*
+                     parseable name: addressFormInlineAddressLine1
+                     field signature: 1040409778
+                     form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+               </div>
+               <input id="addressFormInlineAddressLine2" name="addressFormInlineAddressLine2" placeholder="Address Line 2" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2
+                  server type: ADDRESS_HOME_LINE2
+                  heuristic type: ADDRESS_HOME_LINE2
+                  label: Address Line 2
+                  parseable name: addressFormInlineAddressLine2
+                  field signature: 1640842807
+                  form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+            </div>
+            <div id="city">
+               <label for="addressFormInlineCity">CITY<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlineCity" name="addressFormInlineCity" type="text" maxlength="40"
+title="overall type: ADDRESS_HOME_CITY
+                     server type: ADDRESS_HOME_CITY
+                     heuristic type: ADDRESS_HOME_CITY
+                     label: CITY*
+                     parseable name: addressFormInlineCity
+                     field signature: 2829321141
+                     form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+               </div>
+            </div>
+            <div id="state">
+               <div>
+                  <label for="addressFormInlineState">STATE / PROVINCE<span>*</span>
+</label>
+                  <div>
+                     <select id="addressFormInlineState" name="addressFormInlineState"
+title="overall type: ADDRESS_HOME_STATE
+                        server type: ADDRESS_HOME_STATE
+                        heuristic type: ADDRESS_HOME_STATE
+                        label: STATE / PROVINCE*
+                        parseable name: addressFormInlineState
+                        field signature: 3295167441
+                        form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                        <option value="NO_STATE_TYPE_SELECTED" selected="selected">* Select</option>
+                        <option value="Aa">AA - Armed Forces America</option>
+                        <option value="Ae">AE - Armed Forces Europe</option>
+                        <option value="AL">Alabama</option>
+                        <option value="AK">Alaska</option>
+                        <option value="Ap">AP - Armed Forces Pacific</option>
+                        <option value="AZ">Arizona</option>
+                        <option value="AR">Arkansas</option>
+                        <option value="CA">California</option>
+                        <option value="CO">Colorado</option>
+                        <option value="CT">Connecticut</option>
+                        <option value="DE">Delaware</option>
+                        <option value="DC">District of Columbia</option>
+                        <option value="FL">Florida</option>
+                        <option value="GA">Georgia</option>
+                        <option value="HI">Hawaii</option>
+                        <option value="ID">Idaho</option>
+                        <option value="IL">Illinois</option>
+                        <option value="IN">Indiana</option>
+                        <option value="IA">Iowa</option>
+                        <option value="KS">Kansas</option>
+                        <option value="KY">Kentucky</option>
+                        <option value="LA">Louisiana</option>
+                        <option value="ME">Maine</option>
+                        <option value="MD">Maryland</option>
+                        <option value="MA">Massachusetts</option>
+                        <option value="MI">Michigan</option>
+                        <option value="MN">Minnesota</option>
+                        <option value="MS">Mississippi</option>
+                        <option value="MO">Missouri</option>
+                        <option value="MT">Montana</option>
+                        <option value="NE">Nebraska</option>
+                        <option value="NV">Nevada</option>
+                        <option value="NH">New Hampshire</option>
+                        <option value="NJ">New Jersey</option>
+                        <option value="NM">New Mexico</option>
+                        <option value="NY">New York</option>
+                        <option value="NC">North Carolina</option>
+                        <option value="ND">North Dakota</option>
+                        <option value="OH">Ohio</option>
+                        <option value="OK">Oklahoma</option>
+                        <option value="OR">Oregon</option>
+                        <option value="PA">Pennsylvania</option>
+                        <option value="PR">Puerto Rico</option>
+                        <option value="RI">Rhode Island</option>
+                        <option value="SC">South Carolina</option>
+                        <option value="SD">South Dakota</option>
+                        <option value="TN">Tennessee</option>
+                        <option value="TX">Texas</option>
+                        <option value="UT">Utah</option>
+                        <option value="VT">Vermont</option>
+                        <option value="VA">Virginia</option>
+                        <option value="WA">Washington</option>
+                        <option value="WV">West Virginia</option>
+                        <option value="WI">Wisconsin</option>
+                        <option value="WY">Wyoming</option>
+                     </select>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineZip">ZIP / POSTAL CODE<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineZip" name="addressFormInlineZip" type="text" maxlength="10"
+title="overall type: ADDRESS_HOME_ZIP
+                        server type: ADDRESS_HOME_ZIP
+                        heuristic type: ADDRESS_HOME_ZIP
+                        label: ZIP / POSTAL CODE*
+                        parseable name: addressFormInlineZip
+                        field signature: 3060672026
+                        form signature: 16870043504464996221"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                  </div>
+               </div>
+            </div>
+            <div id="phoneNumber">
+               <label for="addressFormInlinePhoneNumber">PHONE NUMBER<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlinePhoneNumber" name="addressFormInlinePhoneNumber" type="text" maxlength="32"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER
+                     server type: PHONE_HOME_CITY_AND_NUMBER
+                     heuristic type: PHONE_HOME_WHOLE_NUMBER
+                     label: PHONE NUMBER*
+                     parseable name: addressFormInlinePhoneNumber
+                     field signature: 1198968276
+                     form signature: 16870043504464996221"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+               </div>
+            </div>
+            <div id="email">
+               <label for="addressFormInlineEmail" id="addressFormInlineEmailLabel">EMAIL<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlineEmail" name="addressFormInlineEmail" type="text" maxlength="40" value="formautofilltester@gmail.com"
+title="overall type: EMAIL_ADDRESS
+                     server type: EMAIL_ADDRESS
+                     heuristic type: EMAIL_ADDRESS
+                     label: EMAIL*
+                     parseable name: addressFormInlineEmail
+                     field signature: 2460631353
+                     form signature: 16870043504464996221"
+autofill-prediction="EMAIL_ADDRESS"
+>
+               </div>
+            </div>
+            <div id="addressNickname">
+               <label for="addressFormInlineAddressNickName">ADDRESS NICKNAME<span>*</span>
+<span>&nbsp;<span>?</span>
+</span>
+<span>The Address Nickname is a short name you create to help you easily identify this address within your address book.</span>
+</label>
+               <div>
+                  <input id="addressFormInlineAddressNickName" name="addressFormInlineAddressNickName" type="text" maxlength="35" placeholder="Holly at school, Mom, etc."
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: ADDRESS NICKNAME* The Address Nickname is a short name you create to help you easily identify this a
+                     parseable name: addressFormInlineAddressNickName
+                     field signature: 2948011243
+                     form signature: 16870043504464996221"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               </div>
+            </div>
+            <div>
+               <input name="saveAddressCheckboxInline" id="saveAddressCheckboxInline" type="checkbox"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Add to address book.
+                  parseable name: saveAddressCheckboxInline
+                  field signature: 3323717546
+                  form signature: 16870043504464996221"
+autofill-prediction="UNKNOWN_TYPE" checked="checked"
+>
+               <label for="saveAddressCheckboxInline">Add to address book. </label>
+            </div>
+            <div>
+               <input name="setDefaultCheckboxInline" id="setDefaultCheckboxInline" type="checkbox"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Save as default shipping address in Address Book
+                  parseable name: setDefaultCheckboxInline
+                  field signature: 2923970107
+                  form signature: 16870043504464996221"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label for="setDefaultCheckboxInline" id="setDefaultCheckboxInlineLabel">Save as default billing address in Address Book</label>
+            </div>
+            <div id="defaultAddressChangeInline">
+               <div id="WC_ContentAreaESpot_div_1_rx-DefaultAddrConfirm">
+                  <div id="WC_ContentAreaESpot_div_2_rx-DefaultAddrConfirm">[rx-DefaultAddrConfirm]</div>
+                  <div>
+                     <ul>
+                        <li value="1">
+                           You are changing your Costco Default Shipping Address. &nbsp;All future orders from Costco.com, including Pharmacy Prescription Orders, will be sent to this Address.
+                        </li>
+                     </ul>
+                  </div>
+               </div>
+            </div>
+            <div id="button-container">
+               <div>
+                  <div>
+                     <button id="addressFormInlineButton" type="button">
+<span>
+<span>Save Address</span>
+</span>
+</button>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </form>
+      <div id="footer-find-warehouse-block">
+         <label for="footer-search-field">Find a Warehouse</label>
+         <form id="WarehouseSearchForm" action="https://www.costco.com/warehouse-locations" novalidate="novalidate">
+            <div>
+               <input id="footer-search-field" type="search" name="location" tabindex="1" placeholder="City, state or zip" value=""
+title="Search">
+               <input type="submit" id="searchClear" value="Clear">
+               <input type="hidden" id="fromWLocSubmit" name="fromWLocSubmit" value="true">
+               <input type="hidden" id="numOfWarehouses" name="numOfWarehouses" value="10">
+            </div>
+         </form>
+      </div>
+      <div id="footer-email-offers-block">
+         <label for="footer-email-offers">Get Email Offers</label>
+         <form
+title="" action="https://www.costco.com/EmailSubscription" id="EmailOffersForm">
+            <div>
+               <input type="text" name="emailSignUp" id="footer-email-offers" placeholder="Enter your email">
+               <span>
+               <button type="submit" alt="Go">Go</button>
+               </span>
+            </div>
+         </form>
+      </div>
+      <input type="hidden" name="typeAheadDisabled" id="typeAheadDisabled" value="false">
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CostCo/ShippingAddress.html
@@ -0,0 +1,527 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <meta feature="9.1.2">
+      <title>Shipping</title>
+      <meta name="currentBuildNumber" content="3.0.29057.0">
+      <meta name="ServerName" content="www.costco.com">
+      <meta name="LocalAddress" content="xxx.xxx.xxx.48">
+      <meta name="LocalName" content="TP26">
+   </head>
+   <body>
+      <form name="ShipAsCompleteForm" method="post" action="https://www.costco.com/CostcoMultiShippingCmd" id="ShipAsCompleteForm">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="orderId" value="644156669">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="multiAddressShipping" value="false">
+         <input type="hidden" name="URL" value="CheckoutPaymentView">
+      </form>
+      <form name="NewAddressSingleShippingForm" method="post" action="https://www.costco.com/CostcoSelectShippingCmd" id="NewAddressSingleShippingForm">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="action" value="SingleShipping">
+         <input type="hidden" name="addressId" value="">
+         <input type="hidden" name="authToken" value="">
+      </form>
+      <form id="AddressFormModal-Form" name="AddressFormModal-Form" autocomplete="on" method="post">
+         <div>
+            <input type="hidden" name="addressType" value="S">
+            <p id="addressFormModalRequired" tabindex="-1">
+            <span>*</span> Required fields</p>
+            <div id="personName">
+               <div>
+<label for="addressFormModalFirstName">FIRST NAME<span>*</span>
+</label>
+                  <input id="addressFormModalFirstName" name="addressFormModalFirstName"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: FIRST NAME* parseable name: addressFormModalFirstName field signature: 2222266781 form signature: 8397269939060577503" type="text" maxlength="40"
+autofill-prediction="NAME_FIRST"
+>
+               </div>
+               <div>
+<label for="addressFormModalMiddleInitial">M.I.</label>
+                  <input id="addressFormModalMiddleInitial" name="addressFormModalMiddleInitial"
+title="overall type: NAME_MIDDLE_INITIAL server type: NAME_MIDDLE_INITIAL heuristic type: NAME_MIDDLE_INITIAL label: M.I. parseable name: addressFormModalMiddleInitial field signature: 3540652809 form signature: 8397269939060577503" type="text" maxlength="1"
+autofill-prediction="NAME_MIDDLE_INITIAL"
+>
+               </div>
+               <div>
+<label for="addressFormModalLastName">LAST NAME<span>*</span>
+</label>
+                  <input id="addressFormModalLastName" name="addressFormModalLastName"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: LAST NAME* parseable name: addressFormModalLastName field signature: 4218996568 form signature: 8397269939060577503" type="text" maxlength="40"
+autofill-prediction="NAME_LAST"
+>
+               </div>
+            </div>
+            <div>
+<label for="addressFormModalCompany">COMPANY NAME</label>
+               <input id="addressFormModalCompany" name="addressFormModalCompany" type="text" maxlength="40"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: COMPANY_NAME label: COMPANY NAME parseable name: addressFormModalCompany field signature: 1845178698 form signature: 8397269939060577503"
+autofill-prediction="COMPANY_NAME"
+>
+            </div>
+            <div>
+               <label for="addressFormModalCountry">COUNTRY<span>*</span>
+</label>
+               <select id="addressFormModalCountry" name="addressFormModalCountry"
+title="overall type: ADDRESS_HOME_COUNTRY server type: ADDRESS_HOME_COUNTRY heuristic type: ADDRESS_HOME_COUNTRY label: COUNTRY* parseable name: addressFormModalCountry field signature: 4052501735 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                  <option value="US">United States</option>
+               </select>
+            </div>
+            <div id="streetAddress">
+               <legend>
+<label for="addressFormModalAddressLine1">STREET ADDRESS<span>*</span>
+</label>
+</legend>
+               <div>
+                  <input id="addressFormModalAddressLine1" name="addressFormModalAddressLine1" placeholder="Address Line 1" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: STREET ADDRESS* parseable name: addressFormModalAddressLine1 field signature: 1532865404 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+               </div>
+               <div>
+                  <input id="addressFormModalAddressLine2" name="addressFormModalAddressLine2" placeholder="Address Line 2" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Address Line 2 parseable name: addressFormModalAddressLine2 field signature: 2315514959 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+               </div>
+            </div>
+            <div id="city">
+<label for="addressFormModalCity">CITY<span>*</span>
+</label>
+               <input id="addressFormModalCity" name="addressFormModalCity" type="text" maxlength="40"
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: CITY* parseable name: addressFormModalCity field signature: 4130865920 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+            </div>
+            <div id="stateAndZip">
+               <div>
+                  <label for="addressFormModalState">STATE / PROVINCE<span>*</span>
+</label>
+                  <select id="addressFormModalState" name="addressFormModalState"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: STATE / PROVINCE* parseable name: addressFormModalState field signature: 4026908515 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                     <option value="NO_STATE_TYPE_SELECTED" selected="selected">* Select</option>
+                     <option value="Aa">AA - Armed Forces America</option>
+                     <option value="Ae">AE - Armed Forces Europe</option>
+                     <option value="AL"> Alabama</option>
+                     <option value="AK"> Alaska</option>
+                     <option value="Ap">AP - Armed Forces Pacific</option>
+                     <option value="AZ"> Arizona</option>
+                     <option value="AR"> Arkansas</option>
+                     <option value="CA"> California</option>
+                     <option value="CO"> Colorado</option>
+                     <option value="CT"> Connecticut</option>
+                     <option value="DE"> Delaware</option>
+                     <option value="DC"> District of Columbia</option>
+                     <option value="FL"> Florida</option>
+                     <option value="GA"> Georgia</option>
+                     <option value="HI"> Hawaii</option>
+                     <option value="ID"> Idaho</option>
+                     <option value="IL"> Illinois</option>
+                     <option value="IN"> Indiana</option>
+                     <option value="IA"> Iowa</option>
+                     <option value="KS"> Kansas</option>
+                     <option value="KY"> Kentucky</option>
+                     <option value="LA"> Louisiana</option>
+                     <option value="ME"> Maine</option>
+                     <option value="MD"> Maryland</option>
+                     <option value="MA"> Massachusetts</option>
+                     <option value="MI"> Michigan</option>
+                     <option value="MN"> Minnesota</option>
+                     <option value="MS"> Mississippi</option>
+                     <option value="MO"> Missouri</option>
+                     <option value="MT"> Montana</option>
+                     <option value="NE"> Nebraska</option>
+                     <option value="NV"> Nevada</option>
+                     <option value="NH">New Hampshire</option>
+                     <option value="NJ">New Jersey</option>
+                     <option value="NM">New Mexico</option>
+                     <option value="NY">New York</option>
+                     <option value="NC">North Carolina</option>
+                     <option value="ND">North Dakota</option>
+                     <option value="OH"> Ohio</option>
+                     <option value="OK"> Oklahoma</option>
+                     <option value="OR"> Oregon</option>
+                     <option value="PA"> Pennsylvania</option>
+                     <option value="PR">Puerto Rico</option>
+                     <option value="RI">Rhode Island</option>
+                     <option value="SC">South Carolina</option>
+                     <option value="SD">South Dakota</option>
+                     <option value="TN"> Tennessee</option>
+                     <option value="TX"> Texas</option>
+                     <option value="UT"> Utah</option>
+                     <option value="VT"> Vermont</option>
+                     <option value="VA"> Virginia</option>
+                     <option value="WA"> Washington</option>
+                     <option value="WV">West Virginia</option>
+                     <option value="WI"> Wisconsin</option>
+                     <option value="WY"> Wyoming</option>
+                  </select>
+               </div>
+               <div>
+<label for="addressFormModalZip">ZIP / POSTAL CODE<span>*</span>
+</label>
+                  <input id="addressFormModalZip" name="addressFormModalZip" type="text" maxlength="10"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: ZIP / POSTAL CODE* parseable name: addressFormModalZip field signature: 2383002781 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+               </div>
+            </div>
+            <div id="phoneNumber">
+<label for="addressFormModalPhoneNumber">PHONE NUMBER<span>*</span>
+</label>
+               <input id="addressFormModalPhoneNumber" name="addressFormModalPhoneNumber" type="text" maxlength="32"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: PHONE NUMBER* parseable name: addressFormModalPhoneNumber field signature: 1884423068 form signature: 8397269939060577503"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+            </div>
+            <div id="email">
+<label for="addressFormModalEmail" id="addressFormModalEmailLabel">EMAIL<span>*</span>
+</label>
+               <input id="addressFormModalEmail" name="addressFormModalEmail" type="text" maxlength="40"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: EMAIL* parseable name: addressFormModalEmail field signature: 1977954575 form signature: 8397269939060577503"
+autofill-prediction="EMAIL_ADDRESS"
+>
+            </div>
+            <div id="addressNickname">
+<label for="addressFormModalAddressNickName">ADDRESS NICKNAME<span>*</span>
+<span>&nbsp;<span>?</span>
+</span>
+<span>The Address Nickname is a short name you create to help you easily identify this address within your address book.</span>
+</label>
+               <input id="addressFormModalAddressNickName" name="addressFormModalAddressNickName" type="text" maxlength="35" placeholder="Holly at school, Mom, etc."
+title="overall type: ADDRESS_HOME_STREET_ADDRESS server type: ADDRESS_HOME_STREET_ADDRESS heuristic type: UNKNOWN_TYPE label: ADDRESS NICKNAME* The Address Nickname is a short name you create to help you easily identify this a parseable name: addressFormModalAddressNickName field signature: 605446661 form signature: 8397269939060577503"
+autofill-prediction="ADDRESS_HOME_STREET_ADDRESS"
+>
+            </div>
+            <div>
+               <input name="saveAddressCheckbox" id="saveAddressCheckbox" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Add to address book. parseable name: saveAddressCheckbox field signature: 784127875 form signature: 8397269939060577503"
+autofill-prediction="UNKNOWN_TYPE"
+>
+<label for="saveAddressCheckbox">Add to address book.</label>
+            </div>
+            <div>
+               <input name="setDefaultCheckbox" id="setDefaultCheckbox" type="checkbox" disabled="true"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Save as default shipping address in Address Book parseable name: setDefaultCheckbox field signature: 1479095059 form signature: 8397269939060577503"
+autofill-prediction="UNKNOWN_TYPE"
+>
+<label for="setDefaultCheckbox" id="setDefaultCheckboxModalLabel">Save as default shipping address in Address Book</label>
+            </div>
+         </div>
+      </form>
+      <form id="AddressFormInline-Form" name="AddressFormInline-Form" autocomplete="on" method="post">
+         <div>
+            <input type="hidden" name="addressType" value="S">
+            <p id="addressFormInlineRequired" tabindex="-1">
+<span>*</span> Required fields</p>
+            <div id="personName">
+               <div>
+                  <label for="addressFormInlineFirstName">FIRST NAME<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineFirstName" name="addressFormInlineFirstName"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: FIRST NAME* parseable name: addressFormInlineFirstName field signature: 3938958812 form signature: 9207149805122018522" type="text" maxlength="40"
+autofill-prediction="NAME_FIRST"
+>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineMiddleInitial">M.I.</label>
+                  <div>
+                     <input id="addressFormInlineMiddleInitial" name="addressFormInlineMiddleInitial"
+title="overall type: NAME_MIDDLE_INITIAL server type: NAME_MIDDLE_INITIAL heuristic type: NAME_MIDDLE_INITIAL label: M.I. parseable name: addressFormInlineMiddleInitial field signature: 3429701181 form signature: 9207149805122018522" type="text" maxlength="1"
+autofill-prediction="NAME_MIDDLE_INITIAL"
+>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineLastName">LAST NAME<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineLastName" name="addressFormInlineLastName"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: LAST NAME* parseable name: addressFormInlineLastName field signature: 2108416564 form signature: 9207149805122018522" type="text" maxlength="40"
+autofill-prediction="NAME_LAST"
+>
+                  </div>
+               </div>
+            </div>
+            <div id="city">
+               <label for="addressFormInlineCompany">COMPANY NAME</label>
+               <div>
+                  <input id="addressFormInlineCompany" name="addressFormInlineCompany" type="text" maxlength="40"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: COMPANY_NAME label: COMPANY NAME parseable name: addressFormInlineCompany field signature: 4087238350 form signature: 9207149805122018522"
+autofill-prediction="COMPANY_NAME"
+>
+               </div>
+            </div>
+            <div>
+               <label for="addressFormInlineCountry">COUNTRY<span>*</span>
+</label>
+               <div>
+                  <select id="addressFormInlineCountry" name="addressFormInlineCountry"
+title="overall type: ADDRESS_HOME_COUNTRY server type: ADDRESS_HOME_COUNTRY heuristic type: ADDRESS_HOME_COUNTRY label: COUNTRY* parseable name: addressFormInlineCountry field signature: 695762362 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                     <option value="US">United States</option>
+                  </select>
+               </div>
+            </div>
+            <div id="streetAddress">
+               <legend>
+<label for="addressFormInlineAddressLine1">STREET ADDRESS<span>*</span>
+</label>
+               </legend>
+               <div>
+                  <input id="addressFormInlineAddressLine1" name="addressFormInlineAddressLine1" placeholder="Address Line 1" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: STREET ADDRESS* parseable name: addressFormInlineAddressLine1 field signature: 1040409778 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+               </div>
+               <input id="addressFormInlineAddressLine2" name="addressFormInlineAddressLine2" placeholder="Address Line 2" type="text" maxlength="30"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Address Line 2 parseable name: addressFormInlineAddressLine2 field signature: 1640842807 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+            </div>
+            <div id="city">
+               <label for="addressFormInlineCity">CITY<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlineCity" name="addressFormInlineCity" type="text" maxlength="40"
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: CITY* parseable name: addressFormInlineCity field signature: 2829321141 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+               </div>
+            </div>
+            <div id="state">
+               <div>
+                  <label for="addressFormInlineState">STATE / PROVINCE<span>*</span>
+</label>
+                  <div>
+                     <select id="addressFormInlineState" name="addressFormInlineState"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: STATE / PROVINCE* parseable name: addressFormInlineState field signature: 3295167441 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                        <option value="NO_STATE_TYPE_SELECTED" selected="selected">* Select</option>
+                        <option value="Aa">AA - Armed Forces America</option>
+                        <option value="Ae">AE - Armed Forces Europe</option>
+                        <option value="AL"> Alabama</option>
+                        <option value="AK"> Alaska</option>
+                        <option value="Ap">AP - Armed Forces Pacific</option>
+                        <option value="AZ"> Arizona</option>
+                        <option value="AR"> Arkansas</option>
+                        <option value="CA"> California</option>
+                        <option value="CO"> Colorado</option>
+                        <option value="CT"> Connecticut</option>
+                        <option value="DE"> Delaware</option>
+                        <option value="DC"> District of Columbia</option>
+                        <option value="FL"> Florida</option>
+                        <option value="GA"> Georgia</option>
+                        <option value="HI"> Hawaii</option>
+                        <option value="ID"> Idaho</option>
+                        <option value="IL"> Illinois</option>
+                        <option value="IN"> Indiana</option>
+                        <option value="IA"> Iowa</option>
+                        <option value="KS"> Kansas</option>
+                        <option value="KY"> Kentucky</option>
+                        <option value="LA"> Louisiana</option>
+                        <option value="ME"> Maine</option>
+                        <option value="MD"> Maryland</option>
+                        <option value="MA"> Massachusetts</option>
+                        <option value="MI"> Michigan</option>
+                        <option value="MN"> Minnesota</option>
+                        <option value="MS"> Mississippi</option>
+                        <option value="MO"> Missouri</option>
+                        <option value="MT"> Montana</option>
+                        <option value="NE"> Nebraska</option>
+                        <option value="NV"> Nevada</option>
+                        <option value="NH">New Hampshire</option>
+                        <option value="NJ">New Jersey</option>
+                        <option value="NM">New Mexico</option>
+                        <option value="NY">New York</option>
+                        <option value="NC">North Carolina</option>
+                        <option value="ND">North Dakota</option>
+                        <option value="OH"> Ohio</option>
+                        <option value="OK"> Oklahoma</option>
+                        <option value="OR"> Oregon</option>
+                        <option value="PA"> Pennsylvania</option>
+                        <option value="PR">Puerto Rico</option>
+                        <option value="RI">Rhode Island</option>
+                        <option value="SC">South Carolina</option>
+                        <option value="SD">South Dakota</option>
+                        <option value="TN"> Tennessee</option>
+                        <option value="TX"> Texas</option>
+                        <option value="UT"> Utah</option>
+                        <option value="VT"> Vermont</option>
+                        <option value="VA"> Virginia</option>
+                        <option value="WA"> Washington</option>
+                        <option value="WV">West Virginia</option>
+                        <option value="WI"> Wisconsin</option>
+                        <option value="WY"> Wyoming</option>
+                     </select>
+                  </div>
+               </div>
+               <div>
+                  <label for="addressFormInlineZip">ZIP / POSTAL CODE<span>*</span>
+</label>
+                  <div>
+                     <input id="addressFormInlineZip" name="addressFormInlineZip" type="text" maxlength="10"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: ZIP / POSTAL CODE* parseable name: addressFormInlineZip field signature: 3060672026 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                  </div>
+               </div>
+            </div>
+            <div id="phoneNumber">
+               <label for="addressFormInlinePhoneNumber">PHONE NUMBER<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlinePhoneNumber" name="addressFormInlinePhoneNumber" type="text" maxlength="32"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: PHONE NUMBER* parseable name: addressFormInlinePhoneNumber field signature: 1198968276 form signature: 9207149805122018522"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+               </div>
+            </div>
+            <div id="email">
+               <label for="addressFormInlineEmail" id="addressFormInlineEmailLabel">EMAIL<span>*</span>
+</label>
+               <div>
+                  <input id="addressFormInlineEmail" name="addressFormInlineEmail" type="text" maxlength="40" value="formautofilltester@gmail.com"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: EMAIL* parseable name: addressFormInlineEmail field signature: 2460631353 form signature: 9207149805122018522"
+autofill-prediction="EMAIL_ADDRESS"
+>
+               </div>
+            </div>
+            <div id="addressNickname">
+               <label for="addressFormInlineAddressNickName">ADDRESS NICKNAME<span>*</span>
+<span>&nbsp;<span>?</span>
+</span>
+<span>The Address Nickname is a short name you create to help you easily identify this address within your address book.</span>
+</label>
+               <div>
+                  <input id="addressFormInlineAddressNickName" name="addressFormInlineAddressNickName" type="text" maxlength="35" placeholder="Holly at school, Mom, etc."
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: ADDRESS NICKNAME* ?The Address Nickname is a short name you create to help you easily identify this parseable name: addressFormInlineAddressNickName field signature: 2948011243 form signature: 9207149805122018522"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               </div>
+            </div>
+            <div>
+               <input name="saveAddressCheckboxInline" id="saveAddressCheckboxInline" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Add to address book. parseable name: saveAddressCheckboxInline field signature: 3323717546 form signature: 9207149805122018522"
+autofill-prediction="UNKNOWN_TYPE" checked="checked"
+>
+<label for="saveAddressCheckboxInline">Add to address book.</label>
+            </div>
+            <div>
+               <input name="setDefaultCheckboxInline" id="setDefaultCheckboxInline" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Save as default shipping address in Address Book parseable name: setDefaultCheckboxInline field signature: 2923970107 form signature: 9207149805122018522"
+autofill-prediction="UNKNOWN_TYPE"
+>
+<label for="setDefaultCheckboxInline" id="setDefaultCheckboxInlineLabel">Save as default shipping address in Address Book</label>
+            </div>
+            <div id="defaultAddressChangeInline">
+               <div id="WC_ContentAreaESpot_div_1_rx-DefaultAddrConfirm">
+                  <div id="WC_ContentAreaESpot_div_2_rx-DefaultAddrConfirm">
+                     [rx-DefaultAddrConfirm]
+                  </div>
+                  <div>
+                     <ul>
+                        <li value="1"> You are changing your Costco Default Shipping Address. &nbsp;All future orders from Costco.com, including Pharmacy Prescription Orders, will be sent to this Address.
+                        </li>
+                     </ul>
+                  </div>
+               </div>
+            </div>
+            <div>
+               <input name="copyShippingCheckboxInline" id="copyShippingCheckboxInline" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Use as my default billing address parseable name: copyShippingCheckboxInline field signature: 1184640612 form signature: 9207149805122018522"
+autofill-prediction="UNKNOWN_TYPE"
+>
+<label for="copyShippingCheckboxInline" id="copyShippingCheckboxInlineLabel">Use as my default billing address</label>
+            </div>
+            <div id="billingNicknameDiv">
+               <label>Billing Address Nickname
+               <span>*</span>
+<span>&nbsp;<span>?</span>
+</span>
+<span>The Address Nickname is a short name you create to help you easily identify this address within your address book.</span>
+</label>
+               <input type="text" id="billingNickname" name="billingNickname" maxlength="40" value="New Billing"
+title="overall type: ADDRESS_HOME_STREET_ADDRESS server type: ADDRESS_HOME_STREET_ADDRESS heuristic type: UNKNOWN_TYPE label: Billing Address Nickname * ?The Address Nickname is a short name you create to help you easily ident parseable name: billingNickname field signature: 4200328961 form signature: 9207149805122018522"
+autofill-prediction="ADDRESS_HOME_STREET_ADDRESS"
+>
+            </div>
+            <div id="button-container">
+               <div>
+                  <div>
+<button id="addressFormInlineButton" type="button">
+                     <span>
+<span>Ship to this Address</span>
+</span>
+</button>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </form>
+      <div id="footer-find-warehouse-block">
+         <label for="footer-search-field" >Find a Warehouse</label>
+         <form id="WarehouseSearchForm" action="https://www.costco.com/warehouse-locations" novalidate="novalidate" name="WarehouseSearchForm">
+            <div>
+               <input id="footer-search-field" type="search" name="location" tabindex="1" placeholder="City, state or zip" value=""
+title="Search">
+               <input type="submit" id="searchClear" value="Clear">
+               <input type="hidden" id="fromWLocSubmit" name="fromWLocSubmit" value="true">
+               <input type="hidden" id="numOfWarehouses" name="numOfWarehouses" value="10">
+            </div>
+         </form>
+      </div>
+      <div id="footer-email-offers-block">
+         <label for="footer-email-offers">Get Email Offers</label>
+         <form
+title="" action="https://www.costco.com/EmailSubscription" id="EmailOffersForm" name="EmailOffersForm">
+            <div>
+               <input type="text" name="emailSignUp" id="footer-email-offers" placeholder="Enter your email">
+<span>
+<button type="submit" alt="Go">
+<span>
+<span>Go</span>
+</span>
+</button>
+</span>
+            </div>
+         </form>
+      </div>
+      <div>
+         <label>Follow Us</label>
+         <ul>
+            <li>
+<a>
+<label>facebook</label>
+</a>
+</li>
+            <li>
+<a>
+<label>pinterest</label>
+</a>
+</li>
+         </ul>
+      </div>
+      <form name="SingleShippingForm" method="post" action="https://www.costco.com/CostcoSelectShippingCmd" id="SingleShippingForm">
+         <input type="hidden" name="storeId" value="10301">
+         <input type="hidden" name="langId" value="-1">
+         <input type="hidden" name="catalogId" value="10701">
+         <input type="hidden" name="action" value="SingleShipping">
+         <input type="hidden" name="addressId" value="">
+         <input type="hidden" name="authToken" value="">
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/CostCo/SignIn.html
@@ -0,0 +1,374 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <title>Sign In</title>
+      <meta name="currentBuildNumber" content="3.0.29057.0">
+      <meta name="ServerName" content="www.costco.com">
+      <meta name="LocalAddress" content="xxx.xxx.xxx.48">
+      <meta name="LocalName" content="TP26">
+   </head>
+   <body waid71fa0d88-5390-4b5b-a2f4-e45fa93d85e2="SA password protect entry checker">
+      <form action="https://www.costco.com/CatalogSearch">
+         <input type="submit" value="Submit">
+<label for="search-field">Search</label>
+         <div>
+            <label>Search Icon</label>
+<span style=/"position: relative; display: inline-block;">
+            <input type="text" tabindex="-1"
+title="Search" readonly autocomplete="off" spellcheck="false" dir="ltr">
+            <input id="search-field" type="text" name="keyword" tabindex="1" placeholder="Search Costco"
+title="Search" autocomplete="off" spellcheck="false" dir="auto" >
+            </span>
+            <div>
+               <div>
+</div>
+            </div>
+         </div>
+         <input type="submit" value="Submit" tabindex="-1">
+      </form>
+      <form id="warehouse_locator_search" action='https://www.costco.com/warehouse-locations'>
+         <div>
+            <input id="warehouse-search-field"
+title="Warehouse Search Field" name="location" type="search" value=""/>
+         </div>
+         <input type="hidden" name="tiresCheckout" value="" />
+         <input type="hidden" name="orderitemId" value="" />
+         <input type="hidden" name="storeId" value="10301" />
+         <input type="hidden" name="catalogId" value="10701" />
+         <input type="hidden" name="fromPage" value="" />
+         <label for="locator_search_filters">Show Warehouses with:</label>
+         <div id="locator_search_filters">
+            <div>
+               <div>
+                  <input id="hasGas" type="checkbox" name="hasGas" value="true"
+title="Gas Station"  />
+                  <label for="hasGas"
+title="Gas Station">
+<i>
+</i>
+                  <span>Gas Station</span>
+                  </label>
+               </div>
+               <div>
+                  <input id="hasTires" type="checkbox" name="hasTires" value="true"
+title="Tire Service"   />
+                  <label for="hasTires"
+title="Tire Service">
+<i>
+</i>
+                  <span>Tire Center</span>
+                  </label>
+               </div>
+               <div>
+                  <input id="hasFood" type="checkbox" name="hasFood" value="true"
+title="Food Court"  />
+                  <label for="hasFood"
+title="Food Court">
+<i>
+</i>
+                  <span>Food Court</span>
+                  </label>
+               </div>
+               <div>
+                  <input id="hasHearing" type="checkbox" name="hasHearing" value="true"
+title="Hearing Aids"  />
+                  <label for="hasHearing"
+title="Hearing Aids">
+<i>
+</i>
+                  <span>Hearing Aids</span>
+                  </label>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <input id="hasOptical" type="checkbox" name="hasOptical" value="true"
+title="Optical Dept" />
+                  <label for="hasOptical"
+title="Optical Dept">
+<i>
+</i>
+                  <span>Optical</span>
+                  </label>
+               </div>
+               <div>
+                  <input id="hasPharmacy" type="checkbox" name="hasPharmacy" value="true"
+title="Pharmacy"  />
+                  <label for="hasPharmacy"
+title="Pharmacy">
+<i>
+</i>
+                  <span>Pharmacy</span>
+                  </label>
+               </div>
+               <div>
+                  <input id="hasBusiness" type="checkbox" name="hasBusiness" value="true"
+title="Business"  />
+                  <label for="hasBusiness"
+title="Business">
+<i>
+</i>
+                  <span>Business Center</span>
+                  </label>
+               </div>
+            </div>
+         </div>
+         <input type="hidden" id="fromWLocSubmit" name="fromWLocSubmit" value="true" />
+         <input type="hidden" id="numOfWarehouses" name="numOfWarehouses" value="10" />
+         <input type="submit" value="Find a Warehouse"/>
+      </form>
+      <div id="email-offer-popover-container">
+         <label for="header_emailSignUpEmail">Get Email Offers</label>
+         <label>Sign up for great offers from Costco.com!</label>
+         <form
+title="" action="/EmailSubscription" id="header_emailSignup">
+            <div>
+               <input id="header_emailSignUpEmail" type="text" name="emailSignUp" placeholder="Enter your email">
+               <span>
+               <button type="submit" alt="Go">Go</button>
+               </span>
+            </div>
+         </form>
+      </div>
+      <form action="https://www.costco.com/Logoff?URL=TopCategoriesDisplay">
+         <li>
+            <input type="submit" value="Sign Out"/>
+         </li>
+      </form>
+      <form action="/EmailSubscription">
+         <div>
+            <label for="modal_email_offers">Sign up for great offers from Costco.com!</label>
+            <input type="text" id="modal_email_offers" name="emailSignUp" placeholder="Enter your email"/>
+         </div>
+      </form>
+      <form
+title="" name="LogonForm" method="post" action="https://www.costco.com/Logon" id="LogonForm">
+         <input type="hidden" name="storeId" value="10301" id="WC_AccountDisplay_FormInput_storeId_In_Logon_1">
+<input type="hidden" name="catalogId" value="10701" id="WC_AccountDisplay_FormInput_catalogId_In_Logon_1">
+<input type="hidden" name="langId" value="-1" id="WC_AccountDisplay_FormInput_langId_In__1">
+<input type="hidden" name="reLogonURL" value="LogonForm" id="WC_AccountDisplay_FormInput_reLogonURL_In_Logon_1">
+<input type="hidden" name="isPharmacy" value="" id="WC_AccountDisplay_FormInput_isPharmacy_In_Logon_1">
+<input type="hidden" name="authToken" value="312404731%2cKsqvty%2bpMJ%2bCAl3XeIkCxSEgLa4%3d">
+<input type="hidden" name="URL" value="CheckOutCmd?orderId=644156669&amp;storeId=10301&amp;storeId=10301&amp;authToken=312404731%252cKsqvty%252bpMJ%252bCAl3XeIkCxSEgLa4%253d&amp;authToken=312404731%252cKsqvty%252bpMJ%252bCAl3XeIkCxSEgLa4%253d&amp;orderErrMsgObj=%7B%7D&amp;itemMessage=1.0&amp;langId=-1&amp;langId=-1&amp;catalogId=10701&amp;catalogId=10701" id="WC_AccountDisplay_FormInput_URL_In_Logon_1">
+         <p>Please provide your email address and password to access your account.†
+         </p>
+         <div>
+<label for="logonId">Email Address<span>*</span>
+</label>
+<input id="logonId" name="logonId" maxlength="254" type="text"
+title="Email Address" value="">
+<br>
+         </div>
+         <div>
+            <label for="logonPassword">Password:<span>*</span>
+</label>
+            <input name="logonPassword" id="logonPassword" maxlength="40" type="password" autocomplete="off"
+title="Password:">
+            <p>Passwords are case sensitive.</p>
+            <br>
+         </div>
+         <div>
+            <input id="option1" name="option1" type="checkbox">
+<label for="option1">Remember me</label>
+         </div>
+         <input type="hidden" name="submitButton" value="signIn">
+         <div>
+<button type="submit"
+title="Sign in">
+<span>
+<span>Sign in</span>
+</span>
+</button>
+</div>
+      </form>
+      <form
+title="Reset password" name="ResetPasswordForm" method="post" action="https://www.costco.com/ResetPassword" id="ResetPasswordForm">
+         <input type="hidden" name="challengeAnswer" value="-" id="WC_PasswordResetForm_FormInput_challengeAnswer_In__1">
+         <input type="hidden" name="storeId" value="10301" id="WC_PasswordResetForm_FormInput_storeId_In__1">
+<input type="hidden" name="catalogId" value="10701" id="WC_PasswordResetForm_FormInput_catalogId_In__1">
+<input type="hidden" name="langId" value="-1" id="WC_PasswordResetForm_FormInput_langId_In__1">
+<input type="hidden" name="state" value="passwdconfirm" id="WC_PasswordResetForm_FormInput_state_In__1">
+<input type="hidden" name="URL" value="ResetPasswordSuccessView" id="WC_PasswordResetForm_FormInput_URL_In__1">
+<input type="hidden" name="errorViewName" value="RememberMeLogonFormView" id="WC_PasswordResetForm_FormInput_errorViewName_In__1">
+<input type="hidden" name="subject" value="New Costco.com Password" id="WC_PasswordResetForm_FormInput_subject_In__1">
+<input type="hidden" name="sender" value="no-reply@costco.com" id="WC_PasswordResetForm_FormInput_sender_In__1">
+<input type="hidden" name="isPharmacy" value="" id="WC_PasswordResetForm_FormInput_isPharmacy_In_Logon_1">
+         <p>To reset your password, enter the email address associated with your Costco.com account. Instructions to create a new password will be sent to your address.
+         </p>
+         <div>
+<label for="forgotPassword_email">Email address<span>*</span>
+</label>
+<input id="forgotPassword_email" name="logonId" type="text"
+title="Email address">
+         </div>
+         <input type="hidden" name="submitButton" value="forgotPassword">
+         <div>
+<button type="submit"
+title="Reset password">
+<span>
+<span>Reset password</span>
+</span>
+</button>
+</div>
+      </form>
+      <form
+title="" name="RegisterForm" method="post" action="https://www.costco.com/UserRegistrationAdd" id="RegisterForm">
+         <input type="hidden" name="new" value="Y" id="WC_UserRegistrationAddForm_FormInput_new_In_Register_1">
+         <input type="hidden" name="storeId" value="10301" id="WC_UserRegistrationAddForm_FormInput_storeId_In_Register_1">
+         <input type="hidden" name="catalogId" value="10701" id="WC_UserRegistrationAddForm_FormInput_catalogId_In_Register_1">
+         <input type="hidden" name="langId" value="-1" id="WC_UserRegistrationAddForm_FormInput_langId_In__1">
+<input type="hidden" name="URL" value="CheckOutCmd?orderId=644156669&amp;storeId=10301&amp;storeId=10301&amp;authToken=312404731%252cKsqvty%252bpMJ%252bCAl3XeIkCxSEgLa4%253d&amp;authToken=312404731%252cKsqvty%252bpMJ%252bCAl3XeIkCxSEgLa4%253d&amp;orderErrMsgObj=%7B%7D&amp;itemMessage=1.0&amp;langId=-1&amp;langId=-1&amp;catalogId=10701&amp;catalogId=10701" id="WC_UserRegistrationAddForm_FormInput_URL_In_Register_1">
+         <input type="hidden" name="userField1" value="" id="WC_UserRegistrationAddForm_FormInput_userField1_In_Register_1">
+         <input type="hidden" name="addressField1" value="" id="WC_UserRegistrationAddForm_FormInput_addressField1_In_Register_1">
+         <input type="hidden" name="addressType" value="B" id="WC_UserRegistrationAddForm_FormInput_addressType_In_Register_1">
+         <input type="hidden" name="nickName" value="Self Address" id="WC_UserRegistrationAddForm_FormInput_nickName_In_Register_1">
+         <input type="hidden" name="errorViewName" value="LogonForm" id="WC_UserRegistrationAddForm_FormInput_errorViewName_In_Register_1">
+         <input type="hidden" name="validated" id="validated" value="true">
+         <input type="hidden" name="primary" value="false" id="WC_UserRegistrationAddForm_FormInput_primary_In_Register_1">
+         <input type="hidden" name="challengeQuestion" value="-" id="WC_UserRegistrationAddForm_FormInput_challengeQuestion_In_Register_1">
+         <input type="hidden" name="challengeAnswer" value="-" id="WC_UserRegistrationAddForm_FormInput_challengeAnswer_In_Register_1">
+         <input type="hidden" name="fromPage" value="LogonForm" id="WC_UserRegistrationAddForm_FormInput_fromPage_In_Register_1">
+         <input type="hidden" name="isPharmacy" value="" id="WC_UserRegistrationAddForm_FormInput_isPharmacy_In_Logon_1">
+         <input type="hidden" name="page" value="account" id="WC_UserRegistrationAddForm_FormInput_page_In_Register_1">
+         <input type="hidden" name="parentMember" value="o=costco us bc sellers,o=costco na sellers,o=extended sites seller organization,o=root organization">
+         <p>Enter your email address and create a password below to register.†
+         </p>
+         <div>
+<span>*</span> Required fields
+         </div>
+         <div>
+<label for="register_email1">Email Address<span>*</span>
+</label>
+<input id="register_email1" name="email1" type="text" maxlength="40"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: Email Address* parseable name: email1 field signature: 1119374200 form signature: 14385182823106756929" value=""
+autofill-prediction="EMAIL_ADDRESS"
+>
+         </div>
+         <div id="passwordField">
+            <label for="register_logonPassword">Password:</label>
+<input id="register_logonPassword" name="logonPassword" maxlength="20" type="password" value=""
+title="overall type: ACCOUNT_CREATION_PASSWORD server type: ACCOUNT_CREATION_PASSWORD heuristic type: UNKNOWN_TYPE label: Password: parseable name: logonPassword field signature: 354853082 form signature: 14385182823106756929"
+autofill-prediction="ACCOUNT_CREATION_PASSWORD"
+>
+            <div id="PasswordStrength">
+               <img src="./Sign%20In_files/Password_Strength_Arrow.png">
+               <div>
+                  <p>Password must meet the following:</p>
+                  <div>
+                     <ul>
+                        <li>Use between 8 and 20 characters</li>
+                        <li>Include at least one letter</li>
+                        <li>Does not contain blank spaces or the following special characters: &lt; &gt; " \ .
+                        </li>
+                        <li>Passwords match</li>
+                     </ul>
+                  </div>
+                  <p>Password Strength : <span id="strengthText">
+</span>
+</p>
+                  <ul>
+                     <li>Too Short</li>
+                     <li>Weak</li>
+                     <li>Fair</li>
+                     <li>Good</li>
+                     <li>Strong</li>
+                  </ul>
+                  <p id="passwordStrengthBar">
+</p>
+                  <p>To improve strength, increase password length and use capital letters, numbers, and special characters
+                     (except &lt; &gt; " \ .)
+                  </p>
+               </div>
+            </div>
+         </div>
+         <div>
+<label for="register_logonPasswordVerify">Confirm Password<span>*</span>
+</label>
+<input id="register_logonPasswordVerify" name="logonPasswordVerify" maxlength="20" type="password" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Confirm Password* parseable name: logonPasswordVerify field signature: 1976176530 form signature: 14385182823106756929"
+autofill-prediction="UNKNOWN_TYPE"
+>
+</div>
+         <div>
+<label for="register_userField2">Costco Membership Number</label>
+<input id="register_userField2" name="userField2" type="text" maxlength="16"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Costco Membership Number parseable name: userField2 field signature: 1051463506 form signature: 14385182823106756929" value=""
+autofill-prediction="UNKNOWN_TYPE"
+>
+         </div>
+         <p>
+<b>Non-members may be assessed an additional surcharge. The surcharge does not apply to prescription items. Executive Members need to provide a membership number to receive credit for their 2% rebate.</b>
+         </p>
+         <div>
+            <input id="register_sendMeEmail" name="sendMeEmail" type="checkbox" checked="checked"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Yes, I would like to receive emails about special offers and new product information from Costco. Co parseable name: sendMeEmail field signature: 3147026083 form signature: 14385182823106756929"
+autofill-prediction="UNKNOWN_TYPE"
+>
+<label for="register_sendMeEmail">Yes, I would like to receive emails about special offers and new product information from Costco. Costco will not rent or sell your email address.</label>
+         </div>
+         <input name="submitButton" value="Register" type="hidden">
+         <div>
+<button type="submit"
+title="Register">
+<span>
+<span>Register</span>
+</span>
+</button>
+</div>
+      </form>
+      <form action="https://www.costco.com/EmailSubscription" id="footer_emailSignup" name="footer_emailSignup">
+         <input id="footer_emailSignUpEmail" name="emailSignUp" type="text">
+      </form>
+      <div id="language-region-modal-container">
+         <div>
+            ???LANGUAGE_REGION_MODAL_TITLE???
+         </div>
+         <div>
+            <div id="language-radio-buttons">
+               <p>???LANGUAGE_REGION_MODAL_CHOOSE_LANGUAGE???</p>
+               <label>
+               <input type="radio" name="language" value="-1">???HEADER_LANGUAGE_NAME_-1???</label>
+            </div>
+            <hr>
+            <div id="region-radio-buttons">
+               <p>???LANGUAGE_REGION_MODAL_CHOOSE_REGION???</p>
+               <div>
+                  <label>
+                  <input type="radio" name="region" value="AB">Alberta - AB</label>
+                  <label>
+                  <input type="radio" name="region" value="BC">British Columbia - BC</label>
+                  <label>
+                  <input type="radio" name="region" value="MB">Manitoba - MB</label>
+                  <label>
+                  <input type="radio" name="region" value="NB">New Brunswick - NB</label>
+                  <label>
+                  <input type="radio" name="region" value="NL">Newfoundland and Labrador - NL</label>
+                  <label>
+                  <input type="radio" name="region" value="NT">Northwest Territories - NT</label>
+                  <label>
+                  <input type="radio" name="region" value="NS">Nova Scotia - NS</label>
+               </div>
+               <div>
+                  <label>
+                  <input type="radio" name="region" value="NU">Nunavut - NU</label>
+                  <label>
+                  <input type="radio" name="region" value="ON">Ontario - ON</label>
+                  <label>
+                  <input type="radio" name="region" value="PE">Prince Edward Island - PE</label>
+                  <label>
+                  <input type="radio" name="region" value="QC">Quebec - QC</label>
+                  <label>
+                  <input type="radio" name="region" value="SK">Saskatchewan - SK</label>
+                  <label>
+                  <input type="radio" name="region" value="YT">Yukon - YT</label>
+               </div>
+            </div>
+            <div>
+               <input id="language-region-set" type="submit" value="???LANGUAGE_REGION_MODAL_SUBMIT???">
+            </div>
+         </div>
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/HomeDepot/Checkout_ShippingPayment.html
@@ -0,0 +1,381 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <title>The Home Depot - Checkout</title>
+   </head>
+   <body>
+      <checkout-form name="pickupDetailsSection">
+         <shipping>
+            <div>
+               <hd-address type="shipping">
+                  <hd-address-field label="Shipping Address" type="type">
+                     <div name="addressFieldForm">
+                        <div>
+                           <div>
+                              <div>
+                                 <hd-name-field name="firstName" label="First Name" analytics-tag="pickup options">
+                                    <span name="firstName">
+                                       <label for="inputField">
+<span>First Name</span>
+</label>
+<input type="text" id="firstName" name="inputField" maxlength="30" placeholder="" required="required">
+                                    </span>
+                                 </hd-name-field>
+                              </div>
+                              <div>
+                                 <hd-name-field name="lastName" label="Last Name" analytics-tag="pickup options">
+                                    <span name="lastName">
+                                       <label for="inputField">
+<span>Last Name</span>
+</label>
+<input type="text" id="lastName" name="inputField" maxlength="30" placeholder="" required="required">
+                                    </span>
+                                 </hd-name-field>
+                              </div>
+                           </div>
+                           <div>
+                              <div>
+                                 <hd-email-field name="emailInput" label="Email" placeholder="you@domain.com" analytics-tag="pickup options">
+                                    <span name="emailInput">
+                                       <label for="inputField">
+<span>Email</span>
+</label>
+<input id="emailInput" type="email" name="inputField" placeholder="you@domain.com" required="required">
+                                    </span>
+                                 </hd-email-field>
+                              </div>
+                           </div>
+                           <div>
+                              <create-account>
+                                 <div>
+                                    <div>
+                                       <div>
+<span role="button" tabindex="0">Create an account</span> to track your order history and check out faster - all we need is a password.</div>
+                                       <div>
+                                          <p>Check out faster, access past orders, and organize products into lists.</p>
+                                       </div>
+                                    </div>
+                                    <div>
+                                       <div>
+                                          <hd-password-field label="Password" name="password">
+<span name="hdPasswordField">
+<label for="textPasswordInput">
+<span>Password</span>
+</label>
+<input type="password" name="inputField">
+<span>
+</span>
+</span>
+</hd-password-field>
+                                       </div>
+                                       <div>
+                                          <hd-password-field name="confirmPassword" label="Confirm Password">
+<span name="hdPasswordField">
+<label for="textPasswordInput">
+<span>Confirm Password</span>
+</label>
+<input type="password" name="inputField">
+<span>
+</span>
+</span>
+</hd-password-field>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <hd-check-box field-value="" label="SHOW PASSWORD" tab-index-hd="-1">
+                                                <div>
+                                                   <div>
+<input tabindex="-1" type="checkbox" name="hdCheckBox_3" id="hdCheckBox_3">
+<label for="hdCheckBox_3">SHOW PASSWORD</label>
+</div>
+                                                </div>
+                                             </hd-check-box>
+                                          </div>
+                                          <div>
+                                             <span>Passwords are case sensitive and must be at least 8 characters.</span>
+                                             <div>
+                                                <span>Create a strong password by:</span>
+                                                <ul>
+                                                   <li>Including numbers or symbols</li>
+                                                   <li>Mixing upper/lowercase</li>
+                                                </ul>
+                                             </div>
+                                          </div>
+                                          <div>
+<a target="_blank">Terms &amp; Conditions</a> &nbsp;|&nbsp; <a target="_blank">Privacy &amp; Security</a>
+</div>
+                                       </div>
+                                       <create-account-button>
+</create-account-button>
+                                    </div>
+                                 </div>
+                              </create-account>
+                           </div>
+                           <div>
+                              <div>
+                                 <hd-phone-field name="phone" label="Phone" analytics-tag="pickup options">
+                                    <span name="phone">
+                                       <label for="inputField">
+<span>Phone</span>
+</label>
+<input id="phone" name="inputField" type="tel" inputmode="numeric" placeholder="(___) ___-____" required="required">
+                                    </span>
+                                 </hd-phone-field>
+                              </div>
+                           </div>
+                        </div>
+                        <div>
+                           <div>
+                              <div>
+                                 <label for="billingAddress">
+<span>Shipping Address</span>
+</label>
+                              </div>
+                              <span name="streetInput">
+                                 <hd-type-ahead id="billingAddress" name="billingAddress" label="Billing Street Address" placeholder="Address Line 1" pause="700" input-class="form-input__field">
+                                    <div>
+                                       <input id="billingAddress_value" name="billingAddress" type="text" maxlength="30" placeholder="Address Line 1" required="">
+                                    </div>
+                                 </hd-type-ahead>
+                              </span>
+                           </div>
+                        </div>
+                        <div>
+<span role="button" tabindex="0">Add an apartment, suite, building, etc.</span>
+</div>
+                        <div>
+                           <div>
+                              <span name="zipInput">
+                                 <label for="zip">
+<span>ZIP Code</span>
+</label>
+<input type="tel" name="zip" maxlength="5" required="">
+                              </span>
+                           </div>
+                           <div>
+                              <span>
+                                 <label>
+<span>City, State</span>
+</label>
+                                 <span>
+<b>MOUNTAIN VIEW, CA</b>
+</span>
+                              <div>
+                                 <span name="stateInput">
+                                    <select id="cityStateListSelector" autocomplete="billing street-address" name="pickupLocation">
+                                       <option value="? object:null ?" selected="selected">
+</option>
+                                    </select>
+                                 </span>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </hd-address-field>
+               </hd-address>
+               <div>
+                  <hd-check-box field-value="checkoutFlags.hideBillingAddress" label="Use as Billing Address" checked="checked">
+                     <div>
+                        <div>
+<input tabindex="" type="checkbox" name="hdCheckBox_1" id="hdCheckBox_1" checked="checked">
+<label for="hdCheckBox_1">Use as Billing Address</label>
+</div>
+                     </div>
+                  </hd-check-box>
+               </div>
+            </div>
+         </shipping>
+      </checkout-form>
+      <card-field form-is-valid="formIsValid">
+         <div name="cardForm">
+            <div>
+<input name="expiryMonth" type="tel" autocomplete="cc-exp-month" tabindex="-1">
+<input name="expiryYear" type="tel" autocomplete="cc-exp-year" tabindex="-1">
+</div>
+            <div>
+               <div>
+                  <span>Payment</span>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <input type="radio" value="PayPal" id="payPal" name="paymentOptions">
+                  <label for="payPal" tabindex="10">
+                     <span>
+</span>
+                     <div>
+</div>
+                  </label>
+               </div>
+               <div>
+<input type="radio" select-payment="" value="creditCard" id="creditCard" name="paymentOptions" checked="checked">
+<label for="creditCard" tabindex="10">
+<span>
+</span>Credit Card</label>
+</div>
+               <div>
+                  <span>
+                     <label>
+                     </label>
+                     <input id="cardNumber" name="cardNumber" type="tel" mask-field="" mask="0000 0000 0000 0000 0000 0" maxlength="26" placeholder="Enter credit card number" required="required">
+<span id="ccIcon" tabindex="-1" role="button">
+</span>
+                  </span>
+               </div>
+               <div>
+                  <div>
+                     <div>
+                        <div>
+                           <span>Expiration</span>
+                           <span>
+                              <select id="ccMonth" name="ccMonth" required="">
+                                 <option value="" selected="selected">Month</option>
+                                 <option label="01 - January" value="object:17">01 - January</option>
+                                 <option label="02 - February" value="object:18">02 - February</option>
+                                 <option label="03 - March" value="object:19">03 - March</option>
+                                 <option label="04 - April" value="object:20">04 - April</option>
+                                 <option label="05 - May" value="object:21">05 - May</option>
+                                 <option label="06 - June" value="object:22">06 - June</option>
+                                 <option label="07 - July" value="object:23">07 - July</option>
+                                 <option label="08 - August" value="object:24">08 - August</option>
+                                 <option label="09 - September" value="object:25">09 - September</option>
+                                 <option label="10 - October" value="object:26">10 - October</option>
+                                 <option label="11 - November" value="object:27">11 - November</option>
+                                 <option label="12 - December" value="object:28">12 - December</option>
+                              </select>
+                           </span>
+                        </div>
+                     </div>
+                     <div>
+                        <div>
+                           <span>
+                              <select id="ccYear" name="ccYear" required="">
+                                 <option value="" selected="selected">Year</option>
+                                 <option label="2017" value="object:29">2017</option>
+                                 <option label="2018" value="object:30">2018</option>
+                                 <option label="2019" value="object:31">2019</option>
+                                 <option label="2020" value="object:32">2020</option>
+                                 <option label="2021" value="object:33">2021</option>
+                                 <option label="2022" value="object:34">2022</option>
+                                 <option label="2023" value="object:35">2023</option>
+                                 <option label="2024" value="object:36">2024</option>
+                                 <option label="2025" value="object:37">2025</option>
+                                 <option label="2026" value="object:38">2026</option>
+                                 <option label="2027" value="object:39">2027</option>
+                                 <option label="2028" value="object:40">2028</option>
+                                 <option label="2029" value="object:41">2029</option>
+                                 <option label="2030" value="object:42">2030</option>
+                                 <option label="2031" value="object:43">2031</option>
+                                 <option label="2032" value="object:44">2032</option>
+                                 <option label="2033" value="object:45">2033</option>
+                                 <option label="2034" value="object:46">2034</option>
+                                 <option label="2035" value="object:47">2035</option>
+                              </select>
+                           </span>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+                     <span>
+                        <label>
+                           <span>
+                              CVV (on back)
+                           </span>
+                        </label>
+                        <input id="cvv" name="cvv" type="tel" placeholder="ñññ" minlength="3" required="">
+<span id="ccIcon">
+</span>
+                     </span>
+                  </div>
+               </div>
+               <div>
+                  <span role="button" tabindex="0">Apply a Gift Card</span>
+                  <span>&nbsp;|&nbsp;</span>
+                  <span role="button" tabindex="0">Have a PO/Job Code for this order?</span>
+               </div>
+            </div>
+            <div>
+            </div>
+            <div>
+            </div>
+         </div>
+      </card-field>
+      <base>
+      <div>
+         <ui-view>
+            <div id="checkout" analytics="">
+               <div name="checkout">
+                  <div>
+                     <div>
+                        <div>
+                           <myapron-display>
+                              <div>
+                                 <div>
+<span name="myApronID">
+<label for="myapron">
+<span>myApron ID (Optional)</span>
+</label>
+<input type="tel" name="myapron" maxlength="10">
+</span>
+</div>
+                              </div>
+                           </myapron-display>
+                           <email-subscribe>
+                              <div>
+                                 <div>
+                                    <hd-check-box field-value="user.emailSubscribed" name="emailSubscribed" label="Yes, I would like to receive emails about unadvertised &amp; online only specials, new products and store promotions." checked="true">
+                                       <div>
+                                          <div>
+<input tabindex="" type="checkbox" name="emailSubscribed" id="hdCheckBox_2" checked="checked">
+<label for="hdCheckBox_2">Yes, I would like to receive emails about unadvertised &amp; online only specials, new products and store promotions.</label>
+</div>
+                                       </div>
+                                    </hd-check-box>
+                                 </div>
+                              </div>
+                           </email-subscribe>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <right-rail pick-up-options="pickUpOptions" messages="checkoutModel.messagesSummary">
+                     <div>
+                        <div>
+                           <promotions-summary promotions="order.promotionsModel" messages="messages">
+                              <div name="promoForm">
+                                 <div>
+<span role="button" tabindex="0">Have a promo code?</span>
+</div>
+                                 <div>
+                                    <div>
+<span>
+<span>
+</span>
+</span>
+</div>
+                                 </div>
+                                 <div>
+                                    <span>
+<input id="promoId" name="promoId" type="text">
+</span>
+<span>
+<a>
+<span>Apply</span>
+</a>
+</span>
+                                 </div>
+                              </div>
+                           </promotions-summary>
+                        </div>
+                     </div>
+                  </right-rail>
+               </div>
+            </div>
+         </ui-view>
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/HomeDepot/SignIn.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <title>The Home Depot - SignIn</title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta content="yes" name="apple-mobile-web-app-capable">
+      <meta content="black" name="apple-mobile-web-app-status-bar-style">
+      <meta content="&nbsp;at The Home Depot - Tablet" name="description">
+      <meta content="" name="keywords">
+   </head>
+   <body>
+      <form name="shoppingCartForm" id="shopCartForm" method="post">
+         <input type="hidden" id="lineItemId" name="lineItemId" value="480de313-1be8-41ed-b8f9-1b1e371a7eb9_480de313-1be8-41ed-b8f9-1b1e371a7eb9">
+         <input type="hidden" id="quantity" name="quantity" value="">
+         <input type="hidden" id="fulfillmentMethod" name="fulfillmentMethod" value="ShipToHome">
+         <input type="hidden" id="fulfillmentLocation" name="fulfillmentLocation" value="">
+         <input type="hidden" id="LOCAL_STORE_ID" name="LOCAL_STORE_ID" value="">
+         <input type="hidden" id="orderId" name="orderId" value="711220840">
+         <input type="hidden" name="proceedAsGuest" value="yes">
+         <input type="hidden" id="currentPage" name="currentPage" value="LogonPage">
+         <input type="hidden" id="cartVisited" name="cartVisited" value="false">
+         <input type="hidden" id="isEligibleForOPC" name="isEligibleForOPC" value="true">
+         <input type="hidden" id="paymentType" name="paymentType" value="regularCheckout">
+         <div>
+<span>
+<label>
+<span>Email Address:</span>
+</label>
+            <input type="email" placeholder="you@domain.com" id="guestEmail" name="guestLoginValue" value="" required="" errorkey="email">
+</span>
+         </div>
+         <div>
+            <p>You will have the opportunity to create an account and track your order once you complete your checkout.
+            </p>
+            <p>
+</p>
+         </div>
+         <div>
+<button>
+<span>Continue</span>
+</button>
+</div>
+      </form>
+      <form name="checkOutLogonForm" id="checkOutLogonForm" method="post" action="https://secure2.homedepot.com/MCCCheckout/Checkout/checkoutLogon.do">
+         <input type="hidden" name="dologin" value="yes">
+         <input type="hidden" id="orderId" name="orderId" value="711220840">
+         <h3>I'm a Returning Customer
+         </h3>
+         <div>
+            <span>Your sign in is incorrect. Please enter your email address or password. Note: One more invalid attempt will lock your account.</span>
+         </div>
+         <div>
+            <span>We periodically require password updates. Please <a>reset your password</a> or continue as a guest.</span>
+         </div>
+         <div>
+<span>
+<label>
+<span>Email Address:</span>
+</label>
+            <input type="email" placeholder="you@domain.com" name="logonId" id="email">
+</span>
+         </div>
+         <div>
+<span>
+<label>
+<span>Password:</span>
+</label>
+<label id="toogleBtn">Show</label>
+<input type="password" name="logonPassword" id="password">
+</span>
+</div>
+         <div>
+            <div id="SignInPart">
+               <input id="signInNow" type="submit" value="Sign In">
+            </div>
+            <div>
+               <a>Reset Password</a>
+            </div>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Macys/Checkout_Payment.html
@@ -0,0 +1,478 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>Macy's Checkout</title>
+      <meta http-equiv="generator" content="JACPKMALPHTCSJDTCR">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="format-detection" content="telephone=no">
+   </head>
+   <body>
+      <form id="rc-payment-info-form" novalidate="">
+         <div>
+            <div>
+            </div>
+         </div>
+         <div id="rc-payment-selection-row">
+            <div>
+               <input type="radio" id="rc-creditcard" for="rc-creditcard-label" name="payment.type" checked="checked" value="CREDITCARD"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Credit card
+                  parseable name: payment.type
+                  field signature: 2449554739
+                  form signature: 4053649612452005841"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label id="rc-creditcard-label" for="rc-creditcard">Credit card</label>
+            </div>
+            <div>
+               <input type="radio" id="rc-paypal" name="payment.type" value="PAYPAL"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Choose payment method
+                  parseable name: payment.type
+                  field signature: 2449554739
+                  form signature: 4053649612452005841"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <span for="rc-paypal">
+</span>
+            </div>
+         </div>
+         <div id="rc-paypal-disclaimer-cc-row">
+            <div id="rc-paypal-disclaimer">
+               <b>Note:&nbsp;</b>PayPal can't be used with Gift Cards, Reward Cards and Credit Cards.
+               Plenti points can be earned but not used with PayPal.
+            </div>
+         </div>
+         <fieldset id="rc-credit-card-container">
+            <div>
+               <div>
+                  <div>
+</div>
+               </div>
+               <div>
+                  <p>Secure payment
+                     <a target="_blank">more info</a>
+                  </p>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <label for="rc-payment-card-type">Card type</label>
+                  <select name="creditCard.cardType.code" id="rc-payment-card-type" autocomplete="off"
+title="overall type: CREDIT_CARD_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: CREDIT_CARD_TYPE
+                     label: Card type
+                     parseable name: creditCard.cardType.code
+                     field signature: 1958753038
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_TYPE"
+>
+                     <option value="-1">Select</option>
+                     <option value="Y">Macy's</option>
+                     <option value="B">Macy's American Express</option>
+                     <option value="A">American Express</option>
+                     <option value="V">Visa</option>
+                     <option value="M">MasterCard</option>
+                     <option value="O">Discover</option>
+                     <option value="F">Employee Card</option>
+                  </select>
+                  <div id="payment-aria-info" tabindex="-1">Your Shipping, Plenti, and Gift Card information can be found and verified at the top of this page"</div>
+               </div>
+            </div>
+            <div id="rc-payment-card-number-row">
+               <div>
+                  <label for="rc-payment-card-number">Card number</label>
+                  <input type="text" maxlength="20" pattern="\d*" name="creditCard.cardNumber" id="rc-payment-card-number" value="" autocomplete="off" autocorrect="off"
+title="overall type: CREDIT_CARD_NUMBER
+                     server type: CREDIT_CARD_NUMBER
+                     heuristic type: CREDIT_CARD_NUMBER
+                     label: Card number
+                     parseable name: creditCard.cardNumber
+                     field signature: 2117159926
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                  <input type="hidden" name="creditCard.maskedCreditCardNumber" value="">
+               </div>
+            </div>
+            <div>
+               <div>
+                  <label id="rc-payment-expiration-label">Expiration date</label>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <select name="creditCard.expMonth" id="rc-payment-card-month" autocomplete="off"
+title="overall type: CREDIT_CARD_EXP_MONTH
+                     server type: CREDIT_CARD_EXP_MONTH
+                     heuristic type: CREDIT_CARD_EXP_MONTH
+                     label: Expiration date
+                     parseable name: creditCard.expMonth
+                     field signature: 989675451
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                     <option>01</option>
+                     <option>02</option>
+                     <option>03</option>
+                     <option>04</option>
+                     <option>05</option>
+                     <option>06</option>
+                     <option>07</option>
+                     <option>08</option>
+                     <option>09</option>
+                     <option>10</option>
+                     <option>11</option>
+                     <option>12</option>
+                  </select>
+               </div>
+               <div>
+                  <select name="creditCard.expYear" id="rc-payment-card-year" autocomplete="off"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     server type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     label: Expiration date
+                     parseable name: creditCard.expYear
+                     field signature: 891328465
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                     <option>2017</option>
+                     <option>2018</option>
+                     <option>2019</option>
+                     <option>2020</option>
+                     <option>2021</option>
+                     <option>2022</option>
+                     <option>2023</option>
+                     <option>2024</option>
+                     <option>2025</option>
+                     <option>2026</option>
+                  </select>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <label for="rc-payment-scode" id="rc-payment-scode-label">Security&nbsp;code</label>
+               </div>
+            </div>
+            <div id="rc-payment-scode-row">
+               <div>
+                  <input type="text" name="fake-password" id="rc-fake-password" autocomplete="off"
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                     server type: NO_SERVER_DATA
+                     heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                     label: Please enter the 4 digit security code on the front of your credit card Please enter the 3 digit sec
+                     parseable name: fake-password
+                     field signature: 3761992124
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                  <input type="text" maxlength="4" pattern="\d*" name="creditCard.securityCode" id="rc-payment-scode" autocomplete="off"
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                     server type: NO_SERVER_DATA
+                     heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                     label: Security code
+                     parseable name: creditCard.securityCode
+                     field signature: 789650537
+                     form signature: 4053649612452005841"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+               </div>
+               <div id="amex-cvv-info" tabindex="-1">Please enter the 4 digit security code on the front of your credit card</div>
+               <div id="not-amex-cvv-info" tabindex="-1">Please enter the 3 digit security code on the back of your credit card</div>
+               <div id="rc-cvv-icon-row">
+                  <div id="rc-cvv-icon">
+                     <span id="rc-cvv-img">
+</span>
+                     <span id="rc-cvv-hint">
+</span>
+                  </div>
+               </div>
+            </div>
+         </fieldset>
+         <section id="rc-paypal-container">
+            <div>
+               <div id="rc-paypal-disclaimer">
+                  <b>Note:&nbsp;</b>PayPal can't be used with Gift Cards, Reward Cards and Credit Cards.
+                  Plenti points can be earned but not used with PayPal.
+               </div>
+            </div>
+            <div id="rc-paypal-login-disclaimer">
+               <div>
+                  You will login on PayPal's site on the next page and review your order, then you will finish the transaction at macy's.com
+               </div>
+            </div>
+         </section>
+         <fieldset id="rc-billing-address-container">
+            <div>
+               <div>
+               </div>
+            </div>
+            <div id="rc-use-shipping-container">
+               <div>
+                  <input type="checkbox" id="rc-use-shipping" name="useMyShippingAddress" value="true" checked=""
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Use my shipping address
+                     parseable name: useMyShippingAddress
+                     field signature: 1490259836
+                     form signature: 4053649612452005841"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               </div>
+               <div>
+                  <label id="rc-use-shipping-label" for="rc-use-shipping">Use my shipping address</label>
+               </div>
+            </div>
+            <div id="co-useshippingAddress-summary">
+               <div>
+                  <p>Vance&nbsp;Chen</p>
+                  <p>1099 Maiden Lane</p>
+                  <p>102</p>
+                  <p>Ann Arbor,&nbsp;MI&nbsp;48105</p>
+               </div>
+            </div>
+            <div id="rc-billing-address">
+               <div>
+                  <div>
+                     <label for="rc-payment-firstName">First name</label>
+                     <input type="text" maxlength="20" name="billingContact.firstName" id="rc-payment-firstName" value="Vance" autocorrect="off" autocomplete="given-name"
+title="overall type: HTML_TYPE_GIVEN_NAME
+                        server type: NAME_FIRST
+                        heuristic type: NAME_FIRST
+                        label: First name
+                        parseable name: billingContact.firstName
+                        field signature: 1110479879
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_GIVEN_NAME"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-payment-lastName">Last name</label>
+                     <input type="text" maxlength="30" name="billingContact.lastName" id="rc-payment-lastName" value="Chen" autocorrect="off" autocomplete="family-name"
+title="overall type: HTML_TYPE_FAMILY_NAME
+                        server type: NAME_LAST
+                        heuristic type: NAME_LAST
+                        label: Last name
+                        parseable name: billingContact.lastName
+                        field signature: 724121833
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_FAMILY_NAME"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-payment-line1">Address line 1</label>
+                     <input type="text" maxlength="35" name="billingAddress.addressLine1" id="rc-payment-line1" value="1099 Maiden Lane" autocorrect="off" autocomplete="address-line1"
+title="overall type: HTML_TYPE_ADDRESS_LINE1
+                        server type: ADDRESS_HOME_LINE1
+                        heuristic type: ADDRESS_HOME_LINE1
+                        label: Address line 1
+                        parseable name: billingAddress.addressLine1
+                        field signature: 3436138513
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_ADDRESS_LINE1"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-payment-line2">Address line 2 (optional)</label>
+                     <input type="text" maxlength="35" name="billingAddress.addressLine2" id="rc-payment-line2" autocorrect="off" autocomplete="address-line2" value="102"
+title="overall type: HTML_TYPE_ADDRESS_LINE2
+                        server type: ADDRESS_HOME_LINE2
+                        heuristic type: ADDRESS_HOME_LINE2
+                        label: Address line 2 (optional)
+                        parseable name: billingAddress.addressLine2
+                        field signature: 3817149136
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_ADDRESS_LINE2"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-payment-city">City</label>
+                     <input type="text" maxlength="25" name="billingAddress.city" id="rc-payment-city" value="Ann Arbor" autocorrect="off" autocomplete="address-level2"
+title="overall type: HTML_TYPE_ADDRESS_LEVEL2
+                        server type: ADDRESS_HOME_CITY
+                        heuristic type: ADDRESS_HOME_CITY
+                        label: City
+                        parseable name: billingAddress.city
+                        field signature: 2433902552
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_ADDRESS_LEVEL2"
+>
+                  </div>
+               </div>
+               <div id="rc-paystateZipRow">
+                  <div>
+                     <label for="rc-payment-state">State</label>
+                     <select name="billingAddress.state" id="rc-payment-state" autocomplete="address-level1"
+title="overall type: HTML_TYPE_ADDRESS_LEVEL1
+                        server type: ADDRESS_HOME_STATE
+                        heuristic type: ADDRESS_HOME_STATE
+                        label: State
+                        parseable name: billingAddress.state
+                        field signature: 333754698
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_ADDRESS_LEVEL1"
+>
+                        <option value="-1">Select</option>
+                        <option value="AL">AL</option>
+                        <option value="AK">AK</option>
+                        <option value="AS">AS</option>
+                        <option value="AZ">AZ</option>
+                        <option value="AR">AR</option>
+                        <option value="AA">AA</option>
+                        <option value="AE">AE</option>
+                        <option value="AP">AP</option>
+                        <option value="CA">CA</option>
+                        <option value="CO">CO</option>
+                        <option value="CT">CT</option>
+                        <option value="DE">DE</option>
+                        <option value="DC">DC</option>
+                        <option value="FM">FM</option>
+                        <option value="FL">FL</option>
+                        <option value="GA">GA</option>
+                        <option value="GU">GU</option>
+                        <option value="HI">HI</option>
+                        <option value="ID">ID</option>
+                        <option value="IL">IL</option>
+                        <option value="IN">IN</option>
+                        <option value="IA">IA</option>
+                        <option value="KS">KS</option>
+                        <option value="KY">KY</option>
+                        <option value="LA">LA</option>
+                        <option value="ME">ME</option>
+                        <option value="MH">MH</option>
+                        <option value="MD">MD</option>
+                        <option value="MA">MA</option>
+                        <option value="MI" selected="">MI</option>
+                        <option value="MN">MN</option>
+                        <option value="MS">MS</option>
+                        <option value="MO">MO</option>
+                        <option value="MT">MT</option>
+                        <option value="NE">NE</option>
+                        <option value="NV">NV</option>
+                        <option value="NH">NH</option>
+                        <option value="NJ">NJ</option>
+                        <option value="NM">NM</option>
+                        <option value="NY">NY</option>
+                        <option value="NC">NC</option>
+                        <option value="ND">ND</option>
+                        <option value="MP">MP</option>
+                        <option value="OH">OH</option>
+                        <option value="OK">OK</option>
+                        <option value="OR">OR</option>
+                        <option value="PW">PW</option>
+                        <option value="PA">PA</option>
+                        <option value="PR">PR</option>
+                        <option value="RI">RI</option>
+                        <option value="SC">SC</option>
+                        <option value="SD">SD</option>
+                        <option value="TN">TN</option>
+                        <option value="TX">TX</option>
+                        <option value="VI">VI</option>
+                        <option value="UT">UT</option>
+                        <option value="VT">VT</option>
+                        <option value="VA">VA</option>
+                        <option value="WA">WA</option>
+                        <option value="WV">WV</option>
+                        <option value="WI">WI</option>
+                        <option value="WY">WY</option>
+                     </select>
+                  </div>
+                  <div>
+                     <label for="rc-payment-zipCode">ZIP code</label>
+                     <input type="text" maxlength="5" pattern="\d*" name="billingAddress.zipCode" id="rc-payment-zipCode" value="48105" autocorrect="off" autocomplete="postal-code"
+title="overall type: HTML_TYPE_POSTAL_CODE
+                        server type: ADDRESS_HOME_ZIP
+                        heuristic type: ADDRESS_HOME_ZIP
+                        label: ZIP code
+                        parseable name: billingAddress.zipCode
+                        field signature: 837276327
+                        form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_POSTAL_CODE"
+>
+                  </div>
+               </div>
+            </div>
+         </fieldset>
+         <div>
+            <div>
+            </div>
+         </div>
+         <div>
+            <div>
+               We'll only contact you if we have questions about this order.
+            </div>
+         </div>
+         <div>
+            <div>
+               <label for="rc-payment-phone">Phone number</label>
+               <input type="text" maxlength="14" pattern="\d*" name="billingAddress.phone" id="rc-payment-phone" value="(734) 111-2132" autocorrect="off" autocomplete="tel"
+title="overall type: HTML_TYPE_TEL
+                  server type: PHONE_HOME_CITY_AND_NUMBER
+                  heuristic type: PHONE_HOME_WHOLE_NUMBER
+                  label: Phone number
+                  parseable name: billingAddress.phone
+                  field signature: 2467847771
+                  form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_TEL"
+>
+            </div>
+         </div>
+         <div>
+            <div>
+               <label for="rc-payment-email">Email address</label>
+               <input type="email" maxlength="75" name="billingContact.email" id="rc-payment-email" value="" autocapitalize="off" autocorrect="off" autocomplete="email"
+title="overall type: HTML_TYPE_EMAIL
+                  server type: EMAIL_ADDRESS
+                  heuristic type: EMAIL_ADDRESS
+                  label: Email address
+                  parseable name: billingContact.email
+                  field signature: 4157735572
+                  form signature: 4053649612452005841"
+autofill-prediction="HTML_TYPE_EMAIL"
+>
+            </div>
+         </div>
+         <fieldset>
+            <div id="rc-paypalcontinue-row">
+               <div>
+                  <button type="button" id="rc-paypal-continue">Continue to Paypal</button>
+               </div>
+            </div>
+            <div id="rc-normalpaycontinue-row">
+               <div>
+                  <button type="submit" id="rc-payment-continue">Continue</button>
+               </div>
+            </div>
+         </fieldset>
+      </form>
+      <input type="hidden" id="gmeUrl" value="https://www.googleapis.com/mapsengine/v1/tables/06739517320133004748-11853667273131550346/features?version=published&amp;key=AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmClientId" value="gme-macysinc">
+      <input type="hidden" id="gmeAPIKey" value="AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmeTableId" value="06739517320133004748-11853667273131550346">
+      <input type="hidden" id="gmeToSdpEnabled" value="true">
+      <input type="hidden" id="macysCookieDomain" value=".macys.com">
+      <input type="hidden" id="MACYS_secureHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_baseHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_assetsHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_imageHostName" value="/img/ts/is/image/MCY">
+      <input type="hidden" id="AKAMAI_LOGIC" value="hybrid">
+      <input type="hidden" id="searchBoxPlaceholderGuest" value="Search or enter web ID">
+      <input type="hidden" id="searchBoxPlaceholderUser" value="[userName], Search or enter web ID">
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Macys/Checkout_ShippingAddress.html
@@ -0,0 +1,439 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>Macy's Checkout</title>
+      <meta http-equiv="generator" content="JACPKMALPHTCSJDTCR">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="format-detection" content="telephone=no">
+      <meta name="viewport" content="width=device-width">
+   </head>
+   <body>
+      <form id="rc-shipping-info-form">
+         <fieldset>
+            <fieldset id="rc-shipping-address-wrapper">
+               <div>
+                  <div>
+                     <label for="rc-shipping-firstName">First name</label>
+                     <input type="text" maxlength="20" name="contact.firstName" id="rc-shipping-firstName" value="" autocorrect="off" autocomplete="given-name"
+title="overall type: HTML_TYPE_GIVEN_NAME
+                        server type: NO_SERVER_DATA
+                        heuristic type: NAME_FIRST
+                        label: First name
+                        parseable name: contact.firstName
+                        field signature: 2682246885
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_GIVEN_NAME"
+>
+<small>Please enter a first name.</small>
+                     <div>
+                        <div>
+</div>
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-shipping-lastName">Last name</label>
+                     <input type="text" maxlength="30" name="contact.lastName" id="rc-shipping-lastName" value="" autocorrect="off" autocomplete="family-name"
+title="overall type: HTML_TYPE_FAMILY_NAME
+                        server type: NO_SERVER_DATA
+                        heuristic type: NAME_LAST
+                        label: Last name
+                        parseable name: contact.lastName
+                        field signature: 4271897545
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_FAMILY_NAME"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-shipping-line1">Address line 1</label>
+                     <input type="text" maxlength="35" name="address.addressLine1" id="rc-shipping-line1" value="" autocorrect="off" autocomplete="address-line1"
+title="overall type: HTML_TYPE_ADDRESS_LINE1
+                        server type: NO_SERVER_DATA
+                        heuristic type: ADDRESS_HOME_LINE1
+                        label: Address line 1
+                        parseable name: address.addressLine1
+                        field signature: 2758559035
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_ADDRESS_LINE1"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-shipping-line2">Address line 2 (optional)</label>
+                     <input type="text" maxlength="35" name="address.addressLine2" id="rc-shipping-line2" value="" autocorrect="off" autocomplete="address-line2" placeholder="Apt, Suite, Bldg, Floor, etc"
+title="overall type: HTML_TYPE_ADDRESS_LINE2
+                        server type: NO_SERVER_DATA
+                        heuristic type: ADDRESS_HOME_LINE2
+                        label: Address line 2 (optional)
+                        parseable name: address.addressLine2
+                        field signature: 1355777065
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_ADDRESS_LINE2"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-shipping-city">City</label>
+                     <input type="text" maxlength="25" name="address.city" id="rc-shipping-city" value="" autocorrect="off" autocomplete="address-level2"
+title="overall type: HTML_TYPE_ADDRESS_LEVEL2
+                        server type: NO_SERVER_DATA
+                        heuristic type: ADDRESS_HOME_CITY
+                        label: City
+                        parseable name: address.city
+                        field signature: 242591127
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_ADDRESS_LEVEL2"
+>
+                  </div>
+               </div>
+               <div id="rc-stateZipRow">
+                  <div>
+                     <label for="rc-shipping-state">State</label>
+                     <select name="address.state" id="rc-shipping-state" autocomplete="address-level1"
+title="overall type: HTML_TYPE_ADDRESS_LEVEL1
+                        server type: NO_SERVER_DATA
+                        heuristic type: ADDRESS_HOME_STATE
+                        label: State
+                        parseable name: address.state
+                        field signature: 1305630158
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_ADDRESS_LEVEL1"
+>
+                        <option value="-1">Select</option>
+                        <option value="AL">AL</option>
+                        <option value="AK">AK</option>
+                        <option value="AS">AS</option>
+                        <option value="AZ">AZ</option>
+                        <option value="AR">AR</option>
+                        <option value="AA">AA</option>
+                        <option value="AE">AE</option>
+                        <option value="AP">AP</option>
+                        <option value="CA">CA</option>
+                        <option value="CO">CO</option>
+                        <option value="CT">CT</option>
+                        <option value="DE">DE</option>
+                        <option value="DC">DC</option>
+                        <option value="FM">FM</option>
+                        <option value="FL">FL</option>
+                        <option value="GA">GA</option>
+                        <option value="GU">GU</option>
+                        <option value="HI">HI</option>
+                        <option value="ID">ID</option>
+                        <option value="IL">IL</option>
+                        <option value="IN">IN</option>
+                        <option value="IA">IA</option>
+                        <option value="KS">KS</option>
+                        <option value="KY">KY</option>
+                        <option value="LA">LA</option>
+                        <option value="ME">ME</option>
+                        <option value="MH">MH</option>
+                        <option value="MD">MD</option>
+                        <option value="MA">MA</option>
+                        <option value="MI">MI</option>
+                        <option value="MN">MN</option>
+                        <option value="MS">MS</option>
+                        <option value="MO">MO</option>
+                        <option value="MT">MT</option>
+                        <option value="NE">NE</option>
+                        <option value="NV">NV</option>
+                        <option value="NH">NH</option>
+                        <option value="NJ">NJ</option>
+                        <option value="NM">NM</option>
+                        <option value="NY">NY</option>
+                        <option value="NC">NC</option>
+                        <option value="ND">ND</option>
+                        <option value="MP">MP</option>
+                        <option value="OH">OH</option>
+                        <option value="OK">OK</option>
+                        <option value="OR">OR</option>
+                        <option value="PW">PW</option>
+                        <option value="PA">PA</option>
+                        <option value="PR">PR</option>
+                        <option value="RI">RI</option>
+                        <option value="SC">SC</option>
+                        <option value="SD">SD</option>
+                        <option value="TN">TN</option>
+                        <option value="TX">TX</option>
+                        <option value="VI">VI</option>
+                        <option value="UT">UT</option>
+                        <option value="VT">VT</option>
+                        <option value="VA">VA</option>
+                        <option value="WA">WA</option>
+                        <option value="WV">WV</option>
+                        <option value="WI">WI</option>
+                        <option value="WY">WY</option>
+                     </select>
+                  </div>
+                  <div>
+                     <label for="rc-shipping-postal-code">ZIP code</label>
+                     <input type="text" maxlength="5" name="address.zipCode" id="rc-shipping-postal-code" value="" autocorrect="off" autocomplete="postal-code" pattern="\d*"
+title="overall type: HTML_TYPE_POSTAL_CODE
+                        server type: NO_SERVER_DATA
+                        heuristic type: ADDRESS_HOME_ZIP
+                        label: ZIP code
+                        parseable name: address.zipCode
+                        field signature: 1541909938
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_POSTAL_CODE"
+>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="rc-shipping-phone">Phone number</label>
+                     <input type="text" maxlength="14" pattern="\d*" name="address.phone" id="rc-shipping-phone" autocomplete="tel" value="" autocorrect="off"
+title="overall type: HTML_TYPE_TEL
+                        server type: NO_SERVER_DATA
+                        heuristic type: PHONE_HOME_WHOLE_NUMBER
+                        label: Phone number
+                        parseable name: address.phone
+                        field signature: 3405332267
+                        form signature: 6571413743856647727"
+autofill-prediction="HTML_TYPE_TEL"
+>
+                  </div>
+               </div>
+            </fieldset>
+         </fieldset>
+         <fieldset id="rc-shipping-method-set">
+            <div>
+               <div>
+                  <legend tabindex="-1">Shipping method</legend>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <div>
+                     <input type="radio" name="shippingMethod.methodCode" value="G" id="rc-shipping-shipping-methodG" checked="checked"
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Standard Transit time:  3-6 business days
+                        parseable name: shippingMethod.methodCode
+                        field signature: 1185913307
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  </div>
+                  <div>
+                     <label for="rc-shipping-shipping-methodG">Standard
+                     <br>
+                     Transit time:  3-6 business days
+                     </label>
+                  </div>
+                  <div>
+                     <div>$10.95
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <input type="radio" name="shippingMethod.methodCode" value="2" id="rc-shipping-shipping-method2" disabled=""
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Premium Transit time:  2-3 business days
+                        parseable name: shippingMethod.methodCode
+                        field signature: 1185913307
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  </div>
+                  <div>
+                     <label for="rc-shipping-shipping-method2">Premium
+                     <br>
+                     Transit time:  2-3 business days
+                     </label>
+                  </div>
+                  <div>
+                     <div>$19.95
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <input type="radio" name="shippingMethod.methodCode" value="O" id="rc-shipping-shipping-methodO" disabled=""
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Express Transit time:  1-2 business days
+                        parseable name: shippingMethod.methodCode
+                        field signature: 1185913307
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  </div>
+                  <div>
+                     <label for="rc-shipping-shipping-methodO">Express
+                     <br>
+                     Transit time:  1-2 business days
+                     </label>
+                  </div>
+                  <div>
+                     <div>$29.95
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <p>
+<b>Note: We'll send you an email to schedule your delivery.</b>
+</p>
+                  <p>
+<b>Note: Some items in your order may ship separately. Transit time is the time between leaving our fulfillment center &amp; delivery to you.</b>
+</p>
+               </div>
+            </div>
+         </fieldset>
+         <fieldset>
+            <div>
+               <div>
+                  <legend tabindex="-1">
+                     Gift Options
+                  </legend>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <input type="checkbox" name="giftOrder" id="rc-giftoption-isgift" value="true"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: This order contains a gift
+                     parseable name: giftOrder
+                     field signature: 2509042763
+                     form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <div id="aria-giftcardinfo" tabindex="-1">
+                     "Selecting this checkbox will expand additional gift options"
+                  </div>
+                  <label for="rc-giftoption-isgift">This order contains a gift</label>
+                  <input type="hidden" value="true" name="_giftOrder">
+               </div>
+            </div>
+            <div id="rc-giftoptions-additional">
+               <div>
+                  <div>
+                     <input type="checkbox" name="giftOptions.haveGiftMessage" value="true" id="rc-giftoption-giftMsg"
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Gift message (optional)
+                        parseable name: giftOptions.haveGiftMessage
+                        field signature: 1542269083
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     <label for="rc-giftoption-giftMsg">Gift message (optional)</label>
+                     <input type="hidden" value="true" name="_giftOptions.haveGiftMessage">
+<br>
+                  </div>
+               </div>
+               <div id="rc-giftmsg-text">
+                  <div>
+                     <div>
+                        <span id="rc-giftmsg-additional-info">Write a personal message. We'll print it on a card &amp; send it along with the order.</span>
+                     </div>
+                  </div>
+                  <div>
+                     <div>
+                        <label for="rc-gift-msg1">Message line 1 (max 45 characters)</label>
+                        <input type="text" maxlength="45" name="giftOptions.senderName" id="rc-gift-msg1" value="" autocomplete="off" placeholder="Message line 1 (max 45 characters)"
+title="overall type: UNKNOWN_TYPE
+                           server type: NO_SERVER_DATA
+                           heuristic type: UNKNOWN_TYPE
+                           label: Message line 1 (max 45 characters)
+                           parseable name: giftOptions.senderName
+                           field signature: 851756973
+                           form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     </div>
+                  </div>
+                  <div>
+                     <div>
+                        <label for="rc-gift-msg2">Message line 2 (max 45 characters)</label>
+                        <input type="text" maxlength="45" name="giftOptions.giftMessage1" id="rc-gift-msg2" value="" autocomplete="off" placeholder="Message line 2 (max 45 characters)"
+title="overall type: UNKNOWN_TYPE
+                           server type: NO_SERVER_DATA
+                           heuristic type: UNKNOWN_TYPE
+                           label: Message line 2 (max 45 characters)
+                           parseable name: giftOptions.giftMessage1
+                           field signature: 893448548
+                           form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     </div>
+                  </div>
+                  <div>
+                     <div>
+                        <label for="rc-gift-msg3">Message line 3 (max 45 characters)</label>
+                        <input type="text" maxlength="45" name="giftOptions.giftMessage2" id="rc-gift-msg3" value="" autocomplete="off" placeholder="Message line 3 (max 45 characters)"
+title="overall type: UNKNOWN_TYPE
+                           server type: NO_SERVER_DATA
+                           heuristic type: UNKNOWN_TYPE
+                           label: Message line 3 (max 45 characters)
+                           parseable name: giftOptions.giftMessage2
+                           field signature: 3147898435
+                           form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <input type="checkbox" name="giftOptions.packageInGiftBox" value="true" id="rc-giftoption-giftBox"
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Send in a gift box ($6.00 per order)
+                        parseable name: giftOptions.packageInGiftBox
+                        field signature: 1556860808
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     <label for="rc-giftoption-giftBox">Send in a gift box ($6.00 per order)</label>
+                     <input type="hidden" value="true" name="_giftOptions.packageInGiftBox">
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <input type="checkbox" name="giftOptions.sendGiftReceipt" value="true" id="rc-giftoption-packingSlip" checked="checked"
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Hide prices on the packing slip
+                        parseable name: giftOptions.sendGiftReceipt
+                        field signature: 367416642
+                        form signature: 6571413743856647727"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     <label for="rc-giftoption-packingSlip">Hide prices on the packing slip</label>
+                     <input type="hidden" value="true" name="_giftOptions.sendGiftReceipt">
+                  </div>
+               </div>
+            </div>
+         </fieldset>
+      </form>
+      <input type="hidden" id="gmeUrl" value="https://www.googleapis.com/mapsengine/v1/tables/06739517320133004748-11853667273131550346/features?version=published&amp;key=AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmClientId" value="gme-macysinc">
+      <input type="hidden" id="gmeAPIKey" value="AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmeTableId" value="06739517320133004748-11853667273131550346">
+      <input type="hidden" id="gmeToSdpEnabled" value="true">
+      <input type="hidden" id="macysCookieDomain" value=".macys.com">
+      <input type="hidden" id="MACYS_secureHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_baseHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_assetsHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_imageHostName" value="/img/ts/is/image/MCY">
+      <input type="hidden" id="AKAMAI_LOGIC" value="hybrid">
+      <input type="hidden" id="searchBoxPlaceholderGuest" value="Search or enter web ID">
+      <input type="hidden" id="searchBoxPlaceholderUser" value="[userName], Search or enter web ID">
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Macys/SignIn.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html lang="en" id="yui_3_8_1_1_1489978541398_168">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+      <title>Sign In - Macy's Checkout</title>
+      <meta http-equiv="generator" content="JACPKMALPHTCSJDTCR">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="format-detection" content="telephone=no">
+      <meta name="viewport" content="width=device-width">
+   </head>
+   <body id="yui_3_8_1_1_1489978541398_167">
+      <form id="signInForm" action="https://www.macys.com/account/signin?fromCheckout=fromCheckout" method="post">
+         <div id="yui_3_8_1_1_1489978541398_165">
+            <ul id="yui_3_8_1_1_1489978541398_164">
+               <li id="yui_3_8_1_1_1489978541398_163">
+                  <div>
+                     <label for="emailAddr">Email address:</label>
+                  </div>
+                  <div id="yui_3_8_1_1_1489978541398_162">
+                     <input id="emailAddr" name="email" type="text" value="" maxlength="75">
+                  </div>
+                  <div>&nbsp;</div>
+               </li>
+               <li id="yui_3_8_1_1_1489978541398_175">
+                  <div>
+                     <label for="password">
+                     Password:
+                     </label>
+                  </div>
+                  <div id="yui_3_8_1_1_1489978541398_174">
+                     <input id="password" name="password" type="password" value="" maxlength="16">
+                  </div>
+                  <div>&nbsp;</div>
+               </li>
+            </ul>
+            <div>
+               <div>
+<span>Password is case sensitive</span>
+</div>
+               <div>
+                  <a id="frgtPwd">Forgot Your Password?</a>
+               </div>
+               <div>
+                  <button type="submit" id="isnormalcheckout" name="accountSignIn">
+<span>checkout</span>
+</button>
+               </div>
+            </div>
+         </div>
+      </form>
+      <form id="emailForm" action="https://www.macys.com/account/signin?fromCheckout=fromCheckout" method="post">
+         <fieldset>
+            <ul>
+               <li id="overlaySubmitDiv">
+                  <label name="" for="forgotEmail" csserrorclass="error">
+                  Get started by entering the email address you use to sign in:
+                  </label>
+                  <input id="forgotEmail" name="passwordRecovery.email" type="text" value="">
+               </li>
+               <li id="overlaySubmitbtnDiv">
+                  <button id="verifySubmitBtn" type="submit">
+<span>continue </span>
+</button>
+               </li>
+            </ul>
+         </fieldset>
+      </form>
+      <form id="capthaForm" action="https://www.macys.com/account/signin?fromCheckout=fromCheckout" method="post">
+         <fieldset>
+            <ul>
+               <li>
+                  <label name="email" for="email" csserrorclass="error">
+                  Your email address:
+                  </label>
+                  <span>
+<span id="emailID">
+</span>
+</span>
+               </li>
+               <li id="Captchapart">
+                  <img id="captchaImg" alt="enter the letters in the below field">
+                  <div>
+<a>
+<img id="refreshbtn" src="./Sign In - Macy&#39;s Checkout_files/new_image.gif" alt="new_image">
+</a>
+</div>
+               </li>
+               <li>
+                  <label path="securityCode" for="securityCode" csserrorclass="error">
+                  Please enter the characters shown above and we'll email you a link to reset your password:
+                  </label>
+                  <input id="securityCode" name="passwordRecovery.securityCode" type="text" value="" maxlength="50">
+                  <input id="refreshCaptcha" name="passwordRecovery.refreshCaptcha" type="hidden" value="">
+               </li>
+               <li>
+                  <input id="verifyCaptchaBtn" type="submit" value="submit">
+               </li>
+            </ul>
+         </fieldset>
+      </form>
+      <form id="securityQAForm" action="https://www.macys.com/account/signin?fromCheckout=fromCheckout" method="post">
+         <fieldset>
+            <ul>
+               <li>
+                  <label name="email" for="email" csserrorclass="error">
+                     Your email address:
+                     <span>
+                        <div id="secureEmailID">
+</div>
+                     </span>
+                  </label>
+                  <input id="hiddenEmail" name="passwordRecovery.email" type="hidden" value="">
+                  <input id="hiddenSecQue" name="passwordRecovery.question" type="hidden" value="">
+               </li>
+               <li>
+                  <div id="question">
+</div>
+               </li>
+               <li>
+                  <input id="secureAnswer" name="passwordRecovery.secureAnswer" type="text" value="">
+               </li>
+               <li>
+                  <button type="submit" id="verifysecurityBtn">
+<span>continue </span>
+</button>
+               </li>
+            </ul>
+         </fieldset>
+      </form>
+      <form id="resetPasswordForm" action="https://www.macys.com/account/signin?fromCheckout=fromCheckout" method="post">
+         <fieldset>
+            <ul>
+               <li>
+                  <div>
+                     <div>
+                        <label name="password" for="passwordfield" csserrorclass="error inline" id="resetPasswordLabel">
+                        Enter new password: </label>
+                     </div>
+                     <div>
+                        <div>
+                           <input id="passwordfield" name="passwordRecovery.password"
+title="overall type: UNKNOWN_TYPE
+                              server type: NO_SERVER_DATA
+                              heuristic type: UNKNOWN_TYPE
+                              label: Enter new password:
+                              parseable name: passwordRecovery.password
+                              field signature: 457433414
+                              form signature: 10250648745005274367" type="password" value="" maxlength="16"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                        </div>
+                        <div>
+                           <div>
+</div>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <div>
+                     <div>
+                        <label path="verifyPassword" for="verifyPassword" csserrorclass="error inline" id="confirmPasswordLabel">
+                        Confirm password:
+                        </label>
+                     </div>
+                     <div>
+                        <div>
+                           <input id="verifyPasswordfield" name="passwordRecovery.verifyPassword"
+title="overall type: UNKNOWN_TYPE
+                              server type: NO_SERVER_DATA
+                              heuristic type: UNKNOWN_TYPE
+                              label: Confirm password:
+                              parseable name: passwordRecovery.verifyPassword
+                              field signature: 1462365960
+                              form signature: 10250648745005274367" type="password" value="" maxlength="16"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                        </div>
+                        <div>
+                           <div>
+</div>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <button id="verifyResetPasswordBtn" type="submit">
+<span>Save &amp; SignIn</span>
+</button>
+               </li>
+            </ul>
+         </fieldset>
+      </form>
+      <input type="hidden" id="gmeUrl" value="https://www.googleapis.com/mapsengine/v1/tables/06739517320133004748-11853667273131550346/features?version=published&amp;key=AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmClientId" value="gme-macysinc">
+      <input type="hidden" id="gmeAPIKey" value="AIzaSyCzwiHW1tSp_4FXaFuORRffbxBzQUN1qs4">
+      <input type="hidden" id="gmeTableId" value="06739517320133004748-11853667273131550346">
+      <input type="hidden" id="gmeToSdpEnabled" value="true">
+      <input type="hidden" id="macysCookieDomain" value=".macys.com">
+      <input type="hidden" id="MACYS_secureHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_baseHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_assetsHostName" value="https://www.macys.com">
+      <input type="hidden" id="MACYS_imageHostName" value="/img/ts/is/image/MCY">
+      <input type="hidden" id="AKAMAI_LOGIC" value="hybrid">
+      <input type="hidden" id="searchBoxPlaceholderGuest" value="Search or enter web ID">
+      <input type="hidden" id="searchBoxPlaceholderUser" value="[userName], Search or enter web ID">
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/NewEgg/BillingInfo.html
@@ -0,0 +1,1083 @@
+<!DOCTYPE html>
+<html lang="en-us">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>Newegg.com - Billing Info</title>
+      <meta name="keywords" content="Newegg.com - Once You Know, You Newegg">
+      <meta name="description" content="Newegg.com offers the best prices on computer parts, laptop computers, digital cameras, electronics and more with fast shipping and top-rated customer service.  Once you know, you Newegg!">
+      <meta name="google-translate-customization" content="d08b8c829bab9a46-ac914e23c0a3607a-g7fba27d07436db8a-e">
+      <meta name="language" content="english">
+      <meta name="copyright" content="©  2000-2017 Newegg Inc.">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="robots" content="index,follow">
+   </head>
+   <body>
+      <form id="checkout" name="checkout" action="https://secure.newegg.com/GlobalShopping/CheckoutStep2.aspx?CartID=415%2b903ZRCECSZWBJE0&amp;IsCombineGuest=1" method="post" novalidate="novalidate">
+         <div>
+            Redeem Newegg gift cards<span>
+</span>
+         </div>
+         <div>
+            <div>
+               <div>
+                  <div>
+                     <label>Card Number</label>
+                     <input type="text" name="GiftCode1"
+title="overall type: EMAIL_ADDRESS
+                        server type: EMAIL_ADDRESS
+                        heuristic type: UNKNOWN_TYPE
+                        label: Card Number
+                        parseable name: GiftCode1
+                        field signature: 2868641577
+                        form signature: 16660402300910943442"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                     <input type="text" name="GiftCode" id="GiftCode" size="20" maxlength="16" autocomplete="off"
+title="overall type: EMAIL_ADDRESS
+                        server type: EMAIL_ADDRESS
+                        heuristic type: UNKNOWN_TYPE
+                        label: Card Number
+                        parseable name: GiftCode
+                        field signature: 1229209062
+                        form signature: 16660402300910943442"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                  </div>
+                  <div>
+                     <label>Security Code</label>
+                     <input type="password" name="ScurityCode1"
+title="overall type: UNKNOWN_TYPE
+                        server type: NO_SERVER_DATA
+                        heuristic type: UNKNOWN_TYPE
+                        label: Security Code
+                        parseable name: ScurityCode1
+                        field signature: 828427756
+                        form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                     <input type="password" maxlength="4" name="SecurityCode" id="SecurityCode" autocomplete="off"
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                        server type: NO_SERVER_DATA
+                        heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                        label: Security Code
+                        parseable name: SecurityCode
+                        field signature: 3977890449
+                        form signature: 16660402300910943442"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                  </div>
+               </div>
+               <div>
+                  <a>
+                  <i>
+</i>
+                  Enter A Gift Card
+                  <i>
+</i>
+                  </a>
+               </div>
+               <input type="hidden" name="AllGiftCodes" id="AllGiftCodes" value="">
+               <input type="hidden" name="AllGiftPwds" id="AllGiftPwds" value="">
+               <input type="hidden" name="GiftMethodAction" id="GiftMethodAction" value="0">
+            </div>
+            <div>
+               <img
+title="EggPoints" alt="EggPoints" src="./Newegg.com - Billing Info_files/none.gif">
+            </div>
+         </div>
+         <ul>
+            <li>
+               <div id="GiftCardEmptyDiv">
+                  <div id="GiftCardEmptyMsg">
+                     <div>
+                        <div>
+                           <div>
+</div>
+                           <div>
+<span>Missing Information  </span>Card Number and Security Code fields cannot be empty. Please enter valid information and try again.</div>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+            </li>
+         </ul>
+         <div>
+            Payment Methods
+            <a rel="modal"
+title="What&#39;s this?" id="PaymentMethodDisabled">
+</a>
+            <div id="PaymentMethodDisabled_Content">
+               <p>Some payment methods may not be eligible for your order. Please review the full list by clicking <a>here</a> for payment restrictions.</p>
+            </div>
+            <span>
+</span>
+         </div>
+         <div>
+            <ul>
+               <li>
+                  <input type="radio" name="paymentmethod" id="NSCC"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Newegg Store Credit Card
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="NSCC">
+                  <strong>Newegg Store Credit Card</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <img src="./Newegg.com - Billing Info_files/newegg-cc.png" alt="Newegg Store Credit Card">
+                           <p>
+                           </p>
+                        </div>
+                        <div>
+                           <strong>Newegg Store Credit Card</strong>
+                        </div>
+                     </div>
+                     <div>
+                        <div>
+                           <div>
+                              <label for="StoreCard_HolderName">
+                              Cardholder Name
+                              <span>(exactly as shown on card)</span>
+                              </label>
+                              <input
+title="overall type: CREDIT_CARD_NAME_FULL
+                                 server type: CREDIT_CARD_NAME_FULL
+                                 heuristic type: CREDIT_CARD_NAME_FULL
+                                 label: Cardholder Name (exactly as shown on card)
+                                 parseable name: StoreCard_HolderName
+                                 field signature: 853107187
+                                 form signature: 16660402300910943442" type="text" maxlength="80" name="StoreCard_HolderName" id="StoreCard_HolderName" value=""
+autofill-prediction="CREDIT_CARD_NAME_FULL"
+>
+                           </div>
+                           <div>
+                              <label for="StoreCard_Number">
+                              Card Number
+                              </label>
+                              <input
+title="overall type: CREDIT_CARD_NUMBER
+                                 server type: CREDIT_CARD_NUMBER
+                                 heuristic type: CREDIT_CARD_NUMBER
+                                 label: Card Number
+                                 parseable name: StoreCard_Number
+                                 field signature: 3054139089
+                                 form signature: 16660402300910943442" datavalid="60345916" autocomplete="off" id="StoreCard_Number" type="text" name="StoreCard_Number" value="" focus="false"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                           </div>
+                           <div>
+                              <div>
+                                 <label>
+                                 <input type="checkbox" checked="checked" name="saveNsccCard" id="saveCard"
+title="overall type: UNKNOWN_TYPE
+                                    server type: NO_SERVER_DATA
+                                    heuristic type: UNKNOWN_TYPE
+                                    label: Save for future orders
+                                    parseable name: saveNsccCard
+                                    field signature: 2599746278
+                                    form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 Save for future orders
+                                 </label>
+                              </div>
+                           </div>
+                        </div>
+                        <div>
+</div>
+                     </div>
+                     <div>Do not have a Newegg Store Credit Card? <a>Learn More</a>
+</div>
+                  </div>
+               </li>
+               <li>
+                  <input type="radio" name="paymentmethod" value="Amex Express Checkout" id="amex"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Amex Express Checkout
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="amex">
+                  <strong>Amex Express Checkout</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <img src="./Newegg.com - Billing Info_files/AEC_PaymentMark_Blue_48x30.png" alt="Amex Express Checkout Button">
+                           <p>
+                           </p>
+                        </div>
+                        <div>
+                           <strong>Checkout faster with American Express</strong>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <input type="radio" name="paymentmethod" id="bitcoin" disabled="disabled"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Bitcoin
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="bitcoin">
+                  <strong>Bitcoin</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <img alt="Bitcoin accepted here"
+title="Bitcoin accepted here" src="./Newegg.com - Billing Info_files/bitcoin_logo.png">
+                           <p>
+                           </p>
+                        </div>
+                        <div>
+                           <strong>Bitcoin is the safest and most secure way to pay online.</strong>
+                           <ul>
+                              <li>No identity theft risk; no payment information is ever stored.</li>
+                              <li>Your payment completes immediately.</li>
+                              <li>
+<a target="_blank">Learn more
+                                 </a>
+                              </li>
+                           </ul>
+                        </div>
+                        <div>
+                           <div>
+                              <div>
+                                 <div>
+</div>
+                                 <div>
+<span>NOTE: </span>Please note that when using Bitcoin as your payment method, once you have clicked the "bitcoin checkout now" button, you will have only 15 minutes to complete your payment. If you are unable to complete your payment, you will have two options: You can try again later to place a new order or you can change your payment method later from Order History in My Account.<br>
+<br>
+                                    All orders fully paid by Bitcoin are final and cannot be returned for Bitcoin or hard currency. All returns will be made in the form of a Newegg Gift Card. All returns follow our return policy.
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <input type="hidden" name="IsMasterPassLightBoxEnable" id="IsMasterPassLightBoxEnable" value="True">
+               <li>
+                  <input type="radio" name="paymentmethod" id="masterpass"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: MasterPass
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="masterpass">
+                  <strong>MasterPass</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <img src="./Newegg.com - Billing Info_files/mp_mc_acc_038px_gif.gif" alt="MasterPass">
+                           <p>
+                           </p>
+                        </div>
+                        <div>
+                           <strong>MasterPass is a free service that is a fast, simple and safe way to check out online. It cuts down on the time and effort it takes to buy the things you want and need. And because it's from MasterCard, you can trust that it's secure.
+                           </strong>
+                           <ul>
+                              <li>
+                                 When you are ready to check out online, click on the "Buy with MasterPass" button.
+                              </li>
+                              <li>
+                                 Next, unlock your MasterPass account to choose your payment method and shipping address.
+                              </li>
+                              <li>
+                                 Then simply confirm your purchase, and you are done!
+                              </li>
+                              <li>
+                                 Use it with all major credit, debit, and prepaid cards.
+                              </li>
+                              <li>
+                                 Use it to easily store all your cards and addresses in one place.
+                              </li>
+                              <li>
+                                 Use it on all your connected devices.
+                              </li>
+                           </ul>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <input type="radio" name="paymentmethod" id="visacheckout"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Visa Checkout
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="visacheckout">
+                  <strong>Visa Checkout</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <span id="#visacheckoutlearnmore">
+<img src="./Newegg.com - Billing Info_files/Cart_LearnMore_Pop-Up_left.png" alt="Visa Checkout">
+</span>
+                           <img src="./Newegg.com - Billing Info_files/POS_horizontal_99x34.png" alt="Visa Checkout">
+                           <ul>
+                              <li>
+<a>
+                                 Learn more
+                                 </a>
+                              </li>
+                           </ul>
+                           <p>
+                           </p>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <input type="radio" name="paymentmethod" id="paypal"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: PayPal
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="paypal">
+                  <strong>PayPal</strong>
+                  </label>
+                  <div>
+                     <div>
+                        <div>
+                           <img src="./Newegg.com - Billing Info_files/pp-acceptance-medium.png" alt="newegg">
+                           <ul>
+                              <li>
+                                 Speed through checkout.
+                              </li>
+                              <li>
+                                 PayPal is the safer, easier way to pay.
+                              </li>
+                              <li>
+<a>
+                                 What is PayPal?
+                                 </a>
+                              </li>
+                           </ul>
+                           <p>
+                           </p>
+                        </div>
+                        <div>
+                           <strong>
+                           PayPal is the safer, easier way to pay
+                           </strong>
+                           <ul>
+                              <li>
+                                 Never expose your credit card number.
+                              </li>
+                              <li>
+                                 Speed through checkout all over the web. One account, one password - no need to retype your shipping or financial information.
+                              </li>
+                           </ul>
+                        </div>
+                     </div>
+                  </div>
+               </li>
+               <li>
+                  <input type="radio" name="paymentmethod" id="creditcard"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Credit Card
+                     parseable name: paymentmethod
+                     field signature: 1614873398
+                     form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <label for="creditcard">
+                  <strong>Credit Card</strong>
+                  </label>
+                  <div id="CreditCardArea">
+                     <dl id="CardList">
+                        <div id="div_cardcvv2">
+                           <div>
+                              <label>
+                              <span>Security Code (CVV2)</span>
+                              <input
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                                 server type: NO_SERVER_DATA
+                                 heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                                 label: Security Code (CVV2)
+                                 parseable name: creditCardCVV2
+                                 field signature: 2862210423
+                                 form signature: 16660402300910943442" data-msg-validatecvv2="Security Code is invalid." type="text" value="" maxlength="4" id="creditCardCVV2" autocomplete="off"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                              <a
+title="What is this?" rel="modal" id="CVV2CodeHelper">
+                              <img src="./Newegg.com - Billing Info_files/cvv2_sm.gif" alt="cvv2">
+</a>
+                              </label>
+                           </div>
+                        </div>
+                        <dt>
+                           <input id="AddNewCareditCard" name="cardList_R" type="radio" value="new"
+title="overall type: UNKNOWN_TYPE
+                              server type: NO_SERVER_DATA
+                              heuristic type: UNKNOWN_TYPE
+                              label: Add New Credit Card
+                              parseable name: cardList_R
+                              field signature: 513212207
+                              form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                           <div>
+                              <label for="AddNewCareditCard">Add New Credit Card</label>
+                           </div>
+                        </dt>
+                        <dd>
+                           <div>
+                              <div>
+                                 <p>
+                                    <strong>All major credit cards accepted:</strong>
+                                    <span>
+                                    <img id="ImgDiscover" graysrc="https://ssl-images.newegg.com/WebResource/Themes/2005/Nest/img_ccDnetwork_v1_grey.gif" src="./Newegg.com - Billing Info_files/img_ccDnetwork_v1.gif" alt="Major Cards Accepted">
+                                    <img id="ImgMastercard" graysrc="https://ssl-images.newegg.com/WebResource/Themes/2005/Nest/img_ccMastercard_grey.gif" src="./Newegg.com - Billing Info_files/img_ccMastercard.gif" alt="Major Cards Accepted">
+                                    <img id="ImgAmex" graysrc="https://ssl-images.newegg.com/WebResource/Themes/2005/Nest/img_ccAmex_grey.gif" src="./Newegg.com - Billing Info_files/img_ccAmex.gif" alt="Major Cards Accepted">
+                                    <img id="ImgVisa" graysrc="https://ssl-images.newegg.com/WebResource/Themes/2005/Nest/img_ccVisa_grey.gif" src="./Newegg.com - Billing Info_files/img_ccVisa.gif" alt="Major Cards Accepted">
+                                    </span>
+                                 </p>
+                              </div>
+                              <div>
+                                 <label for="Card_HolderNameNew">
+                                 Cardholder Name
+                                 <span>(exactly as shown on card)</span>
+                                 </label>
+                                 <input
+title="overall type: CREDIT_CARD_NAME_FULL
+                                    server type: CREDIT_CARD_NAME_FULL
+                                    heuristic type: CREDIT_CARD_NAME_FULL
+                                    label: Cardholder Name (exactly as shown on card)
+                                    parseable name: Card_HolderNameNew
+                                    field signature: 3439434497
+                                    form signature: 16660402300910943442" type="text" maxlength="80" name="Card_HolderNameNew" id="Card_HolderNameNew" value="" focus="false"
+autofill-prediction="CREDIT_CARD_NAME_FULL"
+>
+                              </div>
+                              <div>
+                                 <label for="Card_CCNUMBERNEW">
+                                 Card Number
+                                 </label>
+                                 <input
+title="overall type: CREDIT_CARD_NUMBER
+                                    server type: CREDIT_CARD_NUMBER
+                                    heuristic type: CREDIT_CARD_NUMBER
+                                    label: Card Number
+                                    parseable name: Card_CCNUMBERNEW
+                                    field signature: 1223289945
+                                    form signature: 16660402300910943442" autocomplete="off" id="Card_CCNUMBERNEW" type="text" name="Card_CCNUMBERNEW" value="" onkeyup="if (&#39;True&#39; == &#39;True&#39;) {
+                                    Biz.Payment.AmexPoints.OnChangeOfCardNumberForNewInGlobalCheckoutStep2();}" focus="false"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                                 <img alt="Major Cards Accepted">
+                              </div>
+                              <div>
+                                 <label for="Card_exp_monthNew">
+                                 Expiration Date
+                                 </label>
+                                 <select name="Card_exp_monthNew" id="Card_exp_monthNew" size="1" focus="false"
+title="overall type: CREDIT_CARD_EXP_MONTH
+                                    server type: CREDIT_CARD_EXP_MONTH
+                                    heuristic type: CREDIT_CARD_EXP_MONTH
+                                    label: Expiration Date
+                                    parseable name: Card_exp_monthNew
+                                    field signature: 52703496
+                                    form signature: 16660402300910943442"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                                    <option value="Month">Month</option>
+                                    <option value="01">01</option>
+                                    <option value="02">02</option>
+                                    <option value="03">03</option>
+                                    <option value="04">04</option>
+                                    <option value="05">05</option>
+                                    <option value="06">06</option>
+                                    <option value="07">07</option>
+                                    <option value="08">08</option>
+                                    <option value="09">09</option>
+                                    <option value="10">10</option>
+                                    <option value="11">11</option>
+                                    <option value="12">12</option>
+                                 </select>
+                                 <select name="Card_exp_yearNew" id="Card_exp_yearNew" size="1" focus="false"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                                    server type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                                    heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                                    label: Expiration Date
+                                    parseable name: Card_exp_yearNew
+                                    field signature: 3677977052
+                                    form signature: 16660402300910943442"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                                    <option value="Year">Year</option>
+                                    <option value="2017">2017</option>
+                                    <option value="2018">2018</option>
+                                    <option value="2019">2019</option>
+                                    <option value="2020">2020</option>
+                                    <option value="2021">2021</option>
+                                    <option value="2022">2022</option>
+                                    <option value="2023">2023</option>
+                                    <option value="2024">2024</option>
+                                    <option value="2025">2025</option>
+                                    <option value="2026">2026</option>
+                                    <option value="2027">2027</option>
+                                    <option value="2028">2028</option>
+                                    <option value="2029">2029</option>
+                                    <option value="2030">2030</option>
+                                 </select>
+                              </div>
+                              <div>
+                                 <label for="cvv2code">
+                                 <span>Security Code (CVV2)</span>
+                                 </label>
+                                 <input
+title="overall type: CREDIT_CARD_VERIFICATION_CODE
+                                    server type: NO_SERVER_DATA
+                                    heuristic type: CREDIT_CARD_VERIFICATION_CODE
+                                    label: Security Code (CVV2)
+                                    parseable name: cvv2code
+                                    field signature: 1678191663
+                                    form signature: 16660402300910943442" data-msg-validatecvv2="Security Code is invalid." type="text" value="" maxlength="4" name="cvv2code" id="cvv2code" autocomplete="off"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+>
+                                 <a
+title="What is this?" rel="modal" id="CVV2CodeHelper">
+                                 <img src="./Newegg.com - Billing Info_files/cvv2_sm.gif" alt="cvv2">
+</a>
+                              </div>
+                              <div>
+                                 <div>
+                                    <label>
+                                    <input type="checkbox" checked="checked" name="saveCard" id="saveCard"
+title="overall type: UNKNOWN_TYPE
+                                       server type: NO_SERVER_DATA
+                                       heuristic type: UNKNOWN_TYPE
+                                       label: Save for future orders
+                                       parseable name: saveCard
+                                       field signature: 4084541912
+                                       form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                    Save for future orders
+                                    </label>
+                                 </div>
+                                 <div>
+                                    <label>
+                                    Save Credit Card As:
+                                    <input type="text" value="untitled" maxlength="80" id="Card_PaytermLabel" name="Card_PaytermLabel"
+title="overall type: UNKNOWN_TYPE
+                                       server type: NO_SERVER_DATA
+                                       heuristic type: UNKNOWN_TYPE
+                                       label: Save Credit Card As:
+                                       parseable name: Card_PaytermLabel
+                                       field signature: 3910487729
+                                       form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                    </label>
+                                 </div>
+                                 <div>
+                                    <label>
+                                    <input type="checkbox" checked="checked" name="IsNotDefault" id="makeDefaultOptionNew"
+title="overall type: UNKNOWN_TYPE
+                                       server type: NO_SERVER_DATA
+                                       heuristic type: UNKNOWN_TYPE
+                                       label: Set as default credit card
+                                       parseable name: IsNotDefault
+                                       field signature: 3972010007
+                                       form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                    Set as default credit card
+                                    </label>
+                                 </div>
+                              </div>
+                           </div>
+                           <div>
+</div>
+                           <input type="hidden" name="Card_BankPhone" id="Card_BankPhone" value="888-888-8888">
+                           <input type="hidden" name="Card_TransactionNumber" id="Card_TransactionNumber" value="">
+                           <input type="hidden" name="Card_HolderName" id="Card_HolderName" value="">
+                           <input type="hidden" name="Card_Number" id="Card_Number" value="">
+                           <input type="hidden" name="ReEnter_Card_Number" id="ReEnter_Card_Number" value="">
+                           <input type="hidden" name="IS_Mark_Default" id="IS_Mark_Default" value="">
+                           <input type="hidden" name="Card_exp_month" id="Card_exp_month" value="">
+                           <input type="hidden" name="Card_exp_year" id="Card_exp_year" value="">
+                           <input type="hidden" name="Card_CVV2" id="Card_CVV2" value="">
+                           <input type="hidden" name="Card_IsDefault" id="Card_IsDefault" value="">
+                           <input type="hidden" name="Card_CCTYPE" id="Card_CCTYPE" value="">
+                           <input type="hidden" name="IsUsedAmexSaveCard" id="IsUsedAmexSaveCard" value="false">
+                           <input type="hidden" id="defalutSelectCreditCardRow" value="AddNewCareditCard">
+                           <input type="hidden" name="supportCTypes" id="supportCTypes" value="4,5,6,3">
+                           <input type="hidden" name="IsAMEXDistributedCard" value="False">
+                           <input type="hidden" name="AMEXDistributedCard" value="">
+                           <input type="hidden" name="AMEXDistributedCardVI" value="">
+                           <input type="hidden" name="AMEXDistributedCardRequestID" value="">
+                           <input type="hidden" id="cardNumber-1" value="">
+                        </dd>
+                     </dl>
+                  </div>
+               </li>
+            </ul>
+            <input type="hidden" id="defaultSelectPaytermMethod" value="creditcard" readonly="readonly">
+         </div>
+         <div>
+            Billing Address
+            <span>
+</span>
+         </div>
+         <ul>
+            <li id="address-chooser">
+               <input type="checkbox" id="billingsameaddress" name="IsBilling" checked="" value="yes"
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Same as the shipping address
+                  parseable name: IsBilling
+                  field signature: 1298880426
+                  form signature: 16660402300910943442"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               <label for="billingsameaddress">
+               Same as the shipping address
+               </label>
+            </li>
+            <li id="same-address">
+               <ul>
+                  <li>331 E. Evelyn Avenue</li>
+                  <li>Mountain View,CA 94041</li>
+                  <li>United States</li>
+                  <li>650-903-0800</li>
+                  <li>
+                     formautofilltester@gmail.com
+                  </li>
+               </ul>
+            </li>
+            <li id="new-address">
+               <div>
+                  <input type="hidden" name="STransNumber" value="0">
+                  <input type="hidden" name="action" value="">
+                  <input type="hidden" name="OldContactWith" value="">
+                  <ul>
+                     <li>
+                        <label>
+                        Country
+                        <span>(<strong>NOTE: </strong>
+<em>Billing country cannot be different from shipping country you selected in previous step.</em>)</span>
+                        </label>
+                        <select name="SCountry_Option" selectcountry="USA" id="countryOption" tabindex="0" size="1"
+title="overall type: ADDRESS_HOME_COUNTRY
+                           server type: ADDRESS_HOME_COUNTRY
+                           heuristic type: ADDRESS_HOME_COUNTRY
+                           label: Country (NOTE: Billing country cannot be different from shipping country you selected in previous st
+                           parseable name: SCountry_Option
+                           field signature: 3459145984
+                           form signature: 16660402300910943442"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                           <option value="USA">United States</option>
+                        </select>
+                     </li>
+                     <li>
+                        <label>Address</label>
+                        <input
+title="overall type: ADDRESS_HOME_LINE1
+                           server type: ADDRESS_HOME_LINE1
+                           heuristic type: ADDRESS_HOME_LINE1
+                           label: Address
+                           parseable name: SAddress1
+                           field signature: 328501296
+                           form signature: 16660402300910943442" type="text" name="SAddress1" id="SAddress1" maxlength="100" value="331 E. Evelyn Avenue" placeholder=""
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+                     </li>
+                     <li>
+                        <label>
+                        Address 2
+                        <span>
+<strong>(OPTIONAL)</strong>
+<em>Apartment, suite, floor, etc.</em>
+</span>
+</label>
+                        <input
+title="overall type: ADDRESS_HOME_LINE2
+                           server type: ADDRESS_HOME_LINE2
+                           heuristic type: ADDRESS_HOME_LINE2
+                           label: Address 2 (OPTIONAL) Apartment, suite, floor, etc.
+                           parseable name: SAddress2
+                           field signature: 26232370
+                           form signature: 16660402300910943442" type="text" name="SAddress2" id="SAddress2" maxlength="100" value="" placeholder=""
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+                     </li>
+                     <li>
+                        <ul>
+                           <li>
+                              <div>
+                                 <label id="lblCity">City</label>
+                                 <input
+title="overall type: ADDRESS_HOME_CITY
+                                    server type: ADDRESS_HOME_CITY
+                                    heuristic type: ADDRESS_HOME_CITY
+                                    label: City
+                                    parseable name: SCity
+                                    field signature: 1173963820
+                                    form signature: 16660402300910943442" type="text" name="SCity" id="SCity" maxlength="45" value="Mountain View"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                              </div>
+                           </li>
+                           <li>
+                              <div>
+                                 <label for="stateDropDownList" id="lblState">State/Province/Region</label>
+                                 <div>
+                                    <select selectstate="CA" name="SState_Option" id="SState_Option_USA" tabindex="0" size="1"
+title="overall type: ADDRESS_HOME_STATE
+                                       server type: ADDRESS_HOME_STATE
+                                       heuristic type: ADDRESS_HOME_STATE
+                                       label: State/Province/Region
+                                       parseable name: SState_Option
+                                       field signature: 3077158397
+                                       form signature: 16660402300910943442"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                       <option value="AA">AA</option>
+                                       <option value="AP">AP</option>
+                                       <option value="AE">AE</option>
+                                       <option value="AL">ALABAMA</option>
+                                       <option value="AK">ALASKA</option>
+                                       <option value="AS">AMERICAN SAMOA</option>
+                                       <option value="AZ">ARIZONA</option>
+                                       <option value="AR">ARKANSAS</option>
+                                       <option value="CA">CALIFORNIA</option>
+                                       <option value="CO">COLORADO</option>
+                                       <option value="CT">CONNECTICUT</option>
+                                       <option value="DE">DELAWARE</option>
+                                       <option value="DC">DISTRICT OF COLUMBIA</option>
+                                       <option value="FL">FLORIDA</option>
+                                       <option value="GA">GEORGIA</option>
+                                       <option value="HI">HAWAII</option>
+                                       <option value="ID">IDAHO</option>
+                                       <option value="IL">ILLINOIS</option>
+                                       <option value="IN">INDIANA</option>
+                                       <option value="IA">IOWA</option>
+                                       <option value="KS">KANSAS</option>
+                                       <option value="KY">KENTUCKY</option>
+                                       <option value="LA">LOUISIANA</option>
+                                       <option value="ME">MAINE</option>
+                                       <option value="MD">MARYLAND</option>
+                                       <option value="MA">MASSACHUSETTS</option>
+                                       <option value="MI">MICHIGAN</option>
+                                       <option value="MN">MINNESOTA</option>
+                                       <option value="MS">MISSISSIPPI</option>
+                                       <option value="MO">MISSOURI</option>
+                                       <option value="MT">MONTANA</option>
+                                       <option value="NE">NEBRASKA</option>
+                                       <option value="NV">NEVADA</option>
+                                       <option value="NH">NEW HAMPSHIRE</option>
+                                       <option value="NJ">NEW JERSEY</option>
+                                       <option value="NM">NEW MEXICO</option>
+                                       <option value="NY">NEW YORK</option>
+                                       <option value="NC">NORTH CAROLINA</option>
+                                       <option value="ND">NORTH DAKOTA</option>
+                                       <option value="OH">OHIO</option>
+                                       <option value="OK">OKLAHOMA</option>
+                                       <option value="OR">OREGON</option>
+                                       <option value="PA">PENNSYLVANIA</option>
+                                       <option value="PR">PUERTO RICO</option>
+                                       <option value="RI">RHODE ISLAND</option>
+                                       <option value="SC">SOUTH CAROLINA</option>
+                                       <option value="SD">SOUTH DAKOTA</option>
+                                       <option value="TN">TENNESSEE</option>
+                                       <option value="TX">TEXAS</option>
+                                       <option value="VI">U.S. Virgin Islands</option>
+                                       <option value="UT">UTAH</option>
+                                       <option value="VT">VERMONT</option>
+                                       <option value="VA">VIRGINIA</option>
+                                       <option value="WA">WASHINGTON</option>
+                                       <option value="WV">WEST VIRGINIA</option>
+                                       <option value="WI">WISCONSIN</option>
+                                       <option value="WY">WYOMING</option>
+                                    </select>
+                                 </div>
+                              </div>
+                              <div>
+                                 <label id="lblZip">Zip/Postal Code</label>
+                                 <input
+title="overall type: ADDRESS_HOME_ZIP
+                                    server type: ADDRESS_HOME_ZIP
+                                    heuristic type: ADDRESS_HOME_ZIP
+                                    label: Zip/Postal Code
+                                    parseable name: SZip
+                                    field signature: 3887080504
+                                    form signature: 16660402300910943442" maxlength="20" size="20" type="text" name="SZip" id="SZip" value="94041"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                              </div>
+                           </li>
+                           <li>
+                              <label>
+                              Phone
+                              </label>
+                              <input
+title="overall type: PHONE_HOME_CITY_AND_NUMBER
+                                 server type: PHONE_HOME_CITY_AND_NUMBER
+                                 heuristic type: PHONE_HOME_WHOLE_NUMBER
+                                 label: Phone
+                                 parseable name: ShippingPhone
+                                 field signature: 3574122515
+                                 form signature: 16660402300910943442" type="text" name="ShippingPhone" maxlength="30" id="ShippingPhone" value="650-903-0800"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+                           </li>
+                           <li>
+                              <label>
+                              &nbsp;
+                              </label>
+                              <label>
+                              </label>
+                           </li>
+                           <input type="hidden" id="IsDefault" name="IsDefault">
+                           <input type="hidden" name="SContactWith" value="Tester Mo">
+                        </ul>
+                     </li>
+                  </ul>
+               </div>
+            </li>
+            <input type="hidden" name="BCountry" value="USA">
+            <input type="hidden" name="BAddress1" value="331 E. Evelyn Avenue">
+            <input type="hidden" name="BAddress2" value="">
+            <input type="hidden" name="BCity" value="Mountain View">
+            <input type="hidden" name="BState" value="CA">
+            <input type="hidden" name="BZip" value="94041">
+            <input type="hidden" name="CPCPostalCodeForDisplay" value="">
+            <input type="hidden" name="IsCanadaPost" value="False">
+            <input type="hidden" name="BPhone" value="650-903-0800">
+            <input type="hidden" name="BContactWith" value="Tester Mo">
+            <input type="hidden" name="hiddenSCountry" value="USA">
+            <input type="hidden" name="BIsInPost" value="False">
+         </ul>
+         <input type="hidden" id="cfAppendix" name="cfAppendix">
+         <input type="hidden" id="isIgnoreBillingFocus" value="False">
+         <input type="hidden" name="IsReEnterCreditCardValid" id="IsReEnterCreditCardValid" value="True">
+         <input type="hidden" name="VMESuccessfulReturnInfo" id="VMESuccessfulReturnInfo">
+         <input type="hidden" name="SubmitTypeValue" id="SubmitTypeValue" value="">
+         <input type="hidden" name="lastPurchaseDate" id="lastPurchaseDate" value="1/1/0001 12:00:00 AM">
+         <input type="hidden" id="GoogleWalletMaskedRequest" name="GoogleWalletMaskedRequest" value="">
+         <input type="hidden" id="GoogleWalletMaskedResponse" name="GoogleWalletMaskedResponse">
+         <input type="hidden" name="IsEnoughGCAmount" value="0">
+         <input type="hidden" name="CustomerCardCVV2IsRequired" id="CustomerCardCVV2IsRequired" value="1">
+         <input type="hidden" name="CustomerAppendix" id="CustomerAppendix" value="+KrrFNdT/kbgvDIajN498xXVkpXHtGV4IGEz2zWZhtCaE5W/pB02+iKMnppgs68Q">
+      </form>
+      <form action="https://secure.newegg.com/Common/Ajax/SavePaymentByAjax.aspx" method="POST" id="creditCardCommandEdit_Form" name="creditCardCommandEdit_Form" novalidate="novalidate">
+         <div>
+            <div>
+</div>
+            <ul>
+               <li>
+                  <label for="Card_PaytermLabel">
+                  Save As
+                  <span>
+                  <em>(a nickname for easy recognition)</em>
+                  </span>
+                  </label>
+                  <input type="text" value="" id="Card_PaytermLabel" name="Card_PaytermLabel" maxlength="80"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Save As (a nickname for easy recognition)
+                     parseable name: Card_PaytermLabel
+                     field signature: 3910487729
+                     form signature: 15313939527407611188"
+autofill-prediction="UNKNOWN_TYPE"
+>
+               </li>
+               <li>
+                  <label for="Card_HolderName">
+                  Cardholder Name
+                  <span>
+                  <em>(exactly as shown on card)</em>
+                  </span>
+                  </label>
+                  <input
+title="overall type: CREDIT_CARD_NAME_FULL
+                     server type: CREDIT_CARD_NAME_FULL
+                     heuristic type: CREDIT_CARD_NAME_FULL
+                     label: Cardholder Name (exactly as shown on card)
+                     parseable name: Card_HolderName
+                     field signature: 2535895036
+                     form signature: 15313939527407611188" type="text" maxlength="80" name="Card_HolderName" id="Card_HolderName" focus="false"
+autofill-prediction="CREDIT_CARD_NAME_FULL"
+>
+               </li>
+               <li>
+                  <label for="Card_Number">
+                  Card Number
+                  </label>
+                  <input
+title="overall type: CREDIT_CARD_NUMBER
+                     server type: CREDIT_CARD_NUMBER
+                     heuristic type: CREDIT_CARD_NUMBER
+                     label: Card Number
+                     parseable name: Card_Number
+                     field signature: 3930555619
+                     form signature: 15313939527407611188" autocomplete="off" id="Card_Number" type="text" name="Card_Number" focus="false"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                  <img id="CardImg" name="CardImg" alt="Major Cards Accepted">
+               </li>
+               <li>
+                  <label for="Card_exp_month">
+                  Expiration Date
+                  </label>
+                  <select name="Card_exp_month" id="Card_exp_month" size="1" focus="false"
+title="overall type: CREDIT_CARD_EXP_MONTH
+                     server type: CREDIT_CARD_EXP_MONTH
+                     heuristic type: CREDIT_CARD_EXP_MONTH
+                     label: Expiration Date
+                     parseable name: Card_exp_month
+                     field signature: 3840696256
+                     form signature: 15313939527407611188"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                     <option value="Month">Month</option>
+                     <option value="01">01</option>
+                     <option value="02">02</option>
+                     <option value="03">03</option>
+                     <option value="04">04</option>
+                     <option value="05">05</option>
+                     <option value="06">06</option>
+                     <option value="07">07</option>
+                     <option value="08">08</option>
+                     <option value="09">09</option>
+                     <option value="10">10</option>
+                     <option value="11">11</option>
+                     <option value="12">12</option>
+                  </select>
+                  <select name="Card_exp_year" id="Card_exp_year" size="1" focus="false"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     server type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     heuristic type: CREDIT_CARD_EXP_4_DIGIT_YEAR
+                     label: Expiration Date
+                     parseable name: Card_exp_year
+                     field signature: 185580832
+                     form signature: 15313939527407611188"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                     <option value="Year">Year</option>
+                     <option value="2017">2017</option>
+                     <option value="2018">2018</option>
+                     <option value="2019">2019</option>
+                     <option value="2020">2020</option>
+                     <option value="2021">2021</option>
+                     <option value="2022">2022</option>
+                     <option value="2023">2023</option>
+                     <option value="2024">2024</option>
+                     <option value="2025">2025</option>
+                     <option value="2026">2026</option>
+                     <option value="2027">2027</option>
+                     <option value="2028">2028</option>
+                     <option value="2029">2029</option>
+                     <option value="2030">2030</option>
+                  </select>
+               </li>
+               <li>
+                  <label id="makeCCDefaultOptionNew">
+                  <input type="checkbox" id="makeDefaultOptionNew" name="Card_IsDefault"
+title="overall type: UNKNOWN_TYPE
+                     server type: NO_SERVER_DATA
+                     heuristic type: UNKNOWN_TYPE
+                     label: Set as default credit card
+                     parseable name: Card_IsDefault
+                     field signature: 1494055862
+                     form signature: 15313939527407611188"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  Set as default credit card
+                  </label>
+               </li>
+               <li>
+</li>
+            </ul>
+         </div>
+         <input type="hidden" name="IsInBillingPage" id="IsInBillingPage" value="True">
+         <input type="hidden" name="action" value="edit">
+         <input type="hidden" name="selectIndex" value="">
+         <input type="hidden" name="Card_CCTYPE" id="Card_CCTYPE" value="">
+         <input type="hidden" name="Card_BankPhone" id="Card_BankPhone" value="888-888-8888">
+         <input type="hidden" name="Card_TransactionNumber" id="Card_TransactionNumber" value="">
+         <input type="hidden" name="supportCTypes" id="supportCTypes" value="4,5,6,3">
+      </form>
+      <form action="https://secure.newegg.com/Common/Ajax/SavePaymentByAjax.aspx" method="POST" id="creditCardCommandRemove_Form" name="creditCardCommandRemove_Form" novalidate="novalidate">
+         <div>
+            <div>
+</div>
+         </div>
+         <input type="hidden" name="action" value="remove">
+         <input type="hidden" name="selectIndex" value="">
+         <input type="hidden" name="Card_TransactionNumber" value="">
+      </form>
+      <form action="https://secure.newegg.com/Common/Ajax/SavePaymentByAjax.aspx" method="POST" id="NsccCardCommandEdit_Form" name="NsccCardCommandEdit_Form" novalidate="novalidate">
+         <div>
+            <div>
+</div>
+            <ul>
+               <li>
+                  <label for="Card_HolderName">
+                  Cardholder Name
+                  <span>
+                  <em>(exactly as shown on card)</em>
+                  </span>
+                  </label>
+                  <input
+title="Cardholder Name" type="text" maxlength="80" name="StoreCard_HolderName" id="StoreCard_HolderName" focus="false">
+               </li>
+               <li>
+                  <label for="StoreCard_Number">
+                  Card Number
+                  </label>
+                  <input
+title="Card Number" datavalid="60345916" autocomplete="off" id="StoreCard_Number" type="text" name="StoreCard_Number" focus="false">
+               </li>
+               <li>
+               </li>
+               <input type="hidden" name="action" value="nsccedit">
+               <input type="hidden" name="StoreCard_TransactionNumber" value="">
+            </ul>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/NewEgg/Login.html
@@ -0,0 +1,156 @@
+<!DOCTYPE html>
+<html lang="en-us">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>Newegg.com - Login</title>
+      <meta name="keywords" content="Newegg.com - Once You Know, You Newegg">
+      <meta name="description" content="Newegg.com offers the best prices on computer parts, laptop computers, digital cameras, electronics and more with fast shipping and top-rated customer service.  Once you know, you Newegg!">
+      <meta name="google-translate-customization" content="d08b8c829bab9a46-ac914e23c0a3607a-g7fba27d07436db8a-e">
+      <meta name="language" content="english">
+      <meta name="copyright" content="©  2000-2017 Newegg Inc.">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="robots" content="index,follow">
+   </head>
+   <body>
+      <form method="post" action="https://secure.newegg.com/Shopping/ShoppingLogin.aspx" name="loginForm" id="loginForm" novalidate="novalidate">
+         <span id="CaptchaS">
+</span>
+         <input type="hidden" name="nextpage" value="https://secure.newegg.com/GlobalShopping/CheckoutStep1.aspx?CartID=797%2b903ZRCECSZWBJE0&amp;PaymentType=SIMPLECHECKOUT&amp;IsFromCart=1">
+         <input type="hidden" name="StuTargetPage" value="">
+         <input type="hidden" name="action" value="login">
+         <input type="hidden" name="ShoppingLoginFlag" value="0">
+         <input type="hidden" name="SPSign" value="">
+         <input type="hidden" name="LoginAppendix" value="x0kFyaA7FPQ7xpTt6JRs7tjF3jD2dY/TYhVkLYYFvo6cyOJwvqVUNlxxUjSZYUB0">
+         <ul>
+            <li>
+               <label for="UserName">
+               Newegg ID
+               <span>
+               (Typically your email address)
+               </span>
+               </label>
+               <input type="text" tabindex="5" maxlength="128" size="15"
+title="Email Address" id="UserName" name="UserName" value="">
+            </li>
+            <li>
+               <label for="UserPwd">
+               Password
+               </label>
+               <input type="password" tabindex="6" maxlength="30" size="17"
+title="Password" id="UserPwd" name="UserPwd">
+            </li>
+            <li>
+               <input type="checkbox" value="1" id="IsRemember" name="IsRemember" tabindex="8">
+<label for="IsRemember">Remember Me</label>
+            </li>
+            <li id="guestloginforgot">
+<a
+title="Forgot your Newegg ID or Password?">
+               Forgot your Newegg ID or Password?
+               </a>
+            </li>
+            <li>
+               <div>
+                  <div>
+                  </div>
+                  <a tabindex="7" id="submit">
+                  SIGN IN <span>â–º</span>
+                  </a>
+               </div>
+            </li>
+            <li>
+               <input type="checkbox" value="1" id="IsSubscribe" name="Newsletter" tabindex="9">
+<label for="IsSubscribe">Subscribe for exclusive e-mail offers and discounts</label>
+            </li>
+         </ul>
+         <input type="hidden" id="cfAppendix" name="cfAppendix">
+         <input type="hidden" name="LoginAdditional" value="V6QdNc8GTJxKoxj5ef1cRLAlFLzcWhGcVj7od0iDpBUAd2FabNw7ApfN0g6LtbiB7EHyhgAaqpOdFbyt3NLuwPc9y1fkPs72+5qzSWHzJu19uWH+4mAefmVtLbXxTeIyGjEzvpanJrgib/dw61t1qZBot9DAigxz">
+         <input type="hidden" name="IsPrevCaptcha" value="False">	
+         <input type="hidden" id="GoogleReCAPTCHA" name="GoogleReCAPTCHA" value="False">
+         <input type="hidden" id="hiddenServerDateTimeNow" value="Mon, 20 Mar 2017 03:43:47 GMT">
+         <input type="hidden" id="hiddenAllowClientTimeDiffInMinute" value="10">
+      </form>
+      <form method="post" action="https://secure.newegg.com/Shopping/ShoppingLogin.aspx" name="guestCheckOutForm" id="guestCheckOutForm" novalidate="novalidate">
+         <input type="hidden" name="action" value="guestckeckout">
+         <a rel="">CONTINUE AS A GUEST <span>â–º</span>
+</a>
+      </form>
+      <form name="registerForm" id="registerForm" method="post" action="https://secure.newegg.com/Shopping/ShoppingLogin.aspx" novalidate="novalidate">
+         <input type="hidden" value="https://secure.newegg.com/GlobalShopping/CheckoutStep1.aspx?CartID=797%2b903ZRCECSZWBJE0&amp;PaymentType=SIMPLECHECKOUT&amp;IsFromCart=1" name="NextPage">
+         <input type="hidden" name="ShoppingLoginFlag" value="0">
+         <input type="hidden" name="action" value="register">
+         <input type="hidden" name="SPSign" value="">
+         <input type="hidden" name="LoginAppendix" id="LoginAppendix" value="x0kFyaA7FPQ7xpTt6JRs7tjF3jD2dY/TYhVkLYYFvo6cyOJwvqVUNlxxUjSZYUB0">
+         <input type="hidden" name="IsPrevCaptcha" value="False">	
+         <ul>
+            <li>
+<label for="LoginName">Email Address</label>
+<input name="LoginName" id="LoginName" tabindex="10" maxlength="128"
+title="overall type: EMAIL_ADDRESS
+               server type: EMAIL_ADDRESS
+               heuristic type: EMAIL_ADDRESS
+               label: Email Address
+               parseable name: LoginName
+               field signature: 1679789274
+               form signature: 17613573414325428514" value="" type="text"
+autofill-prediction="EMAIL_ADDRESS"
+>
+</li>
+            <li>
+<label for="Password">Password</label>
+<input name="Password" id="Password" tabindex="12" type="password"
+title="overall type: ACCOUNT_CREATION_PASSWORD
+               server type: ACCOUNT_CREATION_PASSWORD
+               heuristic type: UNKNOWN_TYPE
+               label: Password
+               parseable name: Password
+               field signature: 3935904101
+               form signature: 17613573414325428514"
+autofill-prediction="ACCOUNT_CREATION_PASSWORD"
+>
+</li>
+            <li>
+<label for="LoginName1">Confirm Email Address</label>
+<input name="LoginName1" tabindex="11" maxlength="128" id="LoginName1"
+title="overall type: EMAIL_ADDRESS
+               server type: EMAIL_ADDRESS
+               heuristic type: EMAIL_ADDRESS
+               label: Confirm Email Address
+               parseable name: LoginName1
+               field signature: 2268781658
+               form signature: 17613573414325428514" value="" type="text"
+autofill-prediction="EMAIL_ADDRESS"
+>
+</li>
+            <li>
+<label for="Password1">Confirm Password</label>
+<input name="Password1" id="Password1" tabindex="13"
+title="overall type: UNKNOWN_TYPE
+               server type: NO_SERVER_DATA
+               heuristic type: UNKNOWN_TYPE
+               label: Confirm Password
+               parseable name: Password1
+               field signature: 1108250005
+               form signature: 17613573414325428514" type="password"
+autofill-prediction="UNKNOWN_TYPE"
+>
+</li>
+            <li>
+</li>
+            <li>
+               <input id="IsSubscribe2" type="checkbox" value="1" name="Newsletter" tabindex="15" checked=""
+title="overall type: UNKNOWN_TYPE
+                  server type: NO_SERVER_DATA
+                  heuristic type: UNKNOWN_TYPE
+                  label: Subscribe for exclusive e-mail offers and discounts
+                  parseable name: Newsletter
+                  field signature: 2681942707
+                  form signature: 17613573414325428514"
+autofill-prediction="UNKNOWN_TYPE">
+<label for="IsSubscribe2"
+>Subscribe for exclusive e-mail offers and discounts</label>
+            </li>
+         </ul>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/NewEgg/ShippingInfo.html
@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html lang="en-us">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+      <title>Newegg.com - Shipping Info</title>
+      <meta name="keywords" content="Newegg.com - Once You Know, You Newegg">
+      <meta name="description" content="Newegg.com offers the best prices on computer parts, laptop computers, digital cameras, electronics and more with fast shipping and top-rated customer service.  Once you know, you Newegg!">
+      <meta name="google-translate-customization" content="d08b8c829bab9a46-ac914e23c0a3607a-g7fba27d07436db8a-e">
+      <meta name="language" content="english">
+      <meta name="copyright" content="©  2000-2017 Newegg Inc.">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge">
+      <meta name="robots" content="index,follow">
+   </head>
+   <body>
+      <form id="checkout-shipping" action="https://secure.newegg.com/GlobalShopping/CheckoutStep1.aspx?CartID=415%2b903ZRCECSZWBJE0&amp;IsCombineGuest=1" method="POST" novalidate="novalidate">
+         <input type="hidden" name="SubmitFlag" value="true">
+         <input type="hidden" name="STransNumber" value="0">
+         <input type="hidden" name="action" value="">
+         <input type="hidden" name="OldContactWith" value="">
+         <ul>
+            <li>
+               <label>
+               First Name
+               </label>
+               <input validgroup="g1"
+title="overall type: NAME_FIRST
+                  server type: NAME_FIRST
+                  heuristic type: NAME_FIRST
+                  label: First Name
+                  parseable name: SFirstName
+                  field signature: 3883597444
+                  form signature: 7987654844929240962" type="text" name="SFirstName" id="SFirstName" maxlength="80" value=""
+autofill-prediction="NAME_FIRST" enablevalid="true"
+>
+            </li>
+            <li>
+               <label>
+               Last Name
+               </label>
+               <input validgroup="g1"
+title="overall type: NAME_LAST
+                  server type: NAME_LAST
+                  heuristic type: NAME_LAST
+                  label: Last Name
+                  parseable name: SLastName
+                  field signature: 1256168210
+                  form signature: 7987654844929240962" type="text" name="SLastName" id="SLastName" maxlength="80" value=""
+autofill-prediction="NAME_LAST" enablevalid="true"
+>
+            </li>
+            <li>
+               <label>
+               Country
+               </label>
+               <select name="SCountry_Option" selectcountry="USA" id="countryOption" tabindex="0" size="1"
+title="overall type: ADDRESS_HOME_COUNTRY
+                  server type: ADDRESS_HOME_COUNTRY
+                  heuristic type: ADDRESS_HOME_COUNTRY
+                  label: Country
+                  parseable name: SCountry_Option
+                  field signature: 3459145984
+                  form signature: 7987654844929240962"
+autofill-prediction="ADDRESS_HOME_COUNTRY"
+>
+                  <option value="USA">United States</option>
+               </select>
+            </li>
+            <li>
+               <label>Address</label>
+               <input
+title="overall type: ADDRESS_HOME_LINE1
+                  server type: ADDRESS_HOME_LINE1
+                  heuristic type: ADDRESS_HOME_LINE1
+                  label: Address
+                  parseable name: SAddress1
+                  field signature: 328501296
+                  form signature: 7987654844929240962" type="text" name="SAddress1" id="SAddress1" maxlength="100" value="" placeholder=""
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+            </li>
+            <li>
+               <label>
+               Address 2
+               <span>
+<strong>(OPTIONAL)</strong>
+<em>Apartment, suite, floor, etc.</em>
+</span>
+</label>
+               <input
+title="overall type: ADDRESS_HOME_LINE2
+                  server type: ADDRESS_HOME_LINE2
+                  heuristic type: ADDRESS_HOME_LINE2
+                  label: Address 2 (OPTIONAL) Apartment, suite, floor, etc.
+                  parseable name: SAddress2
+                  field signature: 26232370
+                  form signature: 7987654844929240962" type="text" name="SAddress2" id="SAddress2" maxlength="100" value="" placeholder=""
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+            </li>
+            <li>
+               <ul>
+                  <li>
+                     <div>
+                        <label id="lblCity">City</label>
+                        <input
+title="overall type: ADDRESS_HOME_CITY
+                           server type: ADDRESS_HOME_CITY
+                           heuristic type: ADDRESS_HOME_CITY
+                           label: City
+                           parseable name: SCity
+                           field signature: 1173963820
+                           form signature: 7987654844929240962" type="text" name="SCity" id="SCity" maxlength="45" value=""
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                     </div>
+                  </li>
+                  <li>
+                     <div>
+                        <label for="stateDropDownList" id="lblState">State/Province/Region</label>
+                        <div>
+                           <select selectstate="" name="SState_Option" id="SState_Option_USA" tabindex="0" size="1"
+title="overall type: ADDRESS_HOME_STATE
+                              server type: ADDRESS_HOME_STATE
+                              heuristic type: ADDRESS_HOME_STATE
+                              label: State/Province/Region
+                              parseable name: SState_Option
+                              field signature: 3077158397
+                              form signature: 7987654844929240962"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                              <option value="AA">AA</option>
+                              <option value="AP">AP</option>
+                              <option value="AE">AE</option>
+                              <option value="AL">ALABAMA</option>
+                              <option value="AK">ALASKA</option>
+                              <option value="AS">AMERICAN SAMOA</option>
+                              <option value="AZ">ARIZONA</option>
+                              <option value="AR">ARKANSAS</option>
+                              <option value="CA">CALIFORNIA</option>
+                              <option value="CO">COLORADO</option>
+                              <option value="CT">CONNECTICUT</option>
+                              <option value="DE">DELAWARE</option>
+                              <option value="DC">DISTRICT OF COLUMBIA</option>
+                              <option value="FL">FLORIDA</option>
+                              <option value="GA">GEORGIA</option>
+                              <option value="HI">HAWAII</option>
+                              <option value="ID">IDAHO</option>
+                              <option value="IL">ILLINOIS</option>
+                              <option value="IN">INDIANA</option>
+                              <option value="IA">IOWA</option>
+                              <option value="KS">KANSAS</option>
+                              <option value="KY">KENTUCKY</option>
+                              <option value="LA">LOUISIANA</option>
+                              <option value="ME">MAINE</option>
+                              <option value="MD">MARYLAND</option>
+                              <option value="MA">MASSACHUSETTS</option>
+                              <option value="MI">MICHIGAN</option>
+                              <option value="MN">MINNESOTA</option>
+                              <option value="MS">MISSISSIPPI</option>
+                              <option value="MO">MISSOURI</option>
+                              <option value="MT">MONTANA</option>
+                              <option value="NE">NEBRASKA</option>
+                              <option value="NV">NEVADA</option>
+                              <option value="NH">NEW HAMPSHIRE</option>
+                              <option value="NJ">NEW JERSEY</option>
+                              <option value="NM">NEW MEXICO</option>
+                              <option value="NY">NEW YORK</option>
+                              <option value="NC">NORTH CAROLINA</option>
+                              <option value="ND">NORTH DAKOTA</option>
+                              <option value="OH">OHIO</option>
+                              <option value="OK">OKLAHOMA</option>
+                              <option value="OR">OREGON</option>
+                              <option value="PA">PENNSYLVANIA</option>
+                              <option value="PR">PUERTO RICO</option>
+                              <option value="RI">RHODE ISLAND</option>
+                              <option value="SC">SOUTH CAROLINA</option>
+                              <option value="SD">SOUTH DAKOTA</option>
+                              <option value="TN">TENNESSEE</option>
+                              <option value="TX">TEXAS</option>
+                              <option value="VI">U.S. Virgin Islands</option>
+                              <option value="UT">UTAH</option>
+                              <option value="VT">VERMONT</option>
+                              <option value="VA">VIRGINIA</option>
+                              <option value="WA">WASHINGTON</option>
+                              <option value="WV">WEST VIRGINIA</option>
+                              <option value="WI">WISCONSIN</option>
+                              <option value="WY">WYOMING</option>
+                           </select>
+                        </div>
+                     </div>
+                     <div>
+                        <label id="lblZip">Zip/Postal Code</label>
+                        <input
+title="overall type: ADDRESS_HOME_ZIP
+                           server type: ADDRESS_HOME_ZIP
+                           heuristic type: ADDRESS_HOME_ZIP
+                           label: Zip/Postal Code
+                           parseable name: SZip
+                           field signature: 3887080504
+                           form signature: 7987654844929240962" maxlength="20" size="20" type="text" name="SZip" id="SZip" value=""
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                     </div>
+                  </li>
+                  <li>
+                     <label>
+                     Phone
+                     </label>
+                     <input
+title="overall type: PHONE_HOME_CITY_AND_NUMBER
+                        server type: PHONE_HOME_CITY_AND_NUMBER
+                        heuristic type: PHONE_HOME_WHOLE_NUMBER
+                        label: Phone
+                        parseable name: ShippingPhone
+                        field signature: 3574122515
+                        form signature: 7987654844929240962" type="text" name="ShippingPhone" maxlength="30" id="ShippingPhone" value=""
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+                  </li>
+                  <li>
+                     <label>
+                     Email
+                     </label>
+                     <input
+title="overall type: EMAIL_ADDRESS
+                        server type: EMAIL_ADDRESS
+                        heuristic type: EMAIL_ADDRESS
+                        label: Email
+                        parseable name: GuestEmail
+                        field signature: 658796670
+                        form signature: 7987654844929240962" type="text" name="GuestEmail" id="email" value="" maxlength="128"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                  </li>
+                  <li>
+                     <label>
+                        <span>
+                        <strong>NOTE:</strong> Your phone number is needed to contact you for shipping-related questions and your email address will be used only to send you information about your order.
+                        </span>
+                        <p>
+                           <span>
+                           Please visit our <a>Privacy Policy</a> for more information.</span>
+                        </p>
+                     </label>
+                  </li>
+                  <input type="hidden" id="IsDefault" name="IsDefault">
+               </ul>
+            </li>
+         </ul>
+         <input type="hidden" value="True" id="CheckGuestEmail" name="CheckGuestEmail">
+      </form>
+      <input type="hidden" id="FedExShippingIsDefault" value="False">
+      <input type="hidden" id="CanadaPostIsDefault" value="False">
+      <input type="hidden" id="IsBrowserBack" value="false">
+      <ul>
+         <li>
+            <input type="radio" name="shippingAddressPanel" value="creditcard" id="shippingAddressAdd">
+            <label for="shippingAddressAdd">
+            <strong>Enter a new shipping address</strong>
+            </label>
+            <div id="checkoutShippingAddPanel">
+            </div>
+         </li>
+      </ul>
+      <div>
+         <input type="checkbox" id="makeDefaultOption" name="makeDefaultOption">
+         <label for="makeDefaultOption">Set as default credit card</label>
+      </div>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/Payment.html
@@ -0,0 +1,672 @@
+<!DOCTYPE html>
+<html lang="en-US">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
+      <meta http-equiv="expires" content="0">
+      <meta http-equiv="pragma" content="no-cache">
+      <meta http-equiv="cache-control" content="no-cache">
+      <meta http-equiv="pragma-directive" content="no-cache">
+      <meta http-equiv="cache-directive" content="no-cache">
+      <meta name="robots" content="NOODP, NOYDIR">
+      <title>
+</title>
+   </head>
+   <body>
+      <meta name="apple-itunes-app" content="app-id=471037434">
+      <title>Office Supplies, Furniture, Technology at Offic Depot</title>
+      <meta name="description" content="Shop office supplies, furniture &amp; technology at Office Depot. For paper, ink, toner &amp; more, find trusted brands at everyday low prices.">
+      <meta name="keywords" content="office supplies, office furniture, technology, electronics">
+      <meta property="og:image" content="https://secure.www.odcdn.com/images/us/od/brand.png">
+      <form name="anonymousConfirmForm" method="post" action="https://www.officedepot.com/checkout/anonymousConfirmRouter.do" id="confirmFormId" novalidate="novalidate">
+         <input type="hidden" name="partialReg" value="false">
+         <input type="hidden" name="cartIsNotAllPickup" value="true">
+         <input type="hidden" name="step" value="bill">
+         <input type="hidden" name="orderNumber" value="914646582" id="orderNumber">
+         <input type="hidden" name="orderSubNumber" value="001" id="orderSubNumber">
+         <input type="hidden" name="linked" value="false">
+         <input type="hidden" name="billToID" value="">
+         <input type="hidden" name="requestFromPage" value="true">
+         <input type="hidden" name="nececessaryToRevalidate" id="nececessaryToRevalidate" value="false">
+         <input type="hidden" name="revalidateTrigger" id="revalidateTrigger" value="">
+         <input type="submit" name="cmd_confirm" tabindex="1">
+         <input type="hidden" name="proceedFromBill" value="true">
+         <input type="hidden" name="flowMode" id="flowMode" value="ANONYMOUS">
+         <div id="checkoutBillingV3">
+            <div>
+               <div>
+                  <div>
+                     <input type="hidden" name="guestEmailOptIn" value="true">
+                     <input type="hidden" id="isAnonCheckout" value="true">
+                     <div>
+                        <input type="hidden" name="payWithSavedCard" id="payWithSavedCard" value="false">
+                        <input type="hidden" id="cardTypeForMaskedValue" value="">
+                        <input type="hidden" id="showCardList" value="false">
+                        <div id="payWithCreditCard">
+                           <div id="iFrameFields">
+                              <div id="creditCardIframe">
+                                 <div id="cardValidationError">
+</div>
+                                 <div id="preventFlicker">
+                                    <div id="creditCardFrame">
+                                       <div id="iFrameExpDateFields">
+                                          <label>Expiration Date</label>
+                                          <select name="paymentFormInfo.payPageFormInfo.creditCardExpMonth"
+title="overall type: CREDIT_CARD_EXP_MONTH server type: CREDIT_CARD_EXP_MONTH heuristic type: UNKNOWN_TYPE label: Expiration Date parseable name: paymentFormInfo.payPageFormInfo.creditCardExpMonth field signature: 1909413716 form signature: 4882000530220881601" tabindex="2"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                                             <option value=" ">
+                                                --
+                                             </option>
+                                             <option value="01">
+                                                01
+                                             </option>
+                                             <option value="02">
+                                                02
+                                             </option>
+                                             <option value="03">
+                                                03
+                                             </option>
+                                             <option value="04">
+                                                04
+                                             </option>
+                                             <option value="05">
+                                                05
+                                             </option>
+                                             <option value="06">
+                                                06
+                                             </option>
+                                             <option value="07">
+                                                07
+                                             </option>
+                                             <option value="08">
+                                                08
+                                             </option>
+                                             <option value="09">
+                                                09
+                                             </option>
+                                             <option value="10">
+                                                10
+                                             </option>
+                                             <option value="11">
+                                                11
+                                             </option>
+                                             <option value="12">
+                                                12
+                                             </option>
+                                          </select>
+                                          <select name="paymentFormInfo.payPageFormInfo.creditCardExpYear"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR server type: CREDIT_CARD_EXP_4_DIGIT_YEAR heuristic type: CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR label: Expiration Date parseable name: paymentFormInfo.payPageFormInfo.creditCardExpYear field signature: 884603578 form signature: 4882000530220881601" tabindex="3"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                                             <option value="">
+                                                --
+                                             </option>
+                                             <option value="17">
+                                                2017
+                                             </option>
+                                             <option value="18">
+                                                2018
+                                             </option>
+                                             <option value="19">
+                                                2019
+                                             </option>
+                                             <option value="20">
+                                                2020
+                                             </option>
+                                             <option value="21">
+                                                2021
+                                             </option>
+                                             <option value="22">
+                                                2022
+                                             </option>
+                                             <option value="23">
+                                                2023
+                                             </option>
+                                             <option value="24">
+                                                2024
+                                             </option>
+                                             <option value="25">
+                                                2025
+                                             </option>
+                                             <option value="26">
+                                                2026
+                                             </option>
+                                             <option value="27">
+                                                2027
+                                             </option>
+                                             <option value="28">
+                                                2028
+                                             </option>
+                                             <option value="29">
+                                                2029
+                                             </option>
+                                             <option value="30">
+                                                2030
+                                             </option>
+                                             <option value="31">
+                                                2031
+                                             </option>
+                                             <option value="32">
+                                                2032
+                                             </option>
+                                             <option value="33">
+                                                2033
+                                             </option>
+                                             <option value="34">
+                                                2034
+                                             </option>
+                                             <option value="35">
+                                                2035
+                                             </option>
+                                          </select>
+                                       </div>
+                                       <div id="frameFields">
+                                          <input type="hidden" id="getMerchantIdPrefix" value="CKWWW">
+                                          <input type="hidden" id="paypageRegistrationId" name="paymentFormInfo.payPageFormInfo.payPageRegistrationId" >
+                                          <input type="hidden" id="bin" name="paymentFormInfo.payPageFormInfo.binRange">
+                                          <input type="hidden" id="merchantTxnId" name="paymentFormInfo.payPageFormInfo.merchantTxnId" value="CKWWW-201732012117">
+                                          <input type="hidden" id="orderId" name="paymentFormInfo.payPageFormInfo.orderId" value="914646582-001">
+                                          <input type="hidden" id="code" name="paymentFormInfo.payPageFormInfo.code">
+                                          <input type="hidden" id="responseTime" name="paymentFormInfo.payPageFormInfo.responseTime" >
+                                          <input type="hidden" id="message" name="paymentFormInfo.payPageFormInfo.message" size="100">
+                                          <input type="hidden" id="litleTxnId" name="paymentFormInfo.payPageFormInfo.litleTxnId">
+                                          <input type="hidden" id="type" name="paymentFormInfo.payPageFormInfo.cardType">
+                                          <input type="hidden" id="firstSix" name="paymentFormInfo.payPageFormInfo.firstSix">
+                                          <input type="hidden" id="lastFour" name="paymentFormInfo.payPageFormInfo.lastFour">
+                                          <input type="hidden" id="timeoutMessage" name="paymentFormInfo.payPageFormInfo.timeoutMessage" >
+                                       </div>
+                                    </div>
+                                 </div>
+                              </div>
+                           </div>
+                           <div>
+                              <div>
+                                 <label for="paymentFormInfo.tenderType" >
+                                 <input type="radio" name="paymentFormInfo.tenderType" value="CR" checked
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Credit Card parseable name: paymentFormInfo.tenderType field signature: 920121368 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+> Credit Card</label>
+                              </div>
+                           </div>
+                        </div>
+                        <div id="payWithPayPal">
+                           <input type="hidden" name="paypalInfoInSession" id="paypalInfoInSession" value="false">
+                           <div>
+                              <label for="paymentFormInfo.tenderType" >
+                              <input type="radio" name="paymentFormInfo.tenderType" value="PL"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Pay with PayPal You'll be redirected to the PayPal site to sign in and confirm your payment. You wil parseable name: paymentFormInfo.tenderType field signature: 920121368 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                              </label>
+                           </div>
+                        </div>
+                        <div id="payWithMasterPass">
+                           <div>
+                              <label for="paymentFormInfo.tenderType" >
+                              <input type="radio" name="paymentFormInfo.tenderType" value="MS"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Pay with MasterPass You'll be redirected to the MasterPass site to sign in and confirm your payment. parseable name: paymentFormInfo.tenderType field signature: 920121368 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+</label>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div id="checkoutBillingAddressSection">
+                     <div id="shippingInfo">
+                        <input type="hidden" name="addrsForm[2].firstName" value="Tester" id="firstName-2">
+                        <input type="hidden" name="addrsForm[2].lastName" value="Mo" id="lastName-2">
+                        <input type="hidden" name="addrsForm[2].shiptoName" value="Mozilla" id="shiptoName-2">
+                        <input type="hidden" name="addrsForm[2].address1" value="331 E. Evelyn Avenue" id="address1-2">
+                        <input type="hidden" name="addrsForm[2].address2" value="" id="address2-2">
+                        <input type="hidden" name="addrsForm[2].city" value="MOUNTAIN VIEW" id="city-2">
+                        <input type="hidden" name="addrsForm[2].state" value="CA" id="state-2">
+                        <input type="hidden" name="addrsForm[2].postalCode1" value="94041" id="postalCode1-2">
+                        <input type="hidden" name="addrsForm[2].country" value="USA" id="country-2">
+                        <input type="hidden" name="addrsForm[2].phoneNumber1" value="650" id="phoneNumber1-2">
+                        <input type="hidden" name="addrsForm[2].phoneNumber2" value="903" id="phoneNumber2-2">
+                        <input type="hidden" name="addrsForm[2].phoneNumber3" value="0800" id="phoneNumber3-2">
+                        <input type="hidden" name="addrsForm[2].phoneNumber4" value="0800" id="phoneNumber4-2">
+                        <input type="hidden" name="addrsForm[2].email" value="formautofilltester@gmail.com" id="email-2">
+                        <input type="hidden" name="shippingEmailPreferences.optInSelected" value="true">
+                     </div>
+                     <div id="billingInfo">
+                        <div>
+                           <label>
+                           <input type="checkbox" name="sameAsBilling" id="billingAddressSameAsShipping" checked tabindex="4"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Same as Shipping parseable name: sameAsBilling field signature: 2684212655 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+> Same as Shipping</label>
+                        </div>
+                        <div id="reg_billingInfo">
+                           <div id="anonymousBillingInfoForm">
+                              <input type="hidden" id="country-0" name="addrsForm[0].country" value="USA">
+                              <div>
+                                 <div>
+                                    <div>
+                                       <div>
+                                          <label for="firstName-0">
+<em>*</em>First Name:</label>
+                                          <input type="text" id="firstName-0" name="addrsForm[0].firstName" value="" maxlength="30"
+title="overall type: CREDIT_CARD_NAME_FIRST server type: NAME_FIRST heuristic type: CREDIT_CARD_NAME_FIRST label: *First Name: parseable name: addrsForm[0].firstName field signature: 923482701 form signature: 4882000530220881601"
+autofill-prediction="CREDIT_CARD_NAME_FIRST"
+>
+                                       </div>
+                                    </div>
+                                    <div>
+                                       <div>
+                                          <label for="lastName-0">
+<em>*</em>Last Name:</label>
+                                          <input type="text" id="lastName-0" name="addrsForm[0].lastName" value="" maxlength="30"
+title="overall type: CREDIT_CARD_NAME_LAST server type: NAME_LAST heuristic type: CREDIT_CARD_NAME_LAST label: *Last Name: parseable name: addrsForm[0].lastName field signature: 3226352217 form signature: 4882000530220881601"
+autofill-prediction="CREDIT_CARD_NAME_LAST"
+>
+                                       </div>
+                                    </div>
+                                 </div>
+                                 <div>
+                                    <label for="shipToName-0">Company Name:</label>
+                                    <input type="text" id="shipToName-0" name="addrsForm[0].shiptoName" value="" maxlength="30"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: COMPANY_NAME label: Company Name: parseable name: addrsForm[0].shiptoName field signature: 2508018426 form signature: 4882000530220881601"
+autofill-prediction="COMPANY_NAME"
+>
+                                 </div>
+                                 <div>
+                                    <label for="address1-0">
+<em>*</em>Address:</label>
+                                    <input type="text" id="address1-0" name="addrsForm[0].address1" value="" maxlength="25"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: *Address: parseable name: addrsForm[0].address1 field signature: 3908367322 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+                                 </div>
+                                 <div>
+                                    <label for="address2-0">Address Line 2: <span>(optional)</span>
+</label>
+                                    <input type="text" id="address2-0" name="addrsForm[0].address2" value="" maxlength="25"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Address Line 2: (optional) parseable name: addrsForm[0].address2 field signature: 3866764654 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+                                 </div>
+                                 <div>
+                                    <div>
+                                       <div>
+                                          <label for="postalCode1-0">
+<em>*</em>Postal Code:</label>
+                                          <input type="text" id="postalCode1-0" name="addrsForm[0].postalCode1" value="" maxlength="9"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: *Postal Code: parseable name: addrsForm[0].postalCode1 field signature: 1708240695 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                                       </div>
+                                    </div>
+                                 </div>
+                                 <div>
+                                    <div>
+                                       <div >
+                                          <label for="checkoutCityAndState">
+<em>*</em>City & State</label>
+                                          <select id="checkoutCityAndState"
+title="overall type: ADDRESS_HOME_CITY server type: NO_SERVER_DATA heuristic type: ADDRESS_HOME_CITY label: *City &amp; State parseable name: checkoutCityAndState field signature: 3899416585 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                                          </select>
+                                       </div>
+                                    </div>
+                                 </div>
+                                 <div>
+                                    <div>
+                                       <div>
+                                          <label for="city-0">
+<em>*</em>City:</label>
+                                          <input type="text" id="city-0" name="addrsForm[0].city" value=""
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: *City: parseable name: addrsForm[0].city field signature: 1634404945 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                                       </div>
+                                    </div>
+                                    <div>
+                                       <div >
+                                          <label for="state-0">
+<em>*</em>State:</label>
+                                          <select name="addrsForm[0].state" id="state-0" size="1"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: *State: parseable name: addrsForm[0].state field signature: 3377657622 form signature: 4882000530220881601"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                             <option value="{blank}"> Select a state
+                                             </option>
+                                             <option value="AK"> AK - Alaska
+                                             </option>
+                                             <option value="AL"> AL - Alabama
+                                             </option>
+                                             <option value="AR"> AR - Arkansas
+                                             </option>
+                                             <option value="AZ"> AZ - Arizona
+                                             </option>
+                                             <option value="CA"> CA - California
+                                             </option>
+                                             <option value="CO"> CO - Colorado
+                                             </option>
+                                             <option value="CT"> CT - Connecticut
+                                             </option>
+                                             <option value="DC"> DC - District of Columbia
+                                             </option>
+                                             <option value="DE"> DE - Delaware
+                                             </option>
+                                             <option value="FL"> FL - Florida
+                                             </option>
+                                             <option value="GA"> GA - Georgia
+                                             </option>
+                                             <option value="HI"> HI - Hawaii
+                                             </option>
+                                             <option value="IA"> IA - Iowa
+                                             </option>
+                                             <option value="ID"> ID - Idaho
+                                             </option>
+                                             <option value="IL"> IL - Illinois
+                                             </option>
+                                             <option value="IN"> IN - Indiana
+                                             </option>
+                                             <option value="KS"> KS - Kansas
+                                             </option>
+                                             <option value="KY"> KY - Kentucky
+                                             </option>
+                                             <option value="LA"> LA - Louisiana
+                                             </option>
+                                             <option value="MA"> MA - Massachusetts
+                                             </option>
+                                             <option value="MD"> MD - Maryland
+                                             </option>
+                                             <option value="ME"> ME - Maine
+                                             </option>
+                                             <option value="MI"> MI - Michigan
+                                             </option>
+                                             <option value="MN"> MN - Minnesota
+                                             </option>
+                                             <option value="MO"> MO - Missouri
+                                             </option>
+                                             <option value="MS"> MS - Mississippi
+                                             </option>
+                                             <option value="MT"> MT - Montana
+                                             </option>
+                                             <option value="NC"> NC - North Carolina
+                                             </option>
+                                             <option value="ND"> ND - North Dakota
+                                             </option>
+                                             <option value="NE"> NE - Nebraska
+                                             </option>
+                                             <option value="NH"> NH - New Hampshire
+                                             </option>
+                                             <option value="NJ"> NJ - New Jersey
+                                             </option>
+                                             <option value="NM"> NM - New Mexico
+                                             </option>
+                                             <option value="NV"> NV - Nevada
+                                             </option>
+                                             <option value="NY"> NY - New York
+                                             </option>
+                                             <option value="OH"> OH - Ohio
+                                             </option>
+                                             <option value="OK"> OK - Oklahoma
+                                             </option>
+                                             <option value="OR"> OR - Oregon
+                                             </option>
+                                             <option value="PA"> PA - Pennsylvania
+                                             </option>
+                                             <option value="PR"> PR - Puerto Rico
+                                             </option>
+                                             <option value="RI"> RI - Rhode Island
+                                             </option>
+                                             <option value="SC"> SC - South Carolina
+                                             </option>
+                                             <option value="SD"> SD - South Dakota
+                                             </option>
+                                             <option value="TN"> TN - Tennessee
+                                             </option>
+                                             <option value="TX"> TX - Texas
+                                             </option>
+                                             <option value="UT"> UT - Utah
+                                             </option>
+                                             <option value="VA"> VA - Virginia
+                                             </option>
+                                             <option value="VI"> VI - US Virgin Islands
+                                             </option>
+                                             <option value="VT"> VT - Vermont
+                                             </option>
+                                             <option value="WA"> WA - Washington
+                                             </option>
+                                             <option value="WI"> WI - Wisconsin
+                                             </option>
+                                             <option value="WV"> WV - West Virginia
+                                             </option>
+                                             <option value="WY"> WY - Wyoming
+                                             </option>
+                                          </select>
+                                       </div>
+                                    </div>
+                                 </div>
+                                 <div>
+                                    <div>
+                                       <div>
+                                          <label>
+<em>*</em>Phone:</label>
+                                          <input type="tel" id="phoneNumber1-0" name="addrsForm[0].phoneNumber1" value="" maxlength="3"
+title="overall type: PHONE_HOME_CITY_CODE server type: PHONE_HOME_CITY_CODE heuristic type: PHONE_HOME_CITY_CODE label: *Phone: parseable name: addrsForm[0].phoneNumber1 field signature: 1254557631 form signature: 4882000530220881601"
+autofill-prediction="PHONE_HOME_CITY_CODE"
+>
+                                          <input type="tel" id="phoneNumber2-0" name="addrsForm[0].phoneNumber2" value="" maxlength="3"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_NUMBER label: *Phone: parseable name: addrsForm[0].phoneNumber2 field signature: 1999321122 form signature: 4882000530220881601"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                          <input type="tel" id="phoneNumber3-0" name="addrsForm[0].phoneNumber3" value="" maxlength="4"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_NUMBER label: *Phone: parseable name: addrsForm[0].phoneNumber3 field signature: 348537713 form signature: 4882000530220881601"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                       </div>
+                                    </div>
+                                    <div>
+                                       <div>
+                                          <label for="phoneNumber4-0">Ext</label>
+                                          <input type="tel" id="phoneNumber4-0" name="addrsForm[0].phoneNumber4" value="" maxlength="4"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_EXTENSION label: Ext parseable name: addrsForm[0].phoneNumber4 field signature: 3060772033 form signature: 4882000530220881601"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                       </div>
+                                    </div>
+                                 </div>
+                                 <div>
+                                    <div>
+                                       <div id="addressChangeEmailConfirm">
+                                          <label for="email-0">
+<em>*</em>Email Address:</label>
+                                          <input type="email" id="email-0" name="addrsForm[0].email" value="" maxlength="40"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: *Email Address: parseable name: addrsForm[0].email field signature: 1389763646 form signature: 4882000530220881601"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                                       </div>
+                                    </div>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                        <div>
+                           <input type="hidden" name="billingEmailPreferences.emailHtml" value="true">
+                           <div>
+                              <input type="hidden" name="billingEmailPreferences.optInSelected" value="true">
+<a target="_blank">Privacy Policy</a>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+                     <div id="checkoutBillLoyalty">
+                        <div id="rewardsSections">
+                           <div id="noWorkLifeRewards">
+                              <div>
+                                 <div>
+                                    <div>
+                                       <input type="text" name="loyaltyID"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: UNKNOWN_TYPE label: Apply parseable name: loyaltyID field signature: 1222391720 form signature: 4882000530220881601" maxlength="10" value=""
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+>
+                                       <p>
+<a
+                                          >Member number lookup</a>
+                                       </p>
+                                    </div>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div id="checkoutBillingGiftCards">
+                     <div>
+                        <div>
+                           <div>
+                              <div>
+                                 <div>
+                                    <label for="gcInput">Gift card or certificate number</label>
+                                    <input type="tel" name="paymentFormInfo.storedValueCardNumber" maxlength="19" value="" id="gcInput"
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: UNKNOWN_TYPE label: Gift card or certificate number parseable name: paymentFormInfo.storedValueCardNumber field signature: 2610516022 form signature: 4882000530220881601"
+autofill-prediction="CREDIT_CARD_NUMBER"
+>
+                                 </div>
+                              </div>
+                              <div>
+                                 <div>
+                                    <label for="gcPinInput">PIN</label>
+                                    <input type="tel" name="paymentFormInfo.storedValueCardPin" maxlength="4" value="" id="gcPinInput"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: PIN parseable name: paymentFormInfo.storedValueCardPin field signature: 3801610036 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE">
+<img src="./Office%20Supplies,%20Furniture,%20Technology%20at%20Office%20Depot%20-%20Payment_files/info-blue.png" alt="Need Help?" title="Need Help?" id="giftCardPinTooltipTarget"
+>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+                     <div>
+                        <input type="hidden" id="couponCount" value="0">
+                        <input type="hidden" id="invalidCouponNumber" value="">
+                        <input type="hidden" id="couponInWhichStep" value="checkoutV2">
+                        <input type="hidden" id="couponRemove" value="Remove Coupon">
+                        <input type="hidden" id="close" value="Close">
+                        <input type="hidden" id="invalidCouponCode" value="&lt;p&gt;Invalid Coupon Code&lt;/p&gt;">
+                        <input type="hidden" id="validCouponCode" value="&lt;p&gt;Coupon Code Applied&lt;/p&gt;">
+                        <input type="hidden" id="validCouponPrompt" value="This coupon has been applied to your order.">
+                        <input type="hidden" id="couponRemoveFailHeader" value="Remove Coupon Fail">
+                        <input type="hidden" name="offer.x" value="y">
+                        <div>
+                           <div id="couponDialog"
+title="Coupon Offer">
+                              <div>
+                                 <div>
+                                    <ul>
+                                       <li>
+                                          <input type="button" value="Skip and Continue">
+                                       </li>
+                                       <li>
+                                          <input type="button" value="See Offer Details">
+                                       </li>
+                                    </ul>
+                                 </div>
+                              </div>
+                           </div>
+                           <div>
+                              <div>
+                                 <div>
+                                    <label for="referralCode">Coupon Code:</label>
+                                    <input type="tel" name="referralCode" id="referralCode" size="14" maxlength="14"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Coupon Code: parseable name: referralCode field signature: 2314309716 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+                     <input type="hidden" name="customLabelsPermissionsForm.requestor" value="confirm">
+                     <input type="hidden" name="modifyFormDataWithBackendData" value="true">
+                     <div id="checkoutBillingAdditionalInfo">
+                        <div>
+                           <div>
+                              <div>
+                                 <div>
+                                    <label for="sourceCode">Catalog/source code, Federal government code <img src="./Office%20Supplies,%20Furniture,%20Technology%20at%20Office%20Depot%20-%20Payment_files/info-blue.png" alt="What is a Catalog or Source Code, Federal Government Code?"
+title="What is a Catalog or Source Code, Federal Government Code?">
+                                    </label>
+                                    <input type="text" name="sourceCode" maxlength="5" size="22" autocomplete="" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Catalog/source code, Federal government code parseable name: sourceCode field signature: 1650657570 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 </div>
+                              </div>
+                           </div>
+                           <div>
+                              <div>
+                                 <div>
+                                    <label>Customer PO#</label>
+                                    <input type="text" name="poName" maxlength="22" size="22" autocomplete="" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Customer PO# parseable name: poName field signature: 330999673 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 </div>
+                              </div>
+                           </div>
+                           <div>
+                              <div>
+                                 <label>Comments</label>
+                                 <p>
+<label>Informational purposes only. Not utilized by our delivery carriers.</label>
+                                 </p>
+                                 <textarea name="commentText" cols="30" rows="3" maxlength="87"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Comments Informational purposes only. Not utilized by our delivery carriers. parseable name: commentText field signature: 2293147818 form signature: 4882000530220881601"
+autofill-prediction="UNKNOWN_TYPE"
+>
+</textarea>
+                                 <span id="">87</span>
+                              </div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div id="paymentsButtonsMainBilling">
+                     <input type="hidden" id="showPayPalCheckoutButton_toggleCheck" name="showPayPalCheckoutButton_toggleCheck" value="true">
+                     <input type="hidden" id="showMasterPassCheckoutButton_toggleCheck" name="showMasterPassCheckoutButton_toggleCheck" value="true">
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <div>
+                        <div>
+                           <table>
+                              <tbody>
+                                 <tr>
+                                    <td colspan="4">
+                                       <input type="hidden" name="cartRow[0].cartEntryId" value="0">
+                                       <input type="hidden" name="cartRow[0].minQty" value="0">
+                                       <input type="hidden" name="cartRow[0].originalQty" value="0">
+                                       <input type="hidden" name="cartRow[0].skuNoEffort" value="510493">
+                                       <input type="hidden" name="cartRow[0].qtyMinimumLimitation" value="1">
+                                       <input type="hidden" name="cartRow[0].qtyIncrementLimitation" value="1">
+                                    </td>
+                                 </tr>
+                              </tbody>
+                           </table>
+                        </div>
+                     </div>
+                  </div>
+                  <div id="paymentsOrderSummary">
+                     <input type="hidden" id="showPayPalCheckoutButton_toggleCheck" name="showPayPalCheckoutButton_toggleCheck" value="true">
+                     <input type="hidden" id="showMasterPassCheckoutButton_toggleCheck" name="showMasterPassCheckoutButton_toggleCheck" value="true">
+                  </div>
+               </div>
+            </div>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/ShippingAddress.html
@@ -0,0 +1,347 @@
+<!DOCTYPE html>
+<html lang="en-US">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
+      <meta http-equiv="expires" content="0">
+      <meta http-equiv="pragma" content="no-cache">
+      <meta http-equiv="cache-control" content="no-cache">
+      <meta http-equiv="pragma-directive" content="no-cache">
+      <meta http-equiv="cache-directive" content="no-cache">
+      <meta name="robots" content="NOODP, NOYDIR">
+      <title>
+</title>
+   </head>
+   <body>
+      <meta name="apple-itunes-app" content="app-id=471037434">
+      <title>Office Supplies, Furniture, Technology at Office Depot</title>
+      <meta name="description" content="Shop office supplies, furniture &amp; technology at Office Depot. For paper, ink, toner &amp; more, find trusted brands at everyday low prices.">
+      <meta name="keywords" content="office supplies, office furniture, technology, electronics">
+      <meta property="og:image" content="https://secure.www.odcdn.com/images/us/od/brand.png">
+      <form name="anonymousConfirmForm" method="post" action="https://www.officedepot.com/checkout/anonymousConfirmRouter.do" id="confirmFormId" novalidate="novalidate">
+         <input type="hidden" name="partialReg" value="false">
+<input type="hidden" name="cartIsNotAllPickup" value="true">
+<input type="hidden" name="returnurl" value="/checkout/checkout/anonymousConfirmRouter.do">
+         <div id="shipPageV2">
+            <div>
+               <div>
+                  <div>
+                     <div>
+                        <div>
+                           <div>
+                              <div id="reg_shippingInfo">
+                                 <input id="skipGroup1ShippingAddress" type="hidden" name="skipGroup1ShippingAddress" value="false">
+                                 <div>
+                                    <input type="hidden" id="country-2" name="addrsForm[2].country" value="USA">
+                                    <div>
+                                       <div>
+                                          <div>
+                                             <div >
+                                                <label for="firstName-2" >
+                                                <em>*</em>First Name:</label>
+                                                <input type="text" id="firstName-2" name="addrsForm[2].firstName" value="" maxlength="30" tabindex="1"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: *First Name: parseable name: addrsForm[2].firstName field signature: 3337773590 form signature: 5001876119589580889"
+autofill-prediction="NAME_FIRST"
+>
+                                             </div>
+                                          </div>
+                                          <div>
+                                             <div >
+                                                <label for="lastName-2">
+                                                <em>*</em>Last Name:</label>
+                                                <input type="text" id="lastName-2" name="addrsForm[2].lastName" value="" maxlength="30" tabindex="2"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: *Last Name: parseable name: addrsForm[2].lastName field signature: 3075576638 form signature: 5001876119589580889"
+autofill-prediction="NAME_LAST"
+>
+                                             </div>
+                                          </div>
+                                       </div>
+                                       <div>
+                                          <label for="shipToName-2"> Company Name:</label>
+                                          <input type="text" id="shipToName-2" name="addrsForm[2].shiptoName" value="" maxlength="30" tabindex="3"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: COMPANY_NAME label: Company Name: parseable name: addrsForm[2].shiptoName field signature: 2052742641 form signature: 5001876119589580889"
+autofill-prediction="COMPANY_NAME"
+>
+                                       </div>
+                                       <div >
+                                          <label for="address1-2">
+                                          <em>*</em>Address:</label>
+                                          <input type="text" id="address1-2" name="addrsForm[2].address1" value="" maxlength="25" tabindex="4"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: *Address: parseable name: addrsForm[2].address1 field signature: 2660215956 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_LINE1"
+>
+                                       </div>
+                                       <div>
+                                          <label for="address2-2"> Address Line 2:
+                                          <span>(optional)</span>
+</label>
+                                          <input type="text" id="address2-2" name="addrsForm[2].address2" value="" maxlength="25" tabindex="5"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Address Line 2: (optional) parseable name: addrsForm[2].address2 field signature: 2293911247 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_LINE2"
+>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <div >
+                                                <label for="postalCode1-2">
+                                                <em>*</em>Postal Code:</label>
+                                                <input type="text" id="postalCode1-2" name="addrsForm[2].postalCode1" value="" maxlength="9" tabindex="6"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: *Postal Code: parseable name: addrsForm[2].postalCode1 field signature: 1044898225 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_ZIP"
+>
+                                             </div>
+                                          </div>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <div >
+                                                <label for="checkoutCityAndState">
+<em>*</em>
+</em>City & State</label>
+                                                <select id="checkoutCityAndState"
+title="overall type: ADDRESS_HOME_CITY server type: NO_SERVER_DATA heuristic type: ADDRESS_HOME_CITY label: *City &amp; State parseable name: checkoutCityAndState field signature: 3899416585 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                                                   <option value="0"> MOUNTAIN VIEW, CA
+                                                   </option>
+                                                   <option value="other"> Other City and State
+                                                   </option>
+                                                </select>
+                                             </div>
+                                          </div>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <div >
+                                                <label for="city-2">
+                                                <em>*</em>City:</label>
+                                                <input type="text" id="city-2" name="addrsForm[2].city" value=""
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: *City: parseable name: addrsForm[2].city field signature: 2341281094 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_CITY"
+>
+                                             </div>
+                                          </div>
+                                          <div>
+                                             <div >
+                                                <label for="state-2">
+                                                <em>*</em>State:</label>
+                                                <select name="addrsForm[2].state" id="state-2" size="1"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: *State: parseable name: addrsForm[2].state field signature: 3265256938 form signature: 5001876119589580889"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                                   <option value="{blank}"> Select a state
+                                                   </option>
+                                                   <option value="AK"> AK - Alaska
+                                                   </option>
+                                                   <option value="AL"> AL - Alabama
+                                                   </option>
+                                                   <option value="AR"> AR - Arkansas
+                                                   </option>
+                                                   <option value="AZ"> AZ - Arizona
+                                                   </option>
+                                                   <option value="CA"> CA - California
+                                                   </option>
+                                                   <option value="CO"> CO - Colorado
+                                                   </option>
+                                                   <option value="CT"> CT - Connecticut
+                                                   </option>
+                                                   <option value="DC"> DC - District of Columbia
+                                                   </option>
+                                                   <option value="DE"> DE - Delaware
+                                                   </option>
+                                                   <option value="FL"> FL - Florida
+                                                   </option>
+                                                   <option value="GA"> GA - Georgia
+                                                   </option>
+                                                   <option value="HI"> HI - Hawaii
+                                                   </option>
+                                                   <option value="IA"> IA - Iowa
+                                                   </option>
+                                                   <option value="ID"> ID - Idaho
+                                                   </option>
+                                                   <option value="IL"> IL - Illinois
+                                                   </option>
+                                                   <option value="IN"> IN - Indiana
+                                                   </option>
+                                                   <option value="KS"> KS - Kansas
+                                                   </option>
+                                                   <option value="KY"> KY - Kentucky
+                                                   </option>
+                                                   <option value="LA"> LA - Louisiana
+                                                   </option>
+                                                   <option value="MA"> MA - Massachusetts
+                                                   </option>
+                                                   <option value="MD"> MD - Maryland
+                                                   </option>
+                                                   <option value="ME"> ME - Maine
+                                                   </option>
+                                                   <option value="MI"> MI - Michigan
+                                                   </option>
+                                                   <option value="MN"> MN - Minnesota
+                                                   </option>
+                                                   <option value="MO"> MO - Missouri
+                                                   </option>
+                                                   <option value="MS"> MS - Mississippi
+                                                   </option>
+                                                   <option value="MT"> MT - Montana
+                                                   </option>
+                                                   <option value="NC"> NC - North Carolina
+                                                   </option>
+                                                   <option value="ND"> ND - North Dakota
+                                                   </option>
+                                                   <option value="NE"> NE - Nebraska
+                                                   </option>
+                                                   <option value="NH"> NH - New Hampshire
+                                                   </option>
+                                                   <option value="NJ"> NJ - New Jersey
+                                                   </option>
+                                                   <option value="NM"> NM - New Mexico
+                                                   </option>
+                                                   <option value="NV"> NV - Nevada
+                                                   </option>
+                                                   <option value="NY"> NY - New York
+                                                   </option>
+                                                   <option value="OH"> OH - Ohio
+                                                   </option>
+                                                   <option value="OK"> OK - Oklahoma
+                                                   </option>
+                                                   <option value="OR"> OR - Oregon
+                                                   </option>
+                                                   <option value="PA"> PA - Pennsylvania
+                                                   </option>
+                                                   <option value="PR"> PR - Puerto Rico
+                                                   </option>
+                                                   <option value="RI"> RI - Rhode Island
+                                                   </option>
+                                                   <option value="SC"> SC - South Carolina
+                                                   </option>
+                                                   <option value="SD"> SD - South Dakota
+                                                   </option>
+                                                   <option value="TN"> TN - Tennessee
+                                                   </option>
+                                                   <option value="TX"> TX - Texas
+                                                   </option>
+                                                   <option value="UT"> UT - Utah
+                                                   </option>
+                                                   <option value="VA"> VA - Virginia
+                                                   </option>
+                                                   <option value="VI"> VI - US Virgin Islands
+                                                   </option>
+                                                   <option value="VT"> VT - Vermont
+                                                   </option>
+                                                   <option value="WA"> WA - Washington
+                                                   </option>
+                                                   <option value="WI"> WI - Wisconsin
+                                                   </option>
+                                                   <option value="WV"> WV - West Virginia
+                                                   </option>
+                                                   <option value="WY"> WY - Wyoming
+                                                   </option>
+                                                </select>
+                                             </div>
+                                          </div>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <div>
+                                                <label>
+                                                <em>*</em>Phone:</label>
+                                                <input type="tel" id="phoneNumber1-2" name="addrsForm[2].phoneNumber1" value="" maxlength="3"
+title="overall type: PHONE_HOME_CITY_CODE server type: PHONE_HOME_CITY_CODE heuristic type: PHONE_HOME_CITY_CODE label: *Phone: parseable name: addrsForm[2].phoneNumber1 field signature: 3051888398 form signature: 5001876119589580889" tabindex="7"
+autofill-prediction="PHONE_HOME_CITY_CODE"
+>
+                                                <input type="tel" id="phoneNumber2-2" name="addrsForm[2].phoneNumber2" value="" maxlength="3"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_NUMBER label: *Phone: parseable name: addrsForm[2].phoneNumber2 field signature: 4001233923 form signature: 5001876119589580889" tabindex="8"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                                <input type="tel" id="phoneNumber3-2" name="addrsForm[2].phoneNumber3" value="" maxlength="4"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_NUMBER label: *Phone: parseable name: addrsForm[2].phoneNumber3 field signature: 3507119292 form signature: 5001876119589580889" tabindex="9"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                             </div>
+                                          </div>
+                                          <div>
+                                             <div>
+                                                <label for="phoneNumber4-2"> Ext</label>
+                                                <input type="tel" id="phoneNumber4-2" name="addrsForm[2].phoneNumber4" value="" maxlength="4" tabindex="10"
+title="overall type: PHONE_HOME_NUMBER server type: PHONE_HOME_NUMBER heuristic type: PHONE_HOME_EXTENSION label: Ext parseable name: addrsForm[2].phoneNumber4 field signature: 2592995828 form signature: 5001876119589580889"
+autofill-prediction="PHONE_HOME_NUMBER"
+>
+                                             </div>
+                                          </div>
+                                       </div>
+                                       <div>
+                                          <div>
+                                             <div id="addressChangeEmailConfirm" >
+                                                <label for="email-2">
+                                                <em>*</em>Email Address:</label>
+                                                <input type="email" id="email-2" name="addrsForm[2].email" value="" maxlength="40" tabindex="11"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: *Email Address: parseable name: addrsForm[2].email field signature: 3353412459 form signature: 5001876119589580889"
+autofill-prediction="EMAIL_ADDRESS"
+>
+                                             </div>
+                                          </div>
+                                       </div>
+                                    </div>
+                                 </div>
+                              </div>
+                              <div>
+                                 <input type="checkbox" id="guestEmailOptIn" name="guestEmailOptIn" checked="checked" tabindex="12"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Send me exclusive coupons and special offers to my inbox. parseable name: guestEmailOptIn field signature: 2624588538 form signature: 5001876119589580889"
+autofill-prediction="UNKNOWN_TYPE">
+<input type="hidden" name="guestEmailOptIn" value="false">
+<label for="guestEmailOptIn"
+>Send me exclusive coupons and special offers to my inbox.</label>
+                              </div>
+                              <input type="hidden" name="shippingEmailPreferences.emailHtml" value="true">
+<input type="hidden" name="shippingEmailPreferences.optInSelected" value="true">
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <div>
+                        <div>
+                           <table>
+                              <tbody>
+                                 <tr>
+                                    <td colspan="4">
+<input type="hidden" name="cartRow[0].cartEntryId" value="0">
+<input type="hidden" name="cartRow[0].minQty" value="0">
+                                       <input type="hidden" name="cartRow[0].originalQty" value="0">
+<input type="hidden" name="cartRow[0].skuNoEffort" value="510493">
+<input type="hidden" name="cartRow[0].qtyMinimumLimitation" value="1">
+<input type="hidden" name="cartRow[0].qtyIncrementLimitation" value="1">
+                                    </td>
+                                 </tr>
+                              </tbody>
+                           </table>
+                        </div>
+                     </div>
+                  </div>
+               </div>
+            </div>
+            <input type="hidden" name="step" value="ship">
+<input type="hidden" name="orderNumber" value="914646582">
+<input type="hidden" name="orderSubNumber" value="001">
+<input type="hidden" name="sameAsBilling" value="true">
+            <input type="hidden" name="linked" value="false">
+<input type="hidden" name="billToID" value="">
+<input type="hidden" name="nececessaryToRevalidate" id="nececessaryToRevalidate" value="false">
+            <input type="hidden" name="revalidateTrigger" id="revalidateTrigger" value="">
+<input type="hidden" name="group1Error" id="group1Error" value="false">
+<input type="hidden" name="flowMode" id="flowMode" value="ANONYMOUS">
+            <div id="skipGroupOne">
+               <div>
+                  <input type="submit" value="Edit" name="cmd_edit" id="editShipping"
+title="Edit">
+<button type="submit" name="cmd_confirm" id="continue">Continue</button>
+               </div>
+            </div>
+         </div>
+      </form>
+      <input type="hidden" name="enableGoogleAddr" id="enableGoogleAddr" value="true">
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/OfficeDepot/SignIn.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en-US">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
+      <meta http-equiv="expires" content="0">
+      <meta http-equiv="pragma" content="no-cache">
+      <meta http-equiv="cache-control" content="no-cache">
+      <meta http-equiv="pragma-directive" content="no-cache">
+      <meta http-equiv="cache-directive" content="no-cache">
+      <meta name="robots" content="NOODP, NOYDIR">
+      <title>
+</title>
+   </head>
+   <body>
+      <meta name="apple-itunes-app" content="app-id=471037434">
+      <title>Office Supplies, Furniture, Technology at Office Depot</title>
+      <meta name="description" content="Shop office supplies, furniture &amp; technology at Office Depot. For paper, ink, toner &amp; more, find trusted brands at everyday low prices.">
+      <meta name="keywords" content="office supplies, office furniture, technology, electronics">
+      <meta property="og:image" content="https://secure.www.odcdn.com/images/us/od/brand.png">
+      <form name="loginForm" method="post" action="https://www.officedepot.com/account/loginAccountSet.do" autocomplete="off" id="loginForm">
+         <input type="hidden" name="confirmationRequired" value="false">
+         <input type="hidden" name="requestor" value="accountSummary">
+         <input type="hidden" name="loginDestination" value="">
+         <input type="hidden" id="isLoginFromRewardsModal" name="isLoginFromRewardsModal">
+         <input type="hidden" name="reqLevel" value="ACCOUNT">
+         <div>
+            <label for="loginName-0">Login name or email address</label>
+            <label>Logging in as a different user may cause pricing changes</label>
+            <input type="text" name="loginName" maxlength="100" size="10" autocomplete="" value="" id="loginName-0" tabindex="1">
+         </div>
+         <div>
+            <label for="loginPassword">Password</label>
+            <input type="password" name="password" maxlength="50" size="10" value="" id="loginPassword" tabindex="2">
+            <span id="forgotPasswordLink">
+<a >Forgot login name/password?</a>
+</span>
+         </div>
+         <div>
+            <input type="checkbox" name="autoLogin" tabindex="3" value="on"> Keep me logged in
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/QVC/PaymentMethod.html
@@ -0,0 +1,527 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+      <meta property="fb:app_id" content="105047196722" />
+      <meta property="fb:page_id" content="23797290954" />
+      <meta name="format-detection" content="telephone=no" />
+      <meta name="viewport" content="width=919" />
+      <title>Payment Method</title>
+   </head>
+   <body>
+      <form id="frmEditPaymentMethod" name="frmEditPaymentMethod" method="post" action="https://www.qvc.com/webapp/wcs/stores/servlet/NPOOrderAddPaymentMethods">
+         <input type="hidden" name="csrfToken" value="M1E1cTBwME9saUVZaU9iNUdJVnZqSm9JQThHM3gwSUt0elROSE9oSDJaST0=" />
+         <input type="hidden" name="ccId" value="" />
+         <input type="hidden" name="payMethodExpireMonth" value="" />
+         <input type="hidden" name="payMethodExpireYear" value="" />
+         <input type="hidden" name="ccDtime" value="" />
+         <input type="hidden" name="payMethodNewCard" value="N" />
+         <input type="hidden" name="payMethodExpiryEdited" value="N" />
+         <input type="hidden" name="payMethodCVV" value="" />
+         <input type="hidden" name="orderId" value="476661567" />
+         <input type="hidden" name="langId" value="-1" />
+         <input type="hidden" name="catalogId" value="10151" />
+         <input type="hidden" name="storeId" value="10251" />
+         <input type="hidden" name="dummydata" value="" />
+         <input type="hidden" id="currentPaymentMethod" name="currentPaymentMethod" value="VI" />
+         <input type="hidden" name="checkoutStep" value="3" />
+         <input type="hidden" name="fromPaymentPage" value="Y" />
+         <input type="hidden" name="URL" value="" />
+         <input type="hidden" id="addAnotherGC" name="addAnotherGC" value="N" />
+         <input type="hidden" name="BMLFilePath" id="BMLFilePath" value="https://www.qvc.com/wcsstore/US/content/html/popups/BillMeLaterTermsandConditions.html" />
+         <div id="divTotalPurchaseSummary">
+            <fieldset>
+               <label id="lblTotalPurchaseAmount" for="spanTotalPurchaseAmount">Total Purchase
+               <span>(including tax and S&amp;H)</span>:</label>
+            </fieldset>
+         </div>
+         <div id="divEasyPayOptions">
+            <fieldset>
+               <ul>
+                  <li>
+                     <input type="radio" value="Z" id="rb1PaymentsItem_1" name="rbItemEasyPayOption_1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: 4 Easy Pays of $39.74 parseable name: rbItemEasyPayOption_1 field signature: 915844214 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                     <label for="rb1PaymentsItem_1">4 Easy Pays of $39.74</label>
+                  </li>
+                  <li>
+                     <input type="radio" value="N" id="rb2PaymentsItem_1" name="rbItemEasyPayOption_1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: 1 payment of $158.96 parseable name: rbItemEasyPayOption_1 field signature: 915844214 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                     <label for="rb2PaymentsItem_1">1 payment of $158.96</label>
+                  </li>
+               </ul>
+               <input type="hidden" name="hItemEasyPayOptionPayMthd_1" id="hItemEasyPayOptionPayMthd_1" value="QVAXCBDCSIMCVIBL " />
+               <input type="hidden" name="orderItemId_1" id="orderItemId_1" value="660521668" />
+            </fieldset>
+         </div>
+         <div id="divNewPaymentMethod">
+            <input id="ccId_1" type="hidden" name="ccId_1" value="" />
+            <table id="tblNewPaymentMethod" border="0" cellspacing="0" cellpadding="0" width="100%" summary="Payment methods available for Checkout">
+               <tbody>
+                  <tr id="trBillMeLaterRow-1">
+                     <td>
+                        <input type="radio" name="rbNewPaymentMethod" id="rbBillLater" value="rbBillLater"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: PayPal Credit parseable name: rbNewPaymentMethod field signature: 95492298 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <label for="rbBillLater">PayPal Credit</label>
+                        <span>(formerly Bill Me Later®)</span>
+                     </td>
+                  </tr>
+                  <tr id="trBillMeLaterRow-2">
+                     <td colspan="5">
+                        <div id="divBillMeLater">
+                           <fieldset>
+                              <label id="lblPrimaryPhone" for="txtPrimaryPhone">Home Phone:</label>
+                              <input id="txtPrimaryPhone" type="tel" name="txtPrimaryPhone" autocomplete="off" autocorrect="off" value="" maxlength="14" size="14"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: Home Phone: parseable name: txtPrimaryPhone field signature: 918983855 form signature: 12190733459375771907"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblEmailAddress" for="txtEmailAddress">Email Address:</label>
+                              <input id="txtEmailAddress" type="email" name="txtEmailAddress" autocomplete="on" autocorrect="off" value="formautofilltester@gmail.com"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: Email Address: parseable name: txtEmailAddress field signature: 653947670 form signature: 12190733459375771907"
+autofill-prediction="EMAIL_ADDRESS"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblSsn" for="txtSsn">Social Security Number:</label>XXX-XX-<input id="txtSsn" type="text" pattern="[0-9]*" autocomplete="off" autocorrect="off" maxlength="4" size="4" name="txtLast4SSN" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Social Security Number: parseable name: txtLast4SSN field signature: 598258955 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblDateOfBirthMonth" for="selDobMonth">Date of Birth:</label>
+                              <select id="selDobMonth" name="dobMonth" size="1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Date of Birth: parseable name: dobMonth field signature: 3916402925 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 <option value="month" selected="selected">Month</option>
+                                 <option value="01">January</option>
+                                 <option value="02">February</option>
+                                 <option value="03">March</option>
+                                 <option value="04">April</option>
+                                 <option value="05">May</option>
+                                 <option value="06">June</option>
+                                 <option value="07">July</option>
+                                 <option value="08">August</option>
+                                 <option value="09">September</option>
+                                 <option value="10">October</option>
+                                 <option value="11">November</option>
+                                 <option value="12">December</option>
+                              </select>
+                              <label id="lblDateOfBirthDay" for="selDobDay">Day of Birth:</label>
+                              <select id="selDobDay" name="dobDay" size="1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Day of Birth: parseable name: dobDay field signature: 4127787517 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 <option value="day" selected="selected">Day</option>
+                                 <option value="1">1</option>
+                                 <option value="2">2</option>
+                                 <option value="3">3</option>
+                                 <option value="4">4</option>
+                                 <option value="5">5</option>
+                                 <option value="6">6</option>
+                                 <option value="7">7</option>
+                                 <option value="8">8</option>
+                                 <option value="9">9</option>
+                                 <option value="10">10</option>
+                                 <option value="11">11</option>
+                                 <option value="12">12</option>
+                                 <option value="13">13</option>
+                                 <option value="14">14</option>
+                                 <option value="15">15</option>
+                                 <option value="16">16</option>
+                                 <option value="17">17</option>
+                                 <option value="18">18</option>
+                                 <option value="19">19</option>
+                                 <option value="20">20</option>
+                                 <option value="21">21</option>
+                                 <option value="22">22</option>
+                                 <option value="23">23</option>
+                                 <option value="24">24</option>
+                                 <option value="25">25</option>
+                                 <option value="26">26</option>
+                                 <option value="27">27</option>
+                                 <option value="28">28</option>
+                                 <option value="29">29</option>
+                                 <option value="30">30</option>
+                                 <option value="31">31</option>
+                              </select>
+                              <label id="lblDateOfBirthYear" for="selDobYear">Year of Birth:</label>
+                              <select id="selDobYear" name="dobYear" size="1"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: UNKNOWN_TYPE label: Year of Birth: parseable name: dobYear field signature: 3750696607 form signature: 12190733459375771907"
+autofill-prediction="COMPANY_NAME"
+>
+                                 <option value="year" selected="selected">Year</option>
+                                 <option value="1927">1927</option>
+                                 <option value="1928">1928</option>
+                                 <option value="1929">1929</option>
+                                 <option value="1930">1930</option>
+                                 <option value="1931">1931</option>
+                                 <option value="1932">1932</option>
+                                 <option value="1933">1933</option>
+                                 <option value="1934">1934</option>
+                                 <option value="1935">1935</option>
+                                 <option value="1936">1936</option>
+                                 <option value="1937">1937</option>
+                                 <option value="1938">1938</option>
+                                 <option value="1939">1939</option>
+                                 <option value="1940">1940</option>
+                                 <option value="1941">1941</option>
+                                 <option value="1942">1942</option>
+                                 <option value="1943">1943</option>
+                                 <option value="1944">1944</option>
+                                 <option value="1945">1945</option>
+                                 <option value="1946">1946</option>
+                                 <option value="1947">1947</option>
+                                 <option value="1948">1948</option>
+                                 <option value="1949">1949</option>
+                                 <option value="1950">1950</option>
+                                 <option value="1951">1951</option>
+                                 <option value="1952">1952</option>
+                                 <option value="1953">1953</option>
+                                 <option value="1954">1954</option>
+                                 <option value="1955">1955</option>
+                                 <option value="1956">1956</option>
+                                 <option value="1957">1957</option>
+                                 <option value="1958">1958</option>
+                                 <option value="1959">1959</option>
+                                 <option value="1960">1960</option>
+                                 <option value="1961">1961</option>
+                                 <option value="1962">1962</option>
+                                 <option value="1963">1963</option>
+                                 <option value="1964">1964</option>
+                                 <option value="1965">1965</option>
+                                 <option value="1966">1966</option>
+                                 <option value="1967">1967</option>
+                                 <option value="1968">1968</option>
+                                 <option value="1969">1969</option>
+                                 <option value="1970">1970</option>
+                                 <option value="1971">1971</option>
+                                 <option value="1972">1972</option>
+                                 <option value="1973">1973</option>
+                                 <option value="1974">1974</option>
+                                 <option value="1975">1975</option>
+                                 <option value="1976">1976</option>
+                                 <option value="1977">1977</option>
+                                 <option value="1978">1978</option>
+                                 <option value="1979">1979</option>
+                                 <option value="1980">1980</option>
+                                 <option value="1981">1981</option>
+                                 <option value="1982">1982</option>
+                                 <option value="1983">1983</option>
+                                 <option value="1984">1984</option>
+                                 <option value="1985">1985</option>
+                                 <option value="1986">1986</option>
+                                 <option value="1987">1987</option>
+                                 <option value="1988">1988</option>
+                                 <option value="1989">1989</option>
+                                 <option value="1990">1990</option>
+                                 <option value="1991">1991</option>
+                                 <option value="1992">1992</option>
+                                 <option value="1993">1993</option>
+                                 <option value="1994">1994</option>
+                                 <option value="1995">1995</option>
+                                 <option value="1996">1996</option>
+                                 <option value="1997">1997</option>
+                                 <option value="1998">1998</option>
+                                 <option value="1999">1999</option>
+                                 <option value="2000">2000</option>
+                                 <option value="2001">2001</option>
+                                 <option value="2002">2002</option>
+                                 <option value="2003">2003</option>
+                                 <option value="2004">2004</option>
+                                 <option value="2005">2005</option>
+                                 <option value="2006">2006</option>
+                                 <option value="2007">2007</option>
+                                 <option value="2008">2008</option>
+                                 <option value="2009">2009</option>
+                                 <option value="2010">2010</option>
+                                 <option value="2011">2011</option>
+                                 <option value="2012">2012</option>
+                                 <option value="2013">2013</option>
+                                 <option value="2014">2014</option>
+                                 <option value="2015">2015</option>
+                                 <option value="2016">2016</option>
+                                 <option value="2017">2017</option>
+                              </select>
+                           </fieldset>
+                           <div id="monetate_selectorHTML_b234e9d_0">
+                              <div>
+                                 <label for="cbBillMeLaterElectronicConsent" id="lblBillMeLaterElectronicConsent">&nbsp;&nbsp;<input id="cbBillMeLaterElectronicConsent" name="bmlAcceptTerms" type="checkbox" />
+                                 </label>
+                              </div>
+                           </div>
+                        </div>
+                        <div id="BMLScroll">
+                           <input name="bmlAcceptTermsTemp" id="cbBillMeLaterElectronicConsentTemp" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Note: After scrolling, please remain at the bottom of the Terms and Conditions section to continue. parseable name: bmlAcceptTermsTemp field signature: 1379157860 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           <label for="cbBillMeLaterElectronicConsent" id="lblBillMeLaterElectronicConsent">&nbsp;&nbsp;<input name="bmlAcceptTerms" id="cbBillMeLaterElectronicConsent" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Note: After scrolling, please remain at the bottom of the Terms and Conditions section to continue. parseable name: bmlAcceptTerms field signature: 4275106371 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           </label>
+                        </div>
+                     </td>
+                  </tr>
+                  <tr id="trEnterNewCard-1">
+                     <td colspan="5">
+                        <input type="radio" name="rbNewPaymentMethod" id="rbNewCard" value="rbNewCard" checked="checked"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Enter New Card parseable name: rbNewPaymentMethod field signature: 95492298 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <label for="rbNewCard">&nbsp;Enter New Card</label>&nbsp;&nbsp;&nbsp;&nbsp;
+                     </td>
+                  </tr>
+                  <tr id="trEnterNewCard-2">
+                     <td colspan="5">
+                        <div id="divEnterNewCard">
+                           <fieldset>
+                              <label id="lblNewCardType" for="selNewCardType">Type</label>
+                              <select name="NewCardType" id="selNewCardType" size="1"
+title="overall type: CREDIT_CARD_TYPE server type: CREDIT_CARD_TYPE heuristic type: CREDIT_CARD_TYPE label: Type parseable name: NewCardType field signature: 3035337803 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_TYPE"
+>
+                                 <option value="AX">American Express</option>
+                                 <option value="CB">Carte Blanc</option>
+                                 <option value="DC">Diners Club</option>
+                                 <option value="SI">Discover</option>
+                                 <option value="MC">MasterCard</option>
+                                 <option value="QV">QCard</option>
+                                 <option value="VI" selected="selected">Visa</option>
+                              </select>
+                              <label id="lblNewCardNumber" for="txtNewCardNumber">Number:</label>
+                              <input id="txtNewCardNumber" name="NewCardNumber" type="text" maxlength="20" size="21" autocomplete="off" autocorrect="off" value="" pattern="[0-9]*"
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: CREDIT_CARD_NUMBER label: Number: parseable name: NewCardNumber field signature: 2370218454 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_NUMBER"
+/>
+                              <input id="hidNewLastCC" name="hidNewLastCC" type="hidden" value="" />
+                              <fieldset id="fldExpireDateNewCard">
+                                 <label id="lblNewCard" for="selNewCard">Expiration Date:</label>
+                                 <select name="selNewCard" id="selNewCard" size="1"
+title="overall type: CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR server type: NO_SERVER_DATA heuristic type: CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR label: Expiration Date: parseable name: selNewCard field signature: 2308816317 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR"
+>
+                                    <option value="03/2017" selected="selected">03/2017</option>
+                                    <option value="04/2017">04/2017</option>
+                                    <option value="05/2017">05/2017</option>
+                                    <option value="06/2017">06/2017</option>
+                                    <option value="07/2017">07/2017</option>
+                                    <option value="08/2017">08/2017</option>
+                                    <option value="09/2017">09/2017</option>
+                                    <option value="10/2017">10/2017</option>
+                                    <option value="11/2017">11/2017</option>
+                                    <option value="12/2017">12/2017</option>
+                                    <option value="01/2018">01/2018</option>
+                                    <option value="02/2018">02/2018</option>
+                                    <option value="03/2018">03/2018</option>
+                                    <option value="04/2018">04/2018</option>
+                                    <option value="05/2018">05/2018</option>
+                                    <option value="06/2018">06/2018</option>
+                                    <option value="07/2018">07/2018</option>
+                                    <option value="08/2018">08/2018</option>
+                                    <option value="09/2018">09/2018</option>
+                                    <option value="10/2018">10/2018</option>
+                                    <option value="11/2018">11/2018</option>
+                                    <option value="12/2018">12/2018</option>
+                                    <option value="01/2019">01/2019</option>
+                                    <option value="02/2019">02/2019</option>
+                                    <option value="03/2019">03/2019</option>
+                                    <option value="04/2019">04/2019</option>
+                                    <option value="05/2019">05/2019</option>
+                                    <option value="06/2019">06/2019</option>
+                                    <option value="07/2019">07/2019</option>
+                                    <option value="08/2019">08/2019</option>
+                                    <option value="09/2019">09/2019</option>
+                                    <option value="10/2019">10/2019</option>
+                                    <option value="11/2019">11/2019</option>
+                                    <option value="12/2019">12/2019</option>
+                                    <option value="01/2020">01/2020</option>
+                                    <option value="02/2020">02/2020</option>
+                                    <option value="03/2020">03/2020</option>
+                                    <option value="04/2020">04/2020</option>
+                                    <option value="05/2020">05/2020</option>
+                                    <option value="06/2020">06/2020</option>
+                                    <option value="07/2020">07/2020</option>
+                                    <option value="08/2020">08/2020</option>
+                                    <option value="09/2020">09/2020</option>
+                                    <option value="10/2020">10/2020</option>
+                                    <option value="11/2020">11/2020</option>
+                                    <option value="12/2020">12/2020</option>
+                                    <option value="01/2021">01/2021</option>
+                                    <option value="02/2021">02/2021</option>
+                                    <option value="03/2021">03/2021</option>
+                                    <option value="04/2021">04/2021</option>
+                                    <option value="05/2021">05/2021</option>
+                                    <option value="06/2021">06/2021</option>
+                                    <option value="07/2021">07/2021</option>
+                                    <option value="08/2021">08/2021</option>
+                                    <option value="09/2021">09/2021</option>
+                                    <option value="10/2021">10/2021</option>
+                                    <option value="11/2021">11/2021</option>
+                                    <option value="12/2021">12/2021</option>
+                                    <option value="01/2022">01/2022</option>
+                                    <option value="02/2022">02/2022</option>
+                                    <option value="03/2022">03/2022</option>
+                                    <option value="04/2022">04/2022</option>
+                                    <option value="05/2022">05/2022</option>
+                                    <option value="06/2022">06/2022</option>
+                                    <option value="07/2022">07/2022</option>
+                                    <option value="08/2022">08/2022</option>
+                                    <option value="09/2022">09/2022</option>
+                                    <option value="10/2022">10/2022</option>
+                                    <option value="11/2022">11/2022</option>
+                                    <option value="12/2022">12/2022</option>
+                                    <option value="01/2023">01/2023</option>
+                                    <option value="02/2023">02/2023</option>
+                                    <option value="03/2023">03/2023</option>
+                                    <option value="04/2023">04/2023</option>
+                                    <option value="05/2023">05/2023</option>
+                                    <option value="06/2023">06/2023</option>
+                                    <option value="07/2023">07/2023</option>
+                                    <option value="08/2023">08/2023</option>
+                                    <option value="09/2023">09/2023</option>
+                                    <option value="10/2023">10/2023</option>
+                                    <option value="11/2023">11/2023</option>
+                                    <option value="12/2023">12/2023</option>
+                                    <option value="01/2024">01/2024</option>
+                                    <option value="02/2024">02/2024</option>
+                                    <option value="03/2024">03/2024</option>
+                                    <option value="04/2024">04/2024</option>
+                                    <option value="05/2024">05/2024</option>
+                                    <option value="06/2024">06/2024</option>
+                                    <option value="07/2024">07/2024</option>
+                                    <option value="08/2024">08/2024</option>
+                                    <option value="09/2024">09/2024</option>
+                                    <option value="10/2024">10/2024</option>
+                                    <option value="11/2024">11/2024</option>
+                                    <option value="12/2024">12/2024</option>
+                                    <option value="01/2025">01/2025</option>
+                                    <option value="02/2025">02/2025</option>
+                                    <option value="03/2025">03/2025</option>
+                                    <option value="04/2025">04/2025</option>
+                                    <option value="05/2025">05/2025</option>
+                                    <option value="06/2025">06/2025</option>
+                                    <option value="07/2025">07/2025</option>
+                                    <option value="08/2025">08/2025</option>
+                                    <option value="09/2025">09/2025</option>
+                                    <option value="10/2025">10/2025</option>
+                                    <option value="11/2025">11/2025</option>
+                                    <option value="12/2025">12/2025</option>
+                                    <option value="01/2026">01/2026</option>
+                                    <option value="02/2026">02/2026</option>
+                                    <option value="03/2026">03/2026</option>
+                                    <option value="04/2026">04/2026</option>
+                                    <option value="05/2026">05/2026</option>
+                                    <option value="06/2026">06/2026</option>
+                                    <option value="07/2026">07/2026</option>
+                                    <option value="08/2026">08/2026</option>
+                                    <option value="09/2026">09/2026</option>
+                                    <option value="10/2026">10/2026</option>
+                                    <option value="11/2026">11/2026</option>
+                                    <option value="12/2026">12/2026</option>
+                                    <option value="01/2027">01/2027</option>
+                                    <option value="02/2027">02/2027</option>
+                                    <option value="03/2027">03/2027</option>
+                                    <option value="04/2027">04/2027</option>
+                                    <option value="05/2027">05/2027</option>
+                                    <option value="06/2027">06/2027</option>
+                                    <option value="07/2027">07/2027</option>
+                                    <option value="08/2027">08/2027</option>
+                                    <option value="09/2027">09/2027</option>
+                                    <option value="10/2027">10/2027</option>
+                                    <option value="11/2027">11/2027</option>
+                                    <option value="12/2027">12/2027</option>
+                                 </select>
+                              </fieldset>
+                           </fieldset>
+                           <fieldset id="fldSecurityCodeNewCard">
+                              <div id="fldSecurityCode">
+                                 <label for="txtSecurityCode">Security Code:</label>&nbsp;<input id="txtSecurityCode" name="SecurityCode" type="text" pattern="[0-9]*" maxlength="5" size="5" value=""
+title="overall type: CREDIT_CARD_VERIFICATION_CODE server type: NO_SERVER_DATA heuristic type: CREDIT_CARD_VERIFICATION_CODE label: Security Code: parseable name: SecurityCode field signature: 4107652875 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+/>
+                              </div>
+                           </fieldset>
+                           <div id="divQButton">
+                              <span>
+                              <input type="button" id="btnQCard" value="Add My QCard" />
+                              </span>
+                              <input type="hidden" id="addMyQCard" name="addMyQCard" value="false" />
+                              <input type="hidden" id="isNPO" name="isNPO" value="true" />
+                           </div>
+                        </div>
+                     </td>
+                  </tr>
+               </tbody>
+            </table>
+         </div>
+         <div id="divQvcGiftCardsMethod">
+            <div>
+               <div id="divGiftCardPaymentOption">
+                  <input type="checkbox" name="cbGiftCard" id="cbGiftCard"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Use a Gift Card parseable name: cbGiftCard field signature: 2461714937 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                  <label for="cbGiftCard">Use a Gift Card</label>
+                  <div id="divQvcGiftCardEntry">
+                     <fieldset>
+                        <label for="txtQvcGiftCardNumber">Card Number:</label>
+                        <input id="txtQvcGiftCardNumber" name="txtQvcGiftCardNumber" type="tel" autocomplete="off" autocorrect="off" maxlength="19" size="19" value=""
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: CREDIT_CARD_NUMBER label: Card Number: parseable name: txtQvcGiftCardNumber field signature: 375442765 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_NUMBER"
+/>
+                        <label for="txtQvcGiftCardSecurityIdNumber">Security ID Number:</label>
+                        <input id="txtQvcGiftCardSecurityIdNumber" name="txtQvcGiftCardSecurityIdNumber" type="text" autocomplete="off" autocorrect="off" maxlength="12" size="19" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Security ID Number: parseable name: txtQvcGiftCardSecurityIdNumber field signature: 383370886 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <span>
+                        <input type="button" id="btnQvcGiftCardEnterAnotherCard" name="btnQvcGiftCardEnterAnotherCard" value="Enter Another Card" />
+                        <span>Enter Another Card</span>
+                        </span>
+                     </fieldset>
+                  </div>
+               </div>
+            </div>
+         </div>
+         <div id="monetate_selectorHTML_c937b2dd_0">
+            <div id="mainVoucherCodeDiv">
+               <input id="txtQvcApplyCodeNumber" name="txtQvcApplyCodeNumber" type="text" autocomplete="off" autocorrect="off" maxlength="25" size="19" value="" />
+               <input type="button" id="btnApplyCode" value="Apply Code" />
+            </div>
+         </div>
+         <div id="divButtons">
+            <span>
+            <input type="button" id="btnSubmitChanges" value="Continue Checkout" />
+            <span>Continue Checkout</span>
+            </span>
+            <span>
+            <span>Continue Checkout</span>
+            <input type="button" id="btnQCard2" value="Continue Checkout" />
+            </span>
+            <span>
+            <input type="button" id="btnReturnToOrder" value="EDIT SHOPPING CART" />
+            <span>Edit Shopping cart</span>
+            </span>
+         </div>
+      </form>
+      <form id="captureFormFooter" method="post" name="captureFormFooter">
+         <div id="divEmailFormFooter">
+            <label for="emailAddress1Footer">Get sneak previews of special offers and upcoming events delivered to your inbox.</label>
+            <span id="emailAddressErrorFooter">*</span>
+            <input id="emailAddress1Footer" type="text" value="Enter email" />
+            <input id="emailAddress2Footer" type="text" value="Confirm email" />
+            <input id="signUpFooter" type="submit" value="Sign Up" />
+            <span id="disclaimerTextFooter">*You're signing up to receive QVC promotional email.</span>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/QVC/SignIn.html
@@ -0,0 +1,80 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <meta property="fb:app_id" content="105047196722" />
+      <meta property="fb:page_id" content="23797290954" />
+      <meta name="format-detection" content="telephone=no" />
+      <meta name="viewport" content="width=919" />
+      <title>QVC.com Sign In</title>
+   </head>
+   <body>
+      <form id="frmMastheadSearch" method="get" action="http://www.qvc.com/CatalogSearch">
+         <fieldset>
+            <input type="hidden" name="langId" value="-1" />
+            <input type="hidden" name="storeId" value="10251" />
+            <input type="hidden" name="catalogId" value="10151" />
+            <label for="txtMastheadSearch">Search QVC:</label>
+            <input id="txtMastheadSearch" name="keyword" type="text" value="" autocomplete="off" autocorrect="off" placeholder="Search QVC" />
+            <input id="btnMastheadSearch" type="submit" alt="Go" value="Go" />
+         </fieldset>
+      </form>
+      <form id="frmSignIn" name="frmSignIn" method="post">
+         <input type="hidden" name="csrfToken" value="M1E1cTBwME9saUVZaU9iNUdJVnZqSm9JQThHM3gwSUt0elROSE9oSDJaST0=" />
+         <fieldset>
+            <input type="hidden" name="storeId" value="10251" />
+            <input type="hidden" name="catalogId" value="10151" />
+            <input type="hidden" name="langId" value="-1" />
+            <input type="hidden" name="URL" id="URL" value="http://www.qvc.com/Checkout?orderId=476661567&amp;langId=-1&amp;storeId=10251&amp;catalogId=10151" />
+            <input type="hidden" name="reLogonURL" value="LogonForm" />
+            <input type="hidden" name="rememberMe" id="rememberMe" value="true" />
+            <input type="hidden" name="fromPage" id="fromPage" value="checkout" />
+            <input type="hidden" name="orderId" value="476661567" />
+         </fieldset>
+         <div id="signInFields">
+            <label id="lblEmailAddress" for="txtEmailAddress">Email Address:</label>
+            <input id="txtEmailAddress" type="email" value="" maxlength="128" size="30" name="logonId" placeholder="Email Address" />
+            <div>
+               <label id="lblPassword" for="txtPassword">QVC Password:</label>
+               <input id="txtPassword" type="password" maxlength="24" size="30" name="logonPassword" placeholder="QVC Password" />
+            </div>
+         </div>
+         <div>
+            <div id="divUseDefaults">
+               <input id="cbUseDefaults" type="checkbox" name="cbReviewOrderTotal" value="on" />
+               <label id="lblUseDefaults" for="cbUseDefaults">Using your default shipping and payment information? Check the box to go directly to Order Summary.</label>
+               <input type="hidden" name="speedBuyTypeInd" id="speedBuyTypeInd" value="C" />
+            </div>
+         </div>
+         <div id="divFormButtons">
+            <div>
+               <span id="createPasswordSpan">
+               <span>Create Password</span>
+               <input id="btnSignIn" type="button" value="Create Password" />
+               </span>
+               <span id="continueButtonSpan">
+               <span>Continue</span>
+               <input id="btnSignIn" type="button" value="Continue" />
+               </span>
+            </div>
+            <div>
+               <span>
+               <span>Sign In</span>
+               <input id="btnSignIn" type="submit" value="Sign In" />
+               </span>
+            </div>
+         </div>
+         <fieldset>
+            <input id="userPrefs" type="hidden" value="" name="userPrefs" />
+         </fieldset>
+      </form>
+      <form id="frmCreateAccount">
+         <input type="hidden" name="csrfToken" value="M1E1cTBwME9saUVZaU9iNUdJVnZqSm9JQThHM3gwSUt0elROSE9oSDJaST0=" />
+         <div id="divButtons">
+            <span>
+            <span>Continue</span>
+            <input id="btnSignUp" type="button" value="Continue" />
+            </span>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/QVC/YourInformation.html
@@ -0,0 +1,522 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+      <meta property="fb:app_id" content="105047196722" />
+      <meta property="fb:page_id" content="23797290954" />
+      <meta name="format-detection" content="telephone=no" />
+      <meta name="viewport" content="width=919" />
+      <title>Payment Method</title>
+   </head>
+   <body>
+      <form id="frmEditPaymentMethod" name="frmEditPaymentMethod" method="post" action="https://www.qvc.com/webapp/wcs/stores/servlet/NPOOrderAddPaymentMethods">
+         <input type="hidden" name="csrfToken" value="M1E1cTBwME9saUVZaU9iNUdJVnZqSm9JQThHM3gwSUt0elROSE9oSDJaST0=" />
+         <input type="hidden" name="ccId" value="" />
+         <input type="hidden" name="payMethodExpireMonth" value="" />
+         <input type="hidden" name="payMethodExpireYear" value="" />
+         <input type="hidden" name="ccDtime" value="" />
+         <input type="hidden" name="payMethodNewCard" value="N" />
+         <input type="hidden" name="payMethodExpiryEdited" value="N" />
+         <input type="hidden" name="payMethodCVV" value="" />
+         <input type="hidden" name="orderId" value="476661567" />
+         <input type="hidden" name="langId" value="-1" />
+         <input type="hidden" name="catalogId" value="10151" />
+         <input type="hidden" name="storeId" value="10251" />
+         <input type="hidden" name="dummydata" value="" />
+         <input type="hidden" id="currentPaymentMethod" name="currentPaymentMethod" value="VI" />
+         <input type="hidden" name="checkoutStep" value="3" />
+         <input type="hidden" name="fromPaymentPage" value="Y" />
+         <input type="hidden" name="URL" value="" />
+         <input type="hidden" id="addAnotherGC" name="addAnotherGC" value="N" />
+         <input type="hidden" name="BMLFilePath" id="BMLFilePath" value="https://www.qvc.com/wcsstore/US/content/html/popups/BillMeLaterTermsandConditions.html" />
+         <div id="divEasyPayOptions">
+            <fieldset>
+               <ul>
+                  <li>
+                     <input type="radio" value="Z" id="rb1PaymentsItem_1" name="rbItemEasyPayOption_1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: 4 Easy Pays of $39.74 parseable name: rbItemEasyPayOption_1 field signature: 915844214 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                     <label for="rb1PaymentsItem_1">4 Easy Pays of $39.74</label>
+                  </li>
+                  <li>
+                     <input type="radio" value="N" id="rb2PaymentsItem_1" name="rbItemEasyPayOption_1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: 1 payment of $158.96 parseable name: rbItemEasyPayOption_1 field signature: 915844214 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                     <label for="rb2PaymentsItem_1">1 payment of $158.96</label>
+                  </li>
+               </ul>
+               <input type="hidden" name="hItemEasyPayOptionPayMthd_1" id="hItemEasyPayOptionPayMthd_1" value="QVAXCBDCSIMCVIBL " />
+               <input type="hidden" name="orderItemId_1" id="orderItemId_1" value="660521668" />
+            </fieldset>
+         </div>
+         <div id="divNewPaymentMethod">
+            <input id="ccId_1" type="hidden" name="ccId_1" value="" />
+            <table id="tblNewPaymentMethod" border="0" cellspacing="0" cellpadding="0" width="100%" summary="Payment methods available for Checkout">
+               <tbody>
+                  <tr id="trBillMeLaterRow-1">
+                     <td>
+                        <input type="radio" name="rbNewPaymentMethod" id="rbBillLater" value="rbBillLater"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: PayPal Credit parseable name: rbNewPaymentMethod field signature: 95492298 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <label for="rbBillLater">PayPal Credit</label>
+                     </td>
+                  </tr>
+                  <tr id="trBillMeLaterRow-2">
+                     <td colspan="5">
+                        <div id="divBillMeLater">
+                           <fieldset>
+                              <label id="lblPrimaryPhone" for="txtPrimaryPhone">Home Phone:</label>
+                              <input id="txtPrimaryPhone" type="tel" name="txtPrimaryPhone" autocomplete="off" autocorrect="off" value="" maxlength="14" size="14"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: Home Phone: parseable name: txtPrimaryPhone field signature: 918983855 form signature: 12190733459375771907"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblEmailAddress" for="txtEmailAddress">Email Address:</label>
+                              <input id="txtEmailAddress" type="email" name="txtEmailAddress" autocomplete="on" autocorrect="off" value="formautofilltester@gmail.com"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: Email Address: parseable name: txtEmailAddress field signature: 653947670 form signature: 12190733459375771907"
+autofill-prediction="EMAIL_ADDRESS"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblSsn" for="txtSsn">Social Security Number:</label>XXX-XX-<input id="txtSsn" type="text" pattern="[0-9]*" autocomplete="off" autocorrect="off" maxlength="4" size="4" name="txtLast4SSN" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Social Security Number: parseable name: txtLast4SSN field signature: 598258955 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           </fieldset>
+                           <fieldset>
+                              <label id="lblDateOfBirthMonth" for="selDobMonth">Date of Birth:</label>
+                              <select id="selDobMonth" name="dobMonth" size="1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Date of Birth: parseable name: dobMonth field signature: 3916402925 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 <option value="month" selected="selected">Month</option>
+                                 <option value="01">January</option>
+                                 <option value="02">February</option>
+                                 <option value="03">March</option>
+                                 <option value="04">April</option>
+                                 <option value="05">May</option>
+                                 <option value="06">June</option>
+                                 <option value="07">July</option>
+                                 <option value="08">August</option>
+                                 <option value="09">September</option>
+                                 <option value="10">October</option>
+                                 <option value="11">November</option>
+                                 <option value="12">December</option>
+                              </select>
+                              <label id="lblDateOfBirthDay" for="selDobDay">Day of Birth:</label>
+                              <select id="selDobDay" name="dobDay" size="1"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Day of Birth: parseable name: dobDay field signature: 4127787517 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                                 <option value="day" selected="selected">Day</option>
+                                 <option value="1">1</option>
+                                 <option value="2">2</option>
+                                 <option value="3">3</option>
+                                 <option value="4">4</option>
+                                 <option value="5">5</option>
+                                 <option value="6">6</option>
+                                 <option value="7">7</option>
+                                 <option value="8">8</option>
+                                 <option value="9">9</option>
+                                 <option value="10">10</option>
+                                 <option value="11">11</option>
+                                 <option value="12">12</option>
+                                 <option value="13">13</option>
+                                 <option value="14">14</option>
+                                 <option value="15">15</option>
+                                 <option value="16">16</option>
+                                 <option value="17">17</option>
+                                 <option value="18">18</option>
+                                 <option value="19">19</option>
+                                 <option value="20">20</option>
+                                 <option value="21">21</option>
+                                 <option value="22">22</option>
+                                 <option value="23">23</option>
+                                 <option value="24">24</option>
+                                 <option value="25">25</option>
+                                 <option value="26">26</option>
+                                 <option value="27">27</option>
+                                 <option value="28">28</option>
+                                 <option value="29">29</option>
+                                 <option value="30">30</option>
+                                 <option value="31">31</option>
+                              </select>
+                              <label id="lblDateOfBirthYear" for="selDobYear">Year of Birth:</label>
+                              <select id="selDobYear" name="dobYear" size="1"
+title="overall type: COMPANY_NAME server type: COMPANY_NAME heuristic type: UNKNOWN_TYPE label: Year of Birth: parseable name: dobYear field signature: 3750696607 form signature: 12190733459375771907"
+autofill-prediction="COMPANY_NAME"
+>
+                                 <option value="year" selected="selected">Year</option>
+                                 <option value="1927">1927</option>
+                                 <option value="1928">1928</option>
+                                 <option value="1929">1929</option>
+                                 <option value="1930">1930</option>
+                                 <option value="1931">1931</option>
+                                 <option value="1932">1932</option>
+                                 <option value="1933">1933</option>
+                                 <option value="1934">1934</option>
+                                 <option value="1935">1935</option>
+                                 <option value="1936">1936</option>
+                                 <option value="1937">1937</option>
+                                 <option value="1938">1938</option>
+                                 <option value="1939">1939</option>
+                                 <option value="1940">1940</option>
+                                 <option value="1941">1941</option>
+                                 <option value="1942">1942</option>
+                                 <option value="1943">1943</option>
+                                 <option value="1944">1944</option>
+                                 <option value="1945">1945</option>
+                                 <option value="1946">1946</option>
+                                 <option value="1947">1947</option>
+                                 <option value="1948">1948</option>
+                                 <option value="1949">1949</option>
+                                 <option value="1950">1950</option>
+                                 <option value="1951">1951</option>
+                                 <option value="1952">1952</option>
+                                 <option value="1953">1953</option>
+                                 <option value="1954">1954</option>
+                                 <option value="1955">1955</option>
+                                 <option value="1956">1956</option>
+                                 <option value="1957">1957</option>
+                                 <option value="1958">1958</option>
+                                 <option value="1959">1959</option>
+                                 <option value="1960">1960</option>
+                                 <option value="1961">1961</option>
+                                 <option value="1962">1962</option>
+                                 <option value="1963">1963</option>
+                                 <option value="1964">1964</option>
+                                 <option value="1965">1965</option>
+                                 <option value="1966">1966</option>
+                                 <option value="1967">1967</option>
+                                 <option value="1968">1968</option>
+                                 <option value="1969">1969</option>
+                                 <option value="1970">1970</option>
+                                 <option value="1971">1971</option>
+                                 <option value="1972">1972</option>
+                                 <option value="1973">1973</option>
+                                 <option value="1974">1974</option>
+                                 <option value="1975">1975</option>
+                                 <option value="1976">1976</option>
+                                 <option value="1977">1977</option>
+                                 <option value="1978">1978</option>
+                                 <option value="1979">1979</option>
+                                 <option value="1980">1980</option>
+                                 <option value="1981">1981</option>
+                                 <option value="1982">1982</option>
+                                 <option value="1983">1983</option>
+                                 <option value="1984">1984</option>
+                                 <option value="1985">1985</option>
+                                 <option value="1986">1986</option>
+                                 <option value="1987">1987</option>
+                                 <option value="1988">1988</option>
+                                 <option value="1989">1989</option>
+                                 <option value="1990">1990</option>
+                                 <option value="1991">1991</option>
+                                 <option value="1992">1992</option>
+                                 <option value="1993">1993</option>
+                                 <option value="1994">1994</option>
+                                 <option value="1995">1995</option>
+                                 <option value="1996">1996</option>
+                                 <option value="1997">1997</option>
+                                 <option value="1998">1998</option>
+                                 <option value="1999">1999</option>
+                                 <option value="2000">2000</option>
+                                 <option value="2001">2001</option>
+                                 <option value="2002">2002</option>
+                                 <option value="2003">2003</option>
+                                 <option value="2004">2004</option>
+                                 <option value="2005">2005</option>
+                                 <option value="2006">2006</option>
+                                 <option value="2007">2007</option>
+                                 <option value="2008">2008</option>
+                                 <option value="2009">2009</option>
+                                 <option value="2010">2010</option>
+                                 <option value="2011">2011</option>
+                                 <option value="2012">2012</option>
+                                 <option value="2013">2013</option>
+                                 <option value="2014">2014</option>
+                                 <option value="2015">2015</option>
+                                 <option value="2016">2016</option>
+                                 <option value="2017">2017</option>
+                              </select>
+                           </fieldset>
+                           <div id="monetate_selectorHTML_b234e9d_0">
+                              <div>
+                                 <label for="cbBillMeLaterElectronicConsent" id="lblBillMeLaterElectronicConsent">&nbsp;&nbsp;<input id="cbBillMeLaterElectronicConsent" name="bmlAcceptTerms" type="checkbox" />
+                                 </label>
+                              </div>
+                           </div>
+                        </div>
+                        <div id="BMLScroll">
+                           <input name="bmlAcceptTermsTemp" id="cbBillMeLaterElectronicConsentTemp" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Note: After scrolling, please remain at the bottom of the Terms and Conditions section to continue. parseable name: bmlAcceptTermsTemp field signature: 1379157860 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           <label for="cbBillMeLaterElectronicConsent" id="lblBillMeLaterElectronicConsent">&nbsp;&nbsp;<input name="bmlAcceptTerms" id="cbBillMeLaterElectronicConsent" type="checkbox"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Note: After scrolling, please remain at the bottom of the Terms and Conditions section to continue. parseable name: bmlAcceptTerms field signature: 4275106371 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                           </label>
+                        </div>
+                     </td>
+                  </tr>
+                  <tr id="trEnterNewCard-1">
+                     <td colspan="5">
+                        <input type="radio" name="rbNewPaymentMethod" id="rbNewCard" value="rbNewCard" checked="checked"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Enter New Card parseable name: rbNewPaymentMethod field signature: 95492298 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <label for="rbNewCard">&nbsp;Enter New Card</label>&nbsp;&nbsp;&nbsp;&nbsp;
+                     </td>
+                  </tr>
+                  <tr id="trEnterNewCard-2">
+                     <td colspan="5">
+                        <div id="divEnterNewCard">
+                           <fieldset>
+                              <label id="lblNewCardType" for="selNewCardType">Type</label>
+                              <select name="NewCardType" id="selNewCardType" size="1"
+title="overall type: CREDIT_CARD_TYPE server type: CREDIT_CARD_TYPE heuristic type: CREDIT_CARD_TYPE label: Type parseable name: NewCardType field signature: 3035337803 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_TYPE"
+>
+                                 <option value="AX">American Express</option>
+                                 <option value="CB">Carte Blanc</option>
+                                 <option value="DC">Diners Club</option>
+                                 <option value="SI">Discover</option>
+                                 <option value="MC">MasterCard</option>
+                                 <option value="QV">QCard</option>
+                                 <option value="VI" selected="selected">Visa</option>
+                              </select>
+                              <label id="lblNewCardNumber" for="txtNewCardNumber">Number:</label>
+                              <input id="txtNewCardNumber" name="NewCardNumber" type="text" maxlength="20" size="21" autocomplete="off" autocorrect="off" value="" pattern="[0-9]*"
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: CREDIT_CARD_NUMBER label: Number: parseable name: NewCardNumber field signature: 2370218454 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_NUMBER"
+/>
+                              <input id="hidNewLastCC" name="hidNewLastCC" type="hidden" value="" />
+                              <fieldset id="fldExpireDateNewCard">
+                                 <label id="lblNewCard" for="selNewCard">Expiration Date:</label>
+                                 <select name="selNewCard" id="selNewCard" size="1"
+title="overall type: CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR server type: NO_SERVER_DATA heuristic type: CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR label: Expiration Date: parseable name: selNewCard field signature: 2308816317 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR"
+>
+                                    <option value="03/2017" selected="selected">03/2017</option>
+                                    <option value="04/2017">04/2017</option>
+                                    <option value="05/2017">05/2017</option>
+                                    <option value="06/2017">06/2017</option>
+                                    <option value="07/2017">07/2017</option>
+                                    <option value="08/2017">08/2017</option>
+                                    <option value="09/2017">09/2017</option>
+                                    <option value="10/2017">10/2017</option>
+                                    <option value="11/2017">11/2017</option>
+                                    <option value="12/2017">12/2017</option>
+                                    <option value="01/2018">01/2018</option>
+                                    <option value="02/2018">02/2018</option>
+                                    <option value="03/2018">03/2018</option>
+                                    <option value="04/2018">04/2018</option>
+                                    <option value="05/2018">05/2018</option>
+                                    <option value="06/2018">06/2018</option>
+                                    <option value="07/2018">07/2018</option>
+                                    <option value="08/2018">08/2018</option>
+                                    <option value="09/2018">09/2018</option>
+                                    <option value="10/2018">10/2018</option>
+                                    <option value="11/2018">11/2018</option>
+                                    <option value="12/2018">12/2018</option>
+                                    <option value="01/2019">01/2019</option>
+                                    <option value="02/2019">02/2019</option>
+                                    <option value="03/2019">03/2019</option>
+                                    <option value="04/2019">04/2019</option>
+                                    <option value="05/2019">05/2019</option>
+                                    <option value="06/2019">06/2019</option>
+                                    <option value="07/2019">07/2019</option>
+                                    <option value="08/2019">08/2019</option>
+                                    <option value="09/2019">09/2019</option>
+                                    <option value="10/2019">10/2019</option>
+                                    <option value="11/2019">11/2019</option>
+                                    <option value="12/2019">12/2019</option>
+                                    <option value="01/2020">01/2020</option>
+                                    <option value="02/2020">02/2020</option>
+                                    <option value="03/2020">03/2020</option>
+                                    <option value="04/2020">04/2020</option>
+                                    <option value="05/2020">05/2020</option>
+                                    <option value="06/2020">06/2020</option>
+                                    <option value="07/2020">07/2020</option>
+                                    <option value="08/2020">08/2020</option>
+                                    <option value="09/2020">09/2020</option>
+                                    <option value="10/2020">10/2020</option>
+                                    <option value="11/2020">11/2020</option>
+                                    <option value="12/2020">12/2020</option>
+                                    <option value="01/2021">01/2021</option>
+                                    <option value="02/2021">02/2021</option>
+                                    <option value="03/2021">03/2021</option>
+                                    <option value="04/2021">04/2021</option>
+                                    <option value="05/2021">05/2021</option>
+                                    <option value="06/2021">06/2021</option>
+                                    <option value="07/2021">07/2021</option>
+                                    <option value="08/2021">08/2021</option>
+                                    <option value="09/2021">09/2021</option>
+                                    <option value="10/2021">10/2021</option>
+                                    <option value="11/2021">11/2021</option>
+                                    <option value="12/2021">12/2021</option>
+                                    <option value="01/2022">01/2022</option>
+                                    <option value="02/2022">02/2022</option>
+                                    <option value="03/2022">03/2022</option>
+                                    <option value="04/2022">04/2022</option>
+                                    <option value="05/2022">05/2022</option>
+                                    <option value="06/2022">06/2022</option>
+                                    <option value="07/2022">07/2022</option>
+                                    <option value="08/2022">08/2022</option>
+                                    <option value="09/2022">09/2022</option>
+                                    <option value="10/2022">10/2022</option>
+                                    <option value="11/2022">11/2022</option>
+                                    <option value="12/2022">12/2022</option>
+                                    <option value="01/2023">01/2023</option>
+                                    <option value="02/2023">02/2023</option>
+                                    <option value="03/2023">03/2023</option>
+                                    <option value="04/2023">04/2023</option>
+                                    <option value="05/2023">05/2023</option>
+                                    <option value="06/2023">06/2023</option>
+                                    <option value="07/2023">07/2023</option>
+                                    <option value="08/2023">08/2023</option>
+                                    <option value="09/2023">09/2023</option>
+                                    <option value="10/2023">10/2023</option>
+                                    <option value="11/2023">11/2023</option>
+                                    <option value="12/2023">12/2023</option>
+                                    <option value="01/2024">01/2024</option>
+                                    <option value="02/2024">02/2024</option>
+                                    <option value="03/2024">03/2024</option>
+                                    <option value="04/2024">04/2024</option>
+                                    <option value="05/2024">05/2024</option>
+                                    <option value="06/2024">06/2024</option>
+                                    <option value="07/2024">07/2024</option>
+                                    <option value="08/2024">08/2024</option>
+                                    <option value="09/2024">09/2024</option>
+                                    <option value="10/2024">10/2024</option>
+                                    <option value="11/2024">11/2024</option>
+                                    <option value="12/2024">12/2024</option>
+                                    <option value="01/2025">01/2025</option>
+                                    <option value="02/2025">02/2025</option>
+                                    <option value="03/2025">03/2025</option>
+                                    <option value="04/2025">04/2025</option>
+                                    <option value="05/2025">05/2025</option>
+                                    <option value="06/2025">06/2025</option>
+                                    <option value="07/2025">07/2025</option>
+                                    <option value="08/2025">08/2025</option>
+                                    <option value="09/2025">09/2025</option>
+                                    <option value="10/2025">10/2025</option>
+                                    <option value="11/2025">11/2025</option>
+                                    <option value="12/2025">12/2025</option>
+                                    <option value="01/2026">01/2026</option>
+                                    <option value="02/2026">02/2026</option>
+                                    <option value="03/2026">03/2026</option>
+                                    <option value="04/2026">04/2026</option>
+                                    <option value="05/2026">05/2026</option>
+                                    <option value="06/2026">06/2026</option>
+                                    <option value="07/2026">07/2026</option>
+                                    <option value="08/2026">08/2026</option>
+                                    <option value="09/2026">09/2026</option>
+                                    <option value="10/2026">10/2026</option>
+                                    <option value="11/2026">11/2026</option>
+                                    <option value="12/2026">12/2026</option>
+                                    <option value="01/2027">01/2027</option>
+                                    <option value="02/2027">02/2027</option>
+                                    <option value="03/2027">03/2027</option>
+                                    <option value="04/2027">04/2027</option>
+                                    <option value="05/2027">05/2027</option>
+                                    <option value="06/2027">06/2027</option>
+                                    <option value="07/2027">07/2027</option>
+                                    <option value="08/2027">08/2027</option>
+                                    <option value="09/2027">09/2027</option>
+                                    <option value="10/2027">10/2027</option>
+                                    <option value="11/2027">11/2027</option>
+                                    <option value="12/2027">12/2027</option>
+                                 </select>
+                              </fieldset>
+                           </fieldset>
+                           <fieldset id="fldSecurityCodeNewCard">
+                              <div id="fldSecurityCode">
+                                 <label for="txtSecurityCode">Security Code:</label>&nbsp;<input id="txtSecurityCode" name="SecurityCode" type="text" pattern="[0-9]*" maxlength="5" size="5" value=""
+title="overall type: CREDIT_CARD_VERIFICATION_CODE server type: NO_SERVER_DATA heuristic type: CREDIT_CARD_VERIFICATION_CODE label: Security Code: parseable name: SecurityCode field signature: 4107652875 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+/>
+                              </div>
+                           </fieldset>
+                           <div id="divQButton">
+                              <span>
+                              <input type="button" id="btnQCard" value="Add My QCard" />
+                              <span>Add My QCard</span>
+                              </span>
+                              <input type="hidden" id="addMyQCard" name="addMyQCard" value="false" />
+                              <input type="hidden" id="isNPO" name="isNPO" value="true" />
+                           </div>
+                        </div>
+                     </td>
+                  </tr>
+               </tbody>
+            </table>
+         </div>
+         <div id="divQvcGiftCardsMethod">
+            <div>
+               <div id="divGiftCardPaymentOption">
+                  <input type="checkbox" name="cbGiftCard" id="cbGiftCard"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Use a Gift Card parseable name: cbGiftCard field signature: 2461714937 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                  <label for="cbGiftCard">Use a Gift Card</label>
+                  <div id="divQvcGiftCardEntry">
+                     <fieldset>
+                        <label for="txtQvcGiftCardNumber">Card Number:</label>
+                        <input id="txtQvcGiftCardNumber" name="txtQvcGiftCardNumber" type="tel" autocomplete="off" autocorrect="off" maxlength="19" size="19" value=""
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: CREDIT_CARD_NUMBER label: Card Number: parseable name: txtQvcGiftCardNumber field signature: 375442765 form signature: 12190733459375771907"
+autofill-prediction="CREDIT_CARD_NUMBER"
+/>
+                        <label for="txtQvcGiftCardSecurityIdNumber">Security ID Number:</label>
+                        <input id="txtQvcGiftCardSecurityIdNumber" name="txtQvcGiftCardSecurityIdNumber" type="text" autocomplete="off" autocorrect="off" maxlength="12" size="19" value=""
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Security ID Number: parseable name: txtQvcGiftCardSecurityIdNumber field signature: 383370886 form signature: 12190733459375771907"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+                        <span>
+                        <input type="button" id="btnQvcGiftCardEnterAnotherCard" name="btnQvcGiftCardEnterAnotherCard" value="Enter Another Card" />
+                        <span>Enter Another Card</span>
+                        </span>
+                        <br />
+                     </fieldset>
+                  </div>
+               </div>
+            </div>
+         </div>
+         <div id="monetate_selectorHTML_c937b2dd_0">
+            <div id="mainVoucherCodeDiv">
+               <input id="txtQvcApplyCodeNumber" name="txtQvcApplyCodeNumber" type="text" autocomplete="off" autocorrect="off" maxlength="25" size="19" value="" />
+               <input type="button" id="btnApplyCode" value="Apply Code" />
+            </div>
+         </div>
+         <div id="divButtons">
+            <span>
+            <input type="button" id="btnSubmitChanges" value="Continue Checkout" />
+            <span>Continue Checkout</span>
+            </span>
+            <span>
+            <span>Continue Checkout</span>
+            <input type="button" id="btnQCard2" value="Continue Checkout" />
+            </span>
+            <span>
+            <input type="button" id="btnReturnToOrder" value="EDIT SHOPPING CART" />
+            <span>Edit Shopping cart</span>
+            </span>
+         </div>
+      </form>
+      <form id="captureFormFooter" method="post" name="captureFormFooter">
+         <div id="divEmailFormFooter">
+            <label for="emailAddress1Footer">Get sneak previews of special offers and upcoming events delivered to your inbox.</label>
+            <span id="emailAddressErrorFooter">*</span>
+            <input id="emailAddress1Footer" type="text" value="Enter email" />
+            <input id="emailAddress2Footer" type="text" value="Confirm email" />
+            <input id="signUpFooter" type="submit" value="Sign Up" />
+            <span id="disclaimerTextFooter">*You're signing up to receive QVC promotional email.</span>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/README
@@ -0,0 +1,4 @@
+This directory contains pages downloaded from the web for the purpose of testing
+Form Autofill against pages from the real world.  These files are not made
+available under an open source license.
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Sears/PaymentOptions.html
@@ -0,0 +1,566 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <title>
+</title>
+   </head>
+   <body>
+      <meta http-equiv="imagetoolbar" content="no" />
+      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+      <title>Payment Options | Sears PartsDirect</title>
+      <meta name="viewport" content="width=device-width, initial-scale=1" />
+      <meta name="decorator" content="pdwCheckout" />
+      <input type="hidden" id="isCQTOFPDPPagesEnabled" value="true" />
+      <input type="hidden" id="cqHost" value="//www.searspartsdirect.com" />
+      <form id="modelSearchHeader" method="get" action="https://www.searspartsdirect.com/partsdirect/getModel.pd" name="modelSearch">
+         <fieldset>
+            <label>Try searching again:</label>
+            <label for="searchedModelField">Model Number</label>
+            <input id="searchedModelField" type="text"
+title="Enter model number" value="Enter model number" name="modelNumberPopUp" maxlength="35" />
+            <input type="hidden" name="shdMod" />
+            <input type="hidden" name="pathTaken" />
+            <input type="hidden" name="legacySlrSearch" />
+         </fieldset>
+      </form>
+      <form id="creditCard" name="creditCard" action="https://www.searspartsdirect.com/partsdirect/checkOut.pd" method="post" pd-form-id="1489978179816">
+         <input type="hidden" name="_eventId" value="goAddPaymentOpt" id="creditCard__eventId" />
+         <input type="hidden" name="paymentOptionStr" value="" id="creditCard_paymentOptionStr" />
+         <input type="hidden" name="userPaymentTypeId" value="" id="creditCard_userPaymentTypeId" />
+         <input type="hidden" name="associateDiscountInput" value="" id="creditCard_associateDiscountInput" />
+         <input type="hidden" name="saveAssociateId" value="false" id="creditCard_saveAssociateId" />
+         <input type="hidden" name="userPaymentCommercial" value="false" id="creditCard_userPaymentCommercial" />
+         <input type="hidden" name="paymentType" value="" id="creditCard_paymentType" />
+         <div id="GuestCreditCardForm">
+            <div>
+               <div>
+                  <label for="order.paymentType.cardNumber">Card Number</label>
+                  <input type="text" name="maskedCardNumber" maxlength="16" value="" id="maskedCardNumber" placeholder="Card Number"
+title="overall type: CREDIT_CARD_NUMBER server type: CREDIT_CARD_NUMBER heuristic type: CREDIT_CARD_NUMBER label: Card Number parseable name: maskedCardNumber field signature: 2745159259 form signature: 7671147655436241539"
+autofill-prediction="CREDIT_CARD_NUMBER"
+/>
+               </div>
+               <div>
+                  <label for="order.paymentType.nameOnCard">Name On Card</label>
+                  <input type="text" name="creditCardPaymentName" value="" id="creditCard_creditCardPaymentName" placeholder="Name On Card"
+title="overall type: CREDIT_CARD_NAME_FULL server type: CREDIT_CARD_NAME_FULL heuristic type: CREDIT_CARD_NAME_FULL label: Name On Card parseable name: creditCardPaymentName field signature: 2311472685 form signature: 7671147655436241539"
+autofill-prediction="CREDIT_CARD_NAME_FULL"
+/>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <div>
+                     <label for="order.paymentType.securityCode">Security Code</label>
+                     <input type="text" name="securityCode" value="" id="securityCode" placeholder="CVV"
+title="overall type: CREDIT_CARD_VERIFICATION_CODE server type: NO_SERVER_DATA heuristic type: CREDIT_CARD_VERIFICATION_CODE label: Security Code parseable name: securityCode field signature: 1305695504 form signature: 7671147655436241539"
+autofill-prediction="CREDIT_CARD_VERIFICATION_CODE"
+/>
+                  </div>
+                  <div>
+                     <label for="order.paymentType.expirationDate">Expiration Date</label>
+                     <select name="expMonth" id="expMonth"
+title="overall type: CREDIT_CARD_EXP_MONTH server type: CREDIT_CARD_EXP_MONTH heuristic type: CREDIT_CARD_EXP_MONTH label: Expiration Date parseable name: expMonth field signature: 2046285420 form signature: 7671147655436241539"
+autofill-prediction="CREDIT_CARD_EXP_MONTH"
+>
+                        <option value="">Month</option>
+                        <option value="1">01-January</option>
+                        <option value="2">02-February</option>
+                        <option value="3">03-March</option>
+                        <option value="4">04-April</option>
+                        <option value="5">05-May</option>
+                        <option value="6">06-June</option>
+                        <option value="7">07-July</option>
+                        <option value="8">08-August</option>
+                        <option value="9">09-September</option>
+                        <option value="10">10-October</option>
+                        <option value="11">11-November</option>
+                        <option value="12">12-December</option>
+                     </select>
+                  </div>
+                  <div>
+                     <select name="expYear" id="expYear"
+title="overall type: CREDIT_CARD_EXP_4_DIGIT_YEAR server type: CREDIT_CARD_EXP_4_DIGIT_YEAR heuristic type: ADDRESS_HOME_CITY label: The City/State/ZIP Code combination you entered is incorrect. Please try again. Billing Address parseable name: expYear field signature: 2532266972 form signature: 7671147655436241539"
+autofill-prediction="CREDIT_CARD_EXP_4_DIGIT_YEAR"
+>
+                        <option value="">Year</option>
+                        <option value="2017">2017</option>
+                        <option value="2018">2018</option>
+                        <option value="2019">2019</option>
+                        <option value="2020">2020</option>
+                        <option value="2021">2021</option>
+                        <option value="2022">2022</option>
+                        <option value="2023">2023</option>
+                        <option value="2024">2024</option>
+                        <option value="2025">2025</option>
+                        <option value="2026">2026</option>
+                        <option value="2027">2027</option>
+                        <option value="2028">2028</option>
+                        <option value="2029">2029</option>
+                        <option value="2030">2030</option>
+                     </select>
+                  </div>
+               </div>
+            </div>
+         </div>
+      </form>
+      <form id="anotherBillingAddress" name="anotherBillingAddress" method="post" pd-form-id="1489978179817">
+         <div id="billingAddressForm">
+            <div>
+               <label for="order.billingInfo.firstName">First Name<span>*</span>
+               </label>
+               <input type="text" name="order.billingInfo.firstName" maxlength="11" value="Vance" id="order.billingInfo.firstName" placeholder="First Name *"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: First Name* parseable name: firstName field signature: 3077178767 form signature: 17982067175666068474"
+autofill-prediction="NAME_FIRST"
+/>
+            </div>
+            <div>
+               <label for="order.billingInfo.lastName">Last Name<span>*</span>
+               </label>
+               <input type="text" name="order.billingInfo.lastName" value="Chen" id="order.billingInfo.lastName" placeholder="Last Name *"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: Last Name* parseable name: lastName field signature: 2325932944 form signature: 17982067175666068474"
+autofill-prediction="NAME_LAST"
+/>
+            </div>
+            <div id="divCityStateZipId_3">
+               <div id="divCityStateZipId_2">
+                  <div>
+                     <div>
+                        <label for="order.billingInfo.address.address1">Street Address<span>*</span> - 24 character limit</label>
+                        <input type="text" name="order.billingInfo.address.address1" value="Island Drvie" id="order.billingInfo.address.address1" placeholder="Street Address *"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: Street Address* - 24 character limit parseable name: address.address1 field signature: 796482076 form signature: 17982067175666068474"
+autofill-prediction="ADDRESS_HOME_LINE1"
+/>
+                     </div>
+                     <div>
+                        <label for="order.billingInfo.address.address2">Apt. #</label>
+                        <input type="text" name="order.billingInfo.address.address2" value="102" id="order.billingInfo.address.address2" placeholder="Apt. #"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Apt. # parseable name: address.address2 field signature: 1242999964 form signature: 17982067175666068474"
+autofill-prediction="ADDRESS_HOME_LINE2"
+/>
+                     </div>
+                  </div>
+                  <div id="divCityStateZipId">
+                     <div>
+                        <div>
+                           <label for="order.billingInfo.address.city">City<span>*</span>
+                           </label>
+                           <input type="text" name="order.billingInfo.address.city" value="Ann Arbor" id="order.billingInfo.address.city" placeholder="City *"
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: City* parseable name: address.city field signature: 1372321658 form signature: 17982067175666068474"
+autofill-prediction="ADDRESS_HOME_CITY"
+/>
+                        </div>
+                        <div>
+                           <label for="order.billingInfo.address.state">State<span>*</span>
+                           </label>
+                           <select name="order.billingInfo.address.state" id="order.billingInfo.address.state"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: State* parseable name: address.state field signature: 2106658457 form signature: 17982067175666068474"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                              <option value="">ST *</option>
+                              <option value="AA">AA</option>
+                              <option value="AE">AE</option>
+                              <option value="AL">AL</option>
+                              <option value="AK">AK</option>
+                              <option value="AP">AP</option>
+                              <option value="AZ">AZ</option>
+                              <option value="AR">AR</option>
+                              <option value="CA">CA</option>
+                              <option value="CO">CO</option>
+                              <option value="CT">CT</option>
+                              <option value="DE">DE</option>
+                              <option value="DC">DC</option>
+                              <option value="FL">FL</option>
+                              <option value="GA">GA</option>
+                              <option value="GU">GU</option>
+                              <option value="HI">HI</option>
+                              <option value="ID">ID</option>
+                              <option value="IL">IL</option>
+                              <option value="IN">IN</option>
+                              <option value="IA">IA</option>
+                              <option value="KS">KS</option>
+                              <option value="KY">KY</option>
+                              <option value="LA">LA</option>
+                              <option value="ME">ME</option>
+                              <option value="MD">MD</option>
+                              <option value="MA">MA</option>
+                              <option value="MI" selected="selected">MI</option>
+                              <option value="MN">MN</option>
+                              <option value="MS">MS</option>
+                              <option value="MO">MO</option>
+                              <option value="MT">MT</option>
+                              <option value="NE">NE</option>
+                              <option value="NV">NV</option>
+                              <option value="NH">NH</option>
+                              <option value="NJ">NJ</option>
+                              <option value="NM">NM</option>
+                              <option value="NY">NY</option>
+                              <option value="NC">NC</option>
+                              <option value="ND">ND</option>
+                              <option value="OH">OH</option>
+                              <option value="OK">OK</option>
+                              <option value="OR">OR</option>
+                              <option value="PA">PA</option>
+                              <option value="PR">PR</option>
+                              <option value="RI">RI</option>
+                              <option value="SC">SC</option>
+                              <option value="SD">SD</option>
+                              <option value="TN">TN</option>
+                              <option value="TX">TX</option>
+                              <option value="UT">UT</option>
+                              <option value="VA">VA</option>
+                              <option value="VI">VI</option>
+                              <option value="VT">VT</option>
+                              <option value="WA">WA</option>
+                              <option value="WV">WV</option>
+                              <option value="WI">WI</option>
+                              <option value="WY">WY</option>
+                           </select>
+                        </div>
+                     </div>
+                     <div>
+                        <label for="order.billingInfo.address.zipCode">ZIP/Postal Code<span>*</span>
+                        </label>
+                        <input type="text" name="order.billingInfo.address.zipCode" value="48105" id="order.billingInfo.address.zipCode" placeholder="ZIP Code *"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: ZIP/Postal Code* parseable name: address.zipCode field signature: 1420459778 form signature: 17982067175666068474"
+autofill-prediction="ADDRESS_HOME_ZIP"
+/>
+                     </div>
+                     <input type="hidden" id="order.billingInfo.address.poBoxOrMillitaryAdd" name="order.billingInfo.address.poBoxOrMillitaryAdd" value="" />
+                  </div>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <label for="order.billingInfo.dayTimePhone">Phone Number<span>*</span>
+                  </label>
+                  <input type="text" name="order.billingInfo.dayTimePhone" value="734-123-1231" id="order.billingInfo.dayTimePhone" placeholder="Phone Number *"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: Phone Number* parseable name: dayTimePhone field signature: 2509269658 form signature: 17982067175666068474"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+/>
+               </div>
+               <div>
+                  <label for="order.billingInfo.dayTimePhoneExt">Ext.</label>
+                  <input type="text" name="order.billingInfo.dayTimePhoneExt" value="" id="order.billingInfo.dayTimePhoneExt" placeholder="Ext."
+title="overall type: PHONE_HOME_CITY_CODE server type: PHONE_HOME_CITY_CODE heuristic type: PHONE_HOME_EXTENSION label: Ext. parseable name: dayTimePhoneExt field signature: 1836849076 form signature: 17982067175666068474"
+autofill-prediction="PHONE_HOME_CITY_CODE"
+/>
+               </div>
+            </div>
+         </div>
+      </form>
+      <form id="eCheck" name="eCheck" action="https://www.searspartsdirect.com/partsdirect/checkOut.pd" method="post" pd-form-id="1489978179818">
+         <input type="hidden" name="_eventId" value="goAddPaymentOpt" id="eCheck__eventId" />
+         <input type="hidden" name="paymentOptionStr" value="" id="eCheck_paymentOptionStr" />
+         <input type="hidden" name="userPaymentTypeId" value="" id="eCheck_userPaymentTypeId" />
+         <input type="hidden" name="associateDiscountInput" value="" id="eCheck_associateDiscountInput" />
+         <input type="hidden" name="saveAssociateId" value="false" id="eCheck_saveAssociateId" />
+         <input type="hidden" name="userPaymentCommercial" value="false" id="eCheck_userPaymentCommercial" />
+         <input type="hidden" name="paymentType" value="" id="eCheck_paymentType" />
+         <div>
+            <input type="radio" value="true" name="businessAccountFlag" id="fldBusinessAccountFlag"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: This is a Business Account parseable name: businessAccountFlag field signature: 1078565374 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+            <label for="fldBusinessAccountFlag">This is a Business Account</label>
+         </div>
+         <div>
+            <input type="radio" value="false" checked="checked" name="businessAccountFlag" id="fldPersonalAccountFlag"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: This is a Personal Account parseable name: businessAccountFlag field signature: 1078565374 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+            <label for="fldPersonalAccountFlag">This is a Personal Account</label>
+         </div>
+         <label for="echeckFirstName">First name<span>*</span>
+         </label>
+         <div>
+            <input type="text" name="echeckFirstName" value="" id="echeckFirstName" placeholder="First name *"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: First name* parseable name: echeckFirstName field signature: 721631680 form signature: 11778620883203943321"
+autofill-prediction="NAME_FIRST"
+/>
+         </div>
+         <div>
+            <label for="echeckLastName">Last name<span>*</span>
+            </label>
+            <input type="text" name="echeckLastName" value="" id="echeckLastName" placeholder="Last name *"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: Last name* parseable name: echeckLastName field signature: 2195362343 form signature: 11778620883203943321"
+autofill-prediction="NAME_LAST"
+/>
+         </div>
+         <div>
+            <label for="maskedBankRoutingNumber">Bank routing number<span>*</span>
+            </label>
+            <input type="text" name="maskedBankRoutingNumber" value="" id="maskedBankRoutingNumber" placeholder="Bank routing number *"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Bank routing number* parseable name: maskedBankRoutingNumber field signature: 3997200887 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+         </div>
+         <div>
+            <label for="maskedCheckingAcctNumber">Checking account number<span>*</span>
+            </label>
+            <input type="text" name="maskedCheckingAcctNumber" value="" id="maskedCheckingAcctNumber" placeholder="Checking account number *"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Checking account number* parseable name: maskedCheckingAcctNumber field signature: 963371530 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+         </div>
+         <div>
+            <label for="checkNumber">Check number<span>*</span>
+            </label>
+            <input type="text" name="checkNumber" value="" id="checkNumber" placeholder="Check number *"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Check number* parseable name: checkNumber field signature: 1195469146 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+         </div>
+         <div id="personalAccountId">
+            <div>
+               <label for="maskedDriversLicence">Driver's license or state identification #<span>*</span>
+               </label>
+               <input type="text" name="maskedDriversLicence" value="" id="maskedDriversLicence" placeholder="Driver's license or state identification # *"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: Driver's license or state identification #* parseable name: maskedDriversLicence field signature: 1753257915 form signature: 11778620883203943321"
+autofill-prediction="ADDRESS_HOME_STATE"
+/>
+            </div>
+            <div>
+               <label for="state">State issued<span>*</span>
+               </label>
+               <select name="state" id="state"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: State issued* parseable name: state field signature: 1878375253 form signature: 11778620883203943321"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                  <option value="">ST *</option>
+                  <option value="AA">AA</option>
+                  <option value="AE">AE</option>
+                  <option value="AL">AL</option>
+                  <option value="AK">AK</option>
+                  <option value="AP">AP</option>
+                  <option value="AZ">AZ</option>
+                  <option value="AR">AR</option>
+                  <option value="CA">CA</option>
+                  <option value="CO">CO</option>
+                  <option value="CT">CT</option>
+                  <option value="DE">DE</option>
+                  <option value="DC">DC</option>
+                  <option value="FL">FL</option>
+                  <option value="GA">GA</option>
+                  <option value="GU">GU</option>
+                  <option value="HI">HI</option>
+                  <option value="ID">ID</option>
+                  <option value="IL">IL</option>
+                  <option value="IN">IN</option>
+                  <option value="IA">IA</option>
+                  <option value="KS">KS</option>
+                  <option value="KY">KY</option>
+                  <option value="LA">LA</option>
+                  <option value="ME">ME</option>
+                  <option value="MD">MD</option>
+                  <option value="MA">MA</option>
+                  <option value="MI">MI</option>
+                  <option value="MN">MN</option>
+                  <option value="MS">MS</option>
+                  <option value="MO">MO</option>
+                  <option value="MT">MT</option>
+                  <option value="NE">NE</option>
+                  <option value="NV">NV</option>
+                  <option value="NH">NH</option>
+                  <option value="NJ">NJ</option>
+                  <option value="NM">NM</option>
+                  <option value="NY">NY</option>
+                  <option value="NC">NC</option>
+                  <option value="ND">ND</option>
+                  <option value="OH">OH</option>
+                  <option value="OK">OK</option>
+                  <option value="OR">OR</option>
+                  <option value="PA">PA</option>
+                  <option value="PR">PR</option>
+                  <option value="RI">RI</option>
+                  <option value="SC">SC</option>
+                  <option value="SD">SD</option>
+                  <option value="TN">TN</option>
+                  <option value="TX">TX</option>
+                  <option value="UT">UT</option>
+                  <option value="VA">VA</option>
+                  <option value="VI">VI</option>
+                  <option value="VT">VT</option>
+                  <option value="WA">WA</option>
+                  <option value="WV">WV</option>
+                  <option value="WI">WI</option>
+                  <option value="WY">WY</option>
+               </select>
+            </div>
+            <div>
+               <label>Date of birth<span>*</span>
+               </label>
+               <select name="bdayMonth" id="bdayMonth"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Date of birth* parseable name: bdayMonth field signature: 1907288957 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <option value="">Month</option>
+                  <option value="1">January</option>
+                  <option value="2">February</option>
+                  <option value="3">March</option>
+                  <option value="4">April</option>
+                  <option value="5">May</option>
+                  <option value="6">June</option>
+                  <option value="7">July</option>
+                  <option value="8">August</option>
+                  <option value="9">September</option>
+                  <option value="10">October</option>
+                  <option value="11">November</option>
+                  <option value="12">December</option>
+               </select>
+               <select name="bdayDate" id="bdayDate"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Date of birth* parseable name: bdayDate field signature: 2056433281 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <option value="">Date</option>
+                  <option value="1">1</option>
+                  <option value="2">2</option>
+                  <option value="3">3</option>
+                  <option value="4">4</option>
+                  <option value="5">5</option>
+                  <option value="6">6</option>
+                  <option value="7">7</option>
+                  <option value="8">8</option>
+                  <option value="9">9</option>
+                  <option value="10">10</option>
+                  <option value="11">11</option>
+                  <option value="12">12</option>
+                  <option value="13">13</option>
+                  <option value="14">14</option>
+                  <option value="15">15</option>
+                  <option value="16">16</option>
+                  <option value="17">17</option>
+                  <option value="18">18</option>
+                  <option value="19">19</option>
+                  <option value="20">20</option>
+                  <option value="21">21</option>
+                  <option value="22">22</option>
+                  <option value="23">23</option>
+                  <option value="24">24</option>
+                  <option value="25">25</option>
+                  <option value="26">26</option>
+                  <option value="27">27</option>
+                  <option value="28">28</option>
+                  <option value="29">29</option>
+                  <option value="30">30</option>
+                  <option value="31">31</option>
+               </select>
+               <select name="bdayYear" id="bdayYear"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Date of birth* parseable name: bdayYear field signature: 938244373 form signature: 11778620883203943321"
+autofill-prediction="UNKNOWN_TYPE"
+>
+                  <option value="">Year</option>
+                  <option value="1999">1999</option>
+                  <option value="1998">1998</option>
+                  <option value="1997">1997</option>
+                  <option value="1996">1996</option>
+                  <option value="1995">1995</option>
+                  <option value="1994">1994</option>
+                  <option value="1993">1993</option>
+                  <option value="1992">1992</option>
+                  <option value="1991">1991</option>
+                  <option value="1990">1990</option>
+                  <option value="1989">1989</option>
+                  <option value="1988">1988</option>
+                  <option value="1987">1987</option>
+                  <option value="1986">1986</option>
+                  <option value="1985">1985</option>
+                  <option value="1984">1984</option>
+                  <option value="1983">1983</option>
+                  <option value="1982">1982</option>
+                  <option value="1981">1981</option>
+                  <option value="1980">1980</option>
+                  <option value="1979">1979</option>
+                  <option value="1978">1978</option>
+                  <option value="1977">1977</option>
+                  <option value="1976">1976</option>
+                  <option value="1975">1975</option>
+                  <option value="1974">1974</option>
+                  <option value="1973">1973</option>
+                  <option value="1972">1972</option>
+                  <option value="1971">1971</option>
+                  <option value="1970">1970</option>
+                  <option value="1969">1969</option>
+                  <option value="1968">1968</option>
+                  <option value="1967">1967</option>
+                  <option value="1966">1966</option>
+                  <option value="1965">1965</option>
+                  <option value="1964">1964</option>
+                  <option value="1963">1963</option>
+                  <option value="1962">1962</option>
+                  <option value="1961">1961</option>
+                  <option value="1960">1960</option>
+                  <option value="1959">1959</option>
+                  <option value="1958">1958</option>
+                  <option value="1957">1957</option>
+                  <option value="1956">1956</option>
+                  <option value="1955">1955</option>
+                  <option value="1954">1954</option>
+                  <option value="1953">1953</option>
+                  <option value="1952">1952</option>
+                  <option value="1951">1951</option>
+                  <option value="1950">1950</option>
+                  <option value="1949">1949</option>
+                  <option value="1948">1948</option>
+                  <option value="1947">1947</option>
+                  <option value="1946">1946</option>
+                  <option value="1945">1945</option>
+                  <option value="1944">1944</option>
+                  <option value="1943">1943</option>
+                  <option value="1942">1942</option>
+                  <option value="1941">1941</option>
+                  <option value="1940">1940</option>
+                  <option value="1939">1939</option>
+                  <option value="1938">1938</option>
+                  <option value="1937">1937</option>
+                  <option value="1936">1936</option>
+                  <option value="1935">1935</option>
+                  <option value="1934">1934</option>
+                  <option value="1933">1933</option>
+                  <option value="1932">1932</option>
+                  <option value="1931">1931</option>
+                  <option value="1930">1930</option>
+                  <option value="1929">1929</option>
+                  <option value="1928">1928</option>
+                  <option value="1927">1927</option>
+                  <option value="1926">1926</option>
+                  <option value="1925">1925</option>
+                  <option value="1924">1924</option>
+                  <option value="1923">1923</option>
+                  <option value="1922">1922</option>
+                  <option value="1921">1921</option>
+                  <option value="1920">1920</option>
+                  <option value="1919">1919</option>
+                  <option value="1918">1918</option>
+                  <option value="1917">1917</option>
+                  <option value="1916">1916</option>
+                  <option value="1915">1915</option>
+                  <option value="1914">1914</option>
+                  <option value="1913">1913</option>
+                  <option value="1912">1912</option>
+                  <option value="1911">1911</option>
+                  <option value="1910">1910</option>
+                  <option value="1909">1909</option>
+                  <option value="1908">1908</option>
+                  <option value="1907">1907</option>
+                  <option value="1906">1906</option>
+                  <option value="1905">1905</option>
+                  <option value="1904">1904</option>
+                  <option value="1903">1903</option>
+                  <option value="1902">1902</option>
+                  <option value="1901">1901</option>
+                  <option value="1900">1900</option>
+                  <option value="1899">1899</option>
+               </select>
+            </div>
+         </div>
+      </form>
+      <form id="emailForUpdates" name="emailForUpdates" action="https://www.searspartsdirect.com/partsdirect/offerEmailsAction.pd" method="post">
+         <fieldset>
+            <input type="text" id="emailAdd" name="emailAddress" value="" tabindex="4" maxlength="50" />
+            <label for="emailAdd">enter email address</label>
+         </fieldset>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Sears/ShippingAddress.html
@@ -0,0 +1,447 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+      <title>
+</title>
+   </head>
+   <body>
+      <meta http-equiv="imagetoolbar" content="no" />
+      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+      <title>Shipping address | Sears PartsDirect</title>
+      <meta name="viewport" content="width=device-width, initial-scale=1" />
+      <meta name="decorator" content="pdwCheckout" />
+      <input type="hidden" id="isCQTOFPDPPagesEnabled" value="true" />
+      <input type="hidden" id="cqHost" value="//www.searspartsdirect.com" />
+      <form id="modelSearchHeader" method="get" action="https://www.searspartsdirect.com/partsdirect/getModel.pd" name="modelSearch" autocomplete="off">
+         <fieldset>
+            <label>Try searching again:</label>
+            <label for="searchedModelField">Model Number</label>
+            <input id="searchedModelField" type="text"
+title="Enter model number" value="Enter model number" name="modelNumberPopUp" maxlength="35" />
+            <input type="hidden" name="shdMod" />
+            <input type="hidden" name="pathTaken" />
+            <input type="hidden" name="legacySlrSearch" />
+         </fieldset>
+      </form>
+      <form id="forgotModalPswForm" name="forgotModalPswForm" action="https://www.searspartsdirect.com/partsdirect/initCheckoutAction.pd" method="post" autocomplete="off">
+         <input type="hidden" name="currentForgotPageURL" value="" id="currentForgotPageURL" />
+         <div>
+            <label for="email">Email</label>
+         </div>
+         <div>
+            <input type="text" name="email" id="forgotPwdFldEmail" />
+         </div>
+         <div>
+            <input type="hidden" value="true" name="isCaptchaEnabled" id="isCaptchaEnabled" />
+            <div>
+               <div>
+                  <input type="hidden" value="VHM6MjAxNy0wMy0xOVQyMToxMjo1MFphYWExNjExNjM0OHp6ejIwMTctMDMtMTkgMjE6MTI6NTA=" name="captchaKey" id="forgotPwdFldCaptchaKey" />
+                  <fieldset>
+                     <input type="text" value="" tabindex="111" name="captchaText" id="forgotPwdFldCaptchaTxt" placeholder="Enter text" />
+                  </fieldset>
+               </div>
+            </div>
+            <p>
+</p>
+         </div>
+         <input type="hidden" name="commercialUI" value="false" />
+         <input type="hidden" name="returnTo" value="#returnToVal" id="forgotModalPswForm_returnTo" />
+         <input type="hidden" name="commercialUI" value="#commercialUIVal" id="forgotModalPswForm_commercialUI" />
+      </form>
+      <form id="checkOut" name="checkOut" action="https://www.searspartsdirect.com/partsdirect/checkOut.pd" method="post" autocomplete="off" pd-form-id="1489975972490">
+         <input type="hidden" name="_eventId" value="goAddAddress" id="checkOut__eventId" />
+         <div id="shippingForm">
+            <input type="hidden" name="isShippingAddressChanged" value="false" id="isShippingAddressChanged" />
+            <input type="hidden" name="isShippingAddressEdited" value="false" id="isShippingAddressEdited" />
+            <div id="shippingFormContainer">
+               <div>
+                  <label for="order.shippingInfo.firstName">First Name<span>*</span>
+                  </label>
+                  <input type="text" name="order.shippingInfo.firstName" maxlength="11" value="" id="checkOut_order_shippingInfo_firstName" placeholder="First Name *"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: First Name* parseable name: order.shippingInfo.firstName field signature: 243029182 form signature: 17155013134718564270"
+autofill-prediction="NAME_FIRST"
+/>
+               </div>
+               <div>
+                  <label>Last Name<span>*</span>
+                  </label>
+                  <input type="text" name="order.shippingInfo.lastName" value="" id="checkOut_order_shippingInfo_lastName" placeholder="Last Name *"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: Last Name* parseable name: order.shippingInfo.lastName field signature: 1858327987 form signature: 17155013134718564270"
+autofill-prediction="NAME_LAST"
+/>
+               </div>
+               <div id="divCityStateZipId_3">
+                  <div id="divCityStateZipId_2">
+                     <div>
+                        <div>
+                           <label for="order.shippingInfo.address.originalAddress">Street Address<span>*</span> - 24 character limit</label>
+                           <input type="text" name="order.shippingInfo.address.originalAddress" value="" id="checkOut_order_shippingInfo_address_originalAddress" placeholder="Street Address *"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: Street Address* - 24 character limit parseable name: order.shippingInfo.address.originalAddress field signature: 3461422700 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_LINE1"
+/>
+                           <div>24 character limit</div>
+                        </div>
+                        <div>
+                           <label for="order.shippingInfo.address.address2">Apt.
+                           #</label>
+                           <input type="text" name="order.shippingInfo.address.address2" value="" id="checkOut_order_shippingInfo_address_address2" placeholder="Apt. #"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Apt. # Apt. # parseable name: order.shippingInfo.address.address2 field signature: 1992141399 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_LINE2"
+/>
+                        </div>
+                     </div>
+                     <div id="divCityStateZipId">
+                        <div>
+                           <div>
+                              <label for="order.shippingInfo.address.city">City<span>*</span>
+                              </label>
+                              <input type="text" name="order.shippingInfo.address.city" value="" id="checkOut_order_shippingInfo_address_city" placeholder="City *"
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: City* parseable name: order.shippingInfo.address.city field signature: 2864354290 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_CITY"
+/>
+                           </div>
+                           <div>
+                              <label for="order.shippingInfo.address.state">State<span>*</span>
+                              </label>
+                              <select name="order.shippingInfo.address.state" id="checkOut_order_shippingInfo_address_state"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: State* parseable name: order.shippingInfo.address.state field signature: 296886288 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                                 <option value="">ST *</option>
+                                 <option value="AA">AA</option>
+                                 <option value="AE">AE</option>
+                                 <option value="AL">AL</option>
+                                 <option value="AK">AK</option>
+                                 <option value="AP">AP</option>
+                                 <option value="AZ">AZ</option>
+                                 <option value="AR">AR</option>
+                                 <option value="CA">CA</option>
+                                 <option value="CO">CO</option>
+                                 <option value="CT">CT</option>
+                                 <option value="DE">DE</option>
+                                 <option value="DC">DC</option>
+                                 <option value="FL">FL</option>
+                                 <option value="GA">GA</option>
+                                 <option value="GU">GU</option>
+                                 <option value="HI">HI</option>
+                                 <option value="ID">ID</option>
+                                 <option value="IL">IL</option>
+                                 <option value="IN">IN</option>
+                                 <option value="IA">IA</option>
+                                 <option value="KS">KS</option>
+                                 <option value="KY">KY</option>
+                                 <option value="LA">LA</option>
+                                 <option value="ME">ME</option>
+                                 <option value="MD">MD</option>
+                                 <option value="MA">MA</option>
+                                 <option value="MI">MI</option>
+                                 <option value="MN">MN</option>
+                                 <option value="MS">MS</option>
+                                 <option value="MO">MO</option>
+                                 <option value="MT">MT</option>
+                                 <option value="NE">NE</option>
+                                 <option value="NV">NV</option>
+                                 <option value="NH">NH</option>
+                                 <option value="NJ">NJ</option>
+                                 <option value="NM">NM</option>
+                                 <option value="NY">NY</option>
+                                 <option value="NC">NC</option>
+                                 <option value="ND">ND</option>
+                                 <option value="OH">OH</option>
+                                 <option value="OK">OK</option>
+                                 <option value="OR">OR</option>
+                                 <option value="PA">PA</option>
+                                 <option value="PR">PR</option>
+                                 <option value="RI">RI</option>
+                                 <option value="SC">SC</option>
+                                 <option value="SD">SD</option>
+                                 <option value="TN">TN</option>
+                                 <option value="TX">TX</option>
+                                 <option value="UT">UT</option>
+                                 <option value="VA">VA</option>
+                                 <option value="VI">VI</option>
+                                 <option value="VT">VT</option>
+                                 <option value="WA">WA</option>
+                                 <option value="WV">WV</option>
+                                 <option value="WI">WI</option>
+                                 <option value="WY">WY</option>
+                              </select>
+                           </div>
+                        </div>
+                        <div>
+                           <label for="order.shippingInfo.address.zipCode">ZIP/Postal Code<span>*</span>
+                           </label>
+                           <input type="text" name="order.shippingInfo.address.zipCode" value="" id="checkOut_order_shippingInfo_address_zipCode" placeholder="ZIP Code *"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: ZIP/Postal Code* parseable name: order.shippingInfo.address.zipCode field signature: 2432211277 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_ZIP"
+/>
+                        </div>
+                        <input type="hidden" id="order.shippingInfo.address.poBoxOrMillitaryAdd" name="order.shippingInfo.address.poBoxOrMillitaryAdd" value="" />
+                     </div>
+                  </div>
+               </div>
+               <div>
+                  <div>
+                     <label for="order.shippingInfo.dayTimePhone">Phone Number<span>*</span>
+                     </label>
+                     <input type="text" name="order.shippingInfo.dayTimePhone" value="" id="checkOut_order_shippingInfo_dayTimePhone" placeholder="Phone Number *"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: Phone Number* parseable name: order.shippingInfo.dayTimePhone field signature: 3680252951 form signature: 17155013134718564270"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+/>
+                  </div>
+                  <div>
+                     <label for="order.shippingInfo.dayTimePhoneExt">Ext.</label>
+                     <input type="text" name="order.shippingInfo.dayTimePhoneExt" value="" id="checkOut_order_shippingInfo_dayTimePhoneExt" placeholder="Ext."
+title="overall type: PHONE_HOME_EXTENSION server type: NO_SERVER_DATA heuristic type: PHONE_HOME_EXTENSION label: Ext. parseable name: order.shippingInfo.dayTimePhoneExt field signature: 3095839543 form signature: 17155013134718564270"
+autofill-prediction="PHONE_HOME_EXTENSION"
+/>
+                  </div>
+               </div>
+               <div>
+                  <label for="order.shippingInfo.email">Email Address<span>*</span>
+                  </label>
+                  <input type="text" name="order.shippingInfo.email" value="" id="confirmEmailDiv" placeholder="Email Address *"
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: Email Address* parseable name: order.shippingInfo.email field signature: 928233428 form signature: 17155013134718564270"
+autofill-prediction="EMAIL_ADDRESS"
+/>
+               </div>
+               <div>
+                  <label for="order.shippingInfo.emailConfirm">Confirm Email Address<span>*</span>
+                  </label>
+                  <input type="text" placeholder="Email Address *" name="order.shippingInfo.emailConfirm" value=""
+title="overall type: EMAIL_ADDRESS server type: EMAIL_ADDRESS heuristic type: EMAIL_ADDRESS label: Confirm Email Address* parseable name: order.shippingInfo.emailConfirm field signature: 3242992973 form signature: 17155013134718564270"
+autofill-prediction="EMAIL_ADDRESS"
+/>
+               </div>
+            </div>
+         </div>
+         <div>
+            <input type="checkbox" name="order.shippingBillingSame" value="true" checked="checked" id="order.shippingBillingSame"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Same as shipping address parseable name: order.shippingBillingSame field signature: 1817157586 form signature: 17155013134718564270"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+            <input type="hidden" id="__checkbox_order.shippingBillingSame" name="__checkbox_order.shippingBillingSame" value="true" />
+            <label for="order.shippingBillingSame">Same as shipping address</label>
+         </div>
+         <div id="billingForm">
+            <div id="billingFormContainer">
+               <div id="billingAddressFormId">
+                  <div>
+                     <label for="order.billingInfo.firstName">First Name<span>*</span>
+                     </label>
+                     <input type="text" name="order.billingInfo.firstName" maxlength="11" value="" id="checkOut_order_billingInfo_firstName" placeholder="First Name *"
+title="overall type: NAME_FIRST server type: NAME_FIRST heuristic type: NAME_FIRST label: First Name* parseable name: order.billingInfo.firstName field signature: 3077178767 form signature: 17155013134718564270"
+autofill-prediction="NAME_FIRST"
+/>
+                  </div>
+                  <div>
+                     <label for="order.billingInfo.lastName">Last Name<span>*</span>
+                     </label>
+                     <input type="text" name="order.billingInfo.lastName" value="" id="checkOut_order_billingInfo_lastName" placeholder="Last Name *"
+title="overall type: NAME_LAST server type: NAME_LAST heuristic type: NAME_LAST label: Last Name* parseable name: order.billingInfo.lastName field signature: 2325932944 form signature: 17155013134718564270"
+autofill-prediction="NAME_LAST"
+/>
+                  </div>
+                  <div>
+                     <div>
+                        <label for="order.billingInfo.address.address1">Street Address<span>*</span> - 24 character limit</label>
+                        <input type="text" name="order.billingInfo.address.address1" value="" id="checkOut_order_billingInfo_address_address1" placeholder="Street Address *"
+title="overall type: ADDRESS_HOME_LINE1 server type: ADDRESS_HOME_LINE1 heuristic type: ADDRESS_HOME_LINE1 label: Street Address* - 24 character limit parseable name: order.billingInfo.address.address1 field signature: 796482076 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_LINE1"
+/>
+                     </div>
+                     <div>
+                        <label for="order.shippingInfo.address.address2">Apt.
+                        #</label>
+                        <input type="text" name="order.billingInfo.address.address2" value="" id="checkOut_order_billingInfo_address_address2" placeholder="Apt. #"
+title="overall type: ADDRESS_HOME_LINE2 server type: ADDRESS_HOME_LINE2 heuristic type: ADDRESS_HOME_LINE2 label: Apt. # parseable name: order.billingInfo.address.address2 field signature: 1242999964 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_LINE2"
+/>
+                     </div>
+                  </div>
+                  <div>
+                     <div>
+                        <div>
+                           <label for="order.billingInfo.address.city">City<span>*</span>
+                           </label>
+                           <input type="text" name="order.billingInfo.address.city" value="" id="checkOut_order_billingInfo_address_city" placeholder="City *"
+title="overall type: ADDRESS_HOME_CITY server type: ADDRESS_HOME_CITY heuristic type: ADDRESS_HOME_CITY label: City* parseable name: order.billingInfo.address.city field signature: 1372321658 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_CITY"
+/>
+                        </div>
+                        <div>
+                           <label for="order.billingInfo.address.state">State<span>*</span>
+                           </label>
+                           <select name="order.billingInfo.address.state" id="checkOut_order_billingInfo_address_state"
+title="overall type: ADDRESS_HOME_STATE server type: ADDRESS_HOME_STATE heuristic type: ADDRESS_HOME_STATE label: State* parseable name: order.billingInfo.address.state field signature: 2106658457 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_STATE"
+>
+                              <option value="">ST *</option>
+                              <option value="AA">AA</option>
+                              <option value="AE">AE</option>
+                              <option value="AL">AL</option>
+                              <option value="AK">AK</option>
+                              <option value="AP">AP</option>
+                              <option value="AZ">AZ</option>
+                              <option value="AR">AR</option>
+                              <option value="CA">CA</option>
+                              <option value="CO">CO</option>
+                              <option value="CT">CT</option>
+                              <option value="DE">DE</option>
+                              <option value="DC">DC</option>
+                              <option value="FL">FL</option>
+                              <option value="GA">GA</option>
+                              <option value="GU">GU</option>
+                              <option value="HI">HI</option>
+                              <option value="ID">ID</option>
+                              <option value="IL">IL</option>
+                              <option value="IN">IN</option>
+                              <option value="IA">IA</option>
+                              <option value="KS">KS</option>
+                              <option value="KY">KY</option>
+                              <option value="LA">LA</option>
+                              <option value="ME">ME</option>
+                              <option value="MD">MD</option>
+                              <option value="MA">MA</option>
+                              <option value="MI">MI</option>
+                              <option value="MN">MN</option>
+                              <option value="MS">MS</option>
+                              <option value="MO">MO</option>
+                              <option value="MT">MT</option>
+                              <option value="NE">NE</option>
+                              <option value="NV">NV</option>
+                              <option value="NH">NH</option>
+                              <option value="NJ">NJ</option>
+                              <option value="NM">NM</option>
+                              <option value="NY">NY</option>
+                              <option value="NC">NC</option>
+                              <option value="ND">ND</option>
+                              <option value="OH">OH</option>
+                              <option value="OK">OK</option>
+                              <option value="OR">OR</option>
+                              <option value="PA">PA</option>
+                              <option value="PR">PR</option>
+                              <option value="RI">RI</option>
+                              <option value="SC">SC</option>
+                              <option value="SD">SD</option>
+                              <option value="TN">TN</option>
+                              <option value="TX">TX</option>
+                              <option value="UT">UT</option>
+                              <option value="VA">VA</option>
+                              <option value="VI">VI</option>
+                              <option value="VT">VT</option>
+                              <option value="WA">WA</option>
+                              <option value="WV">WV</option>
+                              <option value="WI">WI</option>
+                              <option value="WY">WY</option>
+                           </select>
+                        </div>
+                     </div>
+                     <div>
+                        <label for="order.billingInfo.address.zipCode">ZIP/Postal Code<span>*</span>
+                        </label>
+                        <input type="text" name="order.billingInfo.address.zipCode" value="" id="checkOut_order_billingInfo_address_zipCode" placeholder="ZIP Code *"
+title="overall type: ADDRESS_HOME_ZIP server type: ADDRESS_HOME_ZIP heuristic type: ADDRESS_HOME_ZIP label: ZIP/Postal Code* parseable name: order.billingInfo.address.zipCode field signature: 1420459778 form signature: 17155013134718564270"
+autofill-prediction="ADDRESS_HOME_ZIP"
+/>
+                     </div>
+                     <input type="hidden" id="order.shippingInfo.address.poBoxOrMillitaryAdd" name="order.shippingInfo.address.poBoxOrMillitaryAdd" value="" />
+                  </div>
+                  <div>
+                     <div>
+                        <label for="order.billingInfo.dayTimePhone">Phone Number<span>*</span>
+                        </label>
+                        <input type="text" name="order.billingInfo.dayTimePhone" value="" id="checkOut_order_billingInfo_dayTimePhone" placeholder="Phone Number *"
+title="overall type: PHONE_HOME_CITY_AND_NUMBER server type: PHONE_HOME_CITY_AND_NUMBER heuristic type: PHONE_HOME_WHOLE_NUMBER label: Phone Number* parseable name: order.billingInfo.dayTimePhone field signature: 2509269658 form signature: 17155013134718564270"
+autofill-prediction="PHONE_HOME_CITY_AND_NUMBER"
+/>
+                     </div>
+                     <div>
+                        <label for="order.billingInfo.dayTimePhoneExt">Ext.</label>
+                        <input type="text" name="order.billingInfo.dayTimePhoneExt" value="" id="checkOut_order_billingInfo_dayTimePhoneExt" placeholder="Ext."
+title="overall type: PHONE_HOME_CITY_CODE server type: PHONE_HOME_CITY_CODE heuristic type: PHONE_HOME_EXTENSION label: Ext. parseable name: order.billingInfo.dayTimePhoneExt field signature: 1836849076 form signature: 17155013134718564270"
+autofill-prediction="PHONE_HOME_CITY_CODE"
+/>
+                     </div>
+                  </div>
+               </div>
+            </div>
+            <div>
+               <input type="checkbox" name="orderSupport.saveShippingAddress" value="true" id="saveShipping"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Save my shipping address in My Profile. parseable name: orderSupport.saveShippingAddress field signature: 644246410 form signature: 17155013134718564270"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+               <input type="hidden" id="__checkbox_saveShipping" name="__checkbox_orderSupport.saveShippingAddress" value="true" />
+               <label for="saveShipping">Save my shipping address in My Profile.</label>
+               <input type="checkbox" name="orderSupport.saveBillingAddress" value="true" id="saveBilling"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Save my billing address in My Profile. parseable name: orderSupport.saveBillingAddress field signature: 2778625714 form signature: 17155013134718564270"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+               <input type="hidden" id="__checkbox_saveBilling" name="__checkbox_orderSupport.saveBillingAddress" value="true" />
+               <label for="saveBilling">Save my billing address in My Profile.</label>
+            </div>
+         </div>
+         <div id="createProfileContainer">
+            <div>
+               <label for="orderSupport.profilePassword">Password</label>
+               <input type="password" placeholder="Password" name="orderSupport.profilePassword"
+title="overall type: ACCOUNT_CREATION_PASSWORD server type: ACCOUNT_CREATION_PASSWORD heuristic type: UNKNOWN_TYPE label: Password Retype Password parseable name: orderSupport.profilePassword field signature: 2304557611 form signature: 17155013134718564270"
+autofill-prediction="ACCOUNT_CREATION_PASSWORD"
+/>
+            </div>
+            <div>
+               <label for="orderSupport.profilePassword">Retype Password</label>
+               <input type="password" placeholder="Retype Password" name="orderSupport.profilePasswordConfirm"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Retype Password parseable name: orderSupport.profilePasswordConfirm field signature: 196269180 form signature: 17155013134718564270"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+            </div>
+         </div>
+         <div>
+            <input type="checkbox" name="order.shippingInfo.emailPromotion" value="true" checked="checked" id="order.shippingInfo.emailPromotion"
+title="overall type: UNKNOWN_TYPE server type: NO_SERVER_DATA heuristic type: UNKNOWN_TYPE label: Send me promotions, discounts and other special information from Sears.com. parseable name: order.shippingInfo.emailPromotion field signature: 2403849306 form signature: 17155013134718564270"
+autofill-prediction="UNKNOWN_TYPE"
+/>
+            <input type="hidden" id="__checkbox_order.shippingInfo.emailPromotion" name="__checkbox_order.shippingInfo.emailPromotion" value="true" />
+            <label for="order.shippingInfo.emailPromotion">Send me promotions, discounts and other special information from Sears.com.</label>
+         </div>
+         <div>
+            <ul>
+               <li>
+                  <input type="submit"
+title="Continue checkout" value="Shipping Options" />
+               </li>
+            </ul>
+         </div>
+      </form>
+      <form id="verifyAddressForm" name="verifyAddressForm" action="https://www.searspartsdirect.com/partsdirect/checkOut.pd" method="post" autocomplete="off">
+         <input type="hidden" name="_eventId" value="goVerifyAddress" id="verifyAddressForm__eventId" />
+         <input type="hidden" id="CheckoutFlowAction_geoCode_submitted" name="geoCode" value="" />
+      </form>
+      <form id="emailForUpdates" name="emailForUpdates" action="https://www.searspartsdirect.com/partsdirect/offerEmailsAction.pd" method="post" autocomplete="off">
+         <fieldset>
+            <input type="text" id="emailAdd" name="emailAddress" value="" tabindex="4" maxlength="50" />
+            <label for="emailAdd">enter email address</label>
+         </fieldset>
+      </form>
+      <form id="shipSignForm" method="post" action="https://sso.shld.net/shccas/shcLogin" autocomplete="off" name="shipSignForm">
+         <input type="hidden" name="s" id="s" />
+         <input type="hidden" name="k" id="k" />
+         <input type="hidden" name="renew" value="true" id="renew" />
+         <input type="hidden" value="21" name="sourceSiteId" id="sourceSiteId" />
+         <input type="hidden" name="service" value="https://www.searspartsdirect.com/partsdirect/j_spring_cas_security_check" id="service" />
+         <div>
+            <label for="loginId">Email Address
+            <span>Required</span>
+            </label>
+            <input placeholder="Email Address" type="text" name="loginId" value="" id="email" />
+         </div>
+         <div>
+            <label for="password">Password<a tabindex="3">Forgot your password?</a>
+            </label>
+            <input placeholder="Password" type="password" value="" z-index="2000" name="logonPassword" id="password" />
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Staples/Basic.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+  <title>It's easy to find the Office Supplies, Copy Paper,
+  Furniture, Ink, Toner, Cleaning Products, Electronics and the
+  Technology you need | Staples®</title>
+  <meta content="checkout" name="PageName">
+  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
+  <meta content="noindex,follow" name="robots">
+  <meta content="Shop Staples® for everyday low prices and get everything you need for a home office or business. Staples Rewards� members get free shipping every day and up to 5% back in rewards, some exclusions apply."
+  name="description">
+  <meta name="viewport" content="width=null, initial-scale=1">
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="x-dns-prefetch-control" content="on">
+  <meta http-equiv="content-language" content="en-us">
+</head>
+<body>
+  <form>
+    <input autocomplete="false" name="hidden" type="text">
+    <div>
+      <div>
+        <div>
+          <label for="firstName">
+<span>First Name</span>
+          <span>*</span>
+</label>
+<br>
+          <input name="firstName" maxlength="40" autocomplete="off"
+          placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="lastName">
+<span>Last
+          Name</span>
+<span>*</span>
+</label>
+<br>
+          <input name="lastName" maxlength="40" autocomplete="off"
+          placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <div>
+            <div>
+              <label for="address1">Shipping
+              Address<span>*</span>
+</label>
+<br>
+              <input name="address1" maxlength="35" autocomplete="off" placeholder="" id="oneAutoComplete" type="text">
+            </div>
+          </div>
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="emailId">
+<span>Email
+          Address</span>
+<span>*</span>
+</label>
+<br>
+          <input name="emailId" maxlength="80" autocomplete="off"
+          placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="phoneNo">
+<span>Phone</span>
+<span>*</span>
+</label>
+<br>
+          <input name="phoneNo" autocomplete="off" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="phoneEx">
+<span>Extn.</span>
+</label>
+<br>
+          <input name="phoneEx" maxlength="6" autocomplete="off"
+          placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="companyName">
+<span>Company Name
+          (optional)</span>
+</label>
+<br>
+          <input name="companyName" maxlength="50" autocomplete="off" placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <div tabindex="0">
+            <label>Email me exclusive offers & deals from
+            Staples</label>
+<input value="true" name="isEmailOfferChecked" type="hidden">
+          </div>
+        </div>
+      </div>
+      <div>
+        <div>
+          <button type="submit">continue</button>
+        </div>
+      </div>
+    </div>
+  </form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Staples/Basic_ac_on.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+  <title>It's easy to find the Office Supplies, Copy Paper,
+  Furniture, Ink, Toner, Cleaning Products, Electronics and the
+  Technology you need | Staples®</title>
+  <meta content="checkout" name="PageName">
+  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
+  <meta content="noindex,follow" name="robots">
+  <meta content="Shop Staples® for everyday low prices and get everything you need for a home office or business. Staples Rewards� members get free shipping every day and up to 5% back in rewards, some exclusions apply."
+  name="description">
+  <meta name="viewport" content="width=null, initial-scale=1">
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="x-dns-prefetch-control" content="on">
+  <meta http-equiv="content-language" content="en-us">
+</head>
+<body>
+  <form>
+    <input name="hidden" type="text">
+    <div>
+      <div>
+        <div>
+          <label for="firstName">
+<span>First Name</span>
+          <span>*</span>
+</label>
+<br>
+          <input name="firstName" maxlength="40" placeholder=""
+          type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="lastName">
+<span>Last
+          Name</span>
+<span>*</span>
+</label>
+<br>
+          <input name="lastName" maxlength="40" placeholder=""
+          type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <div>
+            <div>
+              <label for="address1">Shipping
+              Address<span>*</span>
+</label>
+<br>
+              <input name="address1" maxlength="35" placeholder=""
+              id="oneAutoComplete" type="text">
+            </div>
+          </div>
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="emailId">
+<span>Email
+          Address</span>
+<span>*</span>
+</label>
+<br>
+          <input name="emailId" maxlength="80" placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="phoneNo">
+<span>Phone</span>
+<span>*</span>
+</label>
+<br>
+          <input name="phoneNo" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="phoneEx">
+<span>Extn.</span>
+</label>
+<br>
+          <input name="phoneEx" maxlength="6" placeholder="" type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <label for="companyName">
+<span>Company Name
+          (optional)</span>
+</label>
+<br>
+          <input name="companyName" maxlength="50" placeholder=""
+          type="text">
+        </div>
+      </div>
+      <div>
+        <div>
+          <div tabindex="0">
+            <label>Email me exclusive offers & deals from
+            Staples</label>
+<input value="true" name="isEmailOfferChecked" type="hidden">
+          </div>
+        </div>
+      </div>
+      <div>
+        <div>
+          <button type="submit">continue</button>
+        </div>
+      </div>
+    </div>
+  </form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Staples/PaymentBilling.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+  <title>It's easy to find the Office Supplies, Copy Paper,
+  Furniture, Ink, Toner, Cleaning Products, Electronics and the
+  Technology you need | Staples®</title>
+  <meta content="checkout" name="PageName">
+  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
+  <meta content="noindex,follow" name="robots">
+  <meta content="Shop Staples® for everyday low prices and get everything you need for a home office or business. Staples Rewards� members get free shipping every day and up to 5% back in rewards, some exclusions apply."
+  name="description">
+  <meta name="viewport" content="width=null, initial-scale=1">
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="x-dns-prefetch-control" content="on">
+  <meta http-equiv="content-language" content="en-us">
+</head>
+<body>
+  <form id="payment-cc" name="payment-cc">
+    <input autocomplete="false" name="hidden" type="text">
+    <div>
+      <div>
+        <div>
+          <div>
+            <label for="cardNumber">
+<span>Card
+            Number</span>
+<span>*</span>
+</label>
+<br>
+            <input name="cardNumber" autocomplete="off" type="text">
+          </div>
+        </div>
+        <div>
+          <div>
+            <label for="expDate">
+<span>Expiration
+            Date</span>
+<span>*</span>
+</label>
+<br>
+            <input name="expDate" placeholder="MM/YY" autocomplete="off" type="text">
+          </div>
+        </div>
+        <div>
+          <div>
+            <label for="secCode">
+<span>Security
+            Code</span>
+<span>*</span>
+</label>
+<br>
+            <input name="secCode" value="" autocomplete="off"
+            maxlength="4" type="password">
+          </div>
+        </div>
+      </div>
+      <div>
+        <input value="" name="cardBrand" type="hidden">
+      </div>
+      <div>
+        <div>
+          <div tabindex="0">
+            <label>Billing address is the same as shipping
+            address</label>
+<input value="true" name="isBillAddrSameShipAddr" type="hidden">
+          </div>
+        </div>
+      </div>
+      <div>
+        <input value="1F16D1368309E3DBE15C391E7571B371" name="addressId" type="hidden">
+      </div>
+      <div>
+        <p>Purchase Order # (optional) <span tabindex="0">Add</span>
+</p>
+      </div>
+      <section id="paymentGuestRadio">
+</section>
+      <div>
+        <div>
+          <button type="submit">place my order</button>
+        </div>
+      </div>
+      <div>
+        <div>
+          <p>
+<span>By placing your order, you agree to
+          Staples</span>
+<a target="_blank">
+<span>Terms &
+          Conditions.</span>
+</a>
+</p>
+        </div>
+      </div>
+    </div>
+  </form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Staples/PaymentBilling_ac_on.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+  <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+  <title>It's easy to find the Office Supplies, Copy Paper,
+  Furniture, Ink, Toner, Cleaning Products, Electronics and the
+  Technology you need | Staples®</title>
+  <meta content="checkout" name="PageName">
+  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
+  <meta content="noindex,follow" name="robots">
+  <meta content="Shop Staples® for everyday low prices and get everything you need for a home office or business. Staples Rewards� members get free shipping every day and up to 5% back in rewards, some exclusions apply."
+  name="description">
+  <meta name="viewport" content="width=null, initial-scale=1">
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta http-equiv="x-dns-prefetch-control" content="on">
+  <meta http-equiv="content-language" content="en-us">
+</head>
+<body>
+  <form id="payment-cc" name="payment-cc">
+    <input name="hidden" type="text">
+    <div>
+      <div>
+        <div>
+          <div>
+            <label for="cardNumber">
+<span>Card
+            Number</span>
+<span>*</span>
+</label>
+<br>
+            <input name="cardNumber" type="text">
+          </div>
+        </div>
+        <div>
+          <div>
+            <label for="expDate">
+<span>Expiration
+            Date</span>
+<span>*</span>
+</label>
+<br>
+            <input name="expDate" placeholder="MM/YY" type="text">
+          </div>
+        </div>
+        <div>
+          <div>
+            <label for="secCode">
+<span>Security
+            Code</span>
+<span>*</span>
+</label>
+<br>
+            <input name="secCode" value="" maxlength="4" type="password">
+          </div>
+        </div>
+      </div>
+      <div>
+        <input value="" name="cardBrand" type="hidden">
+      </div>
+      <div>
+        <div>
+          <div tabindex="0">
+            <label>Billing address is the same as shipping
+            address</label>
+<input value="true" name="isBillAddrSameShipAddr" type="hidden">
+          </div>
+        </div>
+      </div>
+      <div>
+        <input value="1F16D1368309E3DBE15C391E7571B371" name="addressId" type="hidden">
+      </div>
+      <div>
+        <p>Purchase Order # (optional) <span tabindex="0">Add</span>
+</p>
+      </div>
+      <section id="paymentGuestRadio">
+</section>
+      <div>
+        <div>
+          <button type="submit">place my order</button>
+        </div>
+      </div>
+      <div>
+        <div>
+          <p>
+<span>By placing your order, you agree to
+          Staples</span>
+<a target="_blank">
+<span>Terms &
+          Conditions.</span>
+</a>
+</p>
+        </div>
+      </div>
+    </div>
+  </form>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Walmart/Checkout.html
@@ -0,0 +1,243 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+      <meta http-equiv="content-type" content="text/html; charset=utf-8">
+      <meta charset="utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+      <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+      <title>
+</title>
+   </head>
+   <body>
+      <form>
+         <p>Enter new zip code:</p>
+         <label>
+</label>
+         <div>
+            <p>
+<label>ZIP Code (required)</label>
+</p>
+            <label>
+<input name="zip-code" value="94066" placeholder="" type="text">
+</label>
+         </div>
+         <div>
+            <div>
+<button type="submit">Calculate</button>
+</div>
+            <div>
+<button type="button">Cancel</button>
+</div>
+         </div>
+      </form>
+      <form>
+         <label>
+<span>
+<span>Promo code
+         (optional)</span>
+</span>
+</label>
+         <div>
+<input name="promoCode">
+</div>
+         <button type="submit">
+<span>Apply</span>
+</button>
+      </form>
+      <form method="post" novalidate="">
+         <div>
+            <div>
+<label>
+<span>Email address (required)</span>
+</label>
+</div>
+            <div>
+               <div>
+<label>
+<input
+title="Email address" placeholder="" name="email" type="email">
+</label>
+</div>
+            </div>
+         </div>
+         <div>
+            <div>
+               <div>
+<label>
+<span>Password (required)</span>
+</label>
+</div>
+               <div>
+                  <div>
+<label>
+<input
+title="Password" placeholder="" name="password"
+                     type="password">
+</label>
+</div>
+                  <div>
+<label>
+<button type="button">
+<label>Show</label>
+</button>
+</label>
+</div>
+               </div>
+               <div>
+<label>
+<span>Password (required)</span>
+</label>
+</div>
+               <div>
+                  <div>
+<label>
+<input
+title="Password" placeholder="" name="password"
+                     autocomplete="off" tabindex="-1" type="text">
+</label>
+</div>
+                  <div>
+<label>
+<button type="button" tabindex="-1">
+<label>Hide</label>
+</button>
+</label>
+</div>
+               </div>
+            </div>
+         </div>
+         <div>
+            <div>
+               <div>
+<button type="button">Forgot password?</button>
+</div>
+            </div>
+         </div>
+         <div>
+<button type="submit">Sign In</button>
+</div>
+      </form>
+      <form novalidate="" method="post">
+         <div>*required field</div>
+         <div>
+<label>
+<span>First name*</span>
+</label>
+</div>
+         <div>
+            <div>
+<label>
+<input
+title="First name" placeholder="" name="firstName" type="text">
+</label>
+</div>
+         </div>
+         <div>
+<label>
+<span>Last name*</span>
+</label>
+</div>
+         <div>
+            <div>
+<label>
+<input
+title="Last name" placeholder="" name="lastName"
+               type="text">
+</label>
+</div>
+         </div>
+         <div>
+<label>
+<span>Email address*</span>
+</label>
+</div>
+         <div>
+            <div>
+<label>
+<input
+title="Email address" placeholder="" name="email" autocomplete="off" type="email">
+</label>
+</div>
+         </div>
+         <div>
+<input tabindex="-1"
+title="Email Address" type="text">
+<input tabindex="-1" title="Password" type="password">
+</div>
+         <div>
+            <div>
+               <div>
+<label>
+<span>Password*</span>
+</label>
+</div>
+               <div>
+                  <div>
+<label>
+<input
+title="Password" placeholder="" name="password"
+                     autocomplete="new-password" type="password">
+<span>Your password
+                     must be between 6 and 12 characters.</span>
+</label>
+                  </div>
+                  <div>
+<label>
+<button type="button">
+<label>Show</label>
+</button>
+</label>
+</div>
+               </div>
+               <div>
+<label>
+<span>Password*</span>
+</label>
+</div>
+               <div>
+                  <div>
+<label>
+<input
+title="Password" placeholder="" name="password"
+                     autocomplete="off" tabindex="-1" type="text">
+<span>Your password
+                     must be between 6 and 12 characters.</span>
+</label>
+                  </div>
+                  <div>
+<label>
+<button type="button" tabindex="-1">
+<label>Hide</label>
+</button>
+</label>
+</div>
+               </div>
+            </div>
+         </div>
+         <div>
+<span>
+<span>By clicking Create Account, you acknowledge you
+            have read and agreed to our</span>
+<a target="_blank">Terms of
+            Use</a>
+<span>and</span>
+<a target="_blank">Privacy
+            Policy</a>
+<span>.</span>
+</span>
+         </div>
+         <button type="submit">Create Account</button>
+         <div>
+            <div>
+<input name="newsletter" id="checkbox-0" value="true" checked="checked" type="checkbox">
+<label for="checkbox-0">
+<span>Email me
+               about Rollbacks, special pricing, hot new items, gift ideas and
+               more.</span>
+</label>
+            </div>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Walmart/Payment.html
@@ -0,0 +1,235 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+      <meta http-equiv="content-type" content="text/html; charset=utf-8">
+      <meta charset="utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+      <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+      <title>Checkout</title>
+      <meta property="og:type" content="Website">
+      <meta property="og:image" content="http://sphotos-b.xx.fbcdn.net/hphotos-ash4/229244_10150189115584236_162217_n.jpg">
+      <meta property="og:site_name" content="Walmart.com">
+      <meta property="fb:app_id" content="105223049547814">
+      <meta property="twitter:card" content="summary">
+      <meta property="twitter:image" content="https://pbs.twimg.com/profile_images/616833885/walmart_logo_youtube_bigger.jpg">
+      <meta property="twitter:site" content="@walmart">
+      <meta property="og:title" content="Checkout">
+      <meta property="twitter:title" content="Checkout">
+   </head>
+   <body>
+      <form>
+         <label>
+<span>
+<span>Promo code
+         (optional)</span>
+</span>
+</label>
+         <div>
+<input name="promoCode">
+</div>
+         <button type="submit">
+<span>Apply</span>
+</button>
+      </form>
+      <form>
+         <div>
+            <div>
+               <div>
+                  <div>* required field</div>
+                  <div>
+<label for="firstName">
+<span>First name on
+                     card*</span>
+</label>
+                  </div>
+                  <div>
+                     <div>
+<label for="firstName">
+<input id="firstName" value="Kavi"
+                        name="firstName"
+title="First name" autocomplete="section-payment given-name" maxlength="25">
+</label>
+</div>
+                  </div>
+                  <div>
+<label for="lastName">
+<span>Last name on
+                     card*</span>
+</label>
+                  </div>
+                  <div>
+                     <div>
+<label for="lastName">
+<input id="lastName" value="Jarslo"
+                        name="lastName"
+title="Last name" autocomplete="section-payment family-name" maxlength="25">
+</label>
+</div>
+                  </div>
+                  <div>
+<label for="creditCard">
+<span>Card
+                     number*</span>
+</label>
+                  </div>
+                  <div>
+                     <div>
+<label for="creditCard">
+<input id="creditCard" pattern="[0-9]*" inputmode="numeric" name="creditCard" autocomplete="section-payment cc-number" maxlength="16">
+</label>
+</div>
+                  </div>
+                  <div>
+                     <div>
+                        <div>
+                           <label>
+<span>Expiration date*</span>
+</label>
+                           <div>
+                              <span>
+                                 <label for="month-chooser">
+                                    <svg width="11" height="6">
+                                       <polygon fill="#027DC3" points="5.5,6 0,0 11,0">
+</polygon>
+                                    </svg>
+                                    <select id="month-chooser" name="month-chooser" autocomplete="section-payment cc-exp-month">
+                                       <option selected="selected" value="" disabled="disabled">
+                                          MM
+                                       </option>
+                                       <option value="01">01</option>
+                                       <option value="02">02</option>
+                                       <option value="03">03</option>
+                                       <option value="04">04</option>
+                                       <option value="05">05</option>
+                                       <option value="06">06</option>
+                                       <option value="07">07</option>
+                                       <option value="08">08</option>
+                                       <option value="09">09</option>
+                                       <option value="10">10</option>
+                                       <option value="11">11</option>
+                                       <option value="12">12</option>
+                                    </select>
+                                 </label>
+                              </span>
+                           </div>
+                           <span>&nbsp;/&nbsp;</span>
+                           <div>
+                              <span>
+                                 <label for="year-chooser">
+                                    <svg width="11" height="6">
+                                       <polygon fill="#027DC3" points="5.5,6 0,0 11,0">
+</polygon>
+                                    </svg>
+                                    <select id="year-chooser" name="year-chooser" autocomplete="section-payment cc-exp-year">
+                                       <option selected="selected" value="" disabled="disabled">
+                                          YY
+                                       </option>
+                                       <option value="2017">17</option>
+                                       <option value="2018">18</option>
+                                       <option value="2019">19</option>
+                                       <option value="2020">20</option>
+                                       <option value="2021">21</option>
+                                       <option value="2022">22</option>
+                                       <option value="2023">23</option>
+                                       <option value="2024">24</option>
+                                       <option value="2025">25</option>
+                                       <option value="2026">26</option>
+                                       <option value="2027">27</option>
+                                    </select>
+                                 </label>
+                              </span>
+                           </div>
+                        </div>
+                     </div>
+                     <div>
+                        <input
+title=" " name="brwsrAutofillText" type="text">
+                        <input
+title=" " name="brwsrAutofillPassword" type="password">
+                        <div>
+                           <div>
+                              <label for="cvv">
+<span>
+<span>
+<span>Security code*</span>
+                              </span>
+</span>
+</label>
+                              <div>
+<label for="cvv">
+<button type="button">
+<label for="cvv">
+<span name="help" size="1" alt="Icon for help">
+</span>
+</label>
+</button>
+</label>
+</div>
+                           </div>
+                           <div>
+                              <div>
+<input id="cvv" name="cvv"
+title="cvv" value="" autocomplete="section-payment cc-csc" maxlength="3" pattern="[0-9]*" inputmode="numeric" type="password">
+</div>
+                           </div>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+<label for="phone">
+<span>Phone number*</span>
+<span>Ex: (415)
+                     444 - 5555</span>
+</label>
+                  </div>
+                  <div>
+                     <div>
+<label for="phone">
+<input id="phone" value="8984379853" name="phone"
+title="Phone" autocomplete="section-payment tel" maxlength="14" type="tel">
+</label>
+</div>
+                  </div>
+               </div>
+            </div>
+            <div>
+               <div>
+                  <div>
+                     <label>
+<input checked="checked" type="checkbox">
+</label>
+                     <div>
+<label>
+<span>Same as shipping</span>
+</label>
+</div>
+                     <div>
+                        <p>
+<span>22F., No.55, Haiiu 1st Rd., Bafu Dist.,</span>
+<br>
+                           <span>
+<span>San Bruno</span>
+<span>,</span>
+</span>
+                           <span>
+<span>CA</span>
+</span>
+<span>94066</span>
+                        </p>
+                     </div>
+                  </div>
+               </div>
+            </div>
+         </div>
+         <div>
+            <div>
+<button type="button">
+<span>Review Your
+               Order</span>
+</button>
+            </div>
+         </div>
+      </form>
+   </body>
+</html>
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/fixtures/third_party/Walmart/Shipping.html
@@ -0,0 +1,234 @@
+<!DOCTYPE html>
+<html lang="en">
+   <head>
+      <meta name="generator" content="HTML Tidy for HTML5 for Mac OS X version 5.4.0">
+      <meta http-equiv="content-type" content="text/html; charset=utf-8">
+      <meta charset="utf-8">
+      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+      <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+      <title>Checkout</title>
+      <meta property="og:type" content="Website">
+      <meta property="og:image" content="http://sphotos-b.xx.fbcdn.net/hphotos-ash4/229244_10150189115584236_162217_n.jpg">
+      <meta property="og:site_name" content="Walmart.com">
+      <meta property="fb:app_id" content="105223049547814">
+      <meta property="twitter:card" content="summary">
+      <meta property="twitter:image" content="https://pbs.twimg.com/profile_images/616833885/walmart_logo_youtube_bigger.jpg">
+      <meta property="twitter:site" content="@walmart">
+      <meta property="og:title" content="Checkout">
+      <meta property="twitter:title" content="Checkout">
+   </head>
+   <body>
+      <form>
+         <p>Enter new zip code:</p>
+         <label>
+</label>
+         <div>
+            <p>
+<label>ZIP Code (required)</label>
+</p>
+            <label>
+<input name="zip-code" value="94066" placeholder="" type="text">
+</label>
+         </div>
+         <div>
+            <div>
+<button type="submit">Calculate</button>
+</div>
+            <div>
+<button type="button">Cancel</button>
+</div>
+         </div>
+      </form>
+      <form>
+         <label>
+<span>
+<span>Promo code
+         (optional)</span>
+</span>
+</label>
+         <div>
+<input name="promoCode">
+</div>
+         <button type="submit">
+<span>Apply</span>
+</button>
+      </form>
+      <form>
+         <div>
+            <div>
+               <div>
+                  <div>
+                     <div>*required field</div>
+                     <label>
+<span>
+<span>
+<span>First name*</span>
+</span>
+</span>
+</label>
+                     <div>
+<input
+title="First name" name="firstName" type="text">
+</div>
+                     <label>
+<span>
+<span>
+<span>Last name*</span>
+</span>
+</span>
+</label>
+                     <div>
+<input
+title="Last name" name="lastName" type="text">
+</div>
+                     <label>
+<span>
+<span>
+<span>Phone number*</span>
+</span>
+</span>
+</label>
+                     <div>
+<input minlength="10" maxlength="14"
+title="Phone number" name="phone" type="text">
+</div>
+                  </div>
+                  <div>
+                     <label>
+<span>
+<span>
+<span>Street address*</span>
+</span>
+</span>
+</label>
+                     <div>
+<input
+title="Street address" name="addressLineOne" type="text">
+</div>
+                     <label>
+<span>
+<span>
+<span>Apt, suite, etc (optional)</span>
+</span>
+</span>
+</label>
+                     <div>
+<input
+title="Apt, suite, bldg, c/o (optional)" name="addressLineTwo" type="text">
+</div>
+                     <label>
+<span>
+<span>
+<span>City*</span>
+</span>
+</span>
+</label>
+                     <div>
+<input
+title="City" name="city" value="San Bruno" type="text">
+</div>
+                     <div>
+                        <div>
+                           <div>
+                              <label for="5">
+<span>State*</span>
+</label>
+                              <div>
+                                 <div>
+                                    <select id="5"
+title="State" name="state">
+                                       <option value="">
+</option>
+                                       <option value="AL">Alabama</option>
+                                       <option value="AK">Alaska</option>
+                                       <option value="AZ">Arizona</option>
+                                       <option value="AR">Arkansas</option>
+                                       <option selected="selected" value="CA">California</option>
+                                       <option value="CO">Colorado</option>
+                                       <option value="CT">Connecticut</option>
+                                       <option value="DC">District of Columbia</option>
+                                       <option value="DE">Delaware</option>
+                                       <option value="FL">Florida</option>
+                                       <option value="GA">Georgia</option>
+                                       <option value="HI">Hawaii</option>
+                                       <option value="ID">Idaho</option>
+                                       <option value="IL">Illinois</option>
+                                       <option value="IN">Indiana</option>
+                                       <option value="IA">Iowa</option>
+                                       <option value="KS">Kansas</option>
+                                       <option value="KY">Kentucky</option>
+                                       <option value="LA">Louisiana</option>
+                                       <option value="ME">Maine</option>
+                                       <option value="MD">Maryland</option>
+                                       <option value="MA">Massachusetts</option>
+                                       <option value="MI">Michigan</option>
+                                       <option value="MN">Minnesota</option>
+                                       <option value="MS">Mississippi</option>
+                                       <option value="MO">Missouri</option>
+                                       <option value="MT">Montana</option>
+                                       <option value="NE">Nebraska</option>
+                                       <option value="NV">Nevada</option>
+                                       <option value="NH">New Hampshire</option>
+                                       <option value="NJ">New Jersey</option>
+                                       <option value="NM">New Mexico</option>
+                                       <option value="NY">New York</option>
+                                       <option value="NC">North Carolina</option>
+                                       <option value="ND">North Dakota</option>
+                                       <option value="OH">Ohio</option>
+                                       <option value="OK">Oklahoma</option>
+                                       <option value="OR">Oregon</option>
+                                       <option value="PA">Pennsylvania</option>
+                                       <option value="RI">Rhode Island</option>
+                                       <option value="SC">South Carolina</option>
+                                       <option value="SD">South Dakota</option>
+                                       <option value="TN">Tennessee</option>
+                                       <option value="TX">Texas</option>
+                                       <option value="UT">Utah</option>
+                                       <option value="VT">Vermont</option>
+                                       <option value="VA">Virginia</option>
+                                       <option value="WA">Washington</option>
+                                       <option value="WV">West Virginia</option>
+                                       <option value="WI">Wisconsin</option>
+                                       <option value="WY">Wyoming</option>
+                                       <option value="AA">Armed Forces Americas</option>
+                                       <option value="AP">Armed Forces Pacific</option>
+                                       <option value="AE">Armed Forces other</option>
+                                       <option value="AS">American Samoa</option>
+                                       <option value="GU">Guam</option>
+                                       <option value="MP">N. Mariana Islands</option>
+                                       <option value="PW">Palau</option>
+                                       <option value="PR">Puerto Rico</option>
+                                       <option value="VI">Virgin Islands</option>
+                                    </select>
+                                 </div>
+                              </div>
+                           </div>
+                        </div>
+                        <div>
+                           <label>
+<span>
+<span>
+<span>ZIP
+                           Code*</span>
+</span>
+</span>
+</label>
+                           <div>
+<input
+title="Zip code" name="postalCode" value="94066" type="text">
+</div>
+                        </div>
+                     </div>
+                  </div>
+                  <div>
+<input id="4" name="isDefault" type="checkbox">
+<label for="4">
+<span>Set as my preferred address</span>
+</label>
+</div>
+               </div>
+            </div>
+         </div>
+      </form>
+   </body>
+</html>
--- a/browser/extensions/formautofill/test/unit/head.js
+++ b/browser/extensions/formautofill/test/unit/head.js
@@ -1,13 +1,13 @@
 /**
  * Provides infrastructure for automated formautofill components tests.
  */
 
-/* exported loadFormAutofillContent, getTempFile, sinon */
+/* exported getTempFile, loadFormAutofillContent, runHeuristicsTest, sinon */
 
 "use strict";
 
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
@@ -74,16 +74,55 @@ function getTempFile(leafName) {
     if (file.exists()) {
       file.remove(false);
     }
   });
 
   return file;
 }
 
+function runHeuristicsTest(patterns, fixturePathPrefix) {
+  Cu.import("resource://gre/modules/FormLikeFactory.jsm");
+  Cu.import("resource://formautofill/FormAutofillHeuristics.jsm");
+
+  // TODO: "select" and "textarea" will be included eventually.
+  const QUERY_STRING = ["input"];
+  patterns.forEach(testPattern => {
+    add_task(function* () {
+      do_print("Starting test fixture: " + testPattern.fixturePath);
+      let file = do_get_file(fixturePathPrefix + testPattern.fixturePath);
+      let doc = MockDocument.createTestDocumentFromFile("http://localhost:8080/test/", file);
+
+      let forms = [];
+
+      for (let query of QUERY_STRING) {
+        for (let field of doc.querySelectorAll(query)) {
+          let formLike = FormLikeFactory.createFromField(field);
+          if (!forms.some(form => form.rootElement === formLike.rootElement)) {
+            forms.push(formLike);
+          }
+        }
+      }
+
+      Assert.equal(forms.length, testPattern.expectedResult.length, "Expected form count.");
+
+      forms.forEach((form, formIndex) => {
+        let formInfo = FormAutofillHeuristics.getFormInfo(form);
+        // TODO: This line should be uncommented to make sure every field are verified.
+        // Assert.equal(formInfo.length, testPattern.expectedResult[formIndex].length, "Expected field count.");
+        formInfo.forEach((field, fieldIndex) => {
+          let expectedField = testPattern.expectedResult[formIndex][fieldIndex];
+          expectedField.elementWeakRef = field.elementWeakRef;
+          Assert.deepEqual(field, expectedField);
+        });
+      });
+    });
+  });
+}
+
 add_task(function* head_initialize() {
   Services.prefs.setBoolPref("browser.formautofill.experimental", true);
   Services.prefs.setBoolPref("dom.forms.autocomplete.experimental", true);
 
   // Clean up after every test.
   do_register_cleanup(function head_cleanup() {
     Services.prefs.clearUserPref("browser.formautofill.experimental");
     Services.prefs.clearUserPref("dom.forms.autocomplete.experimental");
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/test_basic.js
@@ -0,0 +1,22 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "autocomplete_basic.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "street-address"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "country"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../fixtures/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_BestBuy.js
@@ -0,0 +1,56 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Checkout_ShippingAddress.html",
+    expectedResult: [
+      [], // Search form
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO:select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+      [ // Sign up
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [ // unknown
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+      ],
+    ],
+  }, {
+    fixturePath: "Checkout_Payment.html",
+    expectedResult: [
+      [], // Search form
+      [ // Sign up
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO:select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+      [
+        // unknown
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+      ],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [ // Sign in
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/BestBuy/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_CDW.js
@@ -0,0 +1,55 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Checkout_ShippingInfo.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "Checkout_BillingPaymentInfo.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+      [
+ /* TODO: Credit Card
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-type"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+*/
+      ],
+    ],
+  }, {
+    fixturePath: "Checkout_Logon.html",
+    expectedResult: [
+      [],
+      [],
+      [],
+    ],
+  },
+], "../../../fixtures/third_party/CDW/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_CostCo.js
@@ -0,0 +1,124 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "ShippingAddress.html",
+    expectedResult: [
+      [],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "additional-name"}, // middle-name initial
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select,country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"}, // TODO: fix the regexp
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "additional-name"}, // middle-name initial
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select,country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"}, // TODO: fix the regexp
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select,state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "Payment.html",
+    expectedResult: [
+      [
+/* TODO: credit card
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-type"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-name"}, // ac-off
+*/
+      ],
+      [],
+      [],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "additional-name"}, // middle-name initial
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select, country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"}, // TODO: fix the regexp
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "additional-name"}, // middle-name initial
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select, country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"}, // TODO: fix the regexp
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+      [ // Forgot password
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "password"},
+      ],
+      [ // Sign up
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  },
+], "../../../fixtures/third_party/CostCo/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_HomeDepot.js
@@ -0,0 +1,34 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Checkout_ShippingPayment.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+      ],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/HomeDepot/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_Macys.js
@@ -0,0 +1,67 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Checkout_ShippingAddress.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // select
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+      ],
+      [
+/*
+*/
+      ],
+    ],
+  }, {
+    fixturePath: "Checkout_Payment.html",
+    expectedResult: [
+      [
+ /*
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-type"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"}, // ac-off
+*/
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // select
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [ // Sign in
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "password"},
+      ],
+      [ // Forgot password
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+      [],
+      [],
+    ],
+  },
+], "../../../fixtures/third_party/Macys/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_NewEgg.js
@@ -0,0 +1,66 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "ShippingInfo.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select, country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "BillingInfo.html",
+    expectedResult: [
+      [
+/* TODO: Should match the following fields.
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+*/
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "country"}, // TODO: select, country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, country
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-name"}, // TODO
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"}, // TODO
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"}, // TODO
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"}, // TODO
+      ],
+      [],
+      [],
+      [],
+    ],
+  }, {
+    fixturePath: "Login.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/NewEgg/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_OfficeDepot.js
@@ -0,0 +1,64 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "ShippingAddress.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+
+        // TODO: telphone relative fields should be fixed:
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-area-code"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-local-prefix"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-local-suffix"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  }, {
+    fixturePath: "Payment.html",
+    expectedResult: [
+      [
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+
+        // TODO: telphone relative fields should be fixed:
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-area-code"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-local-prefix"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-local-suffix"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [ // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/OfficeDepot/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_QVC.js
@@ -0,0 +1,54 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "YourInformation.html",
+    expectedResult: [
+      [
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-year"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-type"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  }, {
+    fixturePath: "PaymentMethod.html",
+    expectedResult: [
+      [
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"}, // ac-off
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-month"}, // select
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-day"}, // select
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-year"}, // select
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-type"}, // select
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp"}, // select
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  }, {
+    fixturePath: "SignIn.html",
+    expectedResult: [
+      [
+        // Unknown
+      ],
+      [ // Sign in
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [],
+    ],
+  },
+], "../../../fixtures/third_party/QVC/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_Sears.js
@@ -0,0 +1,87 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "ShippingAddress.html",
+    expectedResult: [
+      [],
+      [], // search form, ac-off
+      [ // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [ // check-out, ac-off
+/*
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+*/
+      ],
+      [ // ac-off
+/*
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "new-password"},
+*/
+      ],
+      [ // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+      [ // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  }, {
+    fixturePath: "PaymentOptions.html",
+    expectedResult: [
+      [],
+      [], // search
+      [ // credit card
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+      ],
+      [ // Another billing address
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+      ],
+      [ // check out
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: Wrong. This is for Driver's license.
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-month"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-day"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "bday-year"},
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/Sears/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_Staples.js
@@ -0,0 +1,48 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Basic.html",
+    expectedResult: [
+      [ // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+      ],
+    ],
+  }, {
+    fixturePath: "Basic_ac_on.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "tel-extension"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "organization"},
+      ],
+    ],
+  }, {
+    fixturePath: "PaymentBilling.html",
+    expectedResult: [
+      [],
+    ],
+  }, {
+    fixturePath: "PaymentBilling_ac_on.html",
+    expectedResult: [
+      [
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/Staples/");
+
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/unit/heuristics/third_party/test_Walmart.js
@@ -0,0 +1,62 @@
+/* global runHeuristicsTest */
+
+"use strict";
+
+runHeuristicsTest([
+  {
+    fixturePath: "Checkout.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+      [
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "email"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "password"}, // ac-off
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "email"}, // ac-off
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "password"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "password"}, // ac-off
+      ],
+    ],
+  }, {
+    fixturePath: "Payment.html",
+    expectedResult: [
+      [
+      ],
+      [
+        {"section": "section-payment", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "section-payment", "addressType": "", "contactType": "", "fieldName": "family-name"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-number"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-month"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-exp-year"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "cc-csc"},
+        {"section": "section-payment", "addressType": "", "contactType": "", "fieldName": "tel"},
+      ],
+    ],
+  }, {
+    fixturePath: "Shipping.html",
+    expectedResult: [
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+      [
+      ],
+      [
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "given-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "family-name"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "tel"},
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line1"},
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-line2"}, // TODO: fix the regexp
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level2"}, // city
+//      {"section": "", "addressType": "", "contactType": "", "fieldName": "address-level1"}, // TODO: select, state
+        {"section": "", "addressType": "", "contactType": "", "fieldName": "postal-code"},
+      ],
+    ],
+  },
+], "../../../fixtures/third_party/Walmart/");
+
--- a/browser/extensions/formautofill/test/unit/xpcshell.ini
+++ b/browser/extensions/formautofill/test/unit/xpcshell.ini
@@ -1,13 +1,26 @@
 [DEFAULT]
 firefox-appdir = browser
 head = head.js
 support-files =
+  ../fixtures/**
 
+[heuristics/test_basic.js]
+[heuristics/third_party/test_BestBuy.js]
+[heuristics/third_party/test_CDW.js]
+[heuristics/third_party/test_CostCo.js]
+[heuristics/third_party/test_HomeDepot.js]
+[heuristics/third_party/test_Macys.js]
+[heuristics/third_party/test_NewEgg.js]
+[heuristics/third_party/test_OfficeDepot.js]
+[heuristics/third_party/test_QVC.js]
+[heuristics/third_party/test_Sears.js]
+[heuristics/third_party/test_Staples.js]
+[heuristics/third_party/test_Walmart.js]
 [test_autofillFormFields.js]
 [test_collectFormFields.js]
 [test_enabledStatus.js]
 [test_findLabelElements.js]
 [test_getFormInputDetails.js]
 [test_isCJKName.js]
 [test_markAsAutofillField.js]
 [test_nameUtils.js]
--- a/toolkit/modules/tests/modules/MockDocument.jsm
+++ b/toolkit/modules/tests/modules/MockDocument.jsm
@@ -5,16 +5,18 @@
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["MockDocument"]
 
 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 Cu.importGlobalProperties(["URL"]);
 
+const { NetUtil } = Cu.import("resource://gre/modules/NetUtil.jsm", {});
+
 const MockDocument = {
   /**
    * Create a document for the given URL containing the given HTML with the ownerDocument of all <form>s having a mocked location.
    */
   createTestDocument(aDocumentURL, aContent = "<form>", aType = "text/html") {
     let parser = Cc["@mozilla.org/xmlextras/domparser;1"].
                  createInstance(Ci.nsIDOMParser);
     parser.init();
@@ -41,10 +43,20 @@ const MockDocument = {
     });
 
     // Assign element.ownerDocument to the proxy so document.location works.
     Object.defineProperty(aElement, "ownerDocument", {
       value: document,
     });
   },
 
+  createTestDocumentFromFile(aDocumentURL, aFile) {
+    let fileStream = Cc["@mozilla.org/network/file-input-stream;1"].
+                     createInstance(Ci.nsIFileInputStream);
+    fileStream.init(aFile, -1, -1, 0);
+
+    let data = NetUtil.readInputStreamToString(fileStream, fileStream.available());
+
+    return this.createTestDocument(aDocumentURL, data);
+  },
+
 };