Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!doctype html>
<meta charset="utf-8">
<title>RTCDtlsTransport</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async t => {
const pc1 = new RTCPeerConnection();
t.add_cleanup(() => pc1.close());
const pc2 = new RTCPeerConnection();
t.add_cleanup(() => pc2.close());
pc1.onicecandidate = e => pc2.addIceCandidate(e.candidate);
pc2.onicecandidate = e => pc1.addIceCandidate(e.candidate);
const sendChannel = await pc1.createDataChannel('test');
const channelPromise = new Promise(resolve => {
pc2.addEventListener('datachannel', e => {
e.channel.onopen = () => resolve(e.channel);
});
});
await pc1.setLocalDescription();
await pc2.setRemoteDescription(pc1.localDescription);
await pc2.setLocalDescription();
await pc1.setRemoteDescription(pc2.localDescription);
const receiveChannel = await channelPromise;
const dtlsTransportClose = new Promise(resolve => {
pc2.sctp.transport.onstatechange = () => {
if (pc2.sctp.transport.state === 'closed') {
resolve();
}
};
});
const sctpTransportClose = new Promise(resolve => {
pc2.sctp.onstatechange = () => {
if (pc2.sctp.state === 'closed') {
resolve();
}
};
});
const channelClose = new Promise(resolve => {
receiveChannel.onclose = () => {
resolve();
};
});
// Close pc1. This causes a DTLS close alert to be sent to pc2.
pc1.close();
await Promise.all([
dtlsTransportClose,
sctpTransportClose,
channelClose,
]);
}, 'close() causes the other end\'s DTLS and SCTP transport and datachannels to close');
</script>