tor-browser

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

sandboxed-iframe-fetch-event-iframe.html (1872B)


      1 <script>
      2 function with_iframe(url) {
      3  return new Promise(resolve => {
      4    let frame = document.createElement('iframe');
      5    frame.src = url;
      6    frame.onload = () => { resolve(frame); };
      7    document.body.appendChild(frame);
      8  });
      9 }
     10 
     11 function with_sandboxed_iframe(url, sandbox) {
     12  return new Promise(resolve => {
     13    let frame = document.createElement('iframe');
     14    frame.sandbox = sandbox;
     15    frame.src = url;
     16    frame.onload = () => { resolve(frame); };
     17    document.body.appendChild(frame);
     18  });
     19 }
     20 
     21 function fetch_from_worker(url) {
     22  return new Promise(resolve => {
     23    let blob = new Blob([
     24      `fetch('${url}', {mode: 'no-cors'})` +
     25      "  .then(() => { self.postMessage('OK'); });"]);
     26    let worker_url = URL.createObjectURL(blob);
     27    let worker = new Worker(worker_url);
     28    worker.onmessage = resolve;
     29  });
     30 }
     31 
     32 function run_test(type) {
     33  const base_path = location.href;
     34  switch (type) {
     35    case 'fetch':
     36      return fetch(`${base_path}&test=fetch`, {mode: 'no-cors'});
     37    case 'fetch-from-worker':
     38      return fetch_from_worker(`${base_path}&test=fetch-from-worker`);
     39    case 'iframe':
     40      return with_iframe(`${base_path}&test=iframe`);
     41    case 'sandboxed-iframe':
     42      return with_sandboxed_iframe(`${base_path}&test=sandboxed-iframe`,
     43                                   "allow-scripts");
     44    case 'sandboxed-iframe-same-origin':
     45      return with_sandboxed_iframe(
     46        `${base_path}&test=sandboxed-iframe-same-origin`,
     47        "allow-scripts allow-same-origin");
     48    default:
     49      return Promise.reject(`Unknown type: ${type}`);
     50  }
     51 }
     52 
     53 window.onmessage = event => {
     54  let id = event.data['id'];
     55  run_test(event.data['type'])
     56    .then(() => {
     57      window.top.postMessage({id: id, result: 'done'}, '*');
     58    })
     59    .catch(e => {
     60      window.top.postMessage({id: id, result: 'error: ' + e.toString()}, '*');
     61    });
     62 };
     63 </script>