diff --git a/addons/web/static/src/js/core/widget.js b/addons/web/static/src/js/core/widget.js index 5e23c3f2c47..b25cd99587b 100644 --- a/addons/web/static/src/js/core/widget.js +++ b/addons/web/static/src/js/core/widget.js @@ -391,6 +391,9 @@ var Widget = core.Class.extend(mixins.PropertiesMixin, ServicesMixin, { _widgetRenderAndInsert: function (insertion, target) { var self = this; return this.willStart().then(function () { + if (self.__parentedDestroyed) { + return; + } self.renderElement(); insertion(target); return self.start(); diff --git a/addons/web/static/tests/core/widget_tests.js b/addons/web/static/tests/core/widget_tests.js index 43b9d0dc334..19e72cb97b6 100644 --- a/addons/web/static/tests/core/widget_tests.js +++ b/addons/web/static/tests/core/widget_tests.js @@ -388,6 +388,26 @@ QUnit.module('core', {}, function () { assert.ok(true, "there should be no crash when calling _rpc on a destroyed widget"); }); + + QUnit.test('start is not called when widget is destroyed', function (assert) { + assert.expect(0); + var slowWillStartDef = $.Deferred(); + var $fix = $( "#qunit-fixture"); + + var widget = new (Widget.extend({ + willStart: function () { + return slowWillStartDef; + }, + start: function () { + throw new Error('Should not call start method'); + }, + }))(); + + widget.appendTo($fix); + widget.destroy(); + slowWillStartDef.resolve(); + }); + }); }); \ No newline at end of file