| Index: components/autofill/ios/browser/resources/autofill_controller.js
|
| diff --git a/components/autofill/ios/browser/resources/autofill_controller.js b/components/autofill/ios/browser/resources/autofill_controller.js
|
| index fc26586e421adbd0b3fafbe55f21276cdc756cec..7fe3a5bfc92839e00cbba118f9cbee9df0c7eb0e 100644
|
| --- a/components/autofill/ios/browser/resources/autofill_controller.js
|
| +++ b/components/autofill/ios/browser/resources/autofill_controller.js
|
| @@ -501,9 +501,14 @@ __gCrWeb.autofill['fillActiveFormField'] = function(data) {
|
| * Fills a number of fields in the same named form.
|
| *
|
| * @param {Object<AutofillFormData>} data The data to fill in.
|
| + * @param {boolean} onlyFillEmpty Only fill empty fields. Otherwise fill all
|
| + * fields.
|
| + * @param {string} forceFillFieldName Named field will always be filled,
|
| + * regardless of value of |onlyFillEmpty|. May be null.
|
| * @param {boolean} styleElements Apply Autofill CSS style to filled elements.
|
| */
|
| -__gCrWeb.autofill['fillForm'] = function(data, styleElements) {
|
| +__gCrWeb.autofill['fillForm'] = function(data, onlyFillEmpty,
|
| + forceFillFieldName, styleElements) {
|
| // Inject CSS to style the autofilled elements with a yellow background.
|
| if (styleElements && !__gCrWeb.autofill.styleInjected) {
|
| var style = document.createElement('style');
|
| @@ -519,6 +524,7 @@ __gCrWeb.autofill['fillForm'] = function(data, styleElements) {
|
| // Remove Autofill styling when control element is edited.
|
| var controlElementInputListener = function(evt) {
|
| evt.target.removeAttribute('chrome-autofilled');
|
| + evt.target.isAutofilled = false;
|
| evt.target.removeEventListener('input', controlElementInputListener);
|
| };
|
|
|
| @@ -529,11 +535,23 @@ __gCrWeb.autofill['fillForm'] = function(data, styleElements) {
|
| if (!__gCrWeb.autofill.isAutofillableElement(element)) {
|
| continue;
|
| }
|
| - var value = data.fields[__gCrWeb['common'].nameForAutofill(element)];
|
| + var fieldName = __gCrWeb['common'].nameForAutofill(element);
|
| +
|
| + // If directed, skip non-empty fields unless this is the forceFillFieldName
|
| + // or it's a 'select-one' element. 'select-one' elements are always
|
| + // autofilled even if non-empty; see
|
| + // AutofillManager::FillOrPreviewDataModelForm().
|
| + if (onlyFillEmpty && element.value && element.value.length > 0 &&
|
| + !__gCrWeb.autofill.isSelectElement(element) &&
|
| + fieldName !== forceFillFieldName) {
|
| + continue;
|
| + }
|
| + var value = data.fields[fieldName];
|
| if (value) {
|
| element.value = value;
|
| if (styleElements) {
|
| element.setAttribute('chrome-autofilled');
|
| + element.isAutofilled = true;
|
| element.addEventListener('input', controlElementInputListener);
|
| }
|
| }
|
| @@ -547,6 +565,7 @@ __gCrWeb.autofill['fillForm'] = function(data, styleElements) {
|
| var controlElements = __gCrWeb.common.getFormControlElements(evt.target);
|
| for (var i = 0; i < controlElements.length; ++i) {
|
| controlElements[i].removeAttribute('chrome-autofilled');
|
| + controlElements[i].isAutofilled = false;
|
| }
|
| evt.target.removeEventListener('reset', formResetListener);
|
| };
|
|
|