tor-browser

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

RTCEncodedVideoFrame-serviceworker-failure.https.html (2594B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
      4 <title>RTCEncodedVideoFrame cannot cross agent clusters, service worker edition</title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src=/resources/testdriver.js></script>
      8 <script src=/resources/testdriver-vendor.js></script>
      9 <script src='../../mediacapture-streams/permission-helper.js'></script>
     10 <script src="../../webrtc/RTCPeerConnection-helper.js"></script>
     11 <script src="../../service-workers/service-worker/resources/test-helpers.sub.js"></script>
     12 
     13 <script>
     14 "use strict";
     15 promise_test(async t => {
     16  const caller = new RTCPeerConnection({encodedInsertableStreams:true});
     17  t.add_cleanup(() => caller.close());
     18  const callee = new RTCPeerConnection();
     19  t.add_cleanup(() => callee.close());
     20 
     21  await setMediaPermission("granted", ["camera"]);
     22  const stream = await navigator.mediaDevices.getUserMedia({video:true});
     23  const videoTrack = stream.getVideoTracks()[0];
     24  t.add_cleanup(() => videoTrack.stop());
     25 
     26  const videoSender = caller.addTrack(videoTrack)
     27  const senderStreams = videoSender.createEncodedStreams();
     28  const senderReader = senderStreams.readable.getReader();
     29  const senderWriter = senderStreams.writable.getWriter();
     30 
     31  exchangeIceCandidates(caller, callee);
     32  await exchangeOfferAnswer(caller, callee);
     33 
     34  const result = await senderReader.read();
     35  const scope = "resources/blank.html";
     36  const reg = await service_worker_unregister_and_register(t, "resources/serviceworker-failure.js", scope)
     37  t.add_cleanup(() => service_worker_unregister(t, scope));
     38  await wait_for_state(t, reg.installing, "activated");
     39  const iframe = await with_iframe(scope);
     40  t.add_cleanup(() => iframe.remove());
     41  const sw = iframe.contentWindow.navigator.serviceWorker;
     42  let state = "start in window";
     43  return new Promise(resolve => {
     44    sw.onmessage = t.step_func(e => {
     45      if (e.data === "start in worker") {
     46        assert_equals(state, "start in window");
     47        sw.controller.postMessage(result.value);
     48        state = "we are expecting confirmation of an onmessageerror in the worker";
     49      } else if (e.data === "onmessageerror was received in worker") {
     50        assert_equals(state, "we are expecting confirmation of an onmessageerror in the worker");
     51        resolve();
     52      } else {
     53        assert_unreached("Got an unexpected message from the service worker: " + e.data);
     54      }
     55    });
     56 
     57    sw.controller.postMessage(state);
     58  });
     59 });
     60 </script>