tor-browser

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

test_peerConnection_replaceVideoThenRenegotiate.html (2816B)


      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 </head>
      7 <body>
      8 <pre id="test">
      9 <script type="application/javascript">
     10  createHTML({
     11    bug: "1017888",
     12    title: "Renegotiation: replaceTrack followed by adding a second video stream"
     13  });
     14 
     15  runNetworkTest(async (options) => {
     16    await pushPrefs(['media.peerconnection.video.min_bitrate_estimate', 180*1000]);
     17    // [TODO] re-enable HW decoder after bug 1526207 is fixed.
     18    if (navigator.userAgent.includes("Android")) {
     19      await pushPrefs(["media.navigator.mediadatadecoder_vpx_enabled", false],
     20                      ["media.webrtc.hw.h264.enabled", false]);
     21    }
     22 
     23    const test = new PeerConnectionTest(options);
     24    test.setMediaConstraints([{video:true}], [{video:true}]);
     25    const helper = new VideoStreamHelper();
     26    const emitter1 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.red,
     27                                           CaptureStreamTestHelper.prototype.green);
     28    const emitter2 = new VideoFrameEmitter(CaptureStreamTestHelper.prototype.blue,
     29                                           CaptureStreamTestHelper.prototype.grey);
     30    test.chain.replace("PC_LOCAL_GUM", [
     31      function PC_LOCAL_ADDTRACK(test) {
     32        test.pcLocal.attachLocalStream(emitter1.stream());
     33        emitter1.start();
     34      },
     35    ]);
     36    addRenegotiation(test.chain,
     37      [
     38        function PC_LOCAL_REPLACE_VIDEO_TRACK_THEN_ADD_SECOND_STREAM(test) {
     39          emitter1.stop();
     40          emitter2.start();
     41          const newstream = emitter2.stream();
     42          const newtrack = newstream.getVideoTracks()[0];
     43          var sender = test.pcLocal._pc.getSenders()[0];
     44          return test.pcLocal.senderReplaceTrack(sender, newtrack, newstream)
     45            .then(() => {
     46              test.setMediaConstraints([{video: true}, {video: true}],
     47                                       [{video: true}]);
     48            });
     49        },
     50      ],
     51      [
     52        function PC_REMOTE_CHECK_ORIGINAL_TRACK_NOT_ENDED(test) {
     53          is(test.pcRemote._pc.getTransceivers().length, 1,
     54              "pcRemote should have one transceiver");
     55          const track = test.pcRemote._pc.getTransceivers()[0].receiver.track;
     56 
     57          const vremote = test.pcRemote.remoteMediaElements.find(
     58              elem => elem.id.includes(track.id));
     59          if (!vremote) {
     60            return Promise.reject(new Error("Couldn't find video element"));
     61          }
     62          ok(!vremote.ended, "Original track should not have ended after renegotiation (replaceTrack is not signalled!)");
     63          return helper.checkVideoPlaying(vremote);
     64        }
     65      ]
     66    );
     67 
     68    await test.run();
     69  });
     70 
     71 </script>
     72 </pre>
     73 </body>
     74 </html>