Index: components/autofill/content/renderer/form_autofill_util.cc |
diff --git a/components/autofill/content/renderer/form_autofill_util.cc b/components/autofill/content/renderer/form_autofill_util.cc |
index 74d5b689e6c331114072f986ec49251dd89eecec..0e399b600258b940d34579941af1af9f74d5e9b0 100644 |
--- a/components/autofill/content/renderer/form_autofill_util.cc |
+++ b/components/autofill/content/renderer/form_autofill_util.cc |
@@ -570,9 +570,9 @@ void PreviewFormField(const FormFieldData& data, |
if (data.value.empty()) |
return; |
- // Preview input and textarea fields. For input fields, excludes checkboxes |
- // and radio buttons, as there is no provision for setSuggestedCheckedValue |
- // in WebInputElement. |
+ // Preview input, textarea and select fields. For input fields, excludes |
+ // checkboxes and radio buttons, as there is no provision for |
+ // setSuggestedCheckedValue in WebInputElement. |
WebInputElement* input_element = toWebInputElement(field); |
if (IsTextInput(input_element)) { |
// If the maxlength attribute contains a negative value, maxLength() |
@@ -590,6 +590,12 @@ void PreviewFormField(const FormFieldData& data, |
WebTextAreaElement textarea = field->to<WebTextAreaElement>(); |
textarea.setSuggestedValue(data.value); |
field->setAutofilled(true); |
+ } else if (IsSelectElement(*field)) { |
+ WebSelectElement select_element = field->to<WebSelectElement>(); |
+ // Check the original selected option value |
+ select_element.setOriginalValue(select_element.value()); |
Ilya Sherman
2014/02/08 01:40:41
This should not be necessary; the select element s
|
+ select_element.setSuggestedValue(data.value); |
+ field->setAutofilled(true); |
} |
} |
@@ -1058,9 +1064,11 @@ bool ClearPreviewedFormWithElement(const WebInputElement& element, |
// want to reset the auto-filled status for fields that were previewed. |
WebFormControlElement control_element = control_elements[i]; |
- // Only text input and textarea elements can be previewed. |
+ // Only text input, textarea and Select elements can be previewed. |
Ilya Sherman
2014/02/08 01:40:41
nit: "Select" -> "select"
|
WebInputElement* input_element = toWebInputElement(&control_element); |
- if (!IsTextInput(input_element) && !IsTextAreaElement(control_element)) |
+ if (!IsTextInput(input_element) && |
+ !IsTextAreaElement(control_element) && |
+ !IsSelectElement(control_element)) |
continue; |
// If the element is not auto-filled, we did not preview it, |
@@ -1071,7 +1079,9 @@ bool ClearPreviewedFormWithElement(const WebInputElement& element, |
if ((IsTextInput(input_element) && |
input_element->suggestedValue().isEmpty()) || |
(IsTextAreaElement(control_element) && |
- control_element.to<WebTextAreaElement>().suggestedValue().isEmpty())) |
+ control_element.to<WebTextAreaElement>().suggestedValue().isEmpty()) || |
+ (IsSelectElement(control_element) && |
+ control_element.to<WebSelectElement>().suggestedValue().isEmpty())) |
continue; |
// Clear the suggested value. For the initiating node, also restore the |
@@ -1099,6 +1109,19 @@ bool ClearPreviewedFormWithElement(const WebInputElement& element, |
control_element.setAutofilled(was_autofilled); |
else |
control_element.setAutofilled(false); |
+ } else if (IsSelectElement(control_element)) { |
+ WebSelectElement select_element = control_element.to<WebSelectElement>(); |
+ select_element.setSuggestedValue(WebString()); |
+ bool is_initiating_node = (element == select_element); |
+ if (is_initiating_node) |
+ control_element.setAutofilled(was_autofilled); |
+ else |
+ control_element.setAutofilled(false); |
Ilya Sherman
2014/02/08 01:40:41
There's no need for handling the case where is_ini
|
+ |
+ // Set selected option back to the original one. Ideally this should |
+ // happen right in the end of PreviewForm() but doing so will overwrite |
+ // the preview value. |
+ select_element.setValue(WebString(select_element.originalValue())); |
Ilya Sherman
2014/02/08 01:40:41
This should not be necessary; the <select> element
|
} |
} |