mirror of
https://github.com/videojs/video.js.git
synced 2025-03-29 22:07:10 +02:00
Fixes #1481
Clear out pending errors on player disposal. Source selection errors are dispatched asynchronously so that there is an opportunity to override the error message. If the player is disposed during that period, the error timeout wasn't being cleared properly. Fix for #1480. Fix whitespace When defining variables inline with declarations, stick to one variable per line.
This commit is contained in:
parent
88f59d7ad6
commit
d385f8257f
@ -2,7 +2,7 @@ CHANGELOG
|
||||
=========
|
||||
|
||||
## HEAD (Unreleased)
|
||||
_(none)_
|
||||
* @dmlap fixed an issue where an error could be fired after player disposal ([view](https://github.com/videojs/video.js/pull/1481))
|
||||
|
||||
--------------------
|
||||
|
||||
|
@ -1155,7 +1155,8 @@ vjs.Player.prototype.src = function(source){
|
||||
* @private
|
||||
*/
|
||||
vjs.Player.prototype.sourceList_ = function(sources){
|
||||
var sourceTech = this.selectSource(sources);
|
||||
var sourceTech = this.selectSource(sources),
|
||||
errorTimeout;
|
||||
|
||||
if (sourceTech) {
|
||||
if (sourceTech.tech === this.techName) {
|
||||
@ -1167,13 +1168,17 @@ vjs.Player.prototype.sourceList_ = function(sources){
|
||||
}
|
||||
} else {
|
||||
// We need to wrap this in a timeout to give folks a chance to add error event handlers
|
||||
setTimeout(vjs.bind(this, function() {
|
||||
errorTimeout = setTimeout(vjs.bind(this, function() {
|
||||
this.error({ code: 4, message: this.localize(this.options()['notSupportedMessage']) });
|
||||
}), 0);
|
||||
|
||||
// we could not find an appropriate tech, but let's still notify the delegate that this is it
|
||||
// this needs a better comment about why this is needed
|
||||
this.triggerReady();
|
||||
|
||||
this.on('dispose', function() {
|
||||
clearTimeout(errorTimeout);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -12,9 +12,9 @@ vjs.MediaFaker = vjs.MediaTechController.extend({
|
||||
}
|
||||
});
|
||||
|
||||
// Support everything
|
||||
// Support everything except for "video/unsupported-format"
|
||||
vjs.MediaFaker.isSupported = function(){ return true; };
|
||||
vjs.MediaFaker.canPlaySource = function(srcObj){ return true; };
|
||||
vjs.MediaFaker.canPlaySource = function(srcObj){ return srcObj.type !== 'video/unsupported-format'; };
|
||||
|
||||
vjs.MediaFaker.prototype.createEl = function(){
|
||||
var el = vjs.MediaTechController.prototype.createEl.call(this, 'div', {
|
||||
|
@ -601,3 +601,20 @@ test('should honor disabled inactivity timeout', function() {
|
||||
|
||||
clock.restore();
|
||||
});
|
||||
|
||||
test('should clear pending errors on disposal', function() {
|
||||
var clock = sinon.useFakeTimers(), player;
|
||||
|
||||
player = PlayerTest.makePlayer();
|
||||
player.src({
|
||||
src: 'http://example.com/movie.unsupported-format',
|
||||
type: 'video/unsupported-format'
|
||||
});
|
||||
player.dispose();
|
||||
try {
|
||||
clock.tick(5000);
|
||||
} catch (e) {
|
||||
return ok(!e, 'threw an error: ' + e.message);
|
||||
}
|
||||
ok(true, 'did not throw an error after disposal');
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user