tor-browser

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

iframe_meta_refresh.sjs (2305B)


      1 /*
      2  * Test server for iframe refresh from meta http-equiv
      3  */
      4 
      5 const SHARED_KEY = "iframe_meta_refresh";
      6 const DEFAULT_STATE = { count: 0, referrers: [] };
      7 const REFRESH_PAGE =
      8   "http://example.com/tests/dom/base/test/iframe_meta_refresh.sjs?action=test";
      9 
     10 function createContent(refresh) {
     11   let metaRefresh = "";
     12   let scriptMessage = "";
     13 
     14   if (refresh) {
     15     metaRefresh = `<meta http-equiv="refresh" content="0;URL=${REFRESH_PAGE}">`;
     16   } else {
     17     scriptMessage = `
     18       <script>
     19           window.addEventListener("load", function() {
     20             parent.postMessage("childLoadComplete", "http://mochi.test:8888");
     21           }, false);
     22       </script>`;
     23   }
     24 
     25   return `<!DOCTYPE HTML>
     26          <html>
     27          <head>
     28          <meta charset="utf-8">
     29          ${metaRefresh}
     30          <title> Test referrer of meta http-equiv refresh</title>
     31          </head>
     32          <body>
     33            ${scriptMessage}
     34          </body>
     35          </html>`;
     36 }
     37 
     38 function handleRequest(request, response) {
     39   let query = new URLSearchParams(request.queryString);
     40 
     41   let action = query.get("action");
     42 
     43   var referrerLevel = "none";
     44   if (request.hasHeader("Referer")) {
     45     let referrer = request.getHeader("Referer");
     46     if (referrer.indexOf("test_meta_refresh_referrer") > 0) {
     47       referrerLevel = "full";
     48     } else if (referrer == "http://mochi.test:8888/") {
     49       referrerLevel = "origin";
     50     }
     51   }
     52 
     53   var state = getSharedState(SHARED_KEY);
     54   if (state === "") {
     55     state = DEFAULT_STATE;
     56   } else {
     57     state = JSON.parse(state);
     58   }
     59 
     60   response.setStatusLine(request.httpVersion, 200, "OK");
     61 
     62   //avoid confusing cache behaviors
     63   response.setHeader("Cache-Control", "no-cache", false);
     64 
     65   if (action === "results") {
     66     response.setHeader("Content-Type", "text/plain", false);
     67     response.write(JSON.stringify(state));
     68     return;
     69   }
     70 
     71   if (action === "reset") {
     72     //reset server state
     73     setSharedState(SHARED_KEY, JSON.stringify(DEFAULT_STATE));
     74     response.write("");
     75     return;
     76   }
     77 
     78   if (action === "test") {
     79     let load = query.get("load");
     80     state.count++;
     81     if (state.referrers.indexOf(referrerLevel) < 0) {
     82       state.referrers.push(referrerLevel);
     83     }
     84 
     85     // Write frame content
     86     response.write(createContent(load));
     87   }
     88 
     89   setSharedState(SHARED_KEY, JSON.stringify(state));
     90 }