blob: 48488d551ad9f664862462e37b24aa8f4ba4a146 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description("Test RTCPeerConnection 'icecandidate' event and gathering done");
if (window.internals)
internals.useMockRTCPeerConnectionFactory("ICECandidates");
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'}]});
var candidates = [];
var shouldDoChecking = false;
var reachedEndOfCandidates = false;
pc.onicecandidate = function (evt) {
candidates.push(evt.candidate);
if (!evt.candidate)
reachedEndOfCandidates = true;
checkCandidates();
};
function checkCandidates() {
if (!shouldDoChecking || !reachedEndOfCandidates)
return;
for (candidate of candidates) {
if (candidate) {
testPassed("Got candidate");
shouldBeTrue("candidate instanceof RTCIceCandidate");
shouldBe("candidate.sdpMLineIndex", "0");
shouldBe("candidate.sdpMid", "pc.getTransceivers()[0].mid");
testPassed(`candidate.candidate: ${candidate.candidate}`);
} else {
testPassed("Got end of candidates");
shouldBeNull("candidate");
}
}
finishJSTest();
}
navigator.mediaDevices.getUserMedia({ "video": true }).then(function (stream) {
pc.addTrack(stream.getTracks()[0], stream);
return pc.createOffer();
}).then(function (offer) {
return pc.setLocalDescription(offer);
}).then(function () {
testPassed("Local description set");
testPassed("End of test promise chain");
if (window.internals)
window.internals.emulateRTCPeerConnectionPlatformEvent(pc, "dispatch-fake-ice-candidates");
shouldDoChecking = true;
checkCandidates();
}).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>