summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js')
-rw-r--r--testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js80
1 files changed, 80 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js
new file mode 100644
index 0000000000..9c3fb813ae
--- /dev/null
+++ b/testing/web-platform/tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js
@@ -0,0 +1,80 @@
+"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.maybeBigInt = (view, value) => {
+ if (view.constructor.name === "BigInt64Array" || view.constructor.name === "BigUint64Array") {
+ return BigInt(value);
+ }
+ return 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, maybeBigInt(view, 1));
+
+ whereToListen.onmessage = t.step_func(({ data }) => {
+ switch (data.message) {
+ case "initial payload received": {
+ assert_equals(data.value, maybeBigInt(view, 1), `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`);
+ break;
+ }
+
+ case "changed to 2": {
+ assert_equals(getViewValue(view, 0), maybeBigInt(view, 2), `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`);
+
+ setViewValue(view, 0, maybeBigInt(view, 3));
+ whereToSend.postMessage({ message: "changed to 3" }, origin);
+
+ break;
+ }
+
+ case "changed to 3 received": {
+ assert_equals(data.value, maybeBigInt(view, 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, maybeBigInt(view, 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;
+ }
+ }
+ };
+};