blob: 43512e9f7d889dc90ebb2d3fc99e4325b9471e16 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
let stream;
let audioTrack;
let videoTrack;
let audioSender;
let senderFromAddTrack;
description("Test that RTCPeerConnection.addTrack reuses an unused sender of the same kind if present");
if (window.testRunner)
testRunner.setUserMediaPermission(true);
else {
debug("This test can not be run without the testRunner");
finishJSTest();
}
const pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
const remotePc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
navigator.mediaDevices.getUserMedia({ "audio": true, "video": true })
.then(function (s) {
stream = s;
audioTrack = stream.getAudioTracks()[0];
videoTrack = stream.getVideoTracks()[0];
remotePc.addTrack(audioTrack, stream);
return remotePc.createOffer();
})
.then(function (audioOffer) {
return pc.setRemoteDescription(audioOffer);
})
.then(function () {
debug("*** Remote description with audio offer set");
shouldBe("pc.getSenders().length", "1");
shouldBe("pc.getReceivers().length", "1");
shouldBe("pc.getReceivers()[0].track.kind", "'audio'");
shouldBe("pc.getTransceivers().length", "1");
debug("<br>*** Check unused sender");
evalAndLog("audioSender = pc.getSenders()[0]");
shouldBe("audioSender.track", "null");
debug("<br>*** Adding a video track should not reuse audioSender (wrong kind)");
evalAndLog("senderFromAddTrack = pc.addTrack(videoTrack, stream)");
shouldNotBe("senderFromAddTrack", "audioSender");
debug("<br>*** An extra sender should have been added");
shouldBe("pc.getSenders().length", "2");
shouldBeTrue("pc.getSenders().includes(audioSender)");
shouldBeTrue("pc.getSenders().includes(senderFromAddTrack)");
debug("<br>*** Adding an audio track should reuse audioSender");
evalAndLog("senderFromAddTrack = pc.addTrack(audioTrack, stream)");
shouldBe("senderFromAddTrack", "audioSender");
shouldBe("audioSender.track", "audioTrack");
debug("<br>*** The number of senders should not have changed");
shouldBe("pc.getSenders().length", "2");
finishJSTest();
})
.catch(function (error) {
testFailed("Error in promise chain: " + error);
finishJSTest();
});
window.jsTestIsAsync = true;
window.successfullyParsed = true;
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>