From deba788b4cdc22bb50e0c19adb5ed35ed33c0a01 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Thu, 10 Aug 2017 13:19:05 +0200 Subject: [PATCH] [FIX] web_editor: html_frame: saving in readonly A form view record may be saved even if the record is displayed in readonly (e.g. when a button in the form view is clicked). When this happened, if there were an html field with html_frame widget in the form, it crashed (e.g. in Email Marketing > Mass Mailings > open one > click on Test Mailing). --- addons/web_editor/static/src/js/backend.js | 2 +- .../static/tests/web_editor_tests.js | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) 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(); +}); + });