tor-browser

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

helpers.js (2513B)


      1 /**
      2 * Promise based helper function who's return promise will resolve
      3 * once the iframe src has been loaded
      4 * @param {string} url the url to set the iframe src
      5 * @param {test} t a test object to add a cleanup function to
      6 * @return {Promise} when resolved, will return the iframe
      7 */
      8 self.createIframe = (url, t) => new Promise(resolve => {
      9  const iframe = document.createElement('iframe');
     10  iframe.addEventListener('load', () => {resolve(iframe);}, {once: true});
     11  iframe.src = url;
     12  document.documentElement.appendChild(iframe);
     13  t.add_cleanup(() => iframe.remove());
     14 });
     15 
     16 /**
     17 * @description - Function unregisters any service workers in this scope
     18 *                and then creates a new registration. The function returns
     19 *                a promise that resolves when the registered service worker
     20 *                becomes activated. The resolved promise yields the
     21 *                service worker registration
     22 * @param {testCase} t - test case to add cleanup functions to
     23 */
     24 self.createServiceWorker = async (t, sw_registration_name, scope_url) => {
     25  let registration = await navigator.serviceWorker.getRegistration(scope_url);
     26  if (registration)
     27    await registration.unregister();
     28 
     29  registration = await navigator.serviceWorker.register(sw_registration_name,
     30      {scope_url});
     31  t.add_cleanup(() => registration.unregister());
     32 
     33  return new Promise(resolve => {
     34    const serviceWorker = registration.installing || registration.active ||
     35        registration.waiting;
     36    serviceWorker.addEventListener('statechange', event => {
     37      if (event.target.state === 'activated') {
     38        resolve(serviceWorker);
     39      }
     40    });
     41  })
     42 }
     43 
     44 /**
     45 * Function that will return a promise that resolves when a message event
     46 * is fired. Returns a promise that resolves to the message that was received
     47 */
     48 self.waitForMessage = () => new Promise(resolve => {
     49  window.addEventListener('message', event => {
     50    resolve(event.data);
     51  }, {once: true});
     52 });
     53 
     54 /**
     55 * Sends a message via MessageChannel and waits for the response
     56 * @param {*} message
     57 * @returns {Promise} resolves with the response payload
     58 */
     59 self.sendMessageOverChannel = (message, target) => {
     60  return new Promise(function(resolve, reject) {
     61    const messageChannel = new MessageChannel();
     62    messageChannel.port1.onmessage = event => {
     63      if (event.data.error) {
     64        reject(event.data.error);
     65      } else {
     66        resolve(event.data);
     67      }
     68    };
     69 
     70    target.postMessage(message, [messageChannel.port2]);
     71  })
     72 };