diff options
Diffstat (limited to 'chrome/renderer/form_manager.cc')
-rw-r--r-- | chrome/renderer/form_manager.cc | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/chrome/renderer/form_manager.cc b/chrome/renderer/form_manager.cc index 743d95c..9731e7a 100644 --- a/chrome/renderer/form_manager.cc +++ b/chrome/renderer/form_manager.cc @@ -7,15 +7,23 @@ #include "base/logging.h" #include "base/string_util.h" #include "base/stl_util-inl.h" +#include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" +#include "third_party/WebKit/WebKit/chromium/public/WebElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" +#include "third_party/WebKit/WebKit/chromium/public/WebLabelElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebNode.h" +#include "third_party/WebKit/WebKit/chromium/public/WebNodeList.h" #include "third_party/WebKit/WebKit/chromium/public/WebString.h" #include "third_party/WebKit/WebKit/chromium/public/WebVector.h" +using WebKit::WebDocument; +using WebKit::WebElement; using WebKit::WebFormElement; using WebKit::WebFrame; using WebKit::WebInputElement; +using WebKit::WebLabelElement; using WebKit::WebNode; +using WebKit::WebNodeList; using WebKit::WebString; using WebKit::WebVector; @@ -175,6 +183,7 @@ void FormManager::FormElementToFormData(WebFrame* frame, !input_element.isEnabledFormControl()) continue; + form->labels.push_back(LabelForElement(input_element)); form->elements.push_back(input_element.nameForAutofill()); form->values.push_back(input_element.value()); @@ -185,3 +194,17 @@ void FormManager::FormElementToFormData(WebFrame* frame, form->submit = input_element.nameForAutofill(); } } + +// static +string16 FormManager::LabelForElement(const WebInputElement& element) { + WebNodeList labels = element.document().getElementsByTagName("label"); + for (unsigned i = 0; i < labels.length(); ++i) { + WebElement e = labels.item(i).toElement<WebElement>(); + if (e.hasTagName("label")) { + WebLabelElement label = e.toElement<WebLabelElement>(); + if (label.correspondingControl() == element) + return label.innerText(); + } + } + return string16(); +} |