tor-browser

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

srcdoc-iframe.html (2558B)


      1 <!doctype html>
      2 <html>
      3 <body>
      4 <iframe id="srcdocFrame" srcdoc="
      5 <script>
      6  function reportTestResult(result) {
      7    top.postMessage({ type: 'TEST_RESULT', result: result }, '*');
      8  }
      9 
     10  async function postMessageToController() {
     11    let controller = navigator.serviceWorker.controller;
     12    if (!controller) {
     13      reportTestResult('no navigator.serviceWorker.controller');
     14    }
     15    try {
     16      controller.postMessage('test');
     17    } catch (e) {
     18      reportTestResult('Unexpected Error ' + e.name + ' : ' + e.message);
     19    }
     20  }
     21 
     22  async function getServiceWorkerRegistration(scope) {
     23    try {
     24      let reg = await navigator.serviceWorker.getRegistration(scope);
     25      if (!reg) {
     26        reportTestResult('no regsitration for ' + scope);
     27      }
     28      if (reg.scope !==  scope) {
     29        reportTestResult('regsitration scope does not match');
     30      }
     31 
     32      if (!reg.active) {
     33        reportTestResult('regsitration.active is not valid' + reg.active);
     34      }
     35      reportTestResult('passed');
     36    } catch (e) {
     37      reportTestResult('Unexpected Error ' + e.name + ' : ' + e.message);
     38    }
     39  }
     40 
     41  function addSrcdocIframeWithSandbox(sandbox) {
     42    let frame = document.createElement('iframe');
     43    frame.sandbox = sandbox;
     44    frame.srcdoc = `
     45    <script>
     46      function reportTestResult(result) {
     47        top.postMessage({ type: 'TEST_RESULT', result: result }, '*');
     48      }
     49 
     50      window.onload = function onLoad() {
     51        try {
     52          let controller = navigator.serviceWorker.controller;
     53          reportTestResult(controller ? 'HasController' : 'NoController');
     54        } catch (e) {
     55          reportTestResult((e.name == 'SecurityError') ?
     56              'NoController' : 'UnexpectedError:' + e.message);
     57        }
     58      }
     59    <\/script>`;
     60    document.body.appendChild(frame);
     61  }
     62 
     63  function addSandboxedSrcdocFrame() {
     64    addSrcdocIframeWithSandbox('allow-scripts');
     65  }
     66 
     67  function addSameOriginSandboxedSrcdocFrame() {
     68    addSrcdocIframeWithSandbox('allow-scripts allow-same-origin');
     69  }
     70 
     71  async function fetchResource() {
     72    let response = await fetch('?test_resource=1');
     73    reportTestResult(await response.text());
     74  }
     75 
     76  window.navigator.serviceWorker.addEventListener(
     77      'message', function onMsg(evt) {
     78    // Forward the message as test result.
     79    reportTestResult(evt.data);
     80  });
     81 </script>
     82 "></iframe>
     83 
     84 <script>
     85 // Helper routine to make it slightly easier for our parent to find
     86 // the srcdoc frame.
     87 function srcdocFrame() {
     88  return document.getElementById('srcdocFrame').contentWindow;
     89 }
     90 </script>
     91 </body>
     92 </html>