tor-browser

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

referrer_change_server.sjs (4986B)


      1 var BASE_URL = "example.com/tests/dom/base/test/referrer_change_server.sjs";
      2 
      3 function createTestUrl(aPolicy, aAction, aName) {
      4   return (
      5     "http://" +
      6     BASE_URL +
      7     "?" +
      8     "action=" +
      9     aAction +
     10     "&" +
     11     "policy=" +
     12     aPolicy +
     13     "&" +
     14     "name=" +
     15     aName +
     16     "&" +
     17     "type=link"
     18   );
     19 }
     20 
     21 function createTest(aMetaPolicy, aReferrerPolicy, aName) {
     22   return (
     23     "<!DOCTYPE HTML>\n\
     24          <html>" +
     25     '<meta name="referrer" content="' +
     26     aMetaPolicy +
     27     '">' +
     28     "<body>" +
     29     '<a href="' +
     30     createTestUrl(aReferrerPolicy, "test", aName + aReferrerPolicy) +
     31     '" id="link">' +
     32     aReferrerPolicy +
     33     "</a>" +
     34     "<script>" +
     35     // LOAD EVENT (of the test)
     36     // fires when the page is loaded, then click link
     37     // first change meta referrer, then click link
     38     'window.addEventListener("load", function() {\n\
     39                  document.getElementsByName("referrer")[0].content = "' +
     40     aReferrerPolicy +
     41     '";\n\
     42                  document.getElementById("link").click();\n\
     43                }.bind(window), false);' +
     44     "</script>\n\
     45            </body>\n\
     46          </html>"
     47   );
     48 }
     49 
     50 function createTest2(aMetaPolicy, aReferrerPolicy, aName) {
     51   return (
     52     "<!DOCTYPE HTML>\n\
     53          <html>" +
     54     '<meta name="referrer" content="' +
     55     aMetaPolicy +
     56     '">' +
     57     "<body>" +
     58     '<a href="' +
     59     createTestUrl(aReferrerPolicy, "test", aName + aReferrerPolicy) +
     60     '" id="link">' +
     61     aReferrerPolicy +
     62     "</a>" +
     63     "<script>" +
     64     // LOAD EVENT (of the test)
     65     // fires when the page is loaded, then click link
     66     // first change meta referrer, then click link
     67     'window.addEventListener("load", function() {\n\
     68                  document.getElementsByName("referrer")[0].setAttribute("content", "' +
     69     aReferrerPolicy +
     70     '");\n\
     71                  document.getElementById("link").click();\n\
     72                }.bind(window), false);' +
     73     "</script>\n\
     74            </body>\n\
     75          </html>"
     76   );
     77 }
     78 
     79 function handleRequest(request, response) {
     80   var sharedKey = "referrer_change_server.sjs";
     81   var params = request.queryString.split("&");
     82   var action = params[0].split("=")[1];
     83 
     84   if (action === "resetState") {
     85     var state = getSharedState(sharedKey);
     86     state = {};
     87     setSharedState(sharedKey, JSON.stringify(state));
     88     response.write("");
     89     return;
     90   }
     91   if (action === "test") {
     92     // ?action=test&policy=origin&name=name
     93     var policy = params[1].split("=")[1];
     94     var name = params[2].split("=")[1];
     95     var type = params[3].split("=")[1];
     96     var result = getSharedState(sharedKey);
     97 
     98     if (result === "") {
     99       result = {};
    100     } else {
    101       result = JSON.parse(result);
    102     }
    103 
    104     if (!result.tests) {
    105       result.tests = {};
    106     }
    107 
    108     var referrerLevel = "none";
    109     var test = {};
    110     if (request.hasHeader("Referer")) {
    111       let referrer = request.getHeader("Referer");
    112       if (referrer.indexOf("referrer_change_server") > 0) {
    113         referrerLevel = "full";
    114       } else if (referrer == "http://mochi.test:8888") {
    115         referrerLevel = "origin";
    116       }
    117       test.referrer = request.getHeader("Referer");
    118     } else {
    119       test.referrer = "";
    120     }
    121     test.policy = referrerLevel;
    122     test.expected = policy;
    123 
    124     result.tests[name] = test;
    125 
    126     setSharedState(sharedKey, JSON.stringify(result));
    127 
    128     // forward link click to redirect URL to finish test
    129     if (type === "link") {
    130       var loc =
    131         "https://example.com/tests/dom/base/test/file_change_policy_redirect.html";
    132       response.setStatusLine("1.1", 302, "Found");
    133       response.setHeader("Location", loc, false);
    134     }
    135 
    136     return;
    137   }
    138   if (action === "get-test-results") {
    139     // ?action=get-result
    140     response.setHeader("Cache-Control", "no-cache", false);
    141     response.setHeader("Content-Type", "text/plain", false);
    142     response.write(getSharedState(sharedKey));
    143     return;
    144   }
    145   if (action === "generate-policy-test") {
    146     // ?action=generate-policy-test&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string
    147     response.setHeader("Cache-Control", "no-cache", false);
    148     response.setHeader("Content-Type", "text/html; charset=utf-8", false);
    149     var referrerPolicy = unescape(params[1].split("=")[1]);
    150     var name = unescape(params[2].split("=")[1]);
    151     var newPolicy = params[3].split("=")[1];
    152 
    153     response.write(createTest(referrerPolicy, newPolicy, name));
    154     return;
    155   }
    156   if (action === "generate-policy-test2") {
    157     // ?action=generate-policy-test2&referrerPolicy=b64-encoded-string&name=name&newPolicy=b64-encoded-string
    158     response.setHeader("Cache-Control", "no-cache", false);
    159     response.setHeader("Content-Type", "text/html; charset=utf-8", false);
    160     var referrerPolicy = unescape(params[1].split("=")[1]);
    161     var name = unescape(params[2].split("=")[1]);
    162     var newPolicy = params[3].split("=")[1];
    163 
    164     response.write(createTest2(referrerPolicy, newPolicy, name));
    165     return;
    166   }
    167 
    168   response.write("I don't know action " + action);
    169 }