tor-browser

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

origin-from-messageevent-opaque.window.js (2221B)


      1 // META: title=`Origin.from(MessageEvent)` from opaque origins.
      2 // META: script=/common/get-host-info.sub.js
      3 
      4 async_test(t => {
      5  const el = document.createElement('iframe');
      6  el.sandbox = "allow-scripts";
      7  el.srcdoc = `<script>window.top.postMessage("Hi.", "*");<\/script>`;
      8  window.addEventListener("message", t.step_func(e => {
      9    if (e.source === el.contentWindow) {
     10      const origin = Origin.from(e);
     11      assert_true(!!origin);
     12      assert_true(origin.opaque);
     13      t.done();
     14    }
     15  }));
     16  document.body.appendChild(el);
     17 }, `Origin.from(MessageEvent) returns an opaque origin for a sandboxed frame.`);
     18 
     19 async_test(t => {
     20  const el = document.createElement('iframe');
     21  el.sandbox = "allow-scripts";
     22  el.srcdoc = `
     23    <script>
     24      window.top.postMessage("Hi.", "*");
     25      window.top.postMessage("Bye.", "*");
     26    <\/script>`;
     27  let eventOrigin = null;
     28  window.addEventListener("message", t.step_func(e => {
     29    if (e.source === el.contentWindow) {
     30      const origin = Origin.from(e);
     31      assert_true(!!origin);
     32      assert_true(origin.opaque);
     33      if (eventOrigin) {
     34        assert_true(eventOrigin.isSameOrigin(origin));
     35        t.done();
     36      } else {
     37        eventOrigin = origin;
     38      }
     39    }
     40  }));
     41  document.body.appendChild(el);
     42 }, `Origin.from(MessageEvent) returns the same opaque origin for each message from a sandboxed frame.`);
     43 
     44 async_test(t => {
     45  const el = document.createElement('iframe');
     46  el.sandbox = "allow-scripts";
     47  el.srcdoc = `
     48    <script>
     49      window.top.postMessage("Hi.", "*");
     50      window.addEventListener("message", e => { navigation.reload(); });
     51    <\/script>`;
     52  let eventOrigin = null;
     53  window.addEventListener("message", t.step_func(e => {
     54    if (e.source === el.contentWindow) {
     55      const origin = Origin.from(e);
     56      assert_true(!!origin);
     57      assert_true(origin.opaque);
     58      if (eventOrigin) {
     59        assert_false(eventOrigin.isSameOrigin(origin));
     60        t.done();
     61      } else {
     62        eventOrigin = origin;
     63        e.source.postMessage("Reload thyself.", "*");
     64      }
     65    }
     66  }));
     67  document.body.appendChild(el);
     68 }, `Origin.from(MessageEvent) returns distinct opaque origins for each message from a reloaded sandboxed frame.`);