summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authordhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-22 01:48:05 +0000
committerdhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-22 01:48:05 +0000
commit0fba00a4b24f3dcd747f958a3c52e630b3747c4f (patch)
tree3d8bc38524a6cdd74c44f403fb99c540cd9bc9be /chrome/renderer
parent796382b52dc4c286165741f0ac63401eeb7e63a6 (diff)
downloadchromium_src-0fba00a4b24f3dcd747f958a3c52e630b3747c4f.zip
chromium_src-0fba00a4b24f3dcd747f958a3c52e630b3747c4f.tar.gz
chromium_src-0fba00a4b24f3dcd747f958a3c52e630b3747c4f.tar.bz2
Autofill heuristics checkout files for 06_checkout_qvc.com.html
Changes regex strings to match phone prefix and extension. Adds <li> label inferencing. BUG=86603 TEST=FormStructureBrowserTest.* with 06_checkout_qvc.com.html Review URL: http://codereview.chromium.org/7206048 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@89953 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/autofill/form_manager.cc21
-rw-r--r--chrome/renderer/autofill/form_manager_browsertest.cc37
2 files changed, 57 insertions, 1 deletions
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);
}