mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 1611855 - Worklet must be part of the same parent's agentCluster - part 9 - tests for messageerrors, r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D61307 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
d59cd20bc8
commit
9f5349f07e
@ -194,6 +194,7 @@ PostMessageEvent::Run() {
|
||||
holder = &mHolder.ref<ipc::StructuredCloneData>();
|
||||
}
|
||||
if (NS_WARN_IF(rv.Failed())) {
|
||||
JS_ClearPendingException(cx);
|
||||
DispatchError(cx, targetWindow, eventTarget);
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -5,6 +5,10 @@
|
||||
onmessage = function(e) {
|
||||
parent.postMessage(e.data, '*', e.ports);
|
||||
}
|
||||
|
||||
onmessageerror = function() {
|
||||
parent.postMessage("error", '*');
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -174,11 +174,6 @@ function runTests(obj) {
|
||||
|
||||
// cloning tests - everyWhere
|
||||
new Promise(function(resolve, reject) {
|
||||
if (!obj.clonableObjectsEveryWhere) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
var clonableObjectsId = 0;
|
||||
function runClonableTest() {
|
||||
if (clonableObjectsId >= clonableObjects.length) {
|
||||
@ -194,7 +189,12 @@ function runTests(obj) {
|
||||
}
|
||||
|
||||
obj.send(object.data, []).then(function(received) {
|
||||
compare(received.data, object.data);
|
||||
if (!obj.clonableObjectsEveryWhere) {
|
||||
ok(received.error, "Error expected");
|
||||
} else {
|
||||
ok(!received.error, "Error not expected");
|
||||
compare(received.data, object.data);
|
||||
}
|
||||
runClonableTest();
|
||||
});
|
||||
}
|
||||
@ -205,11 +205,6 @@ function runTests(obj) {
|
||||
// clonable same process
|
||||
.then(function() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
if (!obj.clonableObjectsSameProcess) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
var clonableObjectsId = 0;
|
||||
function runClonableTest() {
|
||||
if (clonableObjectsId >= clonableObjects.length) {
|
||||
@ -225,7 +220,12 @@ function runTests(obj) {
|
||||
}
|
||||
|
||||
obj.send(object.data, []).then(function(received) {
|
||||
compare(received.data, object.data);
|
||||
if (!obj.clonableObjectsSameProcess) {
|
||||
ok(received.error, "Error expected");
|
||||
} else {
|
||||
ok(!received.error, "Error not expected");
|
||||
compare(received.data, object.data);
|
||||
}
|
||||
runClonableTest();
|
||||
});
|
||||
}
|
||||
@ -301,7 +301,7 @@ function test_windowToWindow() {
|
||||
info("Testing window to window");
|
||||
var resolve;
|
||||
|
||||
onmessage = function(e) {
|
||||
function resolvePromise(data) {
|
||||
if (!resolve) {
|
||||
ok(false, "Unexpected message!");
|
||||
return;
|
||||
@ -309,7 +309,15 @@ function test_windowToWindow() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e.data, ports: e.ports });
|
||||
tmp(data);
|
||||
}
|
||||
|
||||
onmessage = function(e) {
|
||||
resolvePromise({ data: e.data, ports: e.ports, error: false });
|
||||
}
|
||||
|
||||
onmessageerror = function(e) {
|
||||
resolvePromise({ error: true });
|
||||
}
|
||||
|
||||
runTests({
|
||||
@ -331,6 +339,7 @@ function test_windowToWindow() {
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
onmessageerror = null;
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -360,7 +369,7 @@ function test_windowToIframeURL(url, clonableObjectsSameProcess) {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e.data, ports: e.ports });
|
||||
tmp({ data: e.data, ports: e.ports, error: e.data === "error" });
|
||||
}
|
||||
|
||||
var ifr = document.createElement('iframe');
|
||||
@ -411,7 +420,7 @@ function test_workers() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e1.data, ports: e1.ports });
|
||||
tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
|
||||
}
|
||||
|
||||
runTests({
|
||||
@ -431,7 +440,53 @@ function test_workers() {
|
||||
},
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
w.terminate();
|
||||
next();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// PostMessage for SharedWorkers
|
||||
function test_sharedWorkers() {
|
||||
info("Testing SharedWorkers");
|
||||
|
||||
var resolve;
|
||||
|
||||
var w = new SharedWorker('worker_postMessages.js');
|
||||
w.port.postMessage('sharedworkers');
|
||||
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: true,
|
||||
send(what, ports) {
|
||||
return new Promise(function(r, rr) {
|
||||
resolve = r;
|
||||
try {
|
||||
w.port.postMessage(what, ports);
|
||||
} catch(ex) {
|
||||
resolve = null;
|
||||
rr();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
finished() {
|
||||
w.port.postMessage("terminate");
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -447,7 +502,7 @@ function test_broadcastChannel() {
|
||||
|
||||
var resolve;
|
||||
|
||||
bc2.onmessage = function(e) {
|
||||
function resolvePromise(data) {
|
||||
if (!resolve) {
|
||||
ok(false, "Unexpected message!");
|
||||
return;
|
||||
@ -455,7 +510,15 @@ function test_broadcastChannel() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e.data, ports: [] });
|
||||
tmp(data);
|
||||
}
|
||||
|
||||
bc2.onmessage = function(e) {
|
||||
resolvePromise({ data: e.data, ports: [], error: false });
|
||||
}
|
||||
|
||||
bc2.onmessageerror = function(e) {
|
||||
resolvePromise({ error: true });
|
||||
}
|
||||
|
||||
runTests({
|
||||
@ -475,7 +538,8 @@ function test_broadcastChannel() {
|
||||
},
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
bc1.close();
|
||||
bc2.close();
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -501,7 +565,55 @@ function test_broadcastChannel_inWorkers() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e1.data, ports: e1.ports });
|
||||
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
|
||||
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({
|
||||
@ -521,7 +633,8 @@ function test_broadcastChannel_inWorkers() {
|
||||
},
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
bc.close();
|
||||
w.port.postMessage("terminate");
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -535,7 +648,7 @@ function test_messagePort() {
|
||||
var mc = new MessageChannel();
|
||||
var resolve;
|
||||
|
||||
mc.port2.onmessage = function(e) {
|
||||
function resolvePromise(data) {
|
||||
if (!resolve) {
|
||||
ok(false, "Unexpected message!");
|
||||
return;
|
||||
@ -543,7 +656,15 @@ function test_messagePort() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e.data, ports: e.ports });
|
||||
tmp(data);
|
||||
}
|
||||
|
||||
mc.port2.onmessage = function(e) {
|
||||
resolvePromise({ data: e.data, ports: e.ports, error: false });
|
||||
}
|
||||
|
||||
mc.port2.onmessageerror = function(e) {
|
||||
resolvePromise({ error: true });
|
||||
}
|
||||
|
||||
runTests({
|
||||
@ -563,7 +684,6 @@ function test_messagePort() {
|
||||
},
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -589,12 +709,12 @@ function test_messagePort_inWorkers() {
|
||||
|
||||
let tmp = resolve;
|
||||
resolve = null;
|
||||
tmp({ data: e1.data, ports: e1.ports });
|
||||
tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" });
|
||||
}
|
||||
|
||||
runTests({
|
||||
clonableObjectsEveryWhere: true,
|
||||
clonableObjectsSameProcess: false,
|
||||
clonableObjectsSameProcess: true,
|
||||
transferableObjects: true,
|
||||
send(what, ports) {
|
||||
return new Promise(function(r, rr) {
|
||||
@ -609,7 +729,7 @@ function test_messagePort_inWorkers() {
|
||||
},
|
||||
|
||||
finished() {
|
||||
onmessage = null;
|
||||
w.terminate();
|
||||
next();
|
||||
}
|
||||
});
|
||||
@ -628,9 +748,11 @@ var tests = [
|
||||
test_windowToCrossOriginIframe,
|
||||
|
||||
test_workers,
|
||||
test_sharedWorkers,
|
||||
|
||||
test_broadcastChannel,
|
||||
test_broadcastChannel_inWorkers,
|
||||
test_broadcastChannel_inSharedWorkers,
|
||||
|
||||
test_messagePort,
|
||||
test_messagePort_inWorkers,
|
||||
|
@ -2,12 +2,34 @@ function test_workers() {
|
||||
onmessage = function(e) {
|
||||
postMessage(e.data, e.ports);
|
||||
};
|
||||
|
||||
onmessageerror = function(e) {
|
||||
postMessage("error");
|
||||
};
|
||||
}
|
||||
|
||||
function test_broadcastChannel() {
|
||||
function test_sharedWorkers(port) {
|
||||
port.onmessage = function(e) {
|
||||
if (e.data == "terminate") {
|
||||
close();
|
||||
} else {
|
||||
port.postMessage(e.data, e.ports);
|
||||
}
|
||||
};
|
||||
|
||||
port.onmessageerror = function(e) {
|
||||
port.postMessage("error");
|
||||
};
|
||||
}
|
||||
|
||||
function test_broadcastChannel(obj) {
|
||||
var bc = new BroadcastChannel("postMessagesTest_inWorkers");
|
||||
bc.onmessage = function(e) {
|
||||
postMessage(e.data);
|
||||
obj.postMessage(e.data);
|
||||
};
|
||||
|
||||
bc.onmessageerror = function() {
|
||||
obj.postMessage("error");
|
||||
};
|
||||
}
|
||||
|
||||
@ -15,14 +37,32 @@ function test_messagePort(port) {
|
||||
port.onmessage = function(e) {
|
||||
postMessage(e.data, e.ports);
|
||||
};
|
||||
|
||||
port.onmessageerror = function(e) {
|
||||
postMessage("error");
|
||||
};
|
||||
}
|
||||
|
||||
onconnect = function(e) {
|
||||
e.ports[0].onmessage = ee => {
|
||||
if (ee.data == "sharedworkers") {
|
||||
test_sharedWorkers(e.ports[0]);
|
||||
e.ports[0].postMessage("ok");
|
||||
} else if (ee.data == "broadcastChannel") {
|
||||
test_broadcastChannel(e.ports[0]);
|
||||
e.ports[0].postMessage("ok");
|
||||
} else if (ee.data == "terminate") {
|
||||
close();
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
onmessage = function(e) {
|
||||
if (e.data == "workers") {
|
||||
test_workers();
|
||||
postMessage("ok");
|
||||
} else if (e.data == "broadcastChannel") {
|
||||
test_broadcastChannel();
|
||||
test_broadcastChannel(self);
|
||||
postMessage("ok");
|
||||
} else if (e.data == "messagePort") {
|
||||
test_messagePort(e.ports[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user