diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html
new file mode 100644
index 00000000000000..8902de49cfb102
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success-and-failure.html
@@ -0,0 +1,35 @@
+
+
SharedArrayBuffer cannot cross agent clusters, BroadcastChannel edition
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html
new file mode 100644
index 00000000000000..f9cf7a87cfc3d8
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/broadcastchannel-success.html
@@ -0,0 +1,58 @@
+
+
+Structured cloning of SharedArrayBuffers: BroadcastChannel within the same agent cluster
+
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html
new file mode 100644
index 00000000000000..91110867d7b47a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/identity-not-preserved.html
@@ -0,0 +1,64 @@
+
+
+SharedArrayBuffers, when cloned, do not give back the same object
+
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html
new file mode 100644
index 00000000000000..de097b26c41745
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-dedicatedworker.html
@@ -0,0 +1,14 @@
+
+
+Structured cloning of SharedArrayBuffers into a dedicated worker nested inside a dedicated worker
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html
new file mode 100644
index 00000000000000..cf328be8799627
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success-sharedworker.html
@@ -0,0 +1,14 @@
+
+
+Structured cloning of SharedArrayBuffers into a dedicated worker nested inside a shared worker
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js
new file mode 100644
index 00000000000000..e1a28436e0af6a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/nested-worker-success.js
@@ -0,0 +1,11 @@
+"use strict";
+importScripts("/resources/testharness.js");
+importScripts("resources/test-incrementer.js");
+
+promise_test(t => {
+ const worker = new Worker("resources/incrementer-worker.js");
+
+ return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker");
+}, "postMessaging to a dedicated sub-worker allows them to see each others' modifications");
+
+done();
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html
new file mode 100644
index 00000000000000..ece74e271944c5
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/no-transferring.html
@@ -0,0 +1,31 @@
+
+
+SharedArrayBuffers cannot be transferred
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html
new file mode 100644
index 00000000000000..eec1b2cc8e36c3
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/blank.html
@@ -0,0 +1,2 @@
+
+Used as a service worker-controlled iframe
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html
new file mode 100644
index 00000000000000..792d6fd2013807
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-iframe.html
@@ -0,0 +1,19 @@
+
+
+A test page that messes with a given SharedArrayBuffer sent from a BroadcastChannel
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js
new file mode 100644
index 00000000000000..310e0e9358446a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-sharedworker.js
@@ -0,0 +1,7 @@
+const channel = new BroadcastChannel("anne was here");
+channel.onmessageerror = ({ data }) => {
+ if(data === null) {
+ channel.postMessage("sw-success");
+ }
+}
+channel.postMessage("hi");
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js
new file mode 100644
index 00000000000000..36369cde5004b4
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/broadcastchannel-worker.js
@@ -0,0 +1,9 @@
+const channel = new BroadcastChannel("anne was here");
+channel.onmessage = ({ data }) => {
+ if(data === "hi" || data === "sw-success") {
+ return;
+ } else if(data instanceof SharedArrayBuffer) {
+ channel.postMessage("dw-success");
+ }
+}
+channel.postMessage("hi");
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html
new file mode 100644
index 00000000000000..c4fd5824a1c617
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-iframe.html
@@ -0,0 +1,11 @@
+
+
+A test page that echos back anything postMessaged to it to its parent
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js
new file mode 100644
index 00000000000000..cbbde8a73c8c2a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/echo-worker.js
@@ -0,0 +1,5 @@
+"use strict";
+
+self.onmessage = ({ data }) => {
+ self.postMessage(data);
+};
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html
new file mode 100644
index 00000000000000..a6dd70177584c9
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe-domain.sub.html
@@ -0,0 +1,11 @@
+
+
+A test page that messes with a given SharedArrayBuffer and also sets document.domain
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html
new file mode 100644
index 00000000000000..6f27ad7d5becee
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-iframe.html
@@ -0,0 +1,10 @@
+
+
+A test page that messes with a given SharedArrayBuffer
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html
new file mode 100644
index 00000000000000..e583b5c4161be8
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-popup.html
@@ -0,0 +1,10 @@
+
+
+A test page that messes with a given SharedArrayBuffer
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js
new file mode 100644
index 00000000000000..c74fd26d3fd6e8
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker-with-channel.js
@@ -0,0 +1,7 @@
+"use strict";
+importScripts("./test-incrementer.js");
+
+self.onmessage = ({ data }) => {
+ // data will be a MessagePort
+ setupDestinationIncrementer(data, data);
+};
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js
new file mode 100644
index 00000000000000..5801bd2b97c8b5
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/incrementer-worker.js
@@ -0,0 +1,4 @@
+"use strict";
+importScripts("./test-incrementer.js");
+
+setupDestinationIncrementer(self, self);
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html
new file mode 100644
index 00000000000000..fe93cc0c4b0fe5
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-1.html
@@ -0,0 +1,5 @@
+
+
+Nesting level 1
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html
new file mode 100644
index 00000000000000..fad52ce9de3977
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-2.html
@@ -0,0 +1,5 @@
+
+
+Nesting level 2
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html
new file mode 100644
index 00000000000000..7971022b2cdc31
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-3.html
@@ -0,0 +1,5 @@
+
+
+Nesting level 3
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html
new file mode 100644
index 00000000000000..d374515bdc7366
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/nested-iframe-4-incrementer.html
@@ -0,0 +1,10 @@
+
+
+A test page that messes with a given SharedArrayBuffer, nested 4 levels deep in iframes
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js
new file mode 100644
index 00000000000000..c6f2046878cce3
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/serviceworker-failure.js
@@ -0,0 +1,32 @@
+"use strict";
+self.importScripts("/resources/testharness.js");
+
+let state = "start in worker";
+
+self.onmessage = e => {
+ if (e.data === "start in window") {
+ assert_equals(state, "start in worker");
+ e.source.postMessage(state);
+ state = "we are expecting a messageerror due to the window sending us a SAB";
+ } else if (e.data === "we are expecting a messageerror due to the worker sending us a SAB") {
+ assert_equals(state, "onmessageerror was received in worker");
+ e.source.postMessage(new SharedArrayBuffer());
+ state = "done in worker";
+ } else {
+ e.source.postMessage(`worker onmessage was reached when in state "${state}" and data ${e.data}`);
+ }
+};
+
+self.onmessageerror = e => {
+ if (state === "we are expecting a messageerror due to the window sending us a SAB") {
+ assert_equals(e.data, null, "data");
+ assert_equals(e.origin, self.origin, "origin");
+ assert_not_equals(e.source, null, "source");
+ assert_equals(e.ports.length, 0, "ports length");
+
+ state = "onmessageerror was received in worker";
+ e.source.postMessage(state);
+ } else {
+ e.source.postMessage(`worker onmessageerror was reached when in state "${state}" and data ${e.data}`);
+ }
+};
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js
new file mode 100644
index 00000000000000..a11ccbc1f3099a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js
@@ -0,0 +1,17 @@
+let state = "send-sw-failure"
+onconnect = initialE => {
+ initialE.source.postMessage(state)
+ initialE.source.onmessage = e => {
+ if(state === "" && e.data === "send-window-failure") {
+ e.postMessage(new SharedArrayBuffer())
+ } else {
+ e.postMessage("failure")
+ }
+ }
+ initialE.source.onmessageerror = e => {
+ if(state === "send-sw-failure") {
+ e.postMessage("send-sw-failure-success")
+ state = ""
+ }
+ }
+}
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js
new file mode 100644
index 00000000000000..2bdd2bae66e178
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js
@@ -0,0 +1,73 @@
+"use strict";
+
+self.getViewValue = (view, index) => {
+ if(view instanceof DataView) {
+ return view.getInt8(index);
+ }
+ return view[index];
+};
+
+self.setViewValue = (view, index, value) => {
+ if(view instanceof DataView) {
+ view.setInt8(index, value);
+ } else {
+ view[index] = value;
+ }
+};
+
+self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin, type = "Int32Array") => {
+ return new Promise(resolve => {
+ const sab = new SharedArrayBuffer(8);
+ const view = new self[type](sab);
+ setViewValue(view, 0, 1);
+
+ whereToListen.onmessage = t.step_func(({ data }) => {
+ switch (data.message) {
+ case "initial payload received": {
+ assert_equals(data.value, 1, `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`);
+ break;
+ }
+
+ case "changed to 2": {
+ assert_equals(getViewValue(view, 0), 2, `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`);
+
+ setViewValue(view, 0, 3);
+ whereToSend.postMessage({ message: "changed to 3" }, origin);
+
+ break;
+ }
+
+ case "changed to 3 received": {
+ assert_equals(data.value, 3, `The ${whereToSendLabel} must see changes made in the ${whereToListenLabel}`);
+ resolve();
+ break;
+ }
+ }
+ });
+
+ whereToSend.postMessage({ message: "initial payload", view }, origin);
+ });
+};
+
+self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => {
+ let view;
+ whereToListen.onmessage = ({ data }) => {
+ switch (data.message) {
+ case "initial payload": {
+ view = data.view;
+ whereToSendBackTo.postMessage({ message: "initial payload received", value: getViewValue(view, 0) }, origin);
+
+ setViewValue(view, 0, 2);
+ whereToSendBackTo.postMessage({ message: "changed to 2" }, origin);
+
+ break;
+ }
+
+ case "changed to 3": {
+ whereToSendBackTo.postMessage({ message: "changed to 3 received", value: getViewValue(view, 0) }, origin);
+
+ break;
+ }
+ }
+ };
+};
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js
new file mode 100644
index 00000000000000..6d6efda00db263
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-sab.js
@@ -0,0 +1,15 @@
+"use strict";
+
+self.assertSABsHaveSameBackingBlock = (originalSAB, clonedSAB) => {
+ const originalView = new Uint8Array(originalSAB);
+ const clonedView = new Uint8Array(clonedSAB);
+
+ assert_not_equals(originalSAB, clonedSAB, "the clone must not be the same object");
+
+ assert_equals(originalView[0], 0, "originalView[0] starts 0");
+ assert_equals(clonedView[0], 0, "clonedView[0] starts 0");
+
+ originalView[0] = 5;
+ assert_equals(originalView[0], 5, "originalView[0] ends up 5");
+ assert_equals(clonedView[0], 5, "clonedView[0] ends up 5");
+};
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html
new file mode 100644
index 00000000000000..49d341f47f9bfe
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-history.html
@@ -0,0 +1,36 @@
+
+
+SharedArrayBuffers cloning via history's methods invoking StructuredSerializeForStorage
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js
new file mode 100644
index 00000000000000..4eb25eb85467fd
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-idb.any.js
@@ -0,0 +1,40 @@
+// META: script=/IndexedDB/support.js
+"use strict";
+
+async_test(t => {
+ const openReq = createdb(t);
+
+ openReq.onupgradeneeded = e => {
+ const db = e.target.result;
+ const store = db.createObjectStore("store", { keyPath: "key" });
+
+ assert_throws("DataCloneError", () => {
+ store.put({ key: 1, property: new SharedArrayBuffer() });
+ });
+ t.done();
+ };
+}, "SharedArrayBuffer cloning via IndexedDB: basic case");
+
+async_test(t => {
+ const openReq = createdb(t);
+
+ openReq.onupgradeneeded = e => {
+ const db = e.target.result;
+ const store = db.createObjectStore("store", { keyPath: "key" });
+
+ let getter1Called = false;
+ let getter2Called = false;
+
+ assert_throws("DataCloneError", () => {
+ store.put({ key: 1, property: [
+ { get x() { getter1Called = true; return 5; } },
+ new SharedArrayBuffer(),
+ { get x() { getter2Called = true; return 5; } }
+ ]});
+ });
+
+ assert_true(getter1Called, "The getter before the SAB must have been called");
+ assert_false(getter2Called, "The getter after the SAB must not have been called");
+ t.done();
+ };
+}, "SharedArrayBuffer cloning via the IndexedDB: is interleaved correctly");
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js
new file mode 100644
index 00000000000000..2c3fb7be034b0c
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/serialization-via-notifications-api.any.js
@@ -0,0 +1,23 @@
+"use strict";
+
+test(() => {
+ assert_throws("DataCloneError", () => {
+ new Notification("Bob: Hi", { data: new SharedArrayBuffer() });
+ })
+}, "SharedArrayBuffer cloning via the Notifications API's data member: basic case");
+
+test(() => {
+ let getter1Called = false;
+ let getter2Called = false;
+
+ assert_throws("DataCloneError", () => {
+ new Notification("Bob: Hi", { data: [
+ { get x() { getter1Called = true; return 5; } },
+ new SharedArrayBuffer(),
+ { get x() { getter2Called = true; return 5; } }
+ ]});
+ });
+
+ assert_true(getter1Called, "The getter before the SAB must have been called");
+ assert_false(getter2Called, "The getter after the SAB must not have been called");
+}, "SharedArrayBuffer cloning via the Notifications API's data member: is interleaved correctly");
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html
new file mode 100644
index 00000000000000..9205d01df26e32
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-domain-success.sub.html
@@ -0,0 +1,26 @@
+
+
+Structured cloning of SharedArrayBuffers into same-origin-domain windows
+
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html
new file mode 100644
index 00000000000000..cd67e5b2c9553a
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-messagechannel-success.html
@@ -0,0 +1,22 @@
+
+
+Structured cloning of SharedArrayBuffers using MessageChannel
+
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html
new file mode 100644
index 00000000000000..ff7449a9317751
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-serviceworker-failure.https.html
@@ -0,0 +1,54 @@
+
+
+SharedArrayBuffer cannot cross agent clusters, service worker edition
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html
new file mode 100644
index 00000000000000..023cb5acdef1c1
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-sharedworker-failure.html
@@ -0,0 +1,31 @@
+
+SharedArrayBuffer cannot cross agent clusters, shared worker edition
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html
new file mode 100644
index 00000000000000..e25fc9002d02d3
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-similar-but-cross-origin-success.sub.html
@@ -0,0 +1,26 @@
+
+
+Structured cloning of SharedArrayBuffers to similar-origin, but not same-origin, windows
+
+
+
+
+
+
+
+
+
diff --git a/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html
new file mode 100644
index 00000000000000..4b86f9befa6a04
--- /dev/null
+++ b/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/window-simple-success.html
@@ -0,0 +1,70 @@
+
+
+Structured cloning of SharedArrayBuffers: simple success cases that don't need dedicated files
+
+
+
+
+
+
+
+
+