summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/unit/sync_and_async_in_worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/xpconnect/tests/unit/sync_and_async_in_worker.js')
-rw-r--r--js/xpconnect/tests/unit/sync_and_async_in_worker.js124
1 files changed, 124 insertions, 0 deletions
diff --git a/js/xpconnect/tests/unit/sync_and_async_in_worker.js b/js/xpconnect/tests/unit/sync_and_async_in_worker.js
new file mode 100644
index 0000000000..e21c5cca67
--- /dev/null
+++ b/js/xpconnect/tests/unit/sync_and_async_in_worker.js
@@ -0,0 +1,124 @@
+onmessage = async event => {
+ if (event.data.order === "test") {
+ globalThis["loaded"] = [];
+ const ns = await import("resource://test/non_shared_1.mjs");
+ postMessage({});
+ return;
+ }
+
+ if (event.data.order === "sync-before-async") {
+ globalThis["loaded"] = [];
+ const ns = ChromeUtils.importESModule("resource://test/non_shared_1.mjs", {
+ global: "current",
+ });
+
+ const sync_beforeInc = ns.getCounter();
+ ns.incCounter();
+ const sync_afterInc = ns.getCounter();
+
+ const loaded1 = globalThis["loaded"].join(",");
+
+ let nsPromise;
+ if (event.data.target === "top-level") {
+ nsPromise = import("resource://test/non_shared_1.mjs");
+ } else {
+ nsPromise = import("resource://test/import_non_shared_1.mjs");
+ }
+
+ const ns2 = await nsPromise;
+
+ const async_beforeInc = ns2.getCounter();
+ ns2.incCounter();
+ const async_afterInc = ns2.getCounter();
+ const sync_afterIncInc = ns.getCounter();
+
+ const loaded2 = globalThis["loaded"].join(",");
+
+ postMessage({
+ sync_beforeInc,
+ sync_afterInc,
+ sync_afterIncInc,
+ async_beforeInc,
+ async_afterInc,
+ loaded1,
+ loaded2,
+ });
+ return;
+ }
+
+ if (event.data.order === "sync-after-async") {
+ globalThis["loaded"] = [];
+ const ns = await import("resource://test/non_shared_1.mjs");
+
+ const async_beforeInc = ns.getCounter();
+ ns.incCounter();
+ const async_afterInc = ns.getCounter();
+
+ const loaded1 = globalThis["loaded"].join(",");
+
+ let ns2;
+ if (event.data.target === "top-level") {
+ ns2 = ChromeUtils.importESModule("resource://test/non_shared_1.mjs", {
+ global: "current",
+ });
+ } else {
+ ns2 = ChromeUtils.importESModule("resource://test/import_non_shared_1.mjs", {
+ global: "current",
+ });
+ }
+
+ const sync_beforeInc = ns2.getCounter();
+ ns2.incCounter();
+ const sync_afterInc = ns2.getCounter();
+ const async_afterIncInc = ns.getCounter();
+
+ const loaded2 = globalThis["loaded"].join(",");
+
+ postMessage({
+ sync_beforeInc,
+ sync_afterInc,
+ async_beforeInc,
+ async_afterInc,
+ async_afterIncInc,
+ loaded1,
+ loaded2,
+ });
+ return;
+ }
+
+ if (event.data.order === "sync-while-async") {
+ globalThis["loaded"] = [];
+ const nsPromise = import("resource://test/non_shared_1.mjs");
+
+ let errorMessage = "";
+ try {
+ if (event.data.target === "top-level") {
+ ChromeUtils.importESModule("resource://test/non_shared_1.mjs", {
+ global: "current",
+ });
+ } else {
+ ChromeUtils.importESModule("resource://test/import_non_shared_1.mjs", {
+ global: "current",
+ });
+ }
+ } catch (e) {
+ errorMessage = e.message;
+ }
+
+ const ns = await nsPromise;
+
+ const async_beforeInc = ns.getCounter();
+ ns.incCounter();
+ const async_afterInc = ns.getCounter();
+
+ const loaded = globalThis["loaded"].join(",");
+
+ postMessage({
+ sync_error: errorMessage,
+ async_beforeInc,
+ async_afterInc,
+ loaded,
+ });
+ return;
+ }
+};