gecko-dev/dom/media/test/test_mediatrack_replay_from_end.html

147 lines
3.8 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test media tracks if replay after playback has ended</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<script type="text/javascript" src="manifest.js"></script>
</head>
<body>
<pre id="test">
<script class="testbody" type="text/javascript">
var manager = new MediaTestManager;
function startTest(test, token) {
// Scenario to test:
// 1. Audio tracks and video tracks should be added to the track list when
// playing, and all tracks should be removed from the list after we seek
// to the end.
// 2. All tracks should be added back to the list if we replay from the end,
// and all tracks should be removed from the list after we seek to the end.
// 3. After seek to the middle from end of playback, all tracks should be
// added back to the list if we play from here, and all tracks should be
// removed from the list after we seek to the end.
var elemType = getMajorMimeType(test.type);
var element = document.createElement(elemType);
var audioOnchange = 0;
var audioOnaddtrack = 0;
var audioOnremovetrack = 0;
var videoOnchange = 0;
var videoOnaddtrack = 0;
var videoOnremovetrack = 0;
var isPlaying = false;
var steps = 0;
element.audioTracks.onaddtrack = function(e) {
audioOnaddtrack++;
}
element.audioTracks.onremovetrack = function(e) {
audioOnremovetrack++;
}
element.videoTracks.onaddtrack = function(e) {
videoOnaddtrack++;
}
element.videoTracks.onremovetrack = function(e) {
videoOnremovetrack++;
}
function testTrackEventCalls(expectedCalls) {
if (test.hasAudio) {
is(audioOnaddtrack, expectedCalls,
'Calls of onaddtrack on audioTracks should be '+expectedCalls+' times.');
is(audioOnremovetrack, expectedCalls,
'Calls of onremovetrack on audioTracks should be '+expectedCalls+' times.');
}
if (test.hasVideo) {
is(videoOnaddtrack, expectedCalls,
'Calls of onaddtrack on videoTracks should be '+expectedCalls+' times.');
is(videoOnremovetrack, expectedCalls,
'Calls of onremovetrack on videoTracks should be '+expectedCalls+' times.');
}
}
function finishTesting() {
element.onpause = null;
element.onseeked = null;
element.onplaying = null;
element.onended = null;
manager.finished(element.token);
}
function onended() {
if (isPlaying) {
switch(steps) {
case 1:
testTrackEventCalls(1);
element.onplaying = onplaying;
element.play();
steps++;
break;
case 2:
testTrackEventCalls(2);
element.currentTime = element.duration * 0.5;
element.onplaying = onplaying;
element.play();
steps++;
break;
case 3:
testTrackEventCalls(3);
finishTesting();
break;
}
} else {
ok(true, 'Finish the test anyway if ended is fired before other events.');
finishTesting();
}
}
function seekToEnd() {
element.onpause = null;
element.currentTime = element.duration * 1.1;
}
function onseeked() {
element.onseeked = null;
element.onpause = seekToEnd;
element.pause();
}
function onplaying() {
isPlaying = true;
element.onplaying = null;
element.onseeked = onseeked;
}
element.token = token;
manager.started(token);
element.src = test.name;
element.test = test;
element.onplaying = onplaying;
element.onended = onended;
element.play();
steps++;
}
SimpleTest.waitForExplicitFinish();
SpecialPowers.pushPrefEnv(
{
"set": [
["media.track.enabled", true]
]
},
function() {
manager.runTests(gTrackTests, startTest);
});
</script>
</pre>
</body>
</html>