summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/autofill/autofill_resources.grd6
-rw-r--r--chrome/renderer/autofill/form_manager.cc21
-rw-r--r--chrome/renderer/autofill/form_manager_browsertest.cc37
-rw-r--r--chrome/test/data/autofill/heuristics/output/06_checkout_qvc.com.out12
-rw-r--r--chrome/test/data/autofill/heuristics/output/15_crbug_53075.out18
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