tor-browser

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

embedded_forwarder.js (1376B)


      1 "use strict";
      2 
      3 test_driver.set_test_context(window.top);
      4 
      5 function waitForMessage(timestamp) {
      6  return new Promise(resolve => {
      7    const listener = (event) => {
      8      if (!timestamp || event.data.timestamp == timestamp) {
      9        window.removeEventListener("message", listener);
     10        resolve(event.data);
     11      }
     12    };
     13    window.addEventListener("message", listener);
     14  });
     15 }
     16 
     17 var iframe = document.createElement('iframe');
     18 const queryString = window.location.search;
     19 const urlParams = new URLSearchParams(queryString);
     20 iframe.src = urlParams.get("inner_url");
     21 document.body.appendChild(iframe);
     22 
     23 window.addEventListener("message", async (event) => {
     24  function replyToParent(data) {
     25    parent.postMessage(
     26        {timestamp: event.data.timestamp, data}, "*");
     27  }
     28 
     29  if (!event.data["command"]) {
     30    return;
     31  }
     32 
     33  switch (event.data["command"]) {
     34    case "navigate_child":
     35      iframe.onload = () => replyToParent(event.data.url);
     36      iframe.src = event.data.url;
     37      break;
     38    case "reload":
     39    case "navigate":
     40      iframe.contentWindow.postMessage({timestamp, ...event.data}, "*");
     41      break;
     42    default:{
     43      const timestamp = event.data.timestamp;
     44      const p = waitForMessage(timestamp);
     45      iframe.contentWindow.postMessage({timestamp, ...event.data}, "*");
     46      replyToParent(await p.then(resp => resp.data));
     47      break;
     48    }
     49  }
     50 });