diff options
Diffstat (limited to 'dom/media/test/test_mediatrack_consuming_mediaresource.html')
-rw-r--r-- | dom/media/test/test_mediatrack_consuming_mediaresource.html | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/dom/media/test/test_mediatrack_consuming_mediaresource.html b/dom/media/test/test_mediatrack_consuming_mediaresource.html new file mode 100644 index 000000000..c8ce3a8b4 --- /dev/null +++ b/dom/media/test/test_mediatrack_consuming_mediaresource.html @@ -0,0 +1,181 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test track interfaces when consuming media resources</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) { + 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; + + isnot(element.audioTracks, undefined, + 'HTMLMediaElement::AudioTracks() property should be available.'); + isnot(element.videoTracks, undefined, + 'HTMLMediaElement::VideoTracks() property should be available.'); + + element.audioTracks.onaddtrack = function(e) { + audioOnaddtrack++; + } + + element.audioTracks.onremovetrack = function(e) { + audioOnremovetrack++; + } + + element.audioTracks.onchange = function(e) { + audioOnchange++; + } + + element.videoTracks.onaddtrack = function(e) { + videoOnaddtrack++; + } + + element.videoTracks.onremovetrack = function(e) { + videoOnremovetrack++; + } + + element.videoTracks.onchange = function(e) { + videoOnchange++; + } + + function checkTrackRemoved() { + if (isPlaying) { + if (test.hasAudio) { + is(audioOnremovetrack, 1, 'Calls of onremovetrack on audioTracks should be 1.'); + is(element.audioTracks.length, 0, 'The length of audioTracks should be 0.'); + } + if (test.hasVideo) { + is(videoOnremovetrack, 1, 'Calls of onremovetrack on videoTracks should be 1.'); + is(element.videoTracks.length, 0, 'The length of videoTracks should be 0.'); + } + } + } + + function onended() { + ok(true, 'Event ended is expected to be fired on element.'); + checkTrackRemoved(); + element.onended = null; + element.onplaying = null; + element.onpause = null; + manager.finished(element.token); + } + + function checkTrackAdded() { + isPlaying = true; + if (test.hasAudio) { + is(audioOnaddtrack, 1, 'Calls of onaddtrack on audioTracks should be 1.'); + is(element.audioTracks.length, 1, 'The length of audioTracks should be 1.'); + ok(element.audioTracks[0].enabled, 'Audio track should be enabled as default.'); + } + if (test.hasVideo) { + is(videoOnaddtrack, 1, 'Calls of onaddtrack on videoTracks should be 1.'); + is(element.videoTracks.length, 1, 'The length of videoTracks should be 1.'); + is(element.videoTracks.selectedIndex, 0, + 'The first video track is set selected as default.'); + } + } + + function setTrackEnabled(enabled) { + if (test.hasAudio) { + element.audioTracks[0].enabled = enabled; + } + if (test.hasVideo) { + element.videoTracks[0].selected = enabled; + } + } + + function checkTrackChanged(calls, enabled) { + if (test.hasAudio) { + is(audioOnchange, calls, 'Calls of onchange on audioTracks should be '+calls); + is(element.audioTracks[0].enabled, enabled, + 'Enabled value of the audio track should be ' +enabled); + } + if (test.hasVideo) { + is(videoOnchange, calls, 'Calls of onchange on videoTracks should be '+calls); + is(element.videoTracks[0].selected, enabled, + 'Selected value of the video track should be ' +enabled); + var index = enabled ? 0 : -1; + is(element.videoTracks.selectedIndex, index, + 'SelectedIndex of video tracks should be ' +index); + } + } + + function onpause() { + element.onpause = null; + if (element.ended) { + return; + } + if (steps == 1) { + setTrackEnabled(false); + element.onplaying = onplaying; + element.play(); + steps++; + } else if (steps == 2) { + setTrackEnabled(true); + element.onplaying = onplaying; + element.play(); + steps++; + } + } + + function onplaying() { + element.onplaying = null; + if (element.ended) { + return; + } + if (steps == 1) { + element.onpause = onpause; + element.pause(); + checkTrackAdded(); + } else if (steps == 2) { + element.onpause = onpause; + element.pause(); + checkTrackChanged(1, false); + } else if (steps == 3) { + checkTrackChanged(2, true); + } + } + + var steps = 0; + + 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> |