From 7bb96f66851c693e6ea84f301ea97aced55ab463 Mon Sep 17 00:00:00 2001 From: Usman Khalid <2200617@gmail.com> Date: Thu, 14 Apr 2016 14:12:36 +0500 Subject: [PATCH] Added checks in video player methods which may get executed after the player has been destroyed. --- common/lib/xmodule/xmodule/js/src/video/03_video_player.js | 5 ++++- common/lib/xmodule/xmodule/js/src/video/04_video_control.js | 3 +++ common/lib/xmodule/xmodule/js/src/video/09_bumper.js | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/common/lib/xmodule/xmodule/js/src/video/03_video_player.js b/common/lib/xmodule/xmodule/js/src/video/03_video_player.js index ea1e4e4755..079c84deda 100644 --- a/common/lib/xmodule/xmodule/js/src/video/03_video_player.js +++ b/common/lib/xmodule/xmodule/js/src/video/03_video_player.js @@ -70,7 +70,10 @@ function (HTML5Video, Resizer) { function _makeFunctionsPublic(state) { var debouncedF = _.debounce( function (params) { - return onSeek.call(this, params); + // Can't cancel a queued debounced function on destroy + if (state.videoPlayer) { + return onSeek.call(this, params); + } }.bind(state), 300 ); diff --git a/common/lib/xmodule/xmodule/js/src/video/04_video_control.js b/common/lib/xmodule/xmodule/js/src/video/04_video_control.js index ce67eb18ad..0803af4e6c 100644 --- a/common/lib/xmodule/xmodule/js/src/video/04_video_control.js +++ b/common/lib/xmodule/xmodule/js/src/video/04_video_control.js @@ -49,6 +49,9 @@ function () { }); this.el.off('controls:show'); + if (this.controlHideTimeout) { + clearTimeout(this.controlHideTimeout); + } delete this.videoControl; } diff --git a/common/lib/xmodule/xmodule/js/src/video/09_bumper.js b/common/lib/xmodule/xmodule/js/src/video/09_bumper.js index 7c3ee16929..62681fa6b2 100644 --- a/common/lib/xmodule/xmodule/js/src/video/09_bumper.js +++ b/common/lib/xmodule/xmodule/js/src/video/09_bumper.js @@ -86,7 +86,9 @@ define('video/09_bumper.js',[], function () { if (this.doNotShowAgain) { _.extend(info, {bumper_do_not_show_again: true}); } - this.state.videoSaveStatePlugin.saveState(true, info); + if (this.state.videoSaveStatePlugin) { + this.state.videoSaveStatePlugin.saveState(true, info); + } }, destroy: function () {