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 + + + + + + +
+ +