tor-browser

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

basicvtt-server.sjs (3108B)


      1 // This file is a simple "server" for test_webvtt_resistfingerprinting.html
      2 
      3 // You can request a VTT file by setting the `request` parameter to `vtt` and
      4 // providing an `id` parameter. Id parameter is used to track how many times
      5 // a specific test has requested the file. Please don't use the same id for
      6 // multiple tests.
      7 
      8 // You can also request the number of times a specific test has requested the
      9 // file by setting the `request` parameter to `count` and providing an `id`
     10 // parameter.
     11 
     12 const vtt = `WEBVTT
     13 REGION
     14 id:testOne lines:2 width:30%
     15 REGION
     16 id:testTwo lines:4 width:20%
     17 
     18 1
     19 00:00.500 --> 00:00.700 region:testOne
     20 This
     21 
     22 2
     23 00:01.200 --> 00:02.400 region:testTwo
     24 Is
     25 
     26 2.5
     27 00:02.000 --> 00:03.500 region:testOne
     28 (Over here?!)
     29 
     30 3
     31 00:02.710 --> 00:02.910
     32 A
     33 
     34 4
     35 00:03.217 --> 00:03.989
     36 Test
     37 
     38 5
     39 00:03.217 --> 00:03.989
     40 And more!
     41 `;
     42 
     43 // stolen from server-stream-download.sjs# and they stole it from file_blocked_script.sjs
     44 function setGlobalState(data, key) {
     45   const x = {
     46     data,
     47     QueryInterface(_iid) {
     48       return this;
     49     },
     50   };
     51   x.wrappedJSObject = x;
     52   setObjectState(key, x);
     53 }
     54 
     55 function getGlobalState(key) {
     56   let data;
     57   getObjectState(key, function (x) {
     58     data = x && x.wrappedJSObject.data;
     59   });
     60   return data;
     61 }
     62 
     63 const requestCounter = (() => {
     64   const keyPrefix = "vtt-request-counter-";
     65 
     66   return {
     67     recordRequest(id) {
     68       const key = keyPrefix + id;
     69       const count = getGlobalState(key) || 0;
     70       setGlobalState(count + 1, key);
     71     },
     72     getRequestCount(id) {
     73       const key = keyPrefix + id;
     74       return getGlobalState(key) || 0;
     75     },
     76   };
     77 })();
     78 
     79 // We need this for test-verify jobs. It runs the test
     80 // multiple times and we need to know how many times
     81 // the test has been run because global state is not
     82 // reset between runs.
     83 const iterationCounter = (() => {
     84   const keyPrefix = "vtt-request-iteration-counter-";
     85 
     86   return {
     87     recordIteration() {
     88       const count = getGlobalState(keyPrefix) || 0;
     89       setGlobalState(count + 1, keyPrefix);
     90     },
     91     getIterationCount() {
     92       return getGlobalState(keyPrefix) || 0;
     93     },
     94   };
     95 })();
     96 
     97 function handleRequest(aRequest, aResponse) {
     98   aResponse.setHeader("Access-Control-Allow-Origin", "*", false);
     99 
    100   const params = aRequest.queryString
    101     .split("&")
    102     .map(command => command.split("="))
    103     .reduce((acc, [key, value]) => {
    104       acc[key] = value;
    105       return acc;
    106     }, {});
    107 
    108   if (params.request === "vtt") {
    109     requestCounter.recordRequest(params.id);
    110     aResponse.setStatusLine(aRequest.httpVersion, 200);
    111     aResponse.setHeader("Content-Type", "text/vtt", false);
    112     aResponse.write(vtt);
    113   } else if (params.request === "count") {
    114     aResponse.setStatusLine(aRequest.httpVersion, 200);
    115     aResponse.write(requestCounter.getRequestCount(params.id));
    116   } else if (params.request === "newIteration") {
    117     iterationCounter.recordIteration();
    118     aResponse.setStatusLine(aRequest.httpVersion, 200);
    119     aResponse.write(iterationCounter.getIterationCount());
    120   } else {
    121     aResponse.setStatusLine(aRequest.httpVersion, 400);
    122     aResponse.write(aRequest.queryString);
    123   }
    124 }