blob: 9b24be0a3baaa0b3f825778b57925f6a56889ee4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
let stream;
description("Test that a negotiationneeded event is fired when not all local media can be included in an answer");
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;
pc.onnegotiationneeded = () => {
testPassed("negotiationneededevent fired: There is local media added with addTrack");
startTest();
};
shouldBe("pc.signalingState", "'stable'");
debug("Add local audio and video tracks to pc");
evalAndLog("pc.addTrack(stream.getAudioTracks()[0], stream)");
evalAndLog("pc.addTrack(stream.getVideoTracks()[0], stream)");
shouldBe("pc.getTransceivers().length", "2");
})
.catch(function (error) {
testFailed("Error in promise chain: " + error);
finishJSTest();
});
function startTest() {
debug("<br>Register a new handler for the negotiationneededevent");
pc.onnegotiationneeded = () => {
testPassed("negotiationneededevent fired: There is local media not negotiated that needs to be negotiated in a follow-up offer");
};
remotePc.addTrack(stream.getAudioTracks()[0], stream);
shouldBe("remotePc.getTransceivers().length", "1");
debug("Create a remote offer with audio only");
return remotePc.createOffer().then(function (offer) {
debug("Set remote offer as remote description");
return pc.setRemoteDescription(offer);
})
.then(function () {
testPassed("Remote offer set");
shouldBe("pc.getTransceivers().length", "2");
debug("Create an answer for the audio only offer");
return pc.createAnswer();
})
.then(function (answer) {
debug("Set answer as local description");
return pc.setLocalDescription(answer);
})
.then(function () {
testPassed("Answer set");
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>