summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 05:13:42 +0000
committerdhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-09 05:13:42 +0000
commit10ed7949bbdf64015100a3607faa2c0d0a2a1d10 (patch)
tree0fd5ccfebc69ebb8030da06c86bc7a3f9c4c5c6c
parentd3ee712e7e7f401cd0d9bc24f03a5a290c9516cc (diff)
downloadchromium_src-10ed7949bbdf64015100a3607faa2c0d0a2a1d10.zip
chromium_src-10ed7949bbdf64015100a3607faa2c0d0a2a1d10.tar.gz
chromium_src-10ed7949bbdf64015100a3607faa2c0d0a2a1d10.tar.bz2
AutoFill optimization for form label scraping.
This replaces calls to |innnerText()| with calls to |nodeValue()| for performance gains. BUG=40306 TEST=FormManagerTest Review URL: http://codereview.chromium.org/1620007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44059 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/form_manager.cc25
-rw-r--r--chrome/renderer/form_manager_unittest.cc15
2 files changed, 27 insertions, 13 deletions
diff --git a/chrome/renderer/form_manager.cc b/chrome/renderer/form_manager.cc
index cd5af20..d2c80b8 100644
--- a/chrome/renderer/form_manager.cc
+++ b/chrome/renderer/form_manager.cc
@@ -184,6 +184,25 @@ bool FormManager::WebFormElementToFormData(const WebFormElement& element,
iter->second->set_label(GetChildText(label));
}
+ // Loop through the form control elements, extracting the label text from the
+ // DOM. We use the |fields_extracted| vector to make sure we assign the
+ // extracted label to the correct field, as it's possible |form_fields| will
+ // not contain all of the elements in |control_elements|.
+ for (size_t i = 0, field_idx = 0;
+ i < control_elements.size() && field_idx < form_fields.size(); ++i) {
+ // This field didn't meet the requirements, so don't try to find a label for
+ // it.
+ if (!fields_extracted[i])
+ continue;
+
+ const WebFormControlElement& control_element = control_elements[i];
+ if (form_fields[field_idx]->label().empty())
+ form_fields[field_idx]->set_label(
+ FormManager::InferLabelForElement(control_element));
+
+ ++field_idx;
+ }
+
// Copy the created FormFields into the resulting FormData object.
for (ScopedVector<FormField>::const_iterator iter = form_fields.begin();
iter != form_fields.end(); ++iter) {
@@ -479,7 +498,7 @@ string16 FormManager::InferLabelForElement(
if (previous.isElementNode()) {
WebElement element = previous.toElement<WebElement>();
if (element.hasTagName("p")) {
- inferred_label = element.innerText();
+ inferred_label = GetChildText(element);
TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label);
}
}
@@ -493,7 +512,7 @@ string16 FormManager::InferLabelForElement(
if (!previous.isNull() && previous.isElementNode()) {
WebElement element = previous.toElement<WebElement>();
if (element.hasTagName("p")) {
- inferred_label = element.innerText();
+ inferred_label = GetChildText(element);
TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label);
}
}
@@ -516,7 +535,7 @@ string16 FormManager::InferLabelForElement(
if (!previous.isNull() && previous.isElementNode()) {
element = previous.toElement<WebElement>();
if (element.hasTagName("td")) {
- inferred_label = element.innerText();
+ inferred_label = GetChildText(element);
TrimWhitespace(inferred_label, TRIM_ALL, &inferred_label);
}
}
diff --git a/chrome/renderer/form_manager_unittest.cc b/chrome/renderer/form_manager_unittest.cc
index 909d47b..4da73aa 100644
--- a/chrome/renderer/form_manager_unittest.cc
+++ b/chrome/renderer/form_manager_unittest.cc
@@ -516,8 +516,7 @@ TEST_F(FormManagerTest, InvalidLabels) {
// This test has three form control elements, only one of which has a label
// element associated with it. The first element is disabled because of the
// autocomplete=off attribute.
-// http://crbug.com/40306
-TEST_F(FormManagerTest, DISABLED_OneLabelElementFirstControlElementDisabled) {
+TEST_F(FormManagerTest, OneLabelElementFirstControlElementDisabled) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
" First name:"
" <INPUT type=\"text\" id=\"firstname\" autocomplete=\"off\"/>"
@@ -562,8 +561,7 @@ TEST_F(FormManagerTest, DISABLED_OneLabelElementFirstControlElementDisabled) {
fields[2]);
}
-// http://crbug.com/40306
-TEST_F(FormManagerTest, DISABLED_LabelsInferredFromText) {
+TEST_F(FormManagerTest, LabelsInferredFromText) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
" First name:"
" <INPUT type=\"text\" id=\"firstname\" value=\"John\"/>"
@@ -606,8 +604,7 @@ TEST_F(FormManagerTest, DISABLED_LabelsInferredFromText) {
fields[2]);
}
-// http://crbug.com/40306
-TEST_F(FormManagerTest, DISABLED_LabelsInferredFromParagraph) {
+TEST_F(FormManagerTest, LabelsInferredFromParagraph) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
" <P>First name:</P><INPUT type=\"text\" "
" id=\"firstname\" value=\"John\"/>"
@@ -650,8 +647,7 @@ TEST_F(FormManagerTest, DISABLED_LabelsInferredFromParagraph) {
fields[2]);
}
-// http://crbug.com/40306
-TEST_F(FormManagerTest, DISABLED_LabelsInferredFromTableCell) {
+TEST_F(FormManagerTest, LabelsInferredFromTableCell) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
"<TABLE>"
" <TR>"
@@ -705,8 +701,7 @@ TEST_F(FormManagerTest, DISABLED_LabelsInferredFromTableCell) {
fields[2]);
}
-// http://crbug.com/40306
-TEST_F(FormManagerTest, DISABLED_InferredLabelsWithSameName) {
+TEST_F(FormManagerTest, InferredLabelsWithSameName) {
LoadHTML("<FORM name=\"TestForm\" action=\"http://cnn.com\" method=\"post\">"
" Address Line 1:"
" <INPUT type=\"text\" name=\"Address\"/>"