tor-browser

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

test_peerConnection_replaceNullTrackThenRenegotiateAudio.html (2035B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <script type="application/javascript" src="pc.js"></script>
      5  <script type="application/javascript" src="/tests/dom/canvas/test/captureStream_common.js"></script>
      6 <body>
      7 <pre id="test">
      8 <script type="application/javascript">
      9  createHTML({
     10    bug: "1763832",
     11    title: "Renegotiation (audio): Start with no track and recvonly, then replace and set direction to sendrecv, then renegotiate"
     12  });
     13 
     14  runNetworkTest(async () => {
     15    await pushPrefs(
     16      ['media.audio_loopback_dev', ''],
     17      ['media.navigator.streams.fake', true]);
     18    const offerer = new RTCPeerConnection();
     19    const answerer = new RTCPeerConnection();
     20    const transceiverSend = offerer.addTransceiver('audio', {direction: 'recvonly'});
     21 
     22    const add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
     23    offerer.onicecandidate = e => add(answerer, e.candidate, generateErrorCallback());
     24    answerer.onicecandidate = e => add(offerer, e.candidate, generateErrorCallback());
     25 
     26    await offerer.setLocalDescription();
     27    await answerer.setRemoteDescription(offerer.localDescription);
     28    await answerer.setLocalDescription();
     29    await offerer.setRemoteDescription(answerer.localDescription);
     30 
     31    // add audio with replaceTrack, set send bit, and renegotiate
     32    const stream = await navigator.mediaDevices.getUserMedia({audio: true});
     33    const [track] = stream.getAudioTracks();
     34    transceiverSend.sender.replaceTrack(track);
     35    transceiverSend.direction = "sendrecv";
     36    const remoteStreamAvailable = new Promise(r => {
     37      answerer.ontrack = ({track}) => r(new MediaStream([track]));
     38    });
     39 
     40    await offerer.setLocalDescription();
     41    await answerer.setRemoteDescription(offerer.localDescription);
     42    await answerer.setLocalDescription();
     43    await offerer.setRemoteDescription(answerer.localDescription);
     44 
     45    const remoteStream = await remoteStreamAvailable;
     46    const h = new AudioStreamFlowingHelper();
     47    await h.checkAudioFlowing(remoteStream);
     48  });
     49 
     50 </script>
     51 </pre>
     52 </body>
     53 </html>