tor-browser

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

test_rfp_api_disabling_enabled.html (1609B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <title></title>
      5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7 </head>
      8 <body>
      9 <script>
     10 const apis = [
     11  "AudioData",
     12  "AudioDecoder",
     13  "AudioEncoder",
     14  "EncodedAudioChunk",
     15  "EncodedVideoChunk",
     16  "ImageDecoder",
     17  "ImageTrack",
     18  "ImageTrackList",
     19  "VideoColorSpace",
     20  "VideoDecoder",
     21  "VideoEncoder",
     22  "VideoFrame",
     23 ];
     24 
     25 function enabledAPIs() {
     26  return apis.filter(api => typeof window[api] !== "undefined");
     27 }
     28 
     29 function enabledAPIsWorker() {
     30  const code = `
     31  onmessage = e => {
     32    const apis = ${JSON.stringify(apis)};
     33    postMessage(apis.filter(api => typeof self[api] !== "undefined"));
     34  };`;
     35  const blob = new Blob([code], { type: "application/javascript" });
     36  const worker = new Worker(URL.createObjectURL(blob));
     37 
     38  return new Promise((resolve) => {
     39    worker.addEventListener("message", async (e) => {
     40      worker.terminate();
     41      resolve(e.data);
     42    });
     43 
     44    worker.postMessage({});
     45  });
     46 }
     47 
     48 add_setup(async () => {
     49  await SpecialPowers.pushPrefEnv({
     50    set: [
     51      ["dom.media.webcodecs.enabled", true],
     52      ["dom.media.webcodecs.image-decoder.enabled", true],
     53      ["privacy.fingerprintingProtection", true],
     54      ["privacy.fingerprintingProtection.overrides", "-AllTargets,+WebCodecs"],
     55    ],
     56  });
     57 });
     58 
     59 add_task(async () => {
     60  is(enabledAPIs().length, 0, true, "All WebCodecs APIs should be disabled");
     61  is(
     62    (await enabledAPIsWorker()).length,
     63    0,
     64    "All WebCodecs APIs should be disabled in workers too"
     65  );
     66 });
     67 </script>
     68 </body>
     69 </html>