Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: components/autofill/content/renderer/form_autofill_util.cc

Issue 136793007: Add Autofill preview support for <select> input fields (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
}
}

Powered by Google App Engine
This is Rietveld 408576698