tor-browser

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

RTCPeerConnection-onsignalingstatechanged.https.html (2561B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title>RTCPeerConnection onsignalingstatechanged</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 
      9 promise_test(async t => {
     10  const [track] = (await getNoiseStream({video: true})).getTracks();
     11  t.add_cleanup(() => track.stop());
     12  const pc1 = new RTCPeerConnection();
     13  t.add_cleanup(() => pc1.close());
     14  const pc2 = new RTCPeerConnection();
     15  t.add_cleanup(() => pc2.close());
     16  pc1.addTrack(track, new MediaStream());
     17  await pc1.setLocalDescription(await pc1.createOffer());
     18  const events = [];
     19  pc2.onsignalingstatechange = t.step_func(e => {
     20    const [transceiver] = pc2.getTransceivers();
     21    assert_equals(transceiver.currentDirection, null);
     22    events.push(pc2.signalingState);
     23  });
     24  await pc2.setRemoteDescription(pc1.localDescription);
     25  assert_equals(events.length, 1, "event fired");
     26  assert_equals(events[0], "have-remote-offer");
     27 
     28  pc2.onsignalingstatechange = t.step_func(e => {
     29    const [transceiver] = pc2.getTransceivers();
     30    assert_equals(transceiver.currentDirection, "recvonly");
     31    events.push(pc2.signalingState);
     32  });
     33  await pc2.setLocalDescription(await pc2.createAnswer());
     34  assert_equals(events.length, 2, "event fired");
     35  assert_equals(events[1], "stable");
     36 }, 'Negotiation methods fire signalingstatechange events');
     37 
     38 promise_test(async t => {
     39  const pc1 = new RTCPeerConnection();
     40  t.add_cleanup(() => pc1.close());
     41  const pc2 = new RTCPeerConnection();
     42  const stream = await getNoiseStream({ audio: true });
     43  t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
     44 
     45  stream.getTracks().forEach(track => pc1.addTrack(track, stream));
     46  exchangeIceCandidates(pc1, pc2);
     47  exchangeOfferAnswer(pc1, pc2);
     48  await listenToIceConnected(pc2);
     49 
     50  pc2.onsignalingstatechange = t.unreached_func();
     51  pc2.close();
     52  assert_equals(pc2.signalingState, 'closed');
     53  await new Promise(r => t.step_timeout(r, 100));
     54 }, 'Closing a PeerConnection should not fire signalingstatechange event');
     55 
     56 promise_test(async t => {
     57  const pc1 = new RTCPeerConnection();
     58  t.add_cleanup(() => pc1.close());
     59  const pc2 = new RTCPeerConnection();
     60  t.add_cleanup(() => pc2.close());
     61 
     62  pc2.addTransceiver('video');
     63 
     64  pc1.ontrack = t.unreached_func();
     65  pc1.onsignalingstatechange = t.step_func(e => {
     66    pc1.ontrack = null;
     67  });
     68  await pc1.setRemoteDescription(await pc2.createOffer());
     69 }, 'signalingstatechange is the first event to fire');
     70 
     71 </script>