tor-browser

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

getStats-remote-candidate-address.html (2294B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>Exposure or remote candidate address on stats</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 promise_test(async (test) => {
     11    const localPc = new RTCPeerConnection();
     12    test.add_cleanup(() => localPc.close());
     13    const remotePc = new RTCPeerConnection();
     14    test.add_cleanup(() => remotePc.close());
     15 
     16    const pairPromise = openChannelPair(localPc, remotePc, 'prflx_obfuscate');
     17    localPc.addEventListener('icecandidate', event => {
     18        if (event.candidate)
     19            remotePc.addIceCandidate(event.candidate);
     20    });
     21    exchangeOfferAnswer(localPc, remotePc);
     22 
     23    const [localChannel, remoteChannel] = await pairPromise;
     24 
     25    localChannel.send("test");
     26 
     27    await new Promise(resolve => {
     28        remoteChannel.onmessage = resolve;
     29    });
     30 
     31    const remoteCandidateStats = [...(await localPc.getStats()).values()].find(({type}) => type === 'remote-candidate');
     32    assert_equals(remoteCandidateStats.address, null, "address should be null");
     33 }, "Do not expose in stats remote addresses that are not known to be already exposed to JS");
     34 
     35 promise_test(async (test) => {
     36    const localPc = new RTCPeerConnection();
     37    test.add_cleanup(() => localPc.close());
     38    const remotePc = new RTCPeerConnection();
     39    test.add_cleanup(() => remotePc.close());
     40 
     41    const pairPromise = openChannelPair(localPc, remotePc, 'prflx_obfuscate');
     42    localPc.addEventListener('icecandidate', event => {
     43        if (event.candidate)
     44            remotePc.addIceCandidate(event.candidate);
     45    });
     46    exchangeOfferAnswer(localPc, remotePc);
     47 
     48    const [localChannel, remoteChannel] = await pairPromise;
     49 
     50    localChannel.send("test");
     51 
     52    await new Promise(resolve => {
     53        remoteChannel.onmessage = resolve;
     54    });
     55 
     56    const remoteCandidateStats = [...(await localPc.getStats()).values()].find(({type}) => type === 'remote-candidate');
     57    assert_not_equals(remoteCandidateStats.address, null, "address should not be null");
     58 }, "Expose in stats remote addresses that are already exposed to JS");
     59 
     60 </script>