tor-browser

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

RTCRtpReceiver-track-settings.tentative.html (2524B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>RTCRtpReceiver.track.getSettings()</title>
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <script src="RTCPeerConnection-helper.js"></script>
      7 <script>
      8 'use strict';
      9 
     10 // Tentative pending resolution of https://github.com/w3c/mediacapture-fromelement/issues/48.
     11 
     12 promise_test(async t => {
     13  if (!document.body) {
     14    await new Promise(r => document.addEventListener("DOMContentLoaded", r, {once: true}));
     15  }
     16  const noiseStream = await getNoiseStream({video: true});
     17  const [sendTrack] = noiseStream.getTracks();
     18  const [canvas] = document.body.getElementsByTagName("canvas");
     19  const ctx = canvas.getContext("2d");
     20 
     21  const pc1 = new RTCPeerConnection();
     22  t.add_cleanup(() => pc1.close());
     23  const pc2 = new RTCPeerConnection();
     24  t.add_cleanup(() => pc2.close());
     25 
     26  // Send noise track.
     27  const sender = pc1.addTrack(sendTrack);
     28  const params = sender.getParameters();
     29  params.degradationPreference = "maintain-resolution";
     30  await sender.setParameters(params);
     31 
     32  const haveTrackEvent = new Promise(r => pc2.ontrack = r);
     33  exchangeIceCandidates(pc1, pc2);
     34  await pc1.setLocalDescription();
     35  await pc2.setRemoteDescription(pc1.localDescription);
     36  await pc2.setLocalDescription();
     37  await pc1.setRemoteDescription(pc2.localDescription);
     38 
     39  const {track: recvTrack} = await haveTrackEvent;
     40  assert_equals(recvTrack.getSettings().width, 0, "Receive track width setting is zero initially");
     41  assert_equals(recvTrack.getSettings().height, 0, "Receive track height setting is zero initially");
     42 
     43  // Display received track in video element for resize events.
     44  const destVideo = document.createElement('video');
     45  destVideo.autoplay = true;
     46  destVideo.srcObject = new MediaStream([recvTrack]);
     47  await new Promise(r => destVideo.onloadedmetadata = r);
     48  assert_equals(recvTrack.getSettings().width, canvas.width, "Receive track width setting is set after receiving data");
     49  assert_equals(recvTrack.getSettings().height, canvas.height, "Receive track height setting is set after receiving data");
     50 
     51  canvas.width = 240;
     52  canvas.height = 160;
     53  await new Promise(r => destVideo.onresize = r);
     54  assert_equals(recvTrack.getSettings().width, 240, "Receive track width setting is updated after resolution change");
     55  assert_equals(recvTrack.getSettings().height, 160, "Receive track height setting is updated after resolution change");
     56 }, "RTCRtpReceiver.track.getSettings() contains resolution entries");
     57 </script>