зеркало из https://github.com/mozilla/gecko-dev.git
120 строки
2.3 KiB
JavaScript
120 строки
2.3 KiB
JavaScript
function ok(a, msg) {
|
|
postMessage({ type: 'check', check: !!a, message: msg });
|
|
}
|
|
|
|
function is(a, b, msg) {
|
|
ok (a === b, msg);
|
|
}
|
|
|
|
function info(msg) {
|
|
postMessage({ type: 'info', message: msg });
|
|
}
|
|
|
|
function finish() {
|
|
postMessage({ type: 'finish' });
|
|
}
|
|
|
|
function basic()
|
|
{
|
|
var a = new MessageChannel();
|
|
ok(a, "MessageChannel created");
|
|
|
|
var port1 = a.port1;
|
|
ok(port1, "MessageChannel.port1 exists");
|
|
is(port1, a.port1, "MessageChannel.port1 is port1");
|
|
|
|
var port2 = a.port2;
|
|
ok(port2, "MessageChannel.port1 exists");
|
|
is(port2, a.port2, "MessageChannel.port2 is port2");
|
|
|
|
[ 'postMessage', 'start', 'close' ].forEach(function(e) {
|
|
ok(e in port1, "MessagePort1." + e + " exists");
|
|
ok(e in port2, "MessagePort2." + e + " exists");
|
|
});
|
|
|
|
runTests();
|
|
}
|
|
|
|
function sendMessages()
|
|
{
|
|
var a = new MessageChannel();
|
|
ok(a, "MessageChannel created");
|
|
|
|
a.port1.postMessage("Hello world!");
|
|
a.port1.onmessage = function(e) {
|
|
is(e.data, "Hello world!", "The message is back!");
|
|
runTests();
|
|
}
|
|
|
|
a.port2.onmessage = function(e) {
|
|
a.port2.postMessage(e.data);
|
|
}
|
|
}
|
|
|
|
function transferPort()
|
|
{
|
|
var a = new MessageChannel();
|
|
ok(a, "MessageChannel created");
|
|
|
|
a.port1.postMessage("Hello world!");
|
|
a.port1.onmessage = function(e) {
|
|
is(e.data, "Hello world!", "The message is back!");
|
|
runTests();
|
|
}
|
|
|
|
postMessage({ type: 'port' }, [a.port2]);
|
|
}
|
|
|
|
function transferPort2()
|
|
{
|
|
onmessage = function(evt) {
|
|
is(evt.ports.length, 1, "A port has been received by the worker");
|
|
evt.ports[0].onmessage = function(e) {
|
|
is(e.data, 42, "Data is 42!");
|
|
runTests();
|
|
}
|
|
}
|
|
|
|
postMessage({ type: 'newport' });
|
|
}
|
|
|
|
var tests = [
|
|
basic,
|
|
sendMessages,
|
|
transferPort,
|
|
transferPort2,
|
|
];
|
|
|
|
function runTests() {
|
|
if (!tests.length) {
|
|
finish();
|
|
return;
|
|
}
|
|
|
|
var t = tests.shift();
|
|
t();
|
|
}
|
|
|
|
var subworker;
|
|
onmessage = function(evt) {
|
|
if (evt.data == 0) {
|
|
runTests();
|
|
return;
|
|
}
|
|
|
|
if (!subworker) {
|
|
info("Create a subworkers. ID: " + evt.data);
|
|
subworker = new Worker('worker_messageChannel.js');
|
|
subworker.onmessage = function(e) {
|
|
info("Proxy a message to the parent.");
|
|
postMessage(e.data, e.ports);
|
|
}
|
|
|
|
subworker.postMessage(evt.data - 1);
|
|
return;
|
|
}
|
|
|
|
info("Dispatch a message to the subworker.");
|
|
subworker.postMessage(evt.data, evt.ports);
|
|
}
|