summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webmessaging/Channel_postMessage_with_transfer_entangled.any.js
blob: 2226b278440346290066e622fe6abbaab2b93bd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
async_test(function(t) {
    var channel1 = new MessageChannel();
    var channel2 = new MessageChannel();

     // One, send a message.
     channel1.port1.postMessage(1);

     // Two, transfer both ports.
     channel2.port1.postMessage("transfer", [channel1.port1]);
     channel2.port1.postMessage("transfer", [channel1.port2]);

     var transfer_counter = 0;
     var sender;
     channel2.port2.onmessage = t.step_func(function (evt) {
         if (transfer_counter == 0) {
             sender = evt.ports[0];
             transfer_counter = 1;
         } else {
             sender.postMessage(2);
             var counter = 0;
             evt.ports[0].onmessage = t.step_func(function (evt) {
                 if (counter == 0) {
                     assert_equals(evt.data, 1);
                     counter = 1;
                 } else if (counter == 1) {
                     assert_equals(evt.data, 2);
                     counter = 2;
                 } else {
                     assert_equals(evt.data, 3);
                     t.done();
                 }
             });
             sender.postMessage(3);
         }
      });
}, "An entangled port transferred to the same origin receives messages in order");