blob: b2bdfe771d510f4fccf888318d26d0c6f0b95c8a [file] [log] [blame]
<!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>