Index: chrome/renderer/form_manager.cc |
=================================================================== |
--- chrome/renderer/form_manager.cc (revision 52815) |
+++ chrome/renderer/form_manager.cc (working copy) |
@@ -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::WebLabelElement; |
using WebKit::WebNode; |
using WebKit::WebNodeList; |
+using WebKit::WebOptionElement; |
using WebKit::WebSelectElement; |
using WebKit::WebString; |
using WebKit::WebVector; |
@@ -210,6 +212,24 @@ |
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() { |
@@ -230,6 +250,11 @@ |
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()); |