151 lines
5.4 KiB
HTML
151 lines
5.4 KiB
HTML
<!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("");
|
|
|
|
var stream;
|
|
var audioTrack;
|
|
var videoTrack;
|
|
var firstOffer;
|
|
var audioTransceiver;
|
|
var videoTransceiver;
|
|
|
|
description("Test RTCPeerConnection.setLocalDescription called with an RTCSessionDescription of type 'offer'");
|
|
|
|
if (window.testRunner)
|
|
testRunner.setUserMediaPermission(true);
|
|
else {
|
|
debug("This test can not be run without the testRunner");
|
|
finishJSTest();
|
|
}
|
|
|
|
var pc = new RTCPeerConnection({iceServers:[{urls:'stun:foo.com'}]});
|
|
|
|
shouldBe("pc.signalingState", "'stable'");
|
|
|
|
shouldBeNull("pc.localDescription");
|
|
shouldBeNull("pc.pendingLocalDescription");
|
|
shouldBeNull("pc.currentLocalDescription");
|
|
debug("");
|
|
|
|
navigator.mediaDevices.getUserMedia({ "audio": true, "video": true })
|
|
.then(function (s) {
|
|
testPassed("Got stream");
|
|
stream = s;
|
|
audioTrack = stream.getAudioTracks()[0];
|
|
videoTrack = stream.getVideoTracks()[0];
|
|
|
|
debug("*** Add audioTrack.");
|
|
pc.addTrack(audioTrack, stream);
|
|
|
|
shouldBe("pc.getTransceivers().length", "1");
|
|
audioTransceiver = pc.getTransceivers()[0];
|
|
shouldBeNull("audioTransceiver.mid");
|
|
debug("");
|
|
|
|
return pc.createOffer();
|
|
})
|
|
.then(function (offer) {
|
|
testPassed("Got firstOffer");
|
|
firstOffer = offer;
|
|
|
|
shouldBe("pc.signalingState", "'stable'");
|
|
shouldBeNull("audioTransceiver.mid");
|
|
debug("");
|
|
|
|
return pc.setLocalDescription(firstOffer);
|
|
})
|
|
.then(function () {
|
|
testPassed("firstOffer set as local description");
|
|
|
|
shouldBe("pc.signalingState", "'have-local-offer'");
|
|
|
|
shouldBe("pc.localDescription", "firstOffer");
|
|
shouldBe("pc.pendingLocalDescription", "firstOffer");
|
|
shouldBeNull("pc.currentLocalDescription");
|
|
|
|
shouldBe("firstOffer.type", "pc.localDescription.type");
|
|
shouldBe("firstOffer.sdp", "pc.localDescription.sdp");
|
|
|
|
shouldBeTrue("typeof pc.getTransceivers()[0].mid == 'string'");
|
|
|
|
debug("Set firstOffer as local description again.");
|
|
debug("");
|
|
|
|
return pc.setLocalDescription(firstOffer);
|
|
})
|
|
.then(function () {
|
|
testPassed("firstOffer set as local description (again)");
|
|
|
|
shouldBe("pc.signalingState", "'have-local-offer'");
|
|
debug("");
|
|
|
|
debug("*** Try setting local descriptions with bad types for the current state");
|
|
return promiseShouldReject("pc.setLocalDescription({type:'answer', sdp:firstOffer.sdp});");
|
|
})
|
|
.then(function () {
|
|
return promiseShouldReject("pc.setLocalDescription({type:'pranswer', sdp:firstOffer.sdp});");
|
|
})
|
|
.then(function () {
|
|
debug("");
|
|
|
|
debug("*** Add videoTrack");
|
|
pc.addTrack(videoTrack, stream);
|
|
|
|
shouldBe("pc.getTransceivers().length", "2");
|
|
|
|
debug("*** Find the transceiver for the newly added video track");
|
|
var transceivers = pc.getTransceivers();
|
|
videoTransceiver = transceivers[1].sender.track.kind == "video" ? transceivers[1] : transceivers[0];
|
|
shouldBeDefined("videoTransceiver");
|
|
|
|
shouldBeNull("videoTransceiver.mid");
|
|
debug("");
|
|
|
|
return pc.createOffer();
|
|
})
|
|
.then(function (offer) {
|
|
testPassed("Got secondOffer");
|
|
secondOffer = offer;
|
|
|
|
shouldBe("pc.signalingState", "'have-local-offer'");
|
|
shouldBeNull("videoTransceiver.mid");
|
|
debug("");
|
|
|
|
return pc.setLocalDescription(secondOffer);
|
|
})
|
|
.then(function () {
|
|
testPassed("secondOffer set as local description");
|
|
|
|
shouldBe("pc.signalingState", "'have-local-offer'");
|
|
|
|
shouldBe("pc.localDescription", "secondOffer");
|
|
shouldBe("pc.pendingLocalDescription", "secondOffer");
|
|
shouldBeNull("pc.currentLocalDescription");
|
|
|
|
shouldBe("secondOffer.type", "pc.localDescription.type");
|
|
shouldBe("secondOffer.sdp", "pc.localDescription.sdp");
|
|
|
|
shouldBeTrue("typeof videoTransceiver.mid == 'string'");
|
|
|
|
finishJSTest();
|
|
})
|
|
.catch(function (error) {
|
|
testFailed("Error caught in promise chain: " + error);
|
|
finishJSTest();
|
|
});
|
|
|
|
window.jsTestIsAsync = true;
|
|
window.successfullyParsed = true;
|
|
|
|
</script>
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|