tor-browser

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

test_peerConnection_replaceNullTrackThenRenegotiateVideo.html (2453B)


      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  <script type="application/javascript" src="simulcast.js"></script></head>
      7 <body>
      8 <pre id="test">
      9 <script type="application/javascript">
     10  createHTML({
     11    bug: "1763832",
     12    title: "Renegotiation (video): Start with no track and recvonly, then replace and set direction to sendrecv, then renegotiate"
     13  });
     14 
     15  runNetworkTest(async () => {
     16    await pushPrefs(
     17      ['media.video_loopback_dev', ''],
     18      ['media.navigator.streams.fake', true]);
     19    // [TODO] re-enable HW decoder after bug 1526207 is fixed.
     20    if (navigator.userAgent.includes("Android")) {
     21      await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false],
     22                      ["media.webrtc.hw.h264.enabled", false]);
     23    }
     24 
     25    const offerer = new RTCPeerConnection();
     26    const answerer = new RTCPeerConnection();
     27    const transceiverSend = offerer.addTransceiver('video', {direction: 'recvonly'});
     28 
     29    const add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
     30    offerer.onicecandidate = e => add(answerer, e.candidate, generateErrorCallback());
     31    answerer.onicecandidate = e => add(offerer, e.candidate, generateErrorCallback());
     32 
     33    await offerer.setLocalDescription();
     34    await answerer.setRemoteDescription(offerer.localDescription);
     35    await answerer.setLocalDescription();
     36    await offerer.setRemoteDescription(answerer.localDescription);
     37 
     38    // add video with replaceTrack, set send bit, and renegotiate
     39    const stream = await navigator.mediaDevices.getUserMedia({video: true});
     40    const [track] = stream.getVideoTracks();
     41    transceiverSend.sender.replaceTrack(track);
     42    transceiverSend.direction = "sendrecv";
     43    const metadataToBeLoaded = [];
     44    answerer.ontrack = (e) => {
     45      metadataToBeLoaded.push(getPlaybackWithLoadedMetadata(e.track));
     46    };
     47 
     48    await offerer.setLocalDescription();
     49    await answerer.setRemoteDescription(offerer.localDescription);
     50    await answerer.setLocalDescription();
     51    await offerer.setRemoteDescription(answerer.localDescription);
     52 
     53    const elems = await Promise.all(metadataToBeLoaded);
     54    is(elems.length, 1, "Should have one video element");
     55 
     56    const helper = new VideoStreamHelper();
     57    await helper.checkVideoPlaying(elems[0]);
     58  });
     59 
     60 </script>
     61 </pre>
     62 </body>
     63 </html>