1
0
mirror of https://github.com/videojs/video.js.git synced 2024-11-24 08:42:25 +02:00

@vit-koumar updated Flash tech to return Infinity from duration instead of -1. closes #3128

This commit is contained in:
Vít Koumar 2016-07-18 14:10:57 -04:00 committed by Gary Katsevman
parent 9f37a64146
commit f36da276e3
3 changed files with 43 additions and 1 deletions

View File

@ -15,6 +15,7 @@ CHANGELOG
* @hartman added default print styling ([view](https://github.com/videojs/video.js/pull/3304))
* @ldayananda updated videojs to not do anything if no src is set ([view](https://github.com/videojs/video.js/pull/3378))
* @nickygerritsen removed unused tracks when changing sources. Fixes #3000 ([view](https://github.com/videojs/video.js/pull/3002))
* @vit-koumar updated Flash tech to return Infinity from duration instead of -1 ([view](https://github.com/videojs/video.js/pull/3128))
--------------------

View File

@ -229,6 +229,20 @@ class Flash extends Tech {
}
}
/**
* Get media duration
*
* @returns {Number} Media duration
*/
duration() {
if (this.readyState() === 0) {
return NaN;
} else {
let duration = this.el_.vjs_getProperty('duration');
return duration >= 0 ? duration : Infinity;
}
}
/**
* Load media into player
*
@ -312,7 +326,7 @@ class Flash extends Tech {
// Create setters and getters for attributes
const _api = Flash.prototype;
const _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');
const _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');
const _readOnly = 'networkState,readyState,initialTime,startOffsetTime,paused,ended,videoWidth,videoHeight'.split(',');
function _createSetter(attr){
var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);

View File

@ -197,6 +197,33 @@ test('play after ended seeks to the beginning', function() {
equal(seeks[0], 0, 'seeked to the beginning');
});
test('duration returns NaN, Infinity or duration according to the HTML standard', function() {
let duration = Flash.prototype.duration;
let mockedDuration = -1;
let mockedReadyState = 0;
let result;
let mockFlash = {
el_: {
vjs_getProperty() {
return mockedDuration;
}
},
readyState: function() {
return mockedReadyState;
}
};
result = duration.call(mockFlash);
ok(Number.isNaN(result), 'duration returns NaN when readyState equals 0');
mockedReadyState = 1;
result = duration.call(mockFlash);
ok(!Number.isFinite(result), 'duration returns Infinity when duration property is less then 0');
mockedDuration = 1;
result = duration.call(mockFlash);
equal(result, 1, 'duration returns duration property when readeyState and duration property are both higher than 0');
});
// fake out the <object> interaction but leave all the other logic intact
class MockFlash extends Flash {
constructor() {