130 lines
5.2 KiB
HTML
130 lines
5.2 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
<script>
|
|
var video;
|
|
var mediaStream;
|
|
|
|
function logEvent(element, eventName, func)
|
|
{
|
|
function _eventCallback(evt)
|
|
{
|
|
if (window.wasFinishJSTestCalled)
|
|
return;
|
|
|
|
debug(`Event <em>'${evt.type}'</em>`);
|
|
if (func)
|
|
func(evt);
|
|
}
|
|
element.addEventListener(eventName, _eventCallback, true);
|
|
}
|
|
|
|
function recheckVideoElementAfterStop()
|
|
{
|
|
debug("<br>**** re-check states now that the video stream has ended ****");
|
|
shouldBe('video.ended', 'true');
|
|
shouldBe('video.videoWidth', '0');
|
|
shouldBe('video.videoHeight', '0');
|
|
|
|
debug("");
|
|
shouldBe('video.videoTracks.length', '1');
|
|
shouldBe('video.videoTracks.selectedIndex', '-1');
|
|
shouldBe('video.videoTracks[0].selected', 'false');
|
|
|
|
debug("");
|
|
shouldBe('mediaStream.getVideoTracks()[0].enabled', "true");
|
|
shouldBeEqualToString('mediaStream.getVideoTracks()[0].readyState', "ended");
|
|
|
|
debug("");
|
|
finishJSTest();
|
|
}
|
|
|
|
function recheckVideoElementAfterEnabledChange()
|
|
{
|
|
debug("<br>**** re-check states now that the video stream has been disabled ****");
|
|
shouldBe('mediaStream.getVideoTracks()[0].enabled', 'false');
|
|
shouldBe('video.videoWidth', 'mediaStream.getVideoTracks()[0].getSettings().width');
|
|
shouldBe('video.videoHeight', 'mediaStream.getVideoTracks()[0].getSettings().height');
|
|
|
|
debug("<br>**** stop MediaStream tracks ****");
|
|
evalAndLog('mediaStream.getVideoTracks()[0].enabled = true');
|
|
evalAndLog("mediaStream.getVideoTracks()[0].stop()");
|
|
evalAndLog("mediaStream.getAudioTracks()[0].stop()");
|
|
debug("");
|
|
}
|
|
|
|
function checkVideoElement()
|
|
{
|
|
evalAndLog("video.pause()");
|
|
|
|
debug("<br>**** check states with live video stream track ****");
|
|
shouldBe('video.ended', 'false');
|
|
shouldBe('video.videoWidth', 'mediaStream.getVideoTracks()[0].getSettings().width');
|
|
shouldBe('video.videoHeight', 'mediaStream.getVideoTracks()[0].getSettings().height');
|
|
|
|
debug("");
|
|
shouldBe('video.videoTracks.length', '1');
|
|
shouldBe('video.videoTracks.selectedIndex', '0');
|
|
shouldBe('video.videoTracks[0].id', 'mediaStream.getVideoTracks()[0].id');
|
|
shouldBe('video.videoTracks[0].selected', 'true');
|
|
shouldBe('mediaStream.getVideoTracks()[0].enabled', 'true');
|
|
|
|
debug("");
|
|
shouldBe('mediaStream.getVideoTracks()[0].enabled', "true");
|
|
shouldBeEqualToString('mediaStream.getVideoTracks()[0].readyState', "live");
|
|
|
|
debug("<br>**** disable MediaStream video track ****");
|
|
evalAndLog('mediaStream.getVideoTracks()[0].enabled = false');
|
|
setTimeout(recheckVideoElementAfterEnabledChange, 100);
|
|
}
|
|
|
|
function canplay()
|
|
{
|
|
debug("<br>*** start playback ****");
|
|
evalAndLog("video.play()");
|
|
setTimeout(checkVideoElement, 100);
|
|
}
|
|
|
|
function setupStream(stream)
|
|
{
|
|
mediaStream = stream;
|
|
testPassed('mediaDevices.getUserMedia succeeded.');
|
|
|
|
debug("<br>**** setup video element ****");
|
|
evalAndLog("video.srcObject = mediaStream");
|
|
}
|
|
|
|
function start()
|
|
{
|
|
description("Tests MediaStreamTrack callbacks.");
|
|
video = document.querySelector('video');
|
|
logEvent(video, 'loadedmetadata')
|
|
logEvent(video, 'canplay', canplay)
|
|
logEvent(video, 'canplaythrough')
|
|
logEvent(video, 'loadeddata')
|
|
logEvent(video, 'play')
|
|
logEvent(video, 'ended', recheckVideoElementAfterStop)
|
|
|
|
debug("<br>**** calling mediaDevices.getUserMedia() ****");
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
navigator.mediaDevices.getUserMedia( {video: true, audio: true} )
|
|
.then(setupStream)
|
|
.catch(function(reason) {
|
|
debug(`Stream generation failed with error: ${reason}`);
|
|
});
|
|
}
|
|
|
|
window.jsTestIsAsync = true;
|
|
window.successfullyParsed = true;
|
|
</script>
|
|
</head>
|
|
<body onload="start()">
|
|
<p id="description"></p>
|
|
<video controls width="680" height="360"></video>
|
|
<div id="console"></div>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|