| 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 e0ed2226c17b7b5416dc5b7371272c87945d85c1..5efea2ec67038cbb7495efb66c36b517667e7e76 100644
|
| --- a/components/autofill/content/renderer/form_autofill_util.cc
|
| +++ b/components/autofill/content/renderer/form_autofill_util.cc
|
| @@ -550,6 +550,12 @@ void FillFormField(const FormFieldData& data,
|
| if (text_area.value() != data.value) {
|
| text_area.setValue(data.value);
|
| text_area.dispatchFormControlChangeEvent();
|
| + if (is_initiating_node) {
|
| + int length = text_area.value().length();
|
| + text_area.setSelectionRange(length, length);
|
| + // Clear the current IME composition (the underline), if there is one.
|
| + text_area.document().frame()->unmarkText();
|
| + }
|
| }
|
| } else if (IsSelectElement(*field)) {
|
| WebSelectElement select_element = field->to<WebSelectElement>();
|
| @@ -592,6 +598,12 @@ void PreviewFormField(const FormFieldData& data,
|
| WebTextAreaElement textarea = field->to<WebTextAreaElement>();
|
| textarea.setSuggestedValue(data.value);
|
| field->setAutofilled(true);
|
| + if (is_initiating_node) {
|
| + // Select the part of the text that the user didn't type.
|
| + textarea.setSelectionRange(
|
| + textarea.value().length(),
|
| + textarea.suggestedValue().length());
|
| + }
|
| }
|
| }
|
|
|
| @@ -785,6 +797,8 @@ void WebFormControlElementToFormField(const WebFormControlElement& element,
|
| base::i18n::RIGHT_TO_LEFT : base::i18n::LEFT_TO_RIGHT;
|
| } else if (IsTextAreaElement(element)) {
|
| // Nothing more to do in this case.
|
| + field->is_autofilled = element.isAutofilled();
|
| + field->is_focusable = element.isFocusable();
|
| } else if (extract_mask & EXTRACT_OPTIONS) {
|
| // Set option strings on the field if available.
|
| DCHECK(IsSelectElement(element));
|
| @@ -971,10 +985,10 @@ bool WebFormElementToFormData(
|
| return true;
|
| }
|
|
|
| -bool FindFormAndFieldForInputElement(const WebInputElement& element,
|
| - FormData* form,
|
| - FormFieldData* field,
|
| - RequirementsMask requirements) {
|
| +bool FindFormAndFieldForFormControlElement(const WebFormControlElement& element,
|
| + FormData* form,
|
| + FormFieldData* field,
|
| + RequirementsMask requirements) {
|
| if (!IsAutofillableElement(element))
|
| return false;
|
|
|
| @@ -992,7 +1006,7 @@ bool FindFormAndFieldForInputElement(const WebInputElement& element,
|
| field);
|
| }
|
|
|
| -void FillForm(const FormData& form, const WebInputElement& element) {
|
| +void FillForm(const FormData& form, const WebFormControlElement& element) {
|
| WebFormElement form_element = element.form();
|
| if (form_element.isNull())
|
| return;
|
| @@ -1033,7 +1047,7 @@ void FillFormForAllElements(const FormData& form_data,
|
| &FillFormField);
|
| }
|
|
|
| -void PreviewForm(const FormData& form, const WebInputElement& element) {
|
| +void PreviewForm(const FormData& form, const WebFormControlElement& element) {
|
| WebFormElement form_element = element.form();
|
| if (form_element.isNull())
|
| return;
|
| @@ -1046,7 +1060,7 @@ void PreviewForm(const FormData& form, const WebInputElement& element) {
|
| &PreviewFormField);
|
| }
|
|
|
| -bool ClearPreviewedFormWithElement(const WebInputElement& element,
|
| +bool ClearPreviewedFormWithElement(const WebFormControlElement& element,
|
| bool was_autofilled) {
|
| WebFormElement form_element = element.form();
|
| if (form_element.isNull())
|
| @@ -1103,6 +1117,10 @@ bool ClearPreviewedFormWithElement(const WebInputElement& element,
|
| control_element.setAutofilled(was_autofilled);
|
| else
|
| control_element.setAutofilled(false);
|
| + if (is_initiating_node) {
|
| + int length = text_area.value().length();
|
| + text_area.setSelectionRange(length, length);
|
| + }
|
| }
|
| }
|
|
|
| @@ -1179,7 +1197,7 @@ bool IsWebElementEmpty(const blink::WebElement& element) {
|
| return true;
|
| }
|
|
|
| -gfx::RectF GetScaledBoundingBox(float scale, WebInputElement* element) {
|
| +gfx::RectF GetScaledBoundingBox(float scale, WebFormControlElement* element) {
|
| gfx::Rect bounding_box(element->boundsInViewportSpace());
|
| return gfx::RectF(bounding_box.x() * scale,
|
| bounding_box.y() * scale,
|
|
|