summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/form_manager.cc
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 /chrome/renderer/form_manager.cc
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
Diffstat (limited to 'chrome/renderer/form_manager.cc')
-rw-r--r--chrome/renderer/form_manager.cc25
1 files changed, 22 insertions, 3 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);
}
}