diff options
author | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-09 05:13:42 +0000 |
---|---|---|
committer | dhollowa@chromium.org <dhollowa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-04-09 05:13:42 +0000 |
commit | 10ed7949bbdf64015100a3607faa2c0d0a2a1d10 (patch) | |
tree | 0fd5ccfebc69ebb8030da06c86bc7a3f9c4c5c6c | |
parent | d3ee712e7e7f401cd0d9bc24f03a5a290c9516cc (diff) | |
download | chromium_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.cc | 25 | ||||
-rw-r--r-- | chrome/renderer/form_manager_unittest.cc | 15 |
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\"/>" |