83 lines
3.1 KiB
HTML
83 lines
3.1 KiB
HTML
<!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>
|