tor-browser

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

eventDispatch_worker.js (1720B)


      1 /**
      2 * Any copyright is dedicated to the Public Domain.
      3 * http://creativecommons.org/publicdomain/zero/1.0/
      4 */
      5 const fakeEventType = "foo";
      6 
      7 function testEventTarget(event) {
      8  if (event.target !== self) {
      9    throw new Error("Event has a bad target!");
     10  }
     11  if (event.currentTarget) {
     12    throw new Error("Event has a bad currentTarget!");
     13  }
     14  postMessage(event.data);
     15 }
     16 
     17 addEventListener(
     18  fakeEventType,
     19  function (event) {
     20    throw new Error("Trusted event listener received untrusted event!");
     21  },
     22  false,
     23  false
     24 );
     25 
     26 addEventListener(
     27  fakeEventType,
     28  function (event) {
     29    if (event.target !== self || event.currentTarget !== self) {
     30      throw new Error("Fake event has bad target!");
     31    }
     32    if (event.isTrusted) {
     33      throw new Error("Event should be untrusted!");
     34    }
     35    event.stopImmediatePropagation();
     36    postMessage(event.data);
     37  },
     38  false,
     39  true
     40 );
     41 
     42 addEventListener(
     43  fakeEventType,
     44  function (event) {
     45    throw new Error(
     46      "This shouldn't get called because of stopImmediatePropagation."
     47    );
     48  },
     49  false,
     50  true
     51 );
     52 
     53 var count = 0;
     54 onmessage = function (event) {
     55  if (event.target !== self || event.currentTarget !== self) {
     56    throw new Error("Event has bad target!");
     57  }
     58 
     59  if (!count++) {
     60    var exception;
     61    try {
     62      self.dispatchEvent(event);
     63    } catch (e) {
     64      exception = e;
     65    }
     66 
     67    if (!exception) {
     68      throw new Error("Recursive dispatch didn't fail!");
     69    }
     70 
     71    event = new MessageEvent(fakeEventType, {
     72      bubbles: event.bubbles,
     73      cancelable: event.cancelable,
     74      data: event.data,
     75      origin: "*",
     76      source: null,
     77    });
     78    self.dispatchEvent(event);
     79 
     80    return;
     81  }
     82 
     83  setTimeout(testEventTarget, 0, event);
     84 };