tor-browser

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

inspectedwindow-reload-target.sjs (2481B)


      1 "use strict";
      2 
      3 function handleRequest(request, response) {
      4   const params = new URLSearchParams(request.queryString);
      5 
      6   switch (params.get("test")) {
      7     case "cache":
      8       handleCacheTestRequest(request, response);
      9       break;
     10 
     11     case "user-agent":
     12       handleUserAgentTestRequest(request, response);
     13       break;
     14 
     15     case "injected-script":
     16       handleInjectedScriptTestRequest(request, response, params);
     17       break;
     18   }
     19 }
     20 
     21 function handleCacheTestRequest(request, response) {
     22   response.setHeader("Content-Type", "text/plain; charset=UTF-8", false);
     23 
     24   if (request.hasHeader("pragma") && request.hasHeader("cache-control")) {
     25     response.write(
     26       `${request.getHeader("pragma")}:${request.getHeader("cache-control")}`
     27     );
     28   } else {
     29     response.write("empty cache headers");
     30   }
     31 }
     32 
     33 function handleUserAgentTestRequest(request, response) {
     34   response.setHeader("Content-Type", "text/plain; charset=UTF-8", false);
     35 
     36   if (request.hasHeader("user-agent")) {
     37     response.write(request.getHeader("user-agent"));
     38   } else {
     39     response.write("no user agent header");
     40   }
     41 }
     42 
     43 function handleInjectedScriptTestRequest(request, response, params) {
     44   response.setHeader("Content-Type", "text/html; charset=UTF-8", false);
     45 
     46   const frames = parseInt(params.get("frames"), 10);
     47   let content = "";
     48 
     49   if (frames > 0) {
     50     // Output an iframe in seamless mode, so that there is an higher chance that in case
     51     // of test failures we get a screenshot where the nested iframes are all visible.
     52     content = `<iframe seamless src="?test=injected-script&frames=${
     53       frames - 1
     54     }"></iframe>`;
     55   } else {
     56     // Output an about:srcdoc frame to be sure that inspectedWindow.eval is able to
     57     // evaluate js code into it.
     58     const srcdoc = `
     59       <pre>injected script NOT executed</pre>
     60       <script>window.pageScriptExecutedFirst = true</script>
     61     `;
     62     content = `<iframe style="height: 30px;" srcdoc="${srcdoc}"></iframe>`;
     63   }
     64 
     65   if (params.get("stop") == "windowStop") {
     66     content = "<script>window.stop();</script>" + content;
     67   }
     68 
     69   response.write(`<!DOCTYPE html>
     70     <html>
     71       <head>
     72        <meta charset="utf-8">
     73        <style>
     74          iframe { width: 100%; height: ${frames * 150}px; }
     75        </style>
     76       </head>
     77       <body>
     78        <h1>IFRAME ${frames}</h1>
     79        <pre>injected script NOT executed</pre>
     80        <script>
     81          window.pageScriptExecutedFirst = true;
     82        </script>
     83        ${content}
     84       </body>
     85     </html>
     86   `);
     87 }