blob: 9ddc0c7bb52afe53eff42bea05c1c19f6fdbf6b9 [file] [log] [blame]
// Use onMessage handler with a null |sourcePort|.
window.addEventListener('message', onMessage.bind(null, null));
// Function for exercising bidirectional communication between JS content and
// For messages received on the window:
// * acknowledge receipt of MessagePort by sending "got_port <msg>" and
// including a MessagePort created in JS.
// For messages received on a MessagePort provided by the client:
// * acknowledge the message sent by the client by sending "ack <msg>" on
// the port used to received the message.
// * if a message port is provided, acknowledge receipt of MessagePort by
// sending "got_port <msg>" on that port, and include a MessagePort
// created in JS.
function onMessage(sourcePort, event) {
// Ack all messages received on message ports.
if (sourcePort)
sourcePort.postMessage('ack ' +;
// If the peer provided a MessagePort, acknowledge that we got it by
// sending "got_port" on it, along with a MessagePort that we create on the
// JS side.
if (event.ports && event.ports.length > 0) {
var chan = new MessageChannel();
chan.port1.onmessage = onMessage.bind(null, chan.port1);
event.ports[0].onmessage = onMessage.bind(null, event.ports[0]);
event.ports[0].postMessage('got_port', [chan.port2]);