diff options
-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\"/>" |