diff --git a/addons/web_editor/static/src/js/backend.js b/addons/web_editor/static/src/js/backend.js index 06053dd1cea..6b167c59edd 100644 --- a/addons/web_editor/static/src/js/backend.js +++ b/addons/web_editor/static/src/js/backend.js @@ -383,7 +383,7 @@ var FieldTextHtml = AbstractField.extend({ * @override */ commitChanges: function () { - if (!this.loaded) { + if (!this.loaded || this.mode === 'readonly') { return; } // switch to WYSIWYG mode if currently in code mode to get all changes diff --git a/addons/web_editor/static/tests/web_editor_tests.js b/addons/web_editor/static/tests/web_editor_tests.js index 283931e9b0d..41ada113cba 100644 --- a/addons/web_editor/static/tests/web_editor_tests.js +++ b/addons/web_editor/static/tests/web_editor_tests.js @@ -188,4 +188,34 @@ QUnit.test('field htmlsimple does not crash when commitChanges is called in mode form.destroy(); }); +QUnit.test('html_frame does not crash when saving in readonly', function (assert) { + // The 'Save' action may be triggered even in readonly (e.g. when clicking + // on a button in the form view) + assert.expect(0); + + var form = testUtils.createView({ + View: FormView, + model: 'mass.mailing', + data: this.data, + arch: '
' + + '' + + '' + + '' + + '
', + res_id: 1, + mockRPC: function (route) { + if (_.str.startsWith(route, '/test')) { + // manually call the callback to simulate that the iframe has + // been correctly loaded + window.odoo[$.deparam(route).callback + '_content'].call(); + return $.when(); + } + return this._super.apply(this, arguments); + }, + }); + + form.saveRecord(); // before the fix done in this commit, it crashed here + form.destroy(); +}); + });