blob: bd419ce3ade0c689d8bcf6c7d537f33def8d440f [file] [log] [blame]
<!doctype html>
<html>
<head>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
</head>
<body>
<script type="application/javascript">
window.onunhandledrejection = () => false;
promise_test(async (test) => {
const sender = new RTCPeerConnection();
const receiver = new RTCPeerConnection();
try {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true });
const localTracks = stream.getTracks();
[[sender, receiver], [receiver, sender]].forEach(([pc1, pc2]) => {
pc1.onicecandidate = ({ candidate }) => {
if (candidate)
pc2.addIceCandidate(candidate).then(() => { }, () => { });
pc1.close();
};
});
localTracks.forEach(track => sender.addTrack(track, stream));
receiver.addTransceiver('audio');
receiver.addTransceiver('video');
await new Promise (async (resolve) => {
// RTCPeerConnection does not resolve promises when it gets closed, hence the timeout here to make sure we execute some if not all these operations.
test.step_timeout(resolve, 100);
try {
const offer1 = await sender.createOffer();
await sender.setLocalDescription(offer1);
await receiver.setRemoteDescription(offer1);
const answer1 = await receiver.createAnswer();
await receiver.setLocalDescription(answer1);
await sender.setRemoteDescription(answer1);
const offer2 = await sender.createOffer();
await sender.setLocalDescription(offer2);
await receiver.setRemoteDescription(offer2);
const answer2 = await receiver.createAnswer();
await receiver.setLocalDescription(answer2);
await sender.setRemoteDescription(answer2);
} finally {
resolve();
}
});
} catch (e) {
}
}, "Close a peer connection in the middle of gathering");
</script>
</body>
</html>