Bug 1478615 [wpt PR 12190] - Introduce AgentClusterID to serialized messages, a=testonly

Automatic update from web-platform-testsIntroduce AgentClusterID to serialized messages

There are restrictions to sharing SharedArrayBuffer (and WebAssembly
Modules) between execution contexts; for example, you cannot share a
SharedArrayBuffer between a Window and the Service Worker it created.
The rules are described here:
https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-agent-cluster-formalism

This defines an "agent" which is similar to an execution context, and
an "agent cluster" which is a collection of agents that can share
between each other.

This CL begins to model some of this behavior by using a
`base::UnguessableToken` as an agent cluster ID that can be queried
from an `ExecutionContext`.

This CL also has the correct behavior when a message is sent to an
agent that is not part of its agent cluster; in that case a
"messageerror" event is sent instead of a "message" event.

Bug: chromium:798572, chromium:714842
Change-Id: Ie70cce4cbd0ebd04d8d270d66f59690caf7f616a
Reviewed-on: https://chromium-review.googlesource.com/1130505
Commit-Queue: Ben Smith <binji@chromium.org>
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Jeremy Roman <jbroman@chromium.org>
Reviewed-by: Hiroki Nakagawa <nhiroki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#580984}

--

wpt-commits: 44cf7952750b5ce5ead67966d2e5304753aef930
wpt-pr: 12190
This commit is contained in:
Ben Smith 2018-08-08 12:20:00 +00:00 committed by moz-wptsync-bot
parent 49edc1ebf0
commit 8deef6b4ba
3 changed files with 17 additions and 11 deletions

View File

@ -643397,7 +643397,7 @@
"support"
],
"wasm/resources/service-worker.js": [
"bb0ec21cc570bef2ecc880d8a03cf88395a56b76",
"684eaf64878c22afc9ac877b79db7d26f14a3670",
"support"
],
"wasm/wasm_local_iframe_test.html": [
@ -643417,7 +643417,7 @@
"support"
],
"wasm/wasm_service_worker_test.https.html": [
"e350ed95eaff91ed982b28dada7a774675368adb",
"cced4b8f6ecdaa03c6d80793c2f3650b217452a5",
"testharness"
],
"web-animations/META.yml": [

View File

@ -24,3 +24,7 @@ self.addEventListener('message', function(e) {
.catch(e => port.postMessage({type:"OTHER ERROR"}));
}
});
self.addEventListener('messageerror', function(e) {
port.postMessage({type:"RECEIVE ERROR"});
});

View File

@ -8,14 +8,16 @@
promise_test(async test => {
var registration = await service_worker_unregister_and_register(
test, 'resources/service-worker.js', 'resources/blank.html');
add_completion_callback(() => registration.unregister());
var worker = registration.installing;
var data = await new Promise((resolve, reject) => {
var messageChannel = new MessageChannel();
worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
worker.postMessage({compile: true});
messageChannel.port1.onmessage = event => resolve(event.data);
});
assert_equals(data, null);
add_completion_callback(() => registration.unregister());
var worker = registration.installing;
var event = await new Promise((resolve, reject) => {
var messageChannel = new MessageChannel();
worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
worker.postMessage({compile: true});
messageChannel.port1.onmessage = event => reject(event);
messageChannel.port1.onmessageerror = event => resolve(event);
});
assert_equals(event.type, "messageerror");
assert_equals(event.data, null);
}, 'postMessaging wasm from a service worker should fail');
</script>