From a0f46dae49ade1b3a91f19505698dd8e5f215704 Mon Sep 17 00:00:00 2001 From: Valera Rozuvan Date: Fri, 15 Feb 2013 18:10:14 +0200 Subject: [PATCH] Fixed bug that prevented Firefox from playing HTML5 video content. --- .../xmodule/js/src/videoalpha/display/html5_video.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/common/lib/xmodule/xmodule/js/src/videoalpha/display/html5_video.js b/common/lib/xmodule/xmodule/js/src/videoalpha/display/html5_video.js index acdc03932c..c8283b6086 100644 --- a/common/lib/xmodule/xmodule/js/src/videoalpha/display/html5_video.js +++ b/common/lib/xmodule/xmodule/js/src/videoalpha/display/html5_video.js @@ -221,8 +221,19 @@ this.HTML5Video = (function () { // and end playing at the specified end time. After it was paused, or when a seek operation happeded, // the starting time and ending time will reset to the beginning and the end of the video respectively. this.video.addEventListener('canplay', function () { + // Because firefox triggers 'canplay' event every time when 'currentTime' property + // changes, we must make sure that this block of code runs only once. Otherwise, + // this will be an endless loop ('currentTime' property is changed below). + // + // Chrome is immune to this behavior. + if (_this.playerState !== HTML5Video.PlayerState.UNSTARTED) { + return; + } + _this.playerState = HTML5Video.PlayerState.PAUSED; + console.log('canplay listener: _this.playerState = ' + _this.playerState + '.'); + if (_this.start > _this.video.duration) { _this.start = 0; }