tor-browser

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

mm_messageChannelParent.js (3485B)


      1 let port;
      2 let mm;
      3 
      4 function info(message) {
      5  return window.arguments[0].info(message);
      6 }
      7 
      8 function ok(condition, message) {
      9  return window.arguments[0].ok(condition, message);
     10 }
     11 
     12 function is(v1, v2, message) {
     13  return window.arguments[0].is(v1, v2, message);
     14 }
     15 
     16 function todo_is(v1, v2, message) {
     17  return window.arguments[0].todo_is(v1, v2, message);
     18 }
     19 
     20 function cleanUp() {
     21  window.arguments[0].setTimeout(function () {
     22    this.done();
     23  }, 0);
     24  window.close();
     25 }
     26 
     27 function debug(msg) {
     28  dump("[mmMessageChannelParent]" + msg + "\n");
     29 }
     30 
     31 let tests = [basic_test, close_test, empty_transferable, not_transferable];
     32 
     33 // Test Routine
     34 function run_tests() {
     35  let test = tests.shift();
     36  if (test === undefined) {
     37    cleanUp();
     38    return;
     39  }
     40 
     41  test(function () {
     42    setTimeout(run_tests, 0);
     43  });
     44 }
     45 
     46 // Basic communication test.
     47 function basic_test(finish) {
     48  ok(mm, "basic_test");
     49 
     50  let finishPrepare = msg => {
     51    is(msg.data.message, "OK", "");
     52    ok(port, "");
     53    port.onmessage = message => {
     54      is(message.data, "BasicTest:TestOK", "");
     55      finish();
     56    };
     57    port.postMessage("BasicTest:StartTest");
     58    mm.removeMessageListener("BasicTest:FinishPrepare", finishPrepare);
     59  };
     60 
     61  let channel = new MessageChannel();
     62  port = channel.port2;
     63  mm.addMessageListener("BasicTest:FinishPrepare", finishPrepare);
     64  mm.sendAsyncMessage("BasicTest:PortCreated", {}, [channel.port1]);
     65 }
     66 
     67 // Communicate with closed port.
     68 function close_test(finish) {
     69  ok(mm, "close_test");
     70 
     71  let finishPrepare = msg => {
     72    is(msg.data.message, "OK", "");
     73    ok(port, "");
     74 
     75    port.onmessage = () => {
     76      ok(false, "Port is alive.");
     77      finish();
     78    };
     79 
     80    port.postMessage("CloseTest:StartTest");
     81    mm.removeMessageListener("CloseTest:FinishPrepare", finishPrepare);
     82    finish();
     83  };
     84 
     85  let channel = new MessageChannel();
     86  port = channel.port2;
     87  mm.addMessageListener("CloseTest:FinishPrepare", finishPrepare);
     88  mm.sendAsyncMessage("CloseTest:PortCreated", {}, [channel.port1]);
     89 }
     90 
     91 // Empty transferable object
     92 function empty_transferable(finish) {
     93  ok(mm, "empty_transferable");
     94 
     95  let finishPrepare = () => {
     96    ok(true, "Same basic test.");
     97    mm.removeMessageListener("EmptyTest:FinishPrepare", finishPrepare);
     98    finish();
     99  };
    100 
    101  mm.addMessageListener("EmptyTest:FinishPrepare", finishPrepare);
    102  mm.sendAsyncMessage("EmptyTest:PortCreated", {}, []);
    103 }
    104 
    105 // Not transferable object.
    106 function not_transferable(finish) {
    107  ok(mm, "not_transferable");
    108 
    109  let finishPrepare = () => {
    110    ok(true, "Same basic test.");
    111    finish();
    112  };
    113 
    114  mm.addMessageListener("NotTransferableTest:FinishPrepare", finishPrepare);
    115  mm.sendAsyncMessage("NotTransferableTest:PortCreated", {}, [""]);
    116 }
    117 
    118 /*
    119 * Test preparation
    120 */
    121 function finishLoad() {
    122  run_tests();
    123 }
    124 
    125 function prepare_test() {
    126  debug("start run_tests()");
    127  var node = document.getElementById("messagechannel_remote");
    128  mm = node.messageManager; //Services.ppmm.getChildAt(1);
    129  ok(mm, "created MessageManager.");
    130 
    131  mm.addMessageListener("mmMessagePort:finishScriptLoad", finishLoad);
    132  mm.addMessageListener("mmMessagePort:fail", failed_test);
    133  //mm.loadProcessScript("chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js", true);
    134  mm.loadFrameScript(
    135    "chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js",
    136    true
    137  );
    138  ok(true, "Loaded");
    139 }
    140 
    141 function failed_test() {
    142  debug("failed test in child process");
    143  ok(false, "");
    144 }