tor-browser

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

test_postMessages_window.html (2786B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test for postMessages cloning/transferring objects</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script src="common_postMessages.js"></script>
      8 </head>
      9 
     10 <body>
     11 <input id="fileList" type="file"></input>
     12 <script type="application/javascript">
     13 
     14 // PostMessage to the same window.
     15 tests.push(function test_windowToWindow() {
     16  info("Testing window to window");
     17  var resolve;
     18 
     19  function resolvePromise(data) {
     20    if (!resolve) {
     21      ok(false, "Unexpected message!");
     22      return;
     23    }
     24 
     25    let tmp = resolve;
     26    resolve = null;
     27    tmp(data);
     28  }
     29 
     30  onmessage = function(e) {
     31    resolvePromise({ data: e.data, ports: e.ports, error: false });
     32  }
     33 
     34  onmessageerror = function(e) {
     35    resolvePromise({ error: true });
     36  }
     37 
     38  runTests({
     39    clonableObjectsEveryWhere: true,
     40    clonableObjectsSameProcess: true,
     41    transferableObjects: true,
     42    send(what, ports) {
     43      return new Promise(function(r, rr) {
     44        resolve = r;
     45 
     46        try {
     47          postMessage(what, '*', ports);
     48        } catch(e) {
     49          resolve = null;
     50          rr();
     51        }
     52      });
     53    },
     54 
     55    finished() {
     56      onmessage = null;
     57      onmessageerror = null;
     58      next();
     59    }
     60  });
     61 });
     62 
     63 // iframe helper class
     64 function test_windowToIframeURL(url, clonableObjectsSameProcess) {
     65  var resolve;
     66 
     67  onmessage = function(e) {
     68    if (!resolve) {
     69      ok(false, "Unexpected message!");
     70      return;
     71    }
     72 
     73    let tmp = resolve;
     74    resolve = null;
     75    tmp({ data: e.data, ports: e.ports, error: e.data === "error" });
     76  }
     77 
     78  var ifr = document.createElement('iframe');
     79  ifr.src = url;
     80  ifr.onload = function() {
     81    runTests({
     82      clonableObjectsEveryWhere: true,
     83      clonableObjectsSameProcess,
     84      transferableObjects: true,
     85      send(what, ports) {
     86        return new Promise(function(r, rr) {
     87          resolve = r;
     88          try {
     89            ifr.contentWindow.postMessage(what, '*', ports);
     90          } catch(e) {
     91            resolve = null;
     92            rr();
     93          }
     94        });
     95      },
     96 
     97      finished() {
     98        document.body.removeChild(ifr);
     99        onmessage = null;
    100        next();
    101      }
    102    });
    103  }
    104  document.body.appendChild(ifr);
    105 }
    106 
    107 // PostMessage to iframe
    108 tests.push(function test_windowToIframe() {
    109  info("Testing window to iframe");
    110  test_windowToIframeURL('iframe_postMessages.html', true);
    111 });
    112 
    113 // PostMessage to cross-origin iframe
    114 tests.push(function test_windowToCrossOriginIframe() {
    115  info("Testing window to cross-origin iframe");
    116  test_windowToIframeURL('http://example.com/tests/dom/base/test/iframe_postMessages.html', false);
    117 });
    118 
    119 SimpleTest.waitForExplicitFinish();
    120 next();
    121 
    122 </script>
    123 </body>
    124 </html>