Channel_postMessage_with_transfer_entangled.any.js (1233B)
1 async_test(function(t) { 2 var channel1 = new MessageChannel(); 3 var channel2 = new MessageChannel(); 4 5 // One, send a message. 6 channel1.port1.postMessage(1); 7 8 // Two, transfer both ports. 9 channel2.port1.postMessage("transfer", [channel1.port1]); 10 channel2.port1.postMessage("transfer", [channel1.port2]); 11 12 var transfer_counter = 0; 13 var sender; 14 channel2.port2.onmessage = t.step_func(function (evt) { 15 if (transfer_counter == 0) { 16 sender = evt.ports[0]; 17 transfer_counter = 1; 18 } else { 19 sender.postMessage(2); 20 var counter = 0; 21 evt.ports[0].onmessage = t.step_func(function (evt) { 22 if (counter == 0) { 23 assert_equals(evt.data, 1); 24 counter = 1; 25 } else if (counter == 1) { 26 assert_equals(evt.data, 2); 27 counter = 2; 28 } else { 29 assert_equals(evt.data, 3); 30 t.done(); 31 } 32 }); 33 sender.postMessage(3); 34 } 35 }); 36 }, "An entangled port transferred to the same origin receives messages in order");