tor-browser

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

test_peerConnection_promiseSendOnly.html (2307B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <script type="application/javascript" src="pc.js"></script>
      5 </head>
      6 <body>
      7 <pre id="test">
      8 <script type="application/javascript">
      9  createHTML({
     10    bug: "1091898",
     11    title: "PeerConnection with promises (sendonly)",
     12    visible: true
     13  });
     14 
     15  var pc1 = new RTCPeerConnection();
     16  var pc2 = new RTCPeerConnection();
     17 
     18  var add = (pc, can, failed) => can && pc.addIceCandidate(can).catch(failed);
     19  pc1.onicecandidate = e => add(pc2, e.candidate, generateErrorCallback());
     20  pc2.onicecandidate = e => add(pc1, e.candidate, generateErrorCallback());
     21 
     22  var v1, v2;
     23  var delivered = new Promise(resolve => pc2.ontrack = e => {
     24    // Test RTCTrackEvent here.
     25    ok(e.streams.length, "has streams");
     26    ok(e.streams[0].getTrackById(e.track.id), "has track");
     27    ok(pc2.getReceivers().some(receiver => receiver == e.receiver), "has receiver");
     28    if (e.streams[0].getTracks().length == 2) {
     29      // Test RTCTrackEvent required args here.
     30      mustThrowWith("RTCTrackEvent wo/required args",
     31                    "TypeError", () => new RTCTrackEvent("track", {}));
     32      v2.srcObject = e.streams[0];
     33      resolve();
     34    }
     35  });
     36 
     37  runNetworkTest(function() {
     38    v1 = createMediaElement('video', 'v1');
     39    v2 = createMediaElement('video', 'v2');
     40    var canPlayThrough = new Promise(resolve => v2.canplaythrough = e => resolve());
     41 
     42    is(v2.currentTime, 0, "v2.currentTime is zero at outset");
     43 
     44    return navigator.mediaDevices.getUserMedia({ video: true, audio: true })
     45    .then(stream => (v1.srcObject = stream).getTracks().forEach(t => pc1.addTrack(t, stream)))
     46    .then(() => pc1.createOffer({})) // check that createOffer accepts arg.
     47    .then(offer => pc1.setLocalDescription(offer))
     48    .then(() => pc2.setRemoteDescription(pc1.localDescription))
     49    .then(() => pc2.createAnswer({}))  // check that createAnswer accepts arg.
     50    .then(answer => pc2.setLocalDescription(answer))
     51    .then(() => pc1.setRemoteDescription(pc2.localDescription))
     52    .then(() => delivered)
     53 //    .then(() => canPlayThrough)    // why doesn't this fire?
     54    .then(() => waitUntil(() => v2.currentTime > 0))
     55    .then(() => ok(v2.currentTime > 0, "v2.currentTime is moving (" + v2.currentTime + ")"))
     56    .then(() => ok(true, "Connected."));
     57  });
     58 </script>
     59 </pre>
     60 </body>
     61 </html>