tor-browser

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

Worker-messageport.html (2274B)


      1 <!DOCTYPE html>
      2 <title>Test that pages and workers can send MessagePorts to one another.</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script>
      6 async_test(function(t) {
      7  var worker = new Worker("support/Worker-messageport.js");
      8 
      9  // Send messages with and without ports to the worker to make sure it gets them.
     10  worker.postMessage("noport");
     11  worker.onmessage = t.step_func_done(evt => {
     12    assert_equals(evt.data, "PASS: evt.ports = [] as expected");
     13  });
     14 }, 'Test sending messages to workers with no port.');
     15 
     16 async_test(function(t) {
     17  var worker = new Worker("support/Worker-messageport.js");
     18  var channel = new MessageChannel();
     19 
     20  worker.postMessage("port", [channel.port1]);
     21  worker.onmessage = t.step_func(evt => {
     22    assert_equals(evt.data, "PASS: Received message port");
     23  });
     24 
     25  // Send a message on the new port to make sure it gets to the worker.
     26  channel.port2.postMessage("ping");
     27 
     28  // Wait for the response.
     29  channel.port2.onmessage = t.step_func_done(evt => {
     30    assert_equals(evt.data, "pong");
     31  });
     32  channel.port2.start();
     33 }, 'Test sending message to a worker on a port.');
     34 
     35 async_test(function(t) {
     36  var worker = new Worker("support/Worker-messageport.js");
     37  var channel = new MessageChannel();
     38 
     39  worker.onmessage = t.step_func(evt => {
     40    assert_equals(evt.data, "port");
     41    assert_equals(String(evt.ports), "[object MessagePort]");
     42    assert_equals(evt.ports.length, 1);
     43    evt.ports[0].postMessage("ping");
     44    evt.ports[0].onmessage = t.step_func_done(evt => {
     45      assert_equals(evt.data, "pong");
     46    });
     47    evt.ports[0].start();
     48  });
     49  worker.postMessage("getport");
     50 }, 'Test getting messages from a worker on a port.');
     51 
     52 async_test(function(t) {
     53  var worker = new Worker("support/Worker-messageport.js");
     54  var channel = new MessageChannel();
     55  worker.onmessage = t.step_func(evt => { gotSpam(channel.port1); });
     56  worker.postMessage("spam", [channel.port2]);
     57 
     58  function gotSpam(port) {
     59    var spamCount = 0;
     60    port.onmessage = t.step_func(evt => {
     61      assert_equals(evt.data, spamCount);
     62      spamCount++;
     63      if (spamCount == 1000) {
     64        t.done();
     65      }
     66    });
     67  }
     68 }, 'Test sending many messages to workers using ports.');
     69 </script>