diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-22 01:48:05 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-06-22 01:48:05 +0000 |
commit | 0fba00a4b24f3dcd747f958a3c52e630b3747c4f (patch) | |
tree | 3d8bc38524a6cdd74c44f403fb99c540cd9bc9be /chrome/renderer | |
parent | 796382b52dc4c286165741f0ac63401eeb7e63a6 (diff) | |
download | chromium_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.cc | 21 | ||||
-rw-r--r-- | chrome/renderer/autofill/form_manager_browsertest.cc | 37 |
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); } |