tor-browser

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

test_peerConnection_throwInCallbacks.html (2326B)


      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: "857765",
     11    title: "Throw in PeerConnection callbacks"
     12  });
     13 
     14 runNetworkTest(async function () {
     15  // Tests trigger warnings
     16  await SpecialPowers.pushPrefEnv({
     17    set: [['media.peerconnection.treat_warnings_as_errors', false]]
     18  });
     19 
     20  let finish;
     21  const onfinished = new Promise(r => finish = async () => {
     22    window.onerror = oldOnError;
     23    is(error_count, 7, "Seven expected errors verified.");
     24    r();
     25  });
     26 
     27  function getFail() {
     28    return err => {
     29      window.onerror = oldOnError;
     30      generateErrorCallback()(err);
     31    };
     32  }
     33 
     34  let error_count = 0;
     35  let oldOnError = window.onerror;
     36  window.onerror = (errorMsg, url, lineNumber) => {
     37    if (!errorMsg.includes("Expected")) {
     38      getFail()(errorMsg);
     39    }
     40    error_count += 1;
     41    info("onerror " + error_count + ": " + errorMsg);
     42    if (error_count == 7) {
     43      finish();
     44    }
     45    throw new Error("window.onerror may throw");
     46  }
     47 
     48  let pc0, pc1, pc2;
     49  // Test failure callbacks (limited to 1 for now)
     50  pc0 = new RTCPeerConnection();
     51  pc0.close();
     52  pc0.createOffer(getFail(), function(err) {
     53    pc1 = new RTCPeerConnection();
     54    pc2 = new RTCPeerConnection();
     55 
     56    // Test success callbacks (happy path)
     57    navigator.mediaDevices.getUserMedia({video:true}).then(function(video1) {
     58      pc1.addStream(video1);
     59      pc1.createOffer(function(offer) {
     60        pc1.setLocalDescription(offer, function() {
     61          pc2.setRemoteDescription(offer, function() {
     62            pc2.createAnswer(function(answer) {
     63              pc2.setLocalDescription(answer, function() {
     64                pc1.setRemoteDescription(answer, function() {
     65                  throw new Error("Expected");
     66                }, getFail());
     67                throw new Error("Expected");
     68              }, getFail());
     69              throw new Error("Expected");
     70            }, getFail());
     71            throw new Error("Expected");
     72          }, getFail());
     73          throw new Error("Expected");
     74        }, getFail());
     75        throw new Error("Expected");
     76      }, getFail());
     77    }, getFail());
     78    throw new Error("Expected");
     79  });
     80 
     81  return onfinished;
     82 });
     83 
     84 </script>
     85 </pre>
     86 </body>
     87 </html>