diff options
Diffstat (limited to 'chrome/renderer/form_manager.cc')
-rw-r--r-- | chrome/renderer/form_manager.cc | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/chrome/renderer/form_manager.cc b/chrome/renderer/form_manager.cc index 0af0f4a..bfb9fe9 100644 --- a/chrome/renderer/form_manager.cc +++ b/chrome/renderer/form_manager.cc @@ -16,6 +16,7 @@ #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/WebOptionElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebSelectElement.h" #include "third_party/WebKit/WebKit/chromium/public/WebString.h" #include "third_party/WebKit/WebKit/chromium/public/WebVector.h" @@ -33,6 +34,7 @@ using WebKit::WebInputElement; using WebKit::WebLabelElement; using WebKit::WebNode; using WebKit::WebNodeList; +using WebKit::WebOptionElement; using WebKit::WebSelectElement; using WebKit::WebString; using WebKit::WebVector; @@ -213,6 +215,24 @@ string16 InferLabelFromDefinitionList( return inferred_label; } +void GetOptionStringsFromElement(WebKit::WebFormControlElement element, + std::vector<string16>* option_strings) { + DCHECK(!element.isNull()); + DCHECK(option_strings); + option_strings->clear(); + if (element.formControlType() == ASCIIToUTF16("select-one")) { + WebSelectElement select_element = element.to<WebSelectElement>(); + + // For select-one elements copy option strings. + WebVector<WebElement> list_items = select_element.listItems(); + option_strings->reserve(list_items.size()); + for (size_t i = 0; i < list_items.size(); ++i) { + if (list_items[i].hasTagName("option")) + option_strings->push_back(list_items[i].to<WebOptionElement>().value()); + } + } +} + } // namespace FormManager::FormManager() { @@ -233,6 +253,11 @@ void FormManager::WebFormControlElementToFormField( field->set_name(element.nameForAutofill()); field->set_form_control_type(element.formControlType()); + // Set option strings on the field if available. + std::vector<string16> option_strings; + GetOptionStringsFromElement(element, &option_strings); + field->set_option_strings(option_strings); + if (element.formControlType() == WebString::fromUTF8("text")) { const WebInputElement& input_element = element.toConst<WebInputElement>(); field->set_size(input_element.size()); |