tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>