diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index cdaed1d7b4f..a5ceba50d3f 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -225,6 +225,9 @@ var InputField = DebouncedField.extend({ this.$input.attr({ type: this.nodeOptions.isPassword ? 'password' : 'text', placeholder: this.attrs.placeholder || "", + autocomplete: this.nodeOptions.isPassword ? + 'new-password' : + this.attrs.autocomplete, }); this.$input.val(this._formatValue(this.value)); return this.$input; diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 9cce413b618..6ca4740a62e 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -4709,6 +4709,30 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('support autocomplete attribute', function (assert) { + assert.expect(3); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + res_id: 1, + }); + + form.$buttons.find('.o_form_button_edit').click(); + assert.strictEqual(form.$('input[name="foo"]').val(), '***', + "password should be displayed with stars"); + assert.strictEqual(form.$('input[name="display_name"]').prop('autocomplete'), 'coucou', + "attribute autocomplete should be set"); + assert.strictEqual(form.$('input[name="foo"]').prop('autocomplete'), 'new-password', + "attribute autocomplete should be set to 'new-password' on password input"); + form.destroy(); + }); + QUnit.test('context is correctly passed after save & new in FormViewDialog', function (assert) { assert.expect(3);