blob: 973e139958ee35295f8c430eff2227944c00bd18 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<script src="resources/promise-utils.js"></script>
</head>
<body>
<script>
if (window.internals)
internals.useMockRTCPeerConnectionFactory("");
let stream;
let midAssignedByA;
let event;
description("Test the case where an RTCRtpTransceiver gets a remotely assigned mid and also unmute the associated source");
if (window.testRunner)
testRunner.setUserMediaPermission(true);
else {
debug("This test can not be run without the testRunner");
finishJSTest();
}
const pcA = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
const pcB = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
pcA.ontrack = function (evt) {
testPassed("A: got remote track event");
};
pcB.ontrack = function (e) {
event = e;
testPassed("B: got remote track event");
shouldBeType("event.track", "MediaStreamTrack");
event.track.onunmute = function () {
testPassed("B: remote track unmute event");
finishJSTest();
};
};
navigator.mediaDevices.getUserMedia({ "audio": true })
.then(function (s) {
stream = s;
evalAndLog("pcA.addTrack(stream.getAudioTracks()[0], stream)");
debug("A's transceiver is not yet associated with a media description and should have a null mid");
shouldBeNull("pcA.getTransceivers()[0].mid");
return pcA.createOffer();
})
.then(function (offer) {
return pcA.setLocalDescription(offer);
})
.then(function () {
debug("A: local offer set (mid gets defined)");
evalAndLog("midAssignedByA = pcA.getTransceivers()[0].mid");
shouldBeTrue("midAssignedByA !== null");
evalAndLog("pcB.addTrack(stream.getAudioTracks()[0], stream)");
debug("B's transceiver is not yet associated with a media description and should have a null mid");
shouldBeNull("pcB.getTransceivers()[0].mid");
return pcB.setRemoteDescription(pcA.localDescription);
})
.then(function () {
debug("B: remote offer set (mid gets defined)");
debug("B's transceiver should get its mid from the remote side (A)");
shouldBe("pcB.getTransceivers()[0].mid", "midAssignedByA");
return pcB.createAnswer();
})
.then(function (answer) {
return pcB.setLocalDescription(answer);
})
.then(function () {
return pcA.setRemoteDescription(pcB.localDescription);
})
.then(function () {
testPassed("Offer/answer dialog completed")
window.internals.emulateRTCPeerConnectionPlatformEvent(pcB, "unmute-remote-sources-by-mid");
})
.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>