diff options
5 files changed, 75 insertions, 19 deletions
diff --git a/chrome/browser/autofill/autofill_resources.grd b/chrome/browser/autofill/autofill_resources.grd index 31662b4..309a363 100644 --- a/chrome/browser/autofill/autofill_resources.grd +++ b/chrome/browser/autofill/autofill_resources.grd @@ -106,7 +106,7 @@ last.*name|lname|surname|last$|secondname<!-- de-DE -->|nachname<!-- es -->|apellidos<!-- fr-FR -->|famille|^nom<!-- it-IT -->|cognome<!-- ja-JP -->|姓<!-- pt-BR, pt-PT -->|morada|apelidos|surename|sobrenome<!-- ru -->|Фамилия<!-- ko-KR -->|성[^명]? </message> <message name="IDS_AUTOFILL_PHONE_RE"> - phone<!-- de-DE -->|telefonnummer<!-- es -->|telefono|teléfono<!-- fr-FR -->|telfixe<!-- ja-JP -->|電話<!-- pt-BR, pt-PT -->|telefone|telemovel<!-- ru -->|телефон<!-- zh-CN -->|电话<!-- ko-KR -->|(전화|핸드폰|휴대폰|휴대전화)(.?번호)? + phone|mobile<!-- de-DE -->|telefonnummer<!-- es -->|telefono|teléfono<!-- fr-FR -->|telfixe<!-- ja-JP -->|電話<!-- pt-BR, pt-PT -->|telefone|telemovel<!-- ru -->|телефон<!-- zh-CN -->|电话<!-- ko-KR -->|(전화|핸드폰|휴대폰|휴대전화)(.?번호)? </message> <message name="IDS_AUTOFILL_COUNTRY_CODE_RE"> country.*code|ccode|_cc @@ -127,13 +127,13 @@ ^-$ </message> <message name="IDS_AUTOFILL_PHONE_PREFIX_RE"> - prefix<!-- fr-FR -->|preselection<!-- pt-BR, pt-PT -->|ddd + prefix|exchange<!-- fr-FR -->|preselection<!-- pt-BR, pt-PT -->|ddd </message> <message name="IDS_AUTOFILL_PHONE_SUFFIX_RE"> suffix </message> <message name="IDS_AUTOFILL_PHONE_EXTENSION_RE"> - \bext|extension<!-- pt-BR, pt-PT -->|ramal + \bext|ext\b|extension<!-- pt-BR, pt-PT -->|ramal </message> </messages> </release> diff --git a/chrome/renderer/autofill/form_manager.cc b/chrome/renderer/autofill/form_manager.cc index d63fd46..327f77c 100644 --- a/chrome/renderer/autofill/form_manager.cc +++ b/chrome/renderer/autofill/form_manager.cc @@ -245,6 +245,22 @@ string16 InferLabelFromPrevious(const WebFormControlElement& element) { } // Helper for |InferLabelForElement()| that infers a label, if possible, from +// enclosing list item, +// e.g. <li>Some Text<input ...><input ...><input ...></tr> +string16 InferLabelFromListItem(const WebFormControlElement& element) { + WebNode parent = element.parentNode(); + while (!parent.isNull() && parent.isElementNode() && + !parent.to<WebElement>().hasTagName("li")) { + parent = parent.parentNode(); + } + + if (!parent.isNull() && HasTagName(parent, "li")) + return FindChildText(parent.to<WebElement>()); + + return string16(); +} + +// Helper for |InferLabelForElement()| that infers a label, if possible, from // surrounding table structure, // e.g. <tr><td>Some Text</td><td><input ...></td></tr> // or <tr><th>Some Text</th><td><input ...></td></tr> @@ -358,6 +374,11 @@ string16 InferLabelForElement(const WebFormControlElement& element) { if (!inferred_label.empty()) return inferred_label; + // If we didn't find a label, check for list item case. + inferred_label = InferLabelFromListItem(element); + if (!inferred_label.empty()) + return inferred_label; + // If we didn't find a label, check for table cell case. inferred_label = InferLabelFromTableColumn(element); if (!inferred_label.empty()) diff --git a/chrome/renderer/autofill/form_manager_browsertest.cc b/chrome/renderer/autofill/form_manager_browsertest.cc index fc0cd22..522fda6 100644 --- a/chrome/renderer/autofill/form_manager_browsertest.cc +++ b/chrome/renderer/autofill/form_manager_browsertest.cc @@ -1548,7 +1548,42 @@ TEST_F(FormManagerTest, LabelsInferredFromTableRow) { " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" " </TD>" " </TR>" - "</TABLE>" + "</TABLE>", + labels, names, values); +} + +// Verify that we correctly infer labels when enclosed within a list item. +TEST_F(FormManagerTest, LabelsInferredFromListItem) { + std::vector<string16> labels, names, values; + + labels.push_back(ASCIIToUTF16("* Home Phone")); + names.push_back(ASCIIToUTF16("areacode")); + values.push_back(ASCIIToUTF16("415")); + + labels.push_back(ASCIIToUTF16("* Home Phone")); + names.push_back(ASCIIToUTF16("prefix")); + values.push_back(ASCIIToUTF16("555")); + + labels.push_back(ASCIIToUTF16("* Home Phone")); + names.push_back(ASCIIToUTF16("suffix")); + values.push_back(ASCIIToUTF16("1212")); + + ExpectLabels( + "<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">" + "<DIV>" + " <LI>" + " <SPAN>Bogus</SPAN>" + " </LI>" + " <LI>" + " <LABEL><EM>*</EM> Home Phone</LABEL>" + " <INPUT type=\"text\" id=\"areacode\" value=\"415\"/>" + " <INPUT type=\"text\" id=\"prefix\" value=\"555\"/>" + " <INPUT type=\"text\" id=\"suffix\" value=\"1212\"/>" + " </LI>" + " <LI>" + " <INPUT type=\"submit\" name=\"reply-send\" value=\"Send\"/>" + " </LI>" + "</DIV>" "</FORM>", labels, names, values); } 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 ff33ab9..6b78288 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 @@ -9,12 +9,12 @@ ADDRESS_BILLING_CITY ADDRESS_BILLING_STATE ADDRESS_BILLING_ZIP ADDRESS_BILLING_COUNTRY -PHONE_HOME_WHOLE_NUMBER -NAME_FIRST -NAME_LAST -PHONE_HOME_WHOLE_NUMBER -NAME_FIRST -NAME_LAST +PHONE_HOME_CITY_CODE +PHONE_HOME_NUMBER +UNKNOWN_TYPE +PHONE_HOME_CITY_CODE +PHONE_HOME_NUMBER +UNKNOWN_TYPE UNKNOWN_TYPE ADDRESS_HOME_LINE1 ADDRESS_HOME_LINE2 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 4925aae..e4303a5 100644 --- a/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out +++ b/chrome/test/data/autofill/heuristics/output/15_crbug_53075.out @@ -1,7 +1,7 @@ COMPANY_NAME UNKNOWN_TYPE -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER +NAME_FIRST +NAME_LAST PHONE_HOME_WHOLE_NUMBER PHONE_HOME_WHOLE_NUMBER EMAIL_ADDRESS @@ -12,13 +12,13 @@ ADDRESS_HOME_STATE ADDRESS_HOME_ZIP ADDRESS_HOME_COUNTRY UNKNOWN_TYPE +NAME_FIRST +NAME_LAST PHONE_HOME_WHOLE_NUMBER PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER -PHONE_HOME_WHOLE_NUMBER +ADDRESS_HOME_LINE1 +ADDRESS_HOME_LINE2 +ADDRESS_HOME_CITY +ADDRESS_HOME_STATE +ADDRESS_HOME_ZIP ADDRESS_HOME_COUNTRY |