<!DOCTYPE HTML> <html> <head> <title>Test for postMessages cloning/transferring objects</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> <script src="common_postMessages.js"></script> </head> <body> <input id="fileList" type="file"></input> <script type="application/javascript"> // PostMessage for BroadcastChannel tests.push(function test_broadcastChannel() { info("Testing broadcastChannel"); var bc1 = new BroadcastChannel('postMessagesTest'); var bc2 = new BroadcastChannel('postMessagesTest'); var resolve; function resolvePromise(data) { if (!resolve) { ok(false, "Unexpected message!"); return; } let tmp = resolve; resolve = null; tmp(data); } bc2.onmessage = function(e) { resolvePromise({ data: e.data, ports: [], error: false }); } bc2.onmessageerror = function(e) { resolvePromise({ error: true }); } runTests({ clonableObjectsEveryWhere: true, clonableObjectsSameProcess: true, transferableObjects: false, send(what, ports) { return new Promise(function(r, rr) { if (ports.length) { rr(); return; } resolve = r; bc1.postMessage(what); }); }, finished() { bc1.close(); bc2.close(); next(); } }); }); // PostMessage for BroadcastChannel in workers tests.push(function test_broadcastChannel_inWorkers() { info("Testing broadcastChannel in Workers"); var bc = new BroadcastChannel('postMessagesTest_inWorkers'); var resolve; var w = new Worker('worker_postMessages.js'); w.postMessage('broadcastChannel'); w.onmessage = function(e) { is(e.data, 'ok', "Worker ready!"); w.onmessage = function(e1) { if (!resolve) { ok(false, "Unexpected message!"); return; } let tmp = resolve; resolve = null; tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); } runTests({ clonableObjectsEveryWhere: true, clonableObjectsSameProcess: true, transferableObjects: false, send(what, ports) { return new Promise(function(r, rr) { if (ports.length) { rr(); return; } resolve = r; bc.postMessage(what); }); }, finished() { bc.close(); w.terminate(); next(); } }); } }); // PostMessage for BroadcastChannel in SharedWorkers tests.push(function test_broadcastChannel_inSharedWorkers() { info("Testing broadcastChannel in SharedWorkers"); var bc = new BroadcastChannel('postMessagesTest_inWorkers'); var resolve; var w = new SharedWorker('worker_postMessages.js'); w.port.postMessage('broadcastChannel'); w.port.onmessage = function(e) { is(e.data, 'ok', "Worker ready!"); w.port.onmessage = function(e1) { if (!resolve) { ok(false, "Unexpected message!"); return; } let tmp = resolve; resolve = null; tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); } runTests({ clonableObjectsEveryWhere: true, clonableObjectsSameProcess: false, transferableObjects: false, send(what, ports) { return new Promise(function(r, rr) { if (ports.length) { rr(); return; } resolve = r; bc.postMessage(what); }); }, finished() { bc.close(); w.port.postMessage("terminate"); next(); } }); } }); SimpleTest.waitForExplicitFinish(); next(); </script> </body> </html>