tor-browser

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

window-iframe-messagechannel.https.html (3357B)


      1 <!DOCTYPE html>
      2 <meta charset="utf-8">
      3 <title>Structured cloning of SharedArrayBuffers into windows using MessageChannel</title>
      4 <link rel="help" href="https://html.spec.whatwg.org/multipage/#structuredserialize">
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <script src="resources/test-incrementer.js"></script>
      8 <script src="/common/get-host-info.sub.js"></script>
      9 
     10 <div id="log"></div>
     11 
     12 <script>
     13 promise_test(t => {
     14  return new Promise(resolve => {
     15    const iframe = document.createElement("iframe");
     16    window.onmessage = t.step_func((message) => {
     17      // data will be a MessagePort
     18      resolve(testSharingViaIncrementerScript(t, message.data, "window", message.data, "iframe"));
     19    });
     20    iframe.src = "resources/incrementer-iframe-messagechannel.html";
     21    document.body.appendChild(iframe);
     22  });
     23 }, `postMessaging to a same-origin iframe via MessageChannel allows them to see each others' modifications`);
     24 
     25 promise_test(t => {
     26  return new Promise(resolve => {
     27    const iframe = document.createElement("iframe");
     28    window.onmessage = t.step_func((message) => {
     29      // data will be a MessagePort
     30      message.data.postMessage(new SharedArrayBuffer(10));
     31      message.data.onmessage = t.step_func(message => {
     32        assert_equals(message.data, "messageerror event received");
     33        resolve();
     34      });
     35    });
     36    iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + new URL("resources/iframe-messagechannel-site-failure.html", window.location).pathname;
     37    document.body.appendChild(iframe);
     38  });
     39 }, "postMessaging to a same-site iframe via MessageChannel should fail");
     40 
     41 promise_test(t => {
     42  return new Promise(resolve => {
     43    const iframe = document.createElement("iframe");
     44    window.onmessage = t.step_func(message => {
     45      // data will be a MessagePort
     46      message.data.postMessage(new SharedArrayBuffer(10));
     47      message.data.onmessage = t.step_func(message => {
     48        assert_equals(message.data, "messageerror event received");
     49        resolve();
     50      });
     51    });
     52    iframe.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-messagechannel-failure.html", window.location).pathname;
     53    document.body.append(iframe);
     54  });
     55 }, "postMessaging to a cross-site iframe via MessageChannel should fail");
     56 
     57 promise_test(t => {
     58  return new Promise(resolve => {
     59    const iframe = document.createElement("iframe");
     60    let port = null;
     61    window.onmessage = t.step_func(message => {
     62      if (message.data.state === "port1") {
     63        port = message.data.data;
     64        port.postMessage(new SharedArrayBuffer(10));
     65        message.source.postMessage("send port2", "*");
     66      } else if (message.data.state === "port2") {
     67        // Note that onmessage calls start()
     68        message.data.data.onmessage = t.step_func(message => {
     69          assert_true(message.data instanceof SharedArrayBuffer);
     70          assert_equals(message.data.byteLength, 10);
     71          resolve();
     72        });
     73        message.data.data.onmessageerror = t.unreached_func();
     74      }
     75    });
     76    iframe.src = get_host_info().HTTPS_NOTSAMESITE_ORIGIN + new URL("resources/iframe-messagechannel-complex.html", window.location).pathname;
     77    document.body.append(iframe);
     78  });
     79 }, "postMessaging with a MessageChannel that's been cross-site should succeed");
     80 </script>