tor-browser

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

test_multi_sharedWorker.html (8909B)


      1 <!--
      2  Any copyright is dedicated to the Public Domain.
      3  http://creativecommons.org/publicdomain/zero/1.0/
      4 -->
      5 <!DOCTYPE HTML>
      6 <html>
      7  <head>
      8    <title>Test for SharedWorker</title>
      9    <script src="/tests/SimpleTest/SimpleTest.js"></script>
     10    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
     11      <script class="testbody" type="text/javascript">
     12        "use strict";
     13 
     14        const basePath =
     15          location.pathname.substring(0,
     16                                      location.pathname.lastIndexOf("/") + 1);
     17        const baseURL = location.origin + basePath;
     18 
     19        const frameRelativeURL = "multi_sharedWorker_frame.html";
     20        const frameAbsoluteURL = baseURL + frameRelativeURL;
     21        const workerAbsoluteURL =
     22          baseURL + "multi_sharedWorker_sharedWorker.js";
     23 
     24        const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
     25        const errorMessage = "Error: Expected";
     26        const errorLineno = 34;
     27 
     28        let testGenerator = (function*() {
     29          SimpleTest.waitForExplicitFinish();
     30 
     31          window.addEventListener("message", function(event) {
     32            if (typeof(event.data) == "string") {
     33              info(event.data);
     34            } else {
     35              sendToGenerator(event);
     36            }
     37          });
     38 
     39          let frame1 = document.getElementById("frame1");
     40          frame1.src = frameRelativeURL;
     41          frame1.onload = sendToGenerator;
     42 
     43          yield undefined;
     44 
     45          frame1 = frame1.contentWindow;
     46 
     47          let frame2 = document.getElementById("frame2");
     48          frame2.src = frameAbsoluteURL;
     49          frame2.onload = sendToGenerator;
     50 
     51          yield undefined;
     52 
     53          frame2 = frame2.contentWindow;
     54 
     55          let data = {
     56            command: "start"
     57          };
     58 
     59          frame1.postMessage(data, "*");
     60          frame2.postMessage(data, "*");
     61 
     62          let event = yield undefined;
     63          ok(event instanceof MessageEvent, "Got a MessageEvent");
     64          is(event.source, frame1, "First window got the event");
     65          is(event.data.type, "connect", "Got a connect message");
     66 
     67          data = {
     68            command: "retrieve"
     69          };
     70          frame1.postMessage(data, "*");
     71 
     72          event = yield undefined;
     73          ok(event instanceof MessageEvent, "Got a MessageEvent");
     74          is(event.source, frame1, "First window got the event");
     75          is(event.data.type, "result", "Got a result message");
     76          is(event.data.data, undefined, "No data stored yet");
     77 
     78          frame2.postMessage(data, "*");
     79 
     80          event = yield undefined;
     81          ok(event instanceof MessageEvent, "Got a MessageEvent");
     82          is(event.source, frame2, "Second window got the event");
     83          is(event.data.type, "result", "Got a result message");
     84          is(event.data.data, undefined, "No data stored yet");
     85 
     86          data = {
     87            command: "store",
     88            data: storedData
     89          };
     90          frame2.postMessage(data, "*");
     91 
     92          data = {
     93            command: "retrieve"
     94          };
     95          frame1.postMessage(data, "*");
     96 
     97          event = yield undefined;
     98          ok(event instanceof MessageEvent, "Got a MessageEvent");
     99          is(event.source, frame1, "First window got the event");
    100          is(event.data.type, "result", "Got a result message");
    101          is(event.data.data, storedData, "Got stored data");
    102 
    103          // This will generate two MessageEvents, one for each window.
    104          let sawFrame1Error = false;
    105          let sawFrame2Error = false;
    106 
    107          data = {
    108            command: "error"
    109          };
    110          frame1.postMessage(data, "*");
    111 
    112          // First event.
    113          event = yield undefined;
    114 
    115          ok(event instanceof MessageEvent, "Got a MessageEvent");
    116          is(event.data.type, "worker-error", "Got an error message");
    117          is(event.data.message, errorMessage, "Got correct error message");
    118          is(event.data.filename, workerAbsoluteURL, "Got correct filename");
    119          is(event.data.lineno, errorLineno, "Got correct lineno");
    120          if (event.source == frame1) {
    121            is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
    122            sawFrame1Error = true;
    123          } else if (event.source == frame2) {
    124            is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
    125            sawFrame2Error = true;
    126          } else {
    127            ok(false, "Saw error from unknown window");
    128          }
    129 
    130          // Second event
    131          event = yield undefined;
    132 
    133          ok(event instanceof MessageEvent, "Got a MessageEvent");
    134          is(event.data.type, "worker-error", "Got an error message");
    135          is(event.data.message, errorMessage, "Got correct error message");
    136          is(event.data.filename, workerAbsoluteURL, "Got correct filename");
    137          is(event.data.lineno, errorLineno, "Got correct lineno");
    138          if (event.source == frame1) {
    139            is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
    140            sawFrame1Error = true;
    141          } else if (event.source == frame2) {
    142            is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
    143            sawFrame2Error = true;
    144          } else {
    145            ok(false, "Saw error from unknown window");
    146          }
    147 
    148          is(sawFrame1Error, true, "Saw error for frame1");
    149          is(sawFrame2Error, true, "Saw error for frame2");
    150 
    151          // This will generate two MessageEvents, one for each window.
    152          sawFrame1Error = false;
    153          sawFrame2Error = false;
    154 
    155          data = {
    156            command: "error"
    157          };
    158          frame1.postMessage(data, "*");
    159 
    160          // First event.
    161          event = yield undefined;
    162 
    163          ok(event instanceof MessageEvent, "Got a MessageEvent");
    164          is(event.data.type, "error", "Got an error message");
    165          is(event.data.message, errorMessage, "Got correct error message");
    166          is(event.data.filename, workerAbsoluteURL, "Got correct filename");
    167          is(event.data.lineno, errorLineno, "Got correct lineno");
    168          is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
    169          if (event.source == frame1) {
    170            is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
    171            sawFrame1Error = true;
    172          } else if (event.source == frame2) {
    173            is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
    174            sawFrame2Error = true;
    175          } else {
    176            ok(false, "Saw error from unknown window");
    177          }
    178 
    179          // Second event
    180          event = yield undefined;
    181 
    182          ok(event instanceof MessageEvent, "Got a MessageEvent");
    183          is(event.data.type, "error", "Got an error message");
    184          is(event.data.message, errorMessage, "Got correct error message");
    185          is(event.data.filename, workerAbsoluteURL, "Got correct filename");
    186          is(event.data.lineno, errorLineno, "Got correct lineno");
    187          is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
    188          if (event.source == frame1) {
    189            is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
    190            sawFrame1Error = true;
    191          } else if (event.source == frame2) {
    192            is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
    193            sawFrame2Error = true;
    194          } else {
    195            ok(false, "Saw error from unknown window");
    196          }
    197 
    198          is(sawFrame1Error, true, "Saw error for frame1");
    199          is(sawFrame2Error, true, "Saw error for frame2");
    200 
    201          // Try a shared worker in a different origin.
    202          frame1 = document.getElementById("frame1");
    203          frame1.src = "http://example.org" + basePath + frameRelativeURL;
    204          frame1.onload = sendToGenerator;
    205          yield undefined;
    206 
    207          frame1 = frame1.contentWindow;
    208 
    209          data = {
    210            command: "retrieve"
    211          };
    212          frame1.postMessage(data, "*");
    213 
    214          event = yield undefined;
    215          ok(event instanceof MessageEvent, "Got a MessageEvent");
    216          is(event.source, frame1, "First window got the event");
    217          is(event.data.type, "result", "Got a result message");
    218          is(event.data.data, undefined, "No data stored yet");
    219 
    220          frame2.postMessage(data, "*");
    221 
    222          event = yield undefined;
    223          ok(event instanceof MessageEvent, "Got a MessageEvent");
    224          is(event.source, frame2, "First window got the event");
    225          is(event.data.type, "result", "Got a result message");
    226          is(event.data.data, storedData, "Got stored data");
    227 
    228          window.removeEventListener("message", sendToGenerator);
    229 
    230          SimpleTest.finish();
    231        })();
    232 
    233        let sendToGenerator = testGenerator.next.bind(testGenerator);
    234 
    235      </script>
    236  </head>
    237  <body onload="testGenerator.next();">
    238    <iframe id="frame1"></iframe>
    239    <iframe id="frame2"></iframe>
    240  </body>
    241 </html>