Chromium Code Reviews| 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
|
| } |
| } |