diff options
author | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 00:47:48 +0000 |
---|---|---|
committer | isherman@chromium.org <isherman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 00:47:48 +0000 |
commit | f638c3d4ff79bc94b4651e7791a362eb4ced2eeb (patch) | |
tree | e1226ec6fbd6b3b021cdf4bd238ee3319105faaa | |
parent | 41569a283de6a9694cd10f9187fd25e6d53066d4 (diff) | |
download | chromium_src-f638c3d4ff79bc94b4651e7791a362eb4ced2eeb.zip chromium_src-f638c3d4ff79bc94b4651e7791a362eb4ced2eeb.tar.gz chromium_src-f638c3d4ff79bc94b4651e7791a362eb4ced2eeb.tar.bz2 |
Improve Autofill heuristics when detecting labels from previous elements.
Support HTML like """Name <span class="required">*</span> <input type="text" name="name">"""
Of course, pull at a thread and...
Other changes also included to avoid regressions:
* When parsing address fields for heuristics, we try to skip over unlabeled fields in the middle of an address. Updated the code not to also skip over unlabeled fields at the *end* of an address, as these might be part of a different section entirely.
* Tighten the credit card number regex to require the word "card".
* Add "csc" to the credit card security code regex.
* When inferring labels based on <div> structure, be willing to scan up the tree past the closest parent that is a <div>.
* Also when inferring labels based on <div> structure, we previously would only stop early if we were about to escape from a <table> element. Also stop early if we are about to escape from a <fieldset> element. If we see either of these elements, we expect the field label to be contained with the element.
* Allow <label> elements to misuse the 'for' attribute to specify the element's name rather than its id.
BUG=87517
TEST=browser_tests --gtest_filter=FormStructureBrowserTest.DataDrivenHeuristics*
Review URL: http://codereview.chromium.org/7531023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95019 0039d316-1c4b-4281-b951-d872f2087c98
24 files changed, 1512 insertions, 205 deletions
diff --git a/chrome/browser/autofill/address_field.cc b/chrome/browser/autofill/address_field.cc index 2c4ce93..025911d 100644 --- a/chrome/browser/autofill/address_field.cc +++ b/chrome/browser/autofill/address_field.cc @@ -24,8 +24,8 @@ FormField* AddressField::Parse(AutofillScanner* scanner, bool is_ecml) { return NULL; scoped_ptr<AddressField> address_field(new AddressField); - const AutofillField* initial_field = scanner->Cursor(); - scanner->SaveCursor(); + const AutofillField* const initial_field = scanner->Cursor(); + size_t saved_cursor = scanner->SaveCursor(); string16 attention_ignored = l10n_util::GetStringUTF16(IDS_AUTOFILL_ATTENTION_IGNORED_RE); @@ -33,13 +33,17 @@ FormField* AddressField::Parse(AutofillScanner* scanner, bool is_ecml) { l10n_util::GetStringUTF16(IDS_AUTOFILL_REGION_IGNORED_RE); // Allow address fields to appear in any order. + size_t begin_trailing_non_labeled_fields = 0; + bool has_trailing_non_labeled_fields = false; while (!scanner->IsEnd()) { + const size_t cursor = scanner->SaveCursor(); if (ParseAddressLines(scanner, is_ecml, address_field.get()) || ParseCity(scanner, is_ecml, address_field.get()) || ParseState(scanner, is_ecml, address_field.get()) || ParseZipCode(scanner, is_ecml, address_field.get()) || ParseCountry(scanner, is_ecml, address_field.get()) || ParseCompany(scanner, is_ecml, address_field.get())) { + has_trailing_non_labeled_fields = false; continue; } else if (ParseField(scanner, attention_ignored, NULL) || ParseField(scanner, region_ignored, NULL)) { @@ -56,6 +60,11 @@ FormField* AddressField::Parse(AutofillScanner* scanner, bool is_ecml) { // types after any non-labeled fields, and we want email address fields to // have precedence since some pages contain fields labeled // "Email address". + if (!has_trailing_non_labeled_fields) { + has_trailing_non_labeled_fields = true; + begin_trailing_non_labeled_fields = cursor; + } + continue; } else { // No field found. @@ -70,11 +79,15 @@ FormField* AddressField::Parse(AutofillScanner* scanner, bool is_ecml) { address_field->city_ != NULL || address_field->state_ != NULL || address_field->zip_ != NULL || address_field->zip4_ || address_field->country_ != NULL) { + // Don't slurp non-labeled fields at the end into the address. + if (has_trailing_non_labeled_fields) + scanner->RewindTo(begin_trailing_non_labeled_fields); + address_field->type_ = address_field->FindType(); return address_field.release(); } - scanner->Rewind(); + scanner->RewindTo(saved_cursor); return NULL; } diff --git a/chrome/browser/autofill/autofill_resources.grd b/chrome/browser/autofill/autofill_resources.grd index cd2e337..c9b5a2c 100644 --- a/chrome/browser/autofill/autofill_resources.grd +++ b/chrome/browser/autofill/autofill_resources.grd @@ -70,10 +70,10 @@ name </message> <message name="IDS_AUTOFILL_CARD_NUMBER_RE"> - number|card.?#|card.?no|ccnum|acctnum<!-- de-DE -->|nummer<!-- es -->|credito|numero|número<!-- fr-FR -->|numéro<!-- ja-JP -->|カード番号<!-- ru -->|Номер.*карты<!-- zh-CN -->|信用卡号|信用卡号码<!-- zh-TW -->|信用卡卡號<!-- ko-KR -->|카드 + card.?number|card.?#|card.?no|ccnum|acctnum<!-- de-DE -->|nummer<!-- es -->|credito|numero|número<!-- fr-FR -->|numéro<!-- ja-JP -->|カード番号<!-- ru -->|Номер.*карты<!-- zh-CN -->|信用卡号|信用卡号码<!-- zh-TW -->|信用卡卡號<!-- ko-KR -->|카드 </message> <message name="IDS_AUTOFILL_CARD_CVC_RE"> - verification|card identification|security code|cvn|cvv|cvc + verification|card identification|security code|cvn|cvv|cvc|csc </message> <message name="IDS_AUTOFILL_EXPIRATION_MONTH_RE"> expir|exp.*mo|exp.*date|ccmonth<!-- de-DE -->|gueltig|gültig|monat<!-- es -->|fecha<!-- fr-FR -->|date.*exp<!-- it-IT -->|scadenza<!-- ja-JP -->|有効期限<!-- pt-BR, pt-PT -->|validade<!-- ru -->|Срок действия карты<!-- zh-CN -->|月 diff --git a/chrome/browser/autofill/form_structure_browsertest.cc b/chrome/browser/autofill/form_structure_browsertest.cc index 37f676b..2e7264d 100644 --- a/chrome/browser/autofill/form_structure_browsertest.cc +++ b/chrome/browser/autofill/form_structure_browsertest.cc @@ -219,6 +219,14 @@ IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, } IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, + MAYBE_DataDrivenHeuristics(16)) { + const FilePath::CharType kFileNamePattern[] = FILE_PATH_LITERAL("16_*.html"); + RunDataDrivenTest(GetInputDirectory(kTestName), + GetOutputDirectory(kTestName), + kFileNamePattern); +} + +IN_PROC_BROWSER_TEST_F(FormStructureBrowserTest, MAYBE_DataDrivenHeuristics(20)) { const FilePath::CharType kFileNamePattern[] = FILE_PATH_LITERAL("20_*.html"); RunDataDrivenTest(GetInputDirectory(kTestName), diff --git a/chrome/renderer/autofill/form_manager.cc b/chrome/renderer/autofill/form_manager.cc index 53884db..45ca70d 100644 --- a/chrome/renderer/autofill/form_manager.cc +++ b/chrome/renderer/autofill/form_manager.cc @@ -78,14 +78,6 @@ bool IsSelectElement(const WebFormControlElement& element) { return element.formControlType() == ASCIIToUTF16("select-one"); } -bool IsTextContainerElement(const WebElement& element) { - return - element.hasTagName("p") || - element.hasTagName("b") || - element.hasTagName("span") || - element.hasTagName("font"); -} - bool IsOptionElement(const WebElement& element) { return element.hasTagName("option"); } @@ -107,6 +99,40 @@ bool IsAutofillableElement(const WebFormControlElement& element) { return IsTextInput(input_element) || IsSelectElement(element); } +// Appends |suffix| to |prefix| so that any intermediary whitespace is collapsed +// to a single space. If |force_whitespace| is true, then the resulting string +// is guaranteed to have a space between |prefix| and |suffix|. Otherwise, the +// result includes a space only if |prefix| has trailing whitespace or |suffix| +// has leading whitespace. +// A few examples: +// * CombineAndCollapseWhitespace("foo", "bar", false) -> "foobar" +// * CombineAndCollapseWhitespace("foo", "bar", true) -> "foo bar" +// * CombineAndCollapseWhitespace("foo ", "bar", false) -> "foo bar" +// * CombineAndCollapseWhitespace("foo", " bar", false) -> "foo bar" +// * CombineAndCollapseWhitespace("foo", " bar", true) -> "foo bar" +// * CombineAndCollapseWhitespace("foo ", " bar", false) -> "foo bar" +// * CombineAndCollapseWhitespace(" foo", "bar ", false) -> " foobar " +// * CombineAndCollapseWhitespace(" foo", "bar ", true) -> " foo bar " +const string16 CombineAndCollapseWhitespace(const string16& prefix, + const string16& suffix, + bool force_whitespace) { + string16 prefix_trimmed; + TrimPositions prefix_trailing_whitespace = + TrimWhitespace(prefix, TRIM_TRAILING, &prefix_trimmed); + + // Recursively compute the children's text. + string16 suffix_trimmed; + TrimPositions suffix_leading_whitespace = + TrimWhitespace(suffix, TRIM_LEADING, &suffix_trimmed); + + if (prefix_trailing_whitespace || suffix_leading_whitespace || + force_whitespace) { + return prefix_trimmed + ASCIIToUTF16(" ") + suffix_trimmed; + } else { + return prefix_trimmed + suffix_trimmed; + } +} + // This is a helper function for the FindChildText() function (see below). // Search depth is limited with the |depth| parameter. string16 FindChildTextInner(const WebNode& node, int depth) { @@ -126,39 +152,27 @@ string16 FindChildTextInner(const WebNode& node, int depth) { const WebElement element = node.toConst<WebElement>(); if (IsOptionElement(element) || IsScriptElement(element) || - IsNoScriptElement(element)) { + IsNoScriptElement(element) || + (element.isFormControlElement() && + IsAutofillableElement(element.toConst<WebFormControlElement>()))) { return string16(); } } // Extract the text exactly at this node. string16 node_text = node.nodeValue(); - TrimPositions node_trailing_whitespace = - TrimWhitespace(node_text, TRIM_TRAILING, &node_text); // Recursively compute the children's text. // Preserve inter-element whitespace separation. string16 child_text = FindChildTextInner(node.firstChild(), depth - 1); - TrimPositions child_leading_whitespace = - TrimWhitespace(child_text, TRIM_LEADING, &child_text); - if (node_trailing_whitespace || child_leading_whitespace || - (node.nodeType() == WebNode::TextNode && node_text.empty())) { - node_text += ASCIIToUTF16(" "); - } - node_text += child_text; - node_trailing_whitespace = - TrimWhitespace(node_text, TRIM_TRAILING, &node_text); + bool add_space = node.nodeType() == WebNode::TextNode && node_text.empty(); + node_text = CombineAndCollapseWhitespace(node_text, child_text, add_space); // Recursively compute the siblings' text. // Again, preserve inter-element whitespace separation. string16 sibling_text = FindChildTextInner(node.nextSibling(), depth - 1); - TrimPositions sibling_leading_whitespace = - TrimWhitespace(sibling_text, TRIM_LEADING, &sibling_text); - if (node_trailing_whitespace || sibling_leading_whitespace || - (node.nodeType() == WebNode::TextNode && node_text.empty())) { - node_text += ASCIIToUTF16(" "); - } - node_text += sibling_text; + add_space = node.nodeType() == WebNode::TextNode && node_text.empty(); + node_text = CombineAndCollapseWhitespace(node_text, sibling_text, add_space); return node_text; } @@ -169,85 +183,79 @@ string16 FindChildTextInner(const WebNode& node, int depth) { // used when the structure is not directly known. However, unlike with // |innerText()|, the search depth and breadth are limited to a fixed threshold. // Whitespace is trimmed from text accumulated at descendant nodes. -string16 FindChildText(const WebElement& element) { - WebNode child = element.firstChild(); +string16 FindChildText(const WebNode& node) { + if (node.isTextNode()) + return node.nodeValue(); + + WebNode child = node.firstChild(); const int kChildSearchDepth = 10; - string16 element_text = FindChildTextInner(child, kChildSearchDepth); - TrimWhitespace(element_text, TRIM_ALL, &element_text); - return element_text; + string16 node_text = FindChildTextInner(child, kChildSearchDepth); + TrimWhitespace(node_text, TRIM_ALL, &node_text); + return node_text; } // Helper for |InferLabelForElement()| that infers a label, if possible, from -// a previous sibling of |element|. +// a previous sibling of |element|, +// e.g. Some Text <input ...> +// or Some <span>Text</span> <input ...> +// or <p>Some Text</p><input ...> +// or <label>Some Text</label> <input ...> +// or Some Text <img><input ...> +// or <b>Some Text</b><br/> <input ...>. string16 InferLabelFromPrevious(const WebFormControlElement& element) { string16 inferred_label; - WebNode previous = element.previousSibling(); - if (previous.isNull()) - return string16(); + WebNode previous = element; + while (true) { + previous = previous.previousSibling(); + if (previous.isNull()) + break; - // Check for text immediately before the |element|. - if (previous.isTextNode()) { - inferred_label = previous.nodeValue(); - TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label); - } + // Skip over comments. + WebNode::NodeType node_type = previous.nodeType(); + if (node_type == WebNode::CommentNode) + continue; - // If we didn't find text, check for an immediately preceding text container, - // e.g. <p>Some Text</p><input ...> - // Note the lack of whitespace between <p> and <input> elements. - if (inferred_label.empty() && previous.isElementNode()) { - WebElement previous_element = previous.to<WebElement>(); - if (IsTextContainerElement(previous_element)) - inferred_label = FindChildText(previous_element); - } + // Otherwise, only consider normal HTML elements and their contents. + if (node_type != WebNode::TextNode && + node_type != WebNode::ElementNode) + break; - // If we didn't find one immediately preceding, check for a text container - // separated from this node only by whitespace, - // e.g. <p>Some Text</p> <input ...> - // Note the whitespace between <p> and <input> elements. - if (inferred_label.empty() && previous.isTextNode()) { - WebNode sibling = previous.previousSibling(); - if (!sibling.isNull() && sibling.isElementNode()) { - WebElement previous_element = sibling.to<WebElement>(); - if (IsTextContainerElement(previous_element)) - inferred_label = FindChildText(previous_element); + // A label might be split across multiple "lightweight" nodes. + // Coalesce any text contained in multiple consecutive + // (a) plain text nodes or + // (b) inline HTML elements that are essentially equivalent to text nodes. + if (previous.isTextNode() || + HasTagName(previous, "b") || HasTagName(previous, "strong") || + HasTagName(previous, "span") || HasTagName(previous, "font")) { + string16 value = FindChildText(previous); + // A text node's value will be empty if it is for a line break. + bool add_space = previous.isTextNode() && value.empty(); + inferred_label = + CombineAndCollapseWhitespace(value, inferred_label, add_space); + continue; } - } - // Look for a text node prior to <img> or <br> tags, - // e.g. Some Text<img/><input ...> or Some Text<br/><input ...> - while (inferred_label.empty() && !previous.isNull()) { - if (previous.isTextNode()) { - inferred_label = previous.nodeValue(); - TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label); - } else if (previous.isElementNode()) { - WebElement previous_element = previous.to<WebElement>(); - if (IsTextContainerElement(previous_element)) - inferred_label = FindChildText(previous_element); - else if (!HasTagName(previous, "img") && !HasTagName(previous, "br")) - break; - } else { + // If we have identified a partial label and have reached a non-lightweight + // element, consider the label to be complete. + string16 trimmed_label; + TrimWhitespace(inferred_label, TRIM_ALL, &trimmed_label); + if (!trimmed_label.empty()) break; - } - previous = previous.previousSibling(); - } + // <img> and <br> tags often appear between the input element and its + // label text, so skip over them. + if (HasTagName(previous, "img") || HasTagName(previous, "br")) + continue; - // Look for a label node prior to the <input> tag, - // e.g. <label>Some Text</label><input ...> - while (inferred_label.empty() && !previous.isNull()) { - if (previous.isTextNode()) { - inferred_label = previous.nodeValue(); - TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label); - } else if (HasTagName(previous, "label")) { - inferred_label = FindChildText(previous.to<WebElement>()); - } else { - break; - } + // We only expect <p> and <label> tags to contain the full label text. + if (HasTagName(previous, "p") || HasTagName(previous, "label")) + inferred_label = FindChildText(previous); - previous = previous.previousSibling(); + break; } + TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label); return inferred_label; } @@ -262,7 +270,7 @@ string16 InferLabelFromListItem(const WebFormControlElement& element) { } if (!parent.isNull() && HasTagName(parent, "li")) - return FindChildText(parent.to<WebElement>()); + return FindChildText(parent); return string16(); } @@ -289,7 +297,7 @@ string16 InferLabelFromTableColumn(const WebFormControlElement& element) { WebNode previous = parent.previousSibling(); while (inferred_label.empty() && !previous.isNull()) { if (HasTagName(previous, "td") || HasTagName(previous, "th")) - inferred_label = FindChildText(previous.to<WebElement>()); + inferred_label = FindChildText(previous); previous = previous.previousSibling(); } @@ -316,7 +324,7 @@ string16 InferLabelFromTableRow(const WebFormControlElement& element) { WebNode previous = parent.previousSibling(); while (inferred_label.empty() && !previous.isNull()) { if (HasTagName(previous, "tr")) - inferred_label = FindChildText(previous.to<WebElement>()); + inferred_label = FindChildText(previous); previous = previous.previousSibling(); } @@ -330,23 +338,29 @@ string16 InferLabelFromTableRow(const WebFormControlElement& element) { // e.g. <div>Some Text</div><div><input ...></div> string16 InferLabelFromDivTable(const WebFormControlElement& element) { WebNode node = element.parentNode(); - while (!node.isNull() && node.isElementNode() && - !node.to<WebElement>().hasTagName("div") && - // If the element is in a table, its label most likely is too. - !node.to<WebElement>().hasTagName("table")) { - node = node.parentNode(); - } + bool looking_for_parent = true; - if (node.isNull() || !HasTagName(node, "div")) - return string16(); - - // Search the siblings while we cannot find label. + // Search the sibling and parent <div>s until we find a candidate label. string16 inferred_label; while (inferred_label.empty() && !node.isNull()) { - if (HasTagName(node, "div")) - inferred_label = FindChildText(node.to<WebElement>()); + if (HasTagName(node, "div")) { + looking_for_parent = false; + inferred_label = FindChildText(node); + } else if (looking_for_parent && + (HasTagName(node, "table") || HasTagName(node, "fieldset"))) { + // If the element is in a table or fieldset, its label most likely is too. + break; + } + + if (node.previousSibling().isNull()) { + // If there are no more siblings, continue walking up the tree. + looking_for_parent = true; + } - node = node.previousSibling(); + if (looking_for_parent) + node = node.parentNode(); + else + node = node.previousSibling(); } return inferred_label; @@ -373,7 +387,7 @@ string16 InferLabelFromDefinitionList(const WebFormControlElement& element) { if (previous.isNull() || !HasTagName(previous, "dt")) return string16(); - return FindChildText(previous.to<WebElement>()); + return FindChildText(previous); } // Infers corresponding label for |element| from surrounding context in the DOM, @@ -645,9 +659,12 @@ string16 FormManager::LabelForElement(const WebFormControlElement& element) { WebNodeList labels = element.document().getElementsByTagName("label"); for (unsigned i = 0; i < labels.length(); ++i) { WebLabelElement label = labels.item(i).to<WebLabelElement>(); - DCHECK(label.hasTagName("label")); - if (label.correspondingControl() == element) + WebElement corresponding_control = label.correspondingControl(); + if (corresponding_control == element || + (corresponding_control.isNull() && + label.getAttribute("for") == element.nameForAutofill())) { return FindChildText(label); + } } // Infer the label from context if not found in label element. @@ -732,13 +749,21 @@ bool FormManager::WebFormElementToFormData(const WebFormElement& element, WebLabelElement label = labels.item(i).to<WebLabelElement>(); WebFormControlElement field_element = label.correspondingControl().to<WebFormControlElement>(); - if (field_element.isNull() || + + string16 element_name; + if (field_element.isNull()) { + // Sometimes site authors will incorrectly specify the corresponding + // field element's name rather than its id, so we compensate here. + element_name = label.getAttribute("for"); + } else if ( !field_element.isFormControlElement() || - field_element.formControlType() == WebString::fromUTF8("hidden")) + field_element.formControlType() == WebString::fromUTF8("hidden")) { continue; + } else { + element_name = field_element.nameForAutofill(); + } - std::map<string16, FormField*>::iterator iter = - name_map.find(field_element.nameForAutofill()); + std::map<string16, FormField*>::iterator iter = name_map.find(element_name); // Concatenate labels because some sites might have multiple label // candidates. if (iter != name_map.end()) diff --git a/chrome/test/data/autofill/heuristics/input/16_crbug_87517.html b/chrome/test/data/autofill/heuristics/input/16_crbug_87517.html new file mode 100644 index 0000000..e33cbe3b --- /dev/null +++ b/chrome/test/data/autofill/heuristics/input/16_crbug_87517.html @@ -0,0 +1,1229 @@ +<!-- https://www.givedirect.org/give/givefrm.asp?CID=1721 --> +<table align="center" id="btable" width="810"> + <tr> + <td valign="top" align="center" id="btable"> + <h1> + MATHCOUNTS Foundation + </h1> + <h2> + Online Donation Form + </h2> + </td> + </tr> + <tr> + <td></td> + </tr> + <tr> + <td> + <form name="donation" method="post" id="donation"> + <!--begin the form--> + <input type="hidden" name="IsSubmitted" value="Yes"> <input type="hidden" name="BaseURL" value=""> <span> + <textarea name="f1" id="f1" value="" rows="2" cols="3"> +</textarea></span> + <table border="0"> + <tr> + <td width="310"> + <table> + <tr> + <td width="20"> + <img src="#"> + </td> + <td valign="middle" width="330"> + <div> + Contact Information + </div> + </td> + </tr> + </table> + <div> + <div> + Name <span>*</span><br> + <input name="dnrfirst" value="" type="text" size="15" maxlength="50" tabindex="1"> <input name="dnrlast" value="" type="text" size="15" maxlength="50" tabindex="2"><br> + Company<br> + <input name="company" value="" type="text" size="36" maxlength="100" tabindex="3"><br> + Address 1 <span>*</span><br> + <input name="dadd1" id="dadd1" value="" type="text" size="36" maxlength="155" tabindex="4" autocomplete="off"><br> + Address 2<br> + <input name="dadd2" id="dadd2" type="text" value="" size="36" maxlength="155" tabindex="5"><br> + City / State / Zip <span>*</span><br> + <input name="dcity" id="dcity" value="" type="text" size="12" maxlength="60" tabindex="6"> <select name="dstate" id="dstate" tabindex="6"> + <option id="USA-AL" value="AL"> + AL + </option> + <option id="USA-AK" value="AK"> + AK + </option> + <option id="USA-AZ" value="AZ"> + AZ + </option> + <option id="USA-AR" value="AR"> + AR + </option> + <option id="USA-CA" value="CA"> + CA + </option> + <option id="USA-CO" value="CO"> + CO + </option> + <option id="USA-CT" value="CT"> + CT + </option> + <option id="USA-DE" value="DE"> + DE + </option> + <option id="USA-DC" value="DC"> + DC + </option> + <option id="USA-FL" value="FL"> + FL + </option> + <option id="USA-GA" value="GA"> + GA + </option> + <option id="USA-GU" value="GU"> + GU + </option> + <option id="USA-HI" value="HI"> + HI + </option> + <option id="USA-ID" value="ID"> + ID + </option> + <option id="USA-IL" value="IL"> + IL + </option> + <option id="USA-IN" value="IN"> + IN + </option> + <option id="USA-IA" value="IA"> + IA + </option> + <option id="USA-KS" value="KS"> + KS + </option> + <option id="USA-KY" value="KY"> + KY + </option> + <option id="USA-LA" value="LA"> + LA + </option> + <option id="USA-ME" value="ME"> + ME + </option> + <option id="USA-MD" value="MD"> + MD + </option> + <option id="USA-MA" value="MA"> + MA + </option> + <option id="USA-MI" value="MI"> + MI + </option> + <option id="USA-MN" value="MN"> + MN + </option> + <option id="USA-MS" value="MS"> + MS + </option> + <option id="USA-MO" value="MO"> + MO + </option> + <option id="USA-MT" value="MT"> + MT + </option> + <option id="USA-NE" value="NE"> + NE + </option> + <option id="USA-NV" value="NV"> + NV + </option> + <option id="USA-NH" value="NH"> + NH + </option> + <option id="USA-NJ" value="NJ"> + NJ + </option> + <option id="USA-NM" value="NM"> + NM + </option> + <option id="USA-NY" value="NY"> + NY + </option> + <option id="USA-NC" value="NC"> + NC + </option> + <option id="USA-ND" value="ND"> + ND + </option> + <option id="USA-OH" value="OH"> + OH + </option> + <option id="USA-OK" value="OK"> + OK + </option> + <option id="USA-OR" value="OR"> + OR + </option> + <option id="USA-PA" value="PA"> + PA + </option> + <option id="USA-PR" value="PR"> + PR + </option> + <option id="USA-RI" value="RI"> + RI + </option> + <option id="USA-SC" value="SC"> + SC + </option> + <option id="USA-SD" value="SD"> + SD + </option> + <option id="USA-TN" value="TN"> + TN + </option> + <option id="USA-TX" value="TX"> + TX + </option> + <option id="USA-UT" value="UT"> + UT + </option> + <option id="USA-VT" value="VT"> + VT + </option> + <option id="USA-VA" value="VA"> + VA + </option> + <option id="USA-VI" value="VI"> + VI + </option> + <option id="USA-WA" value="WA"> + WA + </option> + <option id="USA-WV" value="WV"> + WV + </option> + <option id="USA-WI" value="WI"> + WI + </option> + <option id="USA-WY" value="WY"> + WY + </option> + <option> + ---- + </option> + <option id="CAN-AB" value="AB"> + AB + </option> + <option id="CAN-BC" value="BC"> + BC + </option> + <option id="CAN-MB" value="MB"> + MB + </option> + <option id="CAN-NB" value="NB"> + NB + </option> + <option id="CAN-NL" value="NL"> + NL + </option> + <option id="CAN-NT" value="NT"> + NT + </option> + <option id="CAN-NS" value="NS"> + NS + </option> + <option id="CAN-NU" value="NU"> + NU + </option> + <option id="CAN-PE" value="PE"> + PE + </option> + <option id="CAN-SK" value="SK"> + SK + </option> + <option id="CAN-ON" value="ON"> + ON + </option> + <option id="CAN-QC" value="QC"> + QC + </option> + <option id="CAN-YT" value="YT"> + YT + </option> + <option> + ---- + </option> + <option id="OS-AA" value="AA"> + AA + </option> + <option id="OS-AE" value="AE"> + AE + </option> + <option id="OS-AP" value="AP"> + AP + </option> + </select> <input name="dzip" id="dzip" value="" type="text" size="8" maxlength="10" tabindex="7"><br> + Country<br> + <select name="CC_COUNTRY"> + <option value="Albania"> + Albania + </option> + <option value="Algeria"> + Algeria + </option> + <option value="American Samoa"> + American Samoa + </option> + <option value="Andorra"> + Andorra + </option> + <option value="Anguilla"> + Anguilla + </option> + <option value="Antigua"> + Antigua + </option> + <option value="Argentina"> + Argentina + </option> + <option value="Aruba"> + Aruba + </option> + <option value="Australia"> + Australia + </option> + <option value="Austria"> + Austria + </option> + <option value="Azores"> + Azores + </option> + <option value="Bahamas"> + Bahamas + </option> + <option value="Bahrain"> + Bahrain + </option> + <option value="Bangladesh"> + Bangladesh + </option> + <option value="Barbados"> + Barbados + </option> + <option value="Belgium"> + Belgium + </option> + <option value="Belize"> + Belize + </option> + <option value="Belarus"> + Belarus + </option> + <option value="Benin"> + Benin + </option> + <option value="Bermuda"> + Bermuda + </option> + <option value="Bolivia"> + Bolivia + </option> + <option value="Bonaire"> + Bonaire + </option> + <option value="Botswana"> + Botswana + </option> + <option value="Brazil"> + Brazil + </option> + <option value="Brunei"> + Brunei + </option> + <option value="Bulgaria"> + Bulgaria + </option> + <option value="Burkina Faso"> + Burkina Faso + </option> + <option value="Burundi"> + Burundi + </option> + <option value="Cambodia"> + Cambodia + </option> + <option value="Cameroon"> + Cameroon + </option> + <option value="Canada"> + Canada + </option> + <option value="Canary Islands"> + Canary Islands + </option> + <option value="Cape Verde Islands"> + Cape Verde Islands + </option> + <option value="Cayman Islands"> + Cayman Islands + </option> + <option value="Channel Islands"> + Channel Islands + </option> + <option value="Chile"> + Chile + </option> + <option value="China"> + China + </option> + <option value="Colombia"> + Colombia + </option> + <option value="Congo"> + Congo + </option> + <option value="Cook Islands"> + Cook Islands + </option> + <option value="Costa Rica"> + Costa Rica + </option> + <option value="Croatia"> + Croatia + </option> + <option value="Curacao"> + Curacao + </option> + <option value="Cyprus"> + Cyprus + </option> + <option value="Czech Republic"> + Czech Republic + </option> + <option value="Denmark"> + Denmark + </option> + <option value="Djibouti"> + Djibouti + </option> + <option value="Dominica"> + Dominica + </option> + <option value="Dominican Republic"> + Dominican Republic + </option> + <option value="Ecuador"> + Ecuador + </option> + <option value="Egypt"> + Egypt + </option> + <option value="El Salvador"> + El Salvador + </option> + <option value="England"> + England + </option> + <option value="Equitorial Guinea"> + Equitorial Guinea + </option> + <option value="Eritrea"> + Eritrea + </option> + <option value="Estonia"> + Estonia + </option> + <option value="Ethiopia"> + Ethiopia + </option> + <option value="Faeroe Islands"> + Faeroe Islands + </option> + <option value="Fiji"> + Fiji + </option> + <option value="Finland"> + Finland + </option> + <option value="France"> + France + </option> + <option value="French Guiana"> + French Guiana + </option> + <option value="French Polynesia"> + French Polynesia + </option> + <option value="Gabon"> + Gabon + </option> + <option value="Gambia"> + Gambia + </option> + <option value="Georgia"> + Georgia + </option> + <option value="Germany"> + Germany + </option> + <option value="Ghana"> + Ghana + </option> + <option value="Gibraltar"> + Gibraltar + </option> + <option value="Greece"> + Greece + </option> + <option value="Greenland"> + Greenland + </option> + <option value="Grenada"> + Grenada + </option> + <option value="Guadeloupe"> + Guadeloupe + </option> + <option value="Guam"> + Guam + </option> + <option value="Guatemala"> + Guatemala + </option> + <option value="Guinea"> + Guinea + </option> + <option value="Guinea-Bissau"> + Guinea-Bissau + </option> + <option value="Guyana"> + Guyana + </option> + <option value="Haiti"> + Haiti + </option> + <option value="Holland"> + Holland + </option> + <option value="Honduras"> + Honduras + </option> + <option value="Hong Kong"> + Hong Kong + </option> + <option value="Hungary"> + Hungary + </option> + <option value="Iceland"> + Iceland + </option> + <option value="India"> + India + </option> + <option value="Indonesia"> + Indonesia + </option> + <option value="Ireland"> + Ireland + </option> + <option value="Israel"> + Israel + </option> + <option value="Italy"> + Italy + </option> + <option value="Ivory Coast"> + Ivory Coast + </option> + <option value="Jamaica"> + Jamaica + </option> + <option value="Japan"> + Japan + </option> + <option value="Jordan"> + Jordan + </option> + <option value="Kazakhstan"> + Kazakhstan + </option> + <option value="Kenya"> + Kenya + </option> + <option value="Kiribati"> + Kiribati + </option> + <option value="Kosrae"> + Kosrae + </option> + <option value="Kuwait"> + Kuwait + </option> + <option value="Kyrgyzstan"> + Kyrgyzstan + </option> + <option value="Laos"> + Laos + </option> + <option value="Latvia"> + Latvia + </option> + <option value="Lebanon"> + Lebanon + </option> + <option value="Lesotho"> + Lesotho + </option> + <option value="Liberia"> + Liberia + </option> + <option value="Liechtenstein"> + Liechtenstein + </option> + <option value="Lithuania"> + Lithuania + </option> + <option value="Luxembourg"> + Luxembourg + </option> + <option value="Macau"> + Macau + </option> + <option value="Macedonia"> + Macedonia + </option> + <option value="Madagascar"> + Madagascar + </option> + <option value="Madeira"> + Madeira + </option> + <option value="Malawi"> + Malawi + </option> + <option value="Malaysia"> + Malaysia + </option> + <option value="Maldives"> + Maldives + </option> + <option value="Mali"> + Mali + </option> + <option value="Malta"> + Malta + </option> + <option value="Marshall Islands"> + Marshall Islands + </option> + <option value="Martinique"> + Martinique + </option> + <option value="Mauritania"> + Mauritania + </option> + <option value="Mauritius"> + Mauritius + </option> + <option value="Mexico"> + Mexico + </option> + <option value="Moldova"> + Moldova + </option> + <option value="Monaco"> + Monaco + </option> + <option value="Montserrat"> + Montserrat + </option> + <option value="Morocco"> + Morocco + </option> + <option value="Mozambique"> + Mozambique + </option> + <option value="Myanmar"> + Myanmar + </option> + <option value="Namibia"> + Namibia + </option> + <option value="Nepal"> + Nepal + </option> + <option value="Netherlands"> + Netherlands + </option> + <option value="New Caledonia"> + New Caledonia + </option> + <option value="New Zealand"> + New Zealand + </option> + <option value="Nicaragua"> + Nicaragua + </option> + <option value="Niger"> + Niger + </option> + <option value="Nigeria"> + Nigeria + </option> + <option value="Norfolk Island"> + Norfolk Island + </option> + <option value="Northern Ireland"> + Northern Ireland + </option> + <option value="Norway"> + Norway + </option> + <option value="Oman"> + Oman + </option> + <option value="Pakistan"> + Pakistan + </option> + <option value="Palau"> + Palau + </option> + <option value="Panama"> + Panama + </option> + <option value="Papua New Guinea"> + Papua New Guinea + </option> + <option value="Paraguay"> + Paraguay + </option> + <option value="Peru"> + Peru + </option> + <option value="Philippines"> + Philippines + </option> + <option value="Poland"> + Poland + </option> + <option value="Ponape"> + Ponape + </option> + <option value="Portugal"> + Portugal + </option> + <option value="Puerto Rico"> + Puerto Rico + </option> + <option value="Qatar"> + Qatar + </option> + <option value="Reunion"> + Reunion + </option> + <option value="Romania"> + Romania + </option> + <option value="Rota"> + Rota + </option> + <option value="Russia"> + Russia + </option> + <option value="Rwanda"> + Rwanda + </option> + <option value="Saba"> + Saba + </option> + <option value="Saipan"> + Saipan + </option> + <option value="Saudi Arabia"> + Saudi Arabia + </option> + <option value="Scotland"> + Scotland + </option> + <option value="Senegal"> + Senegal + </option> + <option value="Seychelles"> + Seychelles + </option> + <option value="Sierra Leone"> + Sierra Leone + </option> + <option value="Singapore"> + Singapore + </option> + <option value="Slovakia"> + Slovakia + </option> + <option value="Slovenia"> + Slovenia + </option> + <option value="Solomon Islands"> + Solomon Islands + </option> + <option value="South Africa"> + South Africa + </option> + <option value="South Korea"> + South Korea + </option> + <option value="Spain"> + Spain + </option> + <option value="Sri Lanka"> + Sri Lanka + </option> + <option value="St. Barthelemy"> + St. Barthelemy + </option> + <option value="St. Christopher"> + St. Christopher + </option> + <option value="St. Croix"> + St. Croix + </option> + <option value="St. Eustatius"> + St. Eustatius + </option> + <option value="St. John"> + St. John + </option> + <option value="St. Lucia"> + St. Lucia + </option> + <option value="St. Maarten"> + St. Maarten + </option> + <option value="St. Martin"> + St. Martin + </option> + <option value="St. Thomas"> + St. Thomas + </option> + <option value="Sudan"> + Sudan + </option> + <option value="Suriname"> + Suriname + </option> + <option value="Swaziland"> + Swaziland + </option> + <option value="Sweden"> + Sweden + </option> + <option value="Switzerland"> + Switzerland + </option> + <option value="Syria"> + Syria + </option> + <option value="Tahiti"> + Tahiti + </option> + <option value="Taiwan"> + Taiwan + </option> + <option value="Tajikistan"> + Tajikistan + </option> + <option value="Tanzania"> + Tanzania + </option> + <option value="Thailand"> + Thailand + </option> + <option value="Tinian"> + Tinian + </option> + <option value="Togo"> + Togo + </option> + <option value="Tonga"> + Tonga + </option> + <option value="Tortola"> + Tortola + </option> + <option value="Trinidad and Tobago"> + Trinidad and Tobago + </option> + <option value="Truk"> + Truk + </option> + <option value="Tunisia"> + Tunisia + </option> + <option value="Turkey"> + Turkey + </option> + <option value="Tuvalu"> + Tuvalu + </option> + <option value="Uganda"> + Uganda + </option> + <option value="Ukraine"> + Ukraine + </option> + <option value="Union Island"> + Union Island + </option> + <option value="United Arab Emirates"> + United Arab Emirates + </option> + <option value="United Kingdom"> + United Kingdom + </option> + <option value="United States" selected> + United States + </option> + <option value="Uruguay"> + Uruguay + </option> + <option value="US Virgin Islands"> + US Virgin Islands + </option> + <option value="Uzbekistan"> + Uzbekistan + </option> + <option value="Vanuatu"> + Vanuatu + </option> + <option value="Venezuela"> + Venezuela + </option> + <option value="Vietnam"> + Vietnam + </option> + <option value="Virgin Gorda"> + Virgin Gorda + </option> + <option value="Wake Island"> + Wake Island + </option> + <option value="Wales"> + Wales + </option> + <option value="Western Samoa"> + Western Samoa + </option> + <option value="Yap"> + Yap + </option> + <option value="Yemen"> + Yemen + </option> + <option value="Zaire"> + Zaire + </option> + <option value="Zambia"> + Zambia + </option> + <option value="Zimbabwe"> + Zimbabwe + </option> + </select><br> + Telephone<br> + <input name="dphone" value="" type="text" size="36" maxlength="20" tabindex="8"><br> + Email <span>*</span><br> + <input name="demail" value="" type="text" size="36" maxlength="155" tabindex="9"><br> + <br> + </div> + </div> + </td> + <td> + <div> + <table border="0"> + <tr> + <td> + <img src="#" alt="Number 2"> + </td> + <td valign="middle" width="350"> + <div> + Donation Information + </div> + </td> + </tr> + </table> + <div> + <b>Gift amount in USD <span>($10 minimum)</span><br> + $<input name="amt" id="amt" type="text" value="" size="5" maxlength="25" tabindex="10">.00</b> + <p> + <input type="checkbox" name="tributeSelect" tabindex="11" value="on"> My donation is In Honor or In Memory of someone special + </p> + <p> + <!--<b>Donation Preference</b><br>--> + <input name="DonationType" type="radio" value="OneTime" checked tabindex="12">This is a one time donation<br> + <input name="DonationType" type="radio" value="Recurs" tabindex="13">I would like to make this a recurring donation deducted <select name="ccrecurring" tabindex="14"> + <option value="Monthly"> + Monthly + </option> + <option value="Quarterly"> + Quarterly + </option> + <option value="Annually"> + Annually + </option> + </select> + </p> + <p> + <b>Comments</b><br> + <span>( You may enter up to 500 characters. ) <input value="500" name="remLen" size="3" maxlength="3" readonly="readonly"> characters left</span><br> + <textarea name="Comments" rows="3" cols="45" wrap="physical" onkeydown="textCounter(this.form.Comments,this.form.remLen,500);" onkeyup="textCounter(this.form.Comments,this.form.remLen,500);" tabindex="17"> +</textarea> + </p> + </div> + </div> + </td> + </tr> + <tr> + <td colspan="2"> + <div id="div_tribute" style='display: none;'><br> + <table border="0"> + <tr> + <td width="20"> + <img src="#"> + </td> + <td valign="middle" width="330"> + <div> + Tribute Information: + </div> + </td> + </tr> + </table> + <div> + <table> + <tr> + <td> + <table> + <tr> + <td></td> + <td> + <input type="radio" name="tribute" value="IHO" tabindex="18">In Honor Of <input type="radio" name="tribute" value="IMO" tabindex="19">In Memory Of + </td> + </tr> + <tr> + <td> + Name: + </td> + <td> + <input type="text" name="Tribute_Name" maxlength="100" size="35" value="" tabindex="20"> + </td> + </tr> + <tr> + <td> + Occasion: + </td> + <td> + <input type="text" name="Tribute_occasion" maxlength="100" size="35" value="" tabindex="21"> + </td> + </tr> + <tr> + <td colspan="2" align="left"> + <input type="checkbox" name="Tribute_Disclosure" value="on" tabindex="22">I wish to remain anonymous<br> + <input type="checkbox" name="Tribute_Notification" value="on" tabindex="23">Please send a notification of my gift to the following address: + </td> + </tr> + </table> + </td> + <td> + <div id="div_notify" style='display: none;'> + <div> + <table> + <tr> + <td colspan="2" align="right"> + <input type="radio" name="Tribute_IncludeAmount" tabindex="24" value="1">Include the amount <input type="radio" name="Tribute_IncludeAmount" checked tabindex="25" value="0">Do not include the amount + </td> + </tr> + <tr> + <td> + Name: + </td> + <td> + <input type="text" name="Tribute_NotifyName" maxlength="100" size="40" value="" tabindex="26"> + </td> + </tr> + <tr> + <td> + Email: + </td> + <td> + <input type="text" name="Tribute_Email" maxlength="50" size="40" value="" tabindex="27"> + </td> + </tr> + <tr> + <td> + Street: + </td> + <td> + <input type="text" name="Tribute_NotifyAddr" maxlength="200" size="40" value="" tabindex="28"> + </td> + </tr> + <tr> + <td> + City / St. / Zip: + </td> + <td> + <input type="text" name="Tribute_NotifyCity" maxlength="60" size="15" value="" tabindex="29"> <input type="text" name="Tribute_NotifyState" maxlength="10" size="2" value="" tabindex="30"> <input type="text" name="Tribute_NotifyZip" maxlength="10" size="10" value="" tabindex="31"> + </td> + </tr> + </table> + </div> + </td> + </tr> + </table> + </div><!-- End Hide Notify Div --> + <!-- End TributeBox Div --><!-- End Hide Tribute Div --> + </td> + </tr> + <tr> + <td colspan="2"> + <!-- ///PAYMENT BOX --> + <br> + <table border="0"> + <tr> + <td width="20"> + <div id="div_payment"> + <img src='images/icons/red4.png'> + </div> + <div id="div_paymentmain"> + <img src='images/icons/red3.png'> + </div> + </td> + <td valign="middle" width="330"> + <div> + Payment Information: + </div> + </td> + </tr> + </table> + <div> + <table> + <tr> + <td width="10"></td> + <td> + <p> + <b>Credit Card Information</b><br> + <img src="#"><br> + <br> + Credit Card Type <span>*</span><br> + <select name="cctype" tabindex="32"> + <option value="Visa"> + Visa + </option> + <option value="MasterCard"> + MasterCard + </option> + <option value="AmericanExpress"> + American Express + </option> + </select><br> + Credit Card Number <span>*</span><br> + <input name="ccard" type="text" value="" size="25" maxlength="25" tabindex="32" autocomplete="off"><br> + CSC Number <span>* <a href="#">What Is This?</a></span><br> + <input tabindex="33" name="csc" type="text" value="" size="25" maxlength="4" autocomplete="off"><br> + Expiration Date <span>*</span><br> + Month <select name="ExpMon" tabindex="34"> + <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> + </select> Year <select name="ExpYear" size="1" tabindex="35"> + <option value="11"> + 2011 + </option> + <option value="12"> + 2012 + </option> + <option value="13"> + 2013 + </option> + <option value="14"> + 2014 + </option> + <option value="15"> + 2015 + </option> + <option value="16"> + 2016 + </option> + <option value="17"> + 2017 + </option> + <option value="18"> + 2018 + </option> + <option value="19"> + 2019 + </option> + </select><br> + </p> + </td> + <td width="150"></td> + <td> + <p> + <b>Billing Address</b> - <input type="checkbox" name="SameAddress" value="checkbox" tabindex="36">Same As Contact Address<br> + <br> + Address 1 <span>*</span><br> + <input name="CC_Addr" id="CC_Addr" value="" type="text" size="36" maxlength="155" tabindex="37"><br> + Address 2<br> + <input name="CC_Addr2" id="CC_Addr2" type="text" value="" size="36" maxlength="155" tabindex="38"><br> + City / State / Zip <span>*</span><br> + <input name="CC_City" id="CC_City" value="" type="text" size="12" maxlength="60" tabindex="39"> <input name="CC_State" id="CC_State" value="" type="text" size="2" maxlength="10" tabindex="40"> <input name="CC_Zip" id="CC_Zip" value="" type="text" size="10" maxlength="10" tabindex="41"> + </p> + <p> + <b>Thank you for your support!</b> + </p> + <p> + <input type="image" src="#" name="Action" value="Submit" tabindex="42"> + </p> + </td> + </tr> + </table> + </div><!-- End Payment Box div --> + </td> + </tr> + </table> + </form> + </td> + </tr> +</table> diff --git a/chrome/test/data/autofill/heuristics/output/02_checkout_ae.com.out b/chrome/test/data/autofill/heuristics/output/02_checkout_ae.com.out index 65db6ef..480c5aa 100644 --- a/chrome/test/data/autofill/heuristics/output/02_checkout_ae.com.out +++ b/chrome/test/data/autofill/heuristics/output/02_checkout_ae.com.out @@ -6,14 +6,14 @@ ADDRESS_HOME_COUNTRY | country | Country, APO/FPO | US NAME_FIRST | firstName | First Name | NAME_LAST | lastName | Last Name | ADDRESS_HOME_LINE1 | address1 | Address | -ADDRESS_HOME_LINE2 | address2 | | +ADDRESS_HOME_LINE2 | address2 | Address | ADDRESS_HOME_CITY | city | City | ADDRESS_HOME_STATE | state | State | ADDRESS_HOME_ZIP | zip | Zip | UNKNOWN_TYPE | ccType | Card Type: | CREDIT_CARD_NUMBER | ccNumber | Card Number: | CREDIT_CARD_EXP_MONTH | expMonth | Expiration: | 1 -CREDIT_CARD_EXP_4_DIGIT_YEAR | expYear | | 2011 +CREDIT_CARD_EXP_4_DIGIT_YEAR | expYear | Expiration: | 2011 UNKNOWN_TYPE | ccSecCode | Security Code: CLOSEVisa, Mastercard & Discover:The security code is a 3-digit number found on the back of the card near the signature strip.American Express:The security code is a 4-digit number found on the front right side of the card. | UNKNOWN_TYPE | birthMonthBMLField | Birthday: CLOSEWe need your birthday for the Bill Me Later® credit check process. | UNKNOWN_TYPE | birthDayBMLField | Birthday: CLOSEWe need your birthday for the Bill Me Later® credit check process. | @@ -24,13 +24,13 @@ ADDRESS_HOME_COUNTRY | country | Country, APO/FPO | US NAME_FIRST | firstName | First Name | NAME_LAST | lastName | Last Name | ADDRESS_HOME_LINE1 | address1 | Address | -ADDRESS_HOME_LINE2 | address2 | | +ADDRESS_HOME_LINE2 | address2 | Address | ADDRESS_HOME_CITY | city | City | ADDRESS_HOME_STATE | state | State | ADDRESS_HOME_ZIP | zip | Zip | -EMAIL_ADDRESS | email | | -EMAIL_ADDRESS | confirmEmail | | -PHONE_HOME_WHOLE_NUMBER | billingPhone | | +EMAIL_ADDRESS | email | Email CLOSEWe use this to send you an order confirmation and tracking info once your order ships. | +EMAIL_ADDRESS | confirmEmail | Re-Type Email | +PHONE_HOME_WHOLE_NUMBER | billingPhone | Billing Phone Number CLOSEThis must match the phone number on your credit card statement. Don't worry... we never share your number with anyone. | UNKNOWN_TYPE | accessPassNumber | My AEREWARD$ # CLOSEAEREWARD$ NumberEnter the number found on the back of your AEREWARD$ card to earn rewards for your purchase.Learn More about AEREWARD$ | UNKNOWN_TYPE | birthMonthBillAddField | Birthday: CLOSEWe'd love to wish you a happy birthday when it's time! However, you need to be 13 or older to create an account. | UNKNOWN_TYPE | birthDayBillAddField | Birthday: CLOSEWe'd love to wish you a happy birthday when it's time! However, you need to be 13 or older to create an account. | diff --git a/chrome/test/data/autofill/heuristics/output/03_checkout_crutchfield.com.out b/chrome/test/data/autofill/heuristics/output/03_checkout_crutchfield.com.out index 52a7d60..10d6512 100644 --- a/chrome/test/data/autofill/heuristics/output/03_checkout_crutchfield.com.out +++ b/chrome/test/data/autofill/heuristics/output/03_checkout_crutchfield.com.out @@ -1,20 +1,20 @@ -NAME_FIRST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$firstname | * M.I. | -NAME_MIDDLE_INITIAL | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$mi | * M.I. | -NAME_LAST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$lastname | * | +NAME_FIRST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$firstname | First Name | +NAME_MIDDLE_INITIAL | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$mi | M.I. | +NAME_LAST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$lastname | Last Name | COMPANY_NAME | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$address2 | Company | -ADDRESS_HOME_LINE1 | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$address1 | * | +ADDRESS_HOME_LINE1 | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$address1 | Address | ADDRESS_HOME_CITY | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$city | City | ADDRESS_HOME_STATE | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$state | State | Select Your State -ADDRESS_HOME_ZIP | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$zip | * | -PHONE_HOME_WHOLE_NUMBER | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$billphone2 | * | -EMAIL_ADDRESS | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$email2 | * | -NAME_FIRST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingFirstname | * M.I. | -NAME_MIDDLE_INITIAL | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingMi | * M.I. | -NAME_LAST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingLastname | * | +ADDRESS_HOME_ZIP | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$zip | Zip/Postal Code | +PHONE_HOME_WHOLE_NUMBER | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$billphone2 | Billing Phone | +EMAIL_ADDRESS | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$email2 | Email | +NAME_FIRST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingFirstname | First Name | +NAME_MIDDLE_INITIAL | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingMi | M.I. | +NAME_LAST | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingLastname | Last Name | COMPANY_NAME | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingAddress2 | Company | -ADDRESS_HOME_LINE1 | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingAddress1 | * | +ADDRESS_HOME_LINE1 | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingAddress1 | Address | ADDRESS_HOME_CITY | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingCity | City | ADDRESS_HOME_STATE | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingState | State | Select Your State -ADDRESS_HOME_ZIP | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingZip | * | -PHONE_HOME_WHOLE_NUMBER | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingPhone | * | -UNKNOWN_TYPE | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$customerID | Located in the orange box on the back of your catalog. | +ADDRESS_HOME_ZIP | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingZip | Zip/Postal Code | +PHONE_HOME_WHOLE_NUMBER | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$shippingPhone | Shipping Phone | +UNKNOWN_TYPE | ctl00$ctl00$MainContentPlaceHolder$MainContentPlaceHolder$customerID | Customer # | diff --git a/chrome/test/data/autofill/heuristics/output/03_checkout_gamestop.com.out b/chrome/test/data/autofill/heuristics/output/03_checkout_gamestop.com.out index 9a91474..f327e63 100644 --- a/chrome/test/data/autofill/heuristics/output/03_checkout_gamestop.com.out +++ b/chrome/test/data/autofill/heuristics/output/03_checkout_gamestop.com.out @@ -1,4 +1,4 @@ -UNKNOWN_TYPE | ctl00$ctl00$ctl00$BaseContentPlaceHolder$cHeader$searchtext | | +UNKNOWN_TYPE | ctl00$ctl00$ctl00$BaseContentPlaceHolder$cHeader$searchtext | DownloadsGames & Add-Ons Pre-OwnedGreat Values Learn How To Join | NAME_FIRST | ctl00$ctl00$ctl00$BaseContentPlaceHolder$mainContentPlaceHolder$MainContentPlaceHolder$AddressDetails$AddressDetails$textFirstName | First Name: | NAME_LAST | ctl00$ctl00$ctl00$BaseContentPlaceHolder$mainContentPlaceHolder$MainContentPlaceHolder$AddressDetails$AddressDetails$textLastName | Last Name: | ADDRESS_HOME_LINE1 | ctl00$ctl00$ctl00$BaseContentPlaceHolder$mainContentPlaceHolder$MainContentPlaceHolder$AddressDetails$AddressDetails$textAddressLine1 | Address 1: | diff --git a/chrome/test/data/autofill/heuristics/output/04_checkout_ikea.com.out b/chrome/test/data/autofill/heuristics/output/04_checkout_ikea.com.out index 88e344f..8e5e4f2 100644 --- a/chrome/test/data/autofill/heuristics/output/04_checkout_ikea.com.out +++ b/chrome/test/data/autofill/heuristics/output/04_checkout_ikea.com.out @@ -1,15 +1,15 @@ -NAME_FIRST | firstName | | -NAME_LAST | lastName | | -ADDRESS_HOME_LINE1 | address1 | | -ADDRESS_HOME_LINE2 | address2 | | -ADDRESS_HOME_STATE | state | | -ADDRESS_HOME_ZIP | zipCode | | -ADDRESS_HOME_CITY | city | | -EMAIL_ADDRESS | email1 | | -EMAIL_ADDRESS | email1retype | | -PHONE_HOME_WHOLE_NUMBER | phone1 | Ext: (Optional) | +NAME_FIRST | firstName | First Name: | +NAME_LAST | lastName | Last Name: | +ADDRESS_HOME_LINE1 | address1 | Address 1: | +ADDRESS_HOME_LINE2 | address2 | Address 2: (Optional) | +ADDRESS_HOME_STATE | state | State: | +ADDRESS_HOME_ZIP | zipCode | Zip Code: | +ADDRESS_HOME_CITY | city | City: | +EMAIL_ADDRESS | email1 | Email: | +EMAIL_ADDRESS | email1retype | Re-type Email: | +PHONE_HOME_WHOLE_NUMBER | phone1 | Primary Tel Number: | UNKNOWN_TYPE | phone1ext | Ext: (Optional) | -PHONE_HOME_WHOLE_NUMBER | phone2 | Ext: (Optional) | +PHONE_HOME_WHOLE_NUMBER | phone2 | Alternative Number: | UNKNOWN_TYPE | phone2ext | Ext: (Optional) | -PHONE_FAX_WHOLE_NUMBER | fax1 | Ext: (Optional) | +PHONE_FAX_WHOLE_NUMBER | fax1 | Fax Number: (Optional) | UNKNOWN_TYPE | fax1ext | Ext: (Optional) | diff --git a/chrome/test/data/autofill/heuristics/output/04_checkout_jr.com.out b/chrome/test/data/autofill/heuristics/output/04_checkout_jr.com.out index 59241fc..acdb256 100644 --- a/chrome/test/data/autofill/heuristics/output/04_checkout_jr.com.out +++ b/chrome/test/data/autofill/heuristics/output/04_checkout_jr.com.out @@ -1,24 +1,24 @@ NAME_FIRST | billingAddress.firstName | * | NAME_LAST | billingAddress.lastName | * | ADDRESS_BILLING_LINE1 | billingAddress.address1 | * | -ADDRESS_BILLING_LINE2 | billingAddress.address2 | | +ADDRESS_BILLING_LINE2 | billingAddress.address2 | Street address or P.O. box | ADDRESS_BILLING_CITY | billingAddress.city | * | ADDRESS_BILLING_STATE | billingAddress.stateCode | * | XX ADDRESS_BILLING_ZIP | billingAddress.postalCode | * | -ADDRESS_BILLING_COUNTRY | billingAddress.country | International billing instructions | US +ADDRESS_BILLING_COUNTRY | billingAddress.country | * | US PHONE_HOME_WHOLE_NUMBER | billingAddress.phoneNumber | * | EMAIL_ADDRESS | customer.emailAddress | * | NAME_FIRST | shippingAddress.firstName | * | NAME_LAST | shippingAddress.lastName | * | ADDRESS_HOME_LINE1 | shippingAddress.address1 | * | -ADDRESS_HOME_LINE2 | shippingAddress.address2 | | +ADDRESS_HOME_LINE2 | shippingAddress.address2 | Street address or P.O. box | ADDRESS_HOME_CITY | shippingAddress.city | * | ADDRESS_HOME_STATE | shippingAddress.stateCode | * | XX ADDRESS_HOME_ZIP | shippingAddress.postalCode | * | ADDRESS_HOME_COUNTRY | shippingAddress.country | * | US PHONE_HOME_WHOLE_NUMBER | shippingAddress.phoneNumber | * | -UNKNOWN_TYPE | customOrderHeader.internationalBilling | | -UNKNOWN_TYPE | customOrderHeader.salespersonNumber | | -UNKNOWN_TYPE | customOrderHeader.giftFromName | | -UNKNOWN_TYPE | customOrderHeader.giftMessage | | -EMAIL_ADDRESS | customOrderHeader.giftEmailAddress | | +UNKNOWN_TYPE | customOrderHeader.internationalBilling | International Billing | +UNKNOWN_TYPE | customOrderHeader.salespersonNumber | Salesperson Number | +UNKNOWN_TYPE | customOrderHeader.giftFromName | Gift From | +UNKNOWN_TYPE | customOrderHeader.giftMessage | Gift Message | +EMAIL_ADDRESS | customOrderHeader.giftEmailAddress | Gift Email | diff --git a/chrome/test/data/autofill/heuristics/output/04_checkout_lowes.com.out b/chrome/test/data/autofill/heuristics/output/04_checkout_lowes.com.out index 4b2d951..71d7185 100644 --- a/chrome/test/data/autofill/heuristics/output/04_checkout_lowes.com.out +++ b/chrome/test/data/autofill/heuristics/output/04_checkout_lowes.com.out @@ -9,9 +9,9 @@ ADDRESS_HOME_CITY | city | City: | ADDRESS_HOME_STATE | state | State: | ADDRESS_HOME_ZIP | zipCode | ZIP Code: | ADDRESS_HOME_CITY | taxGeoCode | Municipality: As an additional way to make sure you receive your order, we ask that you select the name of your municipality (city, town, borough, village, etc.) followed by the county, township, or parish in which you reside. | -EMAIL_ADDRESS | email1 | E-mail Address: Example: xxx@domain.com | +EMAIL_ADDRESS | email1 | E-mail Address: | PHONE_HOME_CITY_CODE | billphone1 | Contact Phone: | -PHONE_HOME_NUMBER | billphone2 | Contact Phone: We will contact you only about your orders and deliveries. | -PHONE_HOME_NUMBER | billphone3 | Contact Phone: We will contact you only about your orders and deliveries. | +PHONE_HOME_NUMBER | billphone2 | Contact Phone: | +PHONE_HOME_NUMBER | billphone3 | Contact Phone: | EMAIL_ADDRESS | selfAddress | This is also my billing address. Please enter the phone number and e-mail address associated with this billing address.E-mail Address: Contact Phone: | 0 UNKNOWN_TYPE | save-address | | on diff --git a/chrome/test/data/autofill/heuristics/output/05_checkout_nordstrom.com.out b/chrome/test/data/autofill/heuristics/output/05_checkout_nordstrom.com.out index eba1f86..ed9bf04ba 100644 --- a/chrome/test/data/autofill/heuristics/output/05_checkout_nordstrom.com.out +++ b/chrome/test/data/autofill/heuristics/output/05_checkout_nordstrom.com.out @@ -5,7 +5,7 @@ NAME_FIRST | ctl00$mainContentPlaceHolder$billingAddressForm$firstName | First N NAME_MIDDLE_INITIAL | ctl00$mainContentPlaceHolder$billingAddressForm$middleInitial | M.I. | NAME_LAST | ctl00$mainContentPlaceHolder$billingAddressForm$lastName | Last Name | ADDRESS_BILLING_LINE1 | ctl00$mainContentPlaceHolder$billingAddressForm$address1 | Address | -ADDRESS_BILLING_LINE2 | ctl00$mainContentPlaceHolder$billingAddressForm$address2 | Address The Billing Address field is a required field. The Address field contains invalid characters. | +ADDRESS_BILLING_LINE2 | ctl00$mainContentPlaceHolder$billingAddressForm$address2 | Address | ADDRESS_BILLING_CITY | ctl00$mainContentPlaceHolder$billingAddressForm$city | City | ADDRESS_BILLING_STATE | ctl00$mainContentPlaceHolder$billingAddressForm$stateProvince | State/Province | -1 ADDRESS_BILLING_ZIP | ctl00$mainContentPlaceHolder$billingAddressForm$zipCode | Zip/Postal Code | @@ -14,7 +14,7 @@ NAME_FIRST | ctl00$mainContentPlaceHolder$shippingAddressForm$firstName | First NAME_MIDDLE_INITIAL | ctl00$mainContentPlaceHolder$shippingAddressForm$middleInitial | M.I. | NAME_LAST | ctl00$mainContentPlaceHolder$shippingAddressForm$lastName | Last Name | ADDRESS_HOME_LINE1 | ctl00$mainContentPlaceHolder$shippingAddressForm$address1 | Address | -ADDRESS_HOME_LINE2 | ctl00$mainContentPlaceHolder$shippingAddressForm$address2 | Address The Shipping Address field is a required field. The Address field contains invalid characters. | +ADDRESS_HOME_LINE2 | ctl00$mainContentPlaceHolder$shippingAddressForm$address2 | Address | ADDRESS_HOME_CITY | ctl00$mainContentPlaceHolder$shippingAddressForm$city | City | ADDRESS_HOME_STATE | ctl00$mainContentPlaceHolder$shippingAddressForm$stateProvince | State/Province | -1 ADDRESS_HOME_ZIP | ctl00$mainContentPlaceHolder$shippingAddressForm$zipCode | Zip/Postal Code | diff --git a/chrome/test/data/autofill/heuristics/output/05_checkout_petco.com.out b/chrome/test/data/autofill/heuristics/output/05_checkout_petco.com.out index edee471..ed7e6cc 100644 --- a/chrome/test/data/autofill/heuristics/output/05_checkout_petco.com.out +++ b/chrome/test/data/autofill/heuristics/output/05_checkout_petco.com.out @@ -3,9 +3,9 @@ NAME_LAST | ctl00$ctl00$cphBody$cphBody$txtSA_LastName | Last Name * | ADDRESS_HOME_LINE1 | ctl00$ctl00$cphBody$cphBody$txtSA_Address1 | Address Line 1 * | ADDRESS_HOME_LINE2 | ctl00$ctl00$cphBody$cphBody$txtSA_Address2 | Address Line 2 | ADDRESS_HOME_CITY | ctl00$ctl00$cphBody$cphBody$txtSA_City | City * | -ADDRESS_HOME_STATE | ctl00$ctl00$cphBody$cphBody$ddlSA_State | * | +ADDRESS_HOME_STATE | ctl00$ctl00$cphBody$cphBody$ddlSA_State | State * | ADDRESS_HOME_ZIP | ctl00$ctl00$cphBody$cphBody$txtSA_Zip | ZIP Code * | -PHONE_HOME_CITY_CODE | ctl00$ctl00$cphBody$cphBody$txtSA_Phone1 | * | +PHONE_HOME_CITY_CODE | ctl00$ctl00$cphBody$cphBody$txtSA_Phone1 | Phone Number * | PHONE_HOME_NUMBER | ctl00$ctl00$cphBody$cphBody$txtSA_Phone2 | ZIP Code * | PHONE_HOME_NUMBER | ctl00$ctl00$cphBody$cphBody$txtSA_Phone3 | ZIP Code * | UNKNOWN_TYPE | ctl00$ctl00$cphBody$cphBody$txtSA_PhoneExt | Ext. | diff --git a/chrome/test/data/autofill/heuristics/output/06_checkout_qvc.com.out b/chrome/test/data/autofill/heuristics/output/06_checkout_qvc.com.out index 7f4dd3f..165b652 100644 --- a/chrome/test/data/autofill/heuristics/output/06_checkout_qvc.com.out +++ b/chrome/test/data/autofill/heuristics/output/06_checkout_qvc.com.out @@ -7,11 +7,11 @@ ADDRESS_BILLING_LINE1 | BilltoAddress1 | * Address Line 1: | ADDRESS_BILLING_LINE2 | BilltoAddress2 | Address Line 2: | ADDRESS_BILLING_CITY | BilltoCity | City: | ADDRESS_BILLING_STATE | BilltoState | State/Province: | AL -ADDRESS_BILLING_ZIP | BilltoZipCode | * ZIP/Postal Code: ZIP/Postal Code is a required field | +ADDRESS_BILLING_ZIP | BilltoZipCode | * ZIP/Postal Code: | ADDRESS_BILLING_COUNTRY | BilltoCountry | * Country: | US PHONE_HOME_CITY_CODE | BilltoHpArea | * Home Phone: | -PHONE_HOME_NUMBER | BilltoHpExchange | * Home Phone:Home Phone is a required field | -UNKNOWN_TYPE | BilltoHpExt | * Home Phone:Home Phone is a required field | +PHONE_HOME_NUMBER | BilltoHpExchange | * Home Phone: | +UNKNOWN_TYPE | BilltoHpExt | * Home Phone: | PHONE_HOME_CITY_CODE | BilltoWpArea | Work Phone: | PHONE_HOME_NUMBER | BilltoWpExchange | Work Phone: | UNKNOWN_TYPE | BilltoWpExt | Work Phone: | @@ -20,5 +20,5 @@ ADDRESS_HOME_LINE1 | ShiptoAddress1 | * Address Line 1: | ADDRESS_HOME_LINE2 | ShiptoAddress2 | Address Line 2: | ADDRESS_HOME_CITY | ShiptoCity | City: | ADDRESS_HOME_STATE | ShiptoState | State/Province: | AL -ADDRESS_HOME_ZIP | ShiptoZipCode | * Postal Code: ZIP/Postal Code is a required field | +ADDRESS_HOME_ZIP | ShiptoZipCode | * Postal Code: | ADDRESS_HOME_COUNTRY | ShiptoCountry | * Country: | US diff --git a/chrome/test/data/autofill/heuristics/output/06_checkout_urbanoutfitters.com.out b/chrome/test/data/autofill/heuristics/output/06_checkout_urbanoutfitters.com.out index 82e8d97..b4fbe8e 100644 --- a/chrome/test/data/autofill/heuristics/output/06_checkout_urbanoutfitters.com.out +++ b/chrome/test/data/autofill/heuristics/output/06_checkout_urbanoutfitters.com.out @@ -1,4 +1,4 @@ -UNKNOWN_TYPE | shipto | Select a Saved Shipping Addressenter a new shipping address | +UNKNOWN_TYPE | shipto | Select a Saved Shipping Address | NAME_FIRST | shippingFirstName | | First Name NAME_LAST | shippingLastName | | Last Name ADDRESS_HOME_LINE1 | shippingAddress | | Street Address @@ -19,7 +19,7 @@ ADDRESS_BILLING_ZIP | billingPostalCode | | Postal Code ADDRESS_BILLING_COUNTRY | billingCountries | | PHONE_HOME_WHOLE_NUMBER | billingPhone | | Phone PHONE_HOME_WHOLE_NUMBER | altBillingPhone | | Alternate Phone (optional) -UNKNOWN_TYPE | savedCreditCard | enter a new credit card | +UNKNOWN_TYPE | savedCreditCard | | UNKNOWN_TYPE | payment_cardtype | | CREDIT_CARD_NUMBER | payment_acctnum | | Card Number (no spaces or dashes) CREDIT_CARD_EXP_MONTH | expmonth | | diff --git a/chrome/test/data/autofill/heuristics/output/09_register_ebay.com.out b/chrome/test/data/autofill/heuristics/output/09_register_ebay.com.out index c0be21f..4627851 100644 --- a/chrome/test/data/autofill/heuristics/output/09_register_ebay.com.out +++ b/chrome/test/data/autofill/heuristics/output/09_register_ebay.com.out @@ -6,7 +6,7 @@ ADDRESS_HOME_CITY | city | City | ADDRESS_HOME_STATE | state | State / Province | default ADDRESS_HOME_ZIP | zip | ZIP / Postal code | ADDRESS_HOME_COUNTRY | countryId | Country or region | 1 -PHONE_HOME_CITY_CODE | dayphone1 | Primary telephone number - - | +PHONE_HOME_CITY_CODE | dayphone1 | Primary telephone number | PHONE_HOME_NUMBER | dayphone2 | - | PHONE_HOME_NUMBER | dayphone3 | - | UNKNOWN_TYPE | dayphone4 | ext.: | diff --git a/chrome/test/data/autofill/heuristics/output/09_register_ecomm.dell.com.out b/chrome/test/data/autofill/heuristics/output/09_register_ecomm.dell.com.out index 8ad5d37..498b239 100644 --- a/chrome/test/data/autofill/heuristics/output/09_register_ecomm.dell.com.out +++ b/chrome/test/data/autofill/heuristics/output/09_register_ecomm.dell.com.out @@ -6,5 +6,5 @@ ADDRESS_HOME_LINE2 | address$ctl00$address$addressValidator$_EditView$line2 | Ad ADDRESS_HOME_CITY | address$ctl00$address$addressValidator$_EditView$city | CityState | ADDRESS_HOME_STATE | address$ctl00$address$addressValidator$_EditView$region$ctl01 | CityState | ADDRESS_HOME_ZIP | address$ctl00$address$addressValidator$_EditView$postal_code | Zip Code4-digit Ext. | -UNKNOWN_TYPE | address$ctl00$address$addressValidator$_EditView$postal_code2 | - | +UNKNOWN_TYPE | address$ctl00$address$addressValidator$_EditView$postal_code2 | Zip Code4-digit Ext. | EMAIL_ADDRESS | email$ctl07 | Email Address (used to sign into your account) | diff --git a/chrome/test/data/autofill/heuristics/output/10_register_jbox.com.out b/chrome/test/data/autofill/heuristics/output/10_register_jbox.com.out index d44278d..ff181cc 100644 --- a/chrome/test/data/autofill/heuristics/output/10_register_jbox.com.out +++ b/chrome/test/data/autofill/heuristics/output/10_register_jbox.com.out @@ -1,5 +1,5 @@ -NAME_FIRST | firstname | First | -NAME_LAST | lastname | Last | +NAME_FIRST | firstname | FirstLast | +NAME_LAST | lastname | | ADDRESS_HOME_LINE1 | address1 | Street Address | ADDRESS_HOME_CITY | city | City | ADDRESS_HOME_STATE | state | State / Province / Region | diff --git a/chrome/test/data/autofill/heuristics/output/12_register_officedepot.com.out b/chrome/test/data/autofill/heuristics/output/12_register_officedepot.com.out index 58b2ebf..56dc52f 100644 --- a/chrome/test/data/autofill/heuristics/output/12_register_officedepot.com.out +++ b/chrome/test/data/autofill/heuristics/output/12_register_officedepot.com.out @@ -17,7 +17,7 @@ PHONE_FAX_NUMBER | addrsForm[0].faxNumber3 | - | EMAIL_ADDRESS | addrsForm[0].email | *Email Address: | UNKNOWN_TYPE | paymentFormInfo.creditCardType | Credit Card Type: | CREDIT_CARD_NUMBER | paymentFormInfo.creditCardNumber | Credit Card Number: | -CREDIT_CARD_EXP_MONTH | paymentFormInfo.creditCardExpMonth | Expiration Date: / (mm/yyyy) | +CREDIT_CARD_EXP_MONTH | paymentFormInfo.creditCardExpMonth | Expiration Date: | CREDIT_CARD_EXP_4_DIGIT_YEAR | paymentFormInfo.creditCardExpYear | / | -1 UNKNOWN_TYPE | paymentFormInfo.creditCardCvv | CID | NAME_FIRST | addrsForm[2].firstName | *First Name: | diff --git a/chrome/test/data/autofill/heuristics/output/13_register_supershuttle.com.out b/chrome/test/data/autofill/heuristics/output/13_register_supershuttle.com.out index 435f639..879489a 100644 --- a/chrome/test/data/autofill/heuristics/output/13_register_supershuttle.com.out +++ b/chrome/test/data/autofill/heuristics/output/13_register_supershuttle.com.out @@ -2,6 +2,6 @@ EMAIL_ADDRESS | ctl00$cphLeft$InnerLogin1$txtEmailAddress | Email Address | EMAIL_ADDRESS | ctl00$cphRight$Registration1$txtEmailAddress | Email Address | NAME_FIRST | ctl00$cphRight$Registration1$txtFirstName | First Name | NAME_LAST | ctl00$cphRight$Registration1$txtLastName | Last Name | -PHONE_HOME_WHOLE_NUMBER | ctl00$cphRight$Registration1$txtCellPhone | If outside the US (Country Code/Phone Number) | +PHONE_HOME_WHOLE_NUMBER | ctl00$cphRight$Registration1$txtCellPhone | Contact or Cell Phone Number | PHONE_HOME_COUNTRY_CODE | ctl00$cphRight$Registration1$txtCountryCode | If outside the US (Country Code/Phone Number) | -PHONE_HOME_CITY_AND_NUMBER | ctl00$cphRight$Registration1$txtIntPhoneNumber | If outside the US (Country Code/Phone Number) | +PHONE_HOME_CITY_AND_NUMBER | ctl00$cphRight$Registration1$txtIntPhoneNumber | Contact or Cell Phone Number | diff --git a/chrome/test/data/autofill/heuristics/output/14_register_yahoo.com.out b/chrome/test/data/autofill/heuristics/output/14_register_yahoo.com.out index 08dc1ac..f8dda04 100644 --- a/chrome/test/data/autofill/heuristics/output/14_register_yahoo.com.out +++ b/chrome/test/data/autofill/heuristics/output/14_register_yahoo.com.out @@ -1,9 +1,9 @@ -NAME_FIRST | firstname | | -NAME_LAST | secondname | | -UNKNOWN_TYPE | gender | | -UNKNOWN_TYPE | mm | | -UNKNOWN_TYPE | dd | | -UNKNOWN_TYPE | yyyy | | +NAME_FIRST | firstname | Name | +NAME_LAST | secondname | Name | +UNKNOWN_TYPE | gender | Gender | +UNKNOWN_TYPE | mm | Birthday | +UNKNOWN_TYPE | dd | Birthday | +UNKNOWN_TYPE | yyyy | Birthday | ADDRESS_HOME_COUNTRY | country | Country | us ADDRESS_HOME_ZIP | postalcode | Postal Code | EMAIL_ADDRESS | yahooid | Yahoo! ID and Email | diff --git a/chrome/test/data/autofill/heuristics/output/15_crbug_40687.out b/chrome/test/data/autofill/heuristics/output/15_crbug_40687.out index 53f26fc..556f80c 100644 --- a/chrome/test/data/autofill/heuristics/output/15_crbug_40687.out +++ b/chrome/test/data/autofill/heuristics/output/15_crbug_40687.out @@ -10,6 +10,6 @@ PHONE_HOME_WHOLE_NUMBER | user[phone_first] | Phone Number | EMAIL_ADDRESS | user[email] | Email Address | EMAIL_ADDRESS | user[email_confirm] | Confirm Email Address | CREDIT_CARD_NUMBER | payment[cc_number] | Credit Card Number | -CREDIT_CARD_EXP_MONTH | payment[cc_expmo] | MM (TWO DIGIT MONTH) | -CREDIT_CARD_EXP_4_DIGIT_YEAR | payment[cc_expyr] | YYYY (FOUR DIGIT YEAR) | -UNKNOWN_TYPE | payment[sigpanel] | What's this? | +CREDIT_CARD_EXP_MONTH | payment[cc_expmo] | Expiration Month | +CREDIT_CARD_EXP_4_DIGIT_YEAR | payment[cc_expyr] | Expiration Year | +UNKNOWN_TYPE | payment[sigpanel] | CVV2/Panel Code | diff --git a/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out b/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out index 9cd5540..a31a732 100644 --- a/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out +++ b/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out @@ -1,24 +1,24 @@ COMPANY_NAME | ecomms_company_name | Company Name: | -UNKNOWN_TYPE | ecomms_title | Title: * | -NAME_FIRST | ecomms_first_name | First Name: * | -NAME_LAST | ecomms_last_name | Last Name: * | -PHONE_HOME_WHOLE_NUMBER | ecomms_telephone | Telephone: * | -PHONE_HOME_WHOLE_NUMBER | ecomms_mobile | Mobile: * | -EMAIL_ADDRESS | ecomms_email | Email Address: * | x@foo.com -ADDRESS_HOME_LINE1 | ecomms_address1 | Address1: * | +UNKNOWN_TYPE | ecomms_title | Title: | +NAME_FIRST | ecomms_first_name | First Name: | +NAME_LAST | ecomms_last_name | Last Name: | +PHONE_HOME_WHOLE_NUMBER | ecomms_telephone | Telephone: | +PHONE_HOME_WHOLE_NUMBER | ecomms_mobile | Mobile: | +EMAIL_ADDRESS | ecomms_email | Email Address: | x@foo.com +ADDRESS_HOME_LINE1 | ecomms_address1 | Address1: | ADDRESS_HOME_LINE2 | ecomms_address2 | Address2: | -ADDRESS_HOME_CITY | ecomms_town | Town / City: * | -ADDRESS_HOME_STATE | ecomms_county | County: * | -ADDRESS_HOME_ZIP | ecomms_postcode | Postcode: * | +ADDRESS_HOME_CITY | ecomms_town | Town / City: | +ADDRESS_HOME_STATE | ecomms_county | County: | +ADDRESS_HOME_ZIP | ecomms_postcode | Postcode: | ADDRESS_HOME_COUNTRY | ecomms_country | Country: | 224 -UNKNOWN_TYPE | del_title | Title: * | -NAME_FIRST | del_first_name | First Name: * | -NAME_LAST | del_last_name | Last Name: * | -PHONE_HOME_WHOLE_NUMBER | del_telephone | Telephone: * | -PHONE_HOME_WHOLE_NUMBER | del_mobile | Mobile: * | -ADDRESS_HOME_LINE1 | del_address1 | Address1: * | +UNKNOWN_TYPE | del_title | Title: | +NAME_FIRST | del_first_name | First Name: | +NAME_LAST | del_last_name | Last Name: | +PHONE_HOME_WHOLE_NUMBER | del_telephone | Telephone: | +PHONE_HOME_WHOLE_NUMBER | del_mobile | Mobile: | +ADDRESS_HOME_LINE1 | del_address1 | Address1: | ADDRESS_HOME_LINE2 | del_address2 | Address2: | -ADDRESS_HOME_CITY | del_town | Town / City: * | -ADDRESS_HOME_STATE | del_county | County: * | -ADDRESS_HOME_ZIP | del_postcode | Postcode: * | +ADDRESS_HOME_CITY | del_town | Town / City: | +ADDRESS_HOME_STATE | del_county | County: | +ADDRESS_HOME_ZIP | del_postcode | Postcode: | ADDRESS_HOME_COUNTRY | ecomms_del_country | Country: | 224 diff --git a/chrome/test/data/autofill/heuristics/output/16_crbug_87517.out b/chrome/test/data/autofill/heuristics/output/16_crbug_87517.out new file mode 100644 index 0000000..290b080 --- /dev/null +++ b/chrome/test/data/autofill/heuristics/output/16_crbug_87517.out @@ -0,0 +1,32 @@ +NAME_FIRST | dnrfirst | Name * | +NAME_LAST | dnrlast | Name * | +COMPANY_NAME | company | Company | +ADDRESS_HOME_LINE1 | dadd1 | Address 1 * | +ADDRESS_HOME_LINE2 | dadd2 | Address 2 | +ADDRESS_HOME_CITY | dcity | City / State / Zip * | +ADDRESS_HOME_STATE | dstate | Name * | AL +ADDRESS_HOME_ZIP | dzip | Name * | +ADDRESS_HOME_COUNTRY | CC_COUNTRY | Country | United States +PHONE_HOME_WHOLE_NUMBER | dphone | Telephone | +EMAIL_ADDRESS | demail | Email * | +UNKNOWN_TYPE | amt | $ | +UNKNOWN_TYPE | ccrecurring | I would like to make this a recurring donation deducted | Monthly +UNKNOWN_TYPE | remLen | ( You may enter up to 500 characters. ) | 500 +NAME_FULL | Tribute_Name | Name: | +UNKNOWN_TYPE | Tribute_occasion | Occasion: | +NAME_FULL | Tribute_NotifyName | Name: | +EMAIL_ADDRESS | Tribute_Email | Email: | +ADDRESS_HOME_LINE1 | Tribute_NotifyAddr | Street: | +ADDRESS_HOME_CITY | Tribute_NotifyCity | City / St. / Zip: | +ADDRESS_HOME_STATE | Tribute_NotifyState | City / St. / Zip: | +ADDRESS_HOME_ZIP | Tribute_NotifyZip | City / St. / Zip: | +UNKNOWN_TYPE | cctype | Credit Card Type * | Visa +CREDIT_CARD_NUMBER | ccard | Credit Card Number * | +UNKNOWN_TYPE | csc | CSC Number * What Is This? | +CREDIT_CARD_EXP_MONTH | ExpMon | Month | 1 +CREDIT_CARD_EXP_4_DIGIT_YEAR | ExpYear | Year | 11 +ADDRESS_HOME_LINE1 | CC_Addr | Address 1 * | +ADDRESS_HOME_LINE2 | CC_Addr2 | Address 2 | +ADDRESS_HOME_CITY | CC_City | City / State / Zip * | +ADDRESS_HOME_STATE | CC_State | Credit Card Information | +ADDRESS_HOME_ZIP | CC_Zip | Credit Card Information | |