// This file is a simple "server" for test_webvtt_resistfingerprinting.html // You can request a VTT file by setting the `request` parameter to `vtt` and // providing an `id` parameter. Id parameter is used to track how many times // a specific test has requested the file. Please don't use the same id for // multiple tests. // You can also request the number of times a specific test has requested the // file by setting the `request` parameter to `count` and providing an `id` // parameter. const vtt = `WEBVTT REGION id:testOne lines:2 width:30% REGION id:testTwo lines:4 width:20% 1 00:00.500 --> 00:00.700 region:testOne This 2 00:01.200 --> 00:02.400 region:testTwo Is 2.5 00:02.000 --> 00:03.500 region:testOne (Over here?!) 3 00:02.710 --> 00:02.910 A 4 00:03.217 --> 00:03.989 Test 5 00:03.217 --> 00:03.989 And more! `; // stolen from server-stream-download.sjs# and they stole it from file_blocked_script.sjs function setGlobalState(data, key) { const x = { data, QueryInterface(_iid) { return this; }, }; x.wrappedJSObject = x; setObjectState(key, x); } function getGlobalState(key) { let data; getObjectState(key, function (x) { data = x && x.wrappedJSObject.data; }); return data; } const requestCounter = (() => { const keyPrefix = "vtt-request-counter-"; return { recordRequest(id) { const key = keyPrefix + id; const count = getGlobalState(key) || 0; setGlobalState(count + 1, key); }, getRequestCount(id) { const key = keyPrefix + id; return getGlobalState(key) || 0; }, }; })(); // We need this for test-verify jobs. It runs the test // multiple times and we need to know how many times // the test has been run because global state is not // reset between runs. const iterationCounter = (() => { const keyPrefix = "vtt-request-iteration-counter-"; return { recordIteration() { const count = getGlobalState(keyPrefix) || 0; setGlobalState(count + 1, keyPrefix); }, getIterationCount() { return getGlobalState(keyPrefix) || 0; }, }; })(); function handleRequest(aRequest, aResponse) { aResponse.setHeader("Access-Control-Allow-Origin", "*", false); const params = aRequest.queryString .split("&") .map(command => command.split("=")) .reduce((acc, [key, value]) => { acc[key] = value; return acc; }, {}); if (params.request === "vtt") { requestCounter.recordRequest(params.id); aResponse.setStatusLine(aRequest.httpVersion, 200); aResponse.setHeader("Content-Type", "text/vtt", false); aResponse.write(vtt); } else if (params.request === "count") { aResponse.setStatusLine(aRequest.httpVersion, 200); aResponse.write(requestCounter.getRequestCount(params.id)); } else if (params.request === "newIteration") { iterationCounter.recordIteration(); aResponse.setStatusLine(aRequest.httpVersion, 200); aResponse.write(iterationCounter.getIterationCount()); } else { aResponse.setStatusLine(aRequest.httpVersion, 400); aResponse.write(aRequest.queryString); } }