RTCDataChannel-id-reuse.html (1508B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <meta name="timeout" content="long"> 4 <title>Test cases that verify datachannel ids are reused in the expected way. The spec is not very picky here, but we want to be.</title> 5 <script src=/resources/testharness.js></script> 6 <script src=/resources/testharnessreport.js></script> 7 <script src="/webrtc/RTCPeerConnection-helper.js"></script> 8 <script src="/webrtc/RTCDataChannel-helper.js"></script> 9 <script> 10 'use strict'; 11 12 promise_test(async t => { 13 const offerer = new RTCPeerConnection(); 14 const answerer = new RTCPeerConnection(); 15 t.add_cleanup(() => offerer.close()); 16 t.add_cleanup(() => answerer.close()); 17 18 const pairPromise = openChannelPair(offerer, answerer, 'ensure_datachannel_msection'); 19 await negotiate(offerer, answerer); 20 const [dco, dca] = await pairPromise; 21 const id = dco.id; 22 assert_equals(dca.id, id); 23 dco.close(); 24 await new Promise(r => dco.onclose = r); 25 26 answerer.addEventListener('datachannel', ({channel}) => { 27 channel.addEventListener('message', ({data}) => { 28 // echo data back to sender 29 channel.send(data); 30 // close channel 31 channel.close(); 32 }) 33 }); 34 35 for (let i = 0; i < 1000; i++) { 36 const dc = offerer.createDataChannel(`dc ${i}`); 37 await new Promise(r => dc.onopen = r); 38 assert_equals(dc.id, id); 39 dc.send("ping"); 40 dc.close(); 41 await new Promise(r => dc.onclose = r); 42 } 43 }, 'Test that repeated open/send/close with minimal waiting uses the same id every time'); 44 45 </script>