blob: 6d1e7dfbb80fc7f430076e3d5f59f19cf1c15534 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="./resources/getUserMedia-helper.js"></script>
<script>
var stream1;
var stream2;
var audioTrack;
var videoTrack;
function tryAddTrack(stream, track)
{
try {
stream.addTrack(track);
} catch (exception) {
testFailed("addTrack threw an exception.");
finishJSTest();
}
}
function shouldNotFireActive()
{
testFailed("stream2 should not become active if an ended track is added");
}
function shouldFireActive()
{
debug("*** stream2 is active again");
shouldBe('stream2.active', 'true');
finishJSTest();
}
function continueTest()
{
debug("*** extract videoTrack (and verify liveness)");
videoTrack = stream1.getVideoTracks()[0];
shouldBeEqualToString('videoTrack.readyState', 'live');
debug("*** add live videoTrack to stream2");
stream2.onactive = shouldFireActive;
tryAddTrack(stream2, videoTrack);
}
function createStreamAndAddTracks()
{
debug("*** extract audioTrack");
audioTrack = stream1.getAudioTracks()[0];
debug("*** stop audioTrack");
audioTrack.stop();
shouldBeEqualToString('audioTrack.readyState', 'ended');
debug("*** construct new 'empty' stream2")
stream2 = new MediaStream();
shouldBe('stream2.getTracks().length', '0');
shouldBe('stream2.active', 'false');
debug("*** add ended audioTrack to stream2");
stream2.onactive = shouldNotFireActive;
tryAddTrack(stream2, audioTrack);
debug("*** schedule continuation of test");
setTimeout(continueTest);
}
function gotStream(s)
{
stream1 = s;
shouldBe('stream1.getAudioTracks().length', '1');
shouldBe('stream1.getVideoTracks().length', '1');
createStreamAndAddTracks();
}
function startMedia()
{
description("Test adding tracks to inactive MediaStream.");
getUserMedia("allow", {audio:true, video:true}, gotStream);
}
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</head>
<body onload="startMedia()">
<p id="description"></p>
<div id="console"></div>
</body>
</html>