summaryrefslogtreecommitdiffstats
path: root/js/xpconnect/tests/mochitest/shadow_realm_worker.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/xpconnect/tests/mochitest/shadow_realm_worker.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/js/xpconnect/tests/mochitest/shadow_realm_worker.js b/js/xpconnect/tests/mochitest/shadow_realm_worker.js
new file mode 100644
index 0000000000..c91c9bc30c
--- /dev/null
+++ b/js/xpconnect/tests/mochitest/shadow_realm_worker.js
@@ -0,0 +1,81 @@
+
+var sr = new ShadowRealm();
+var resolve;
+
+var allSettled = new Promise((resolved) => { resolve = resolved });
+
+self.onmessage = async function (e) {
+ try {
+ // Test evaluate
+ if (e.data === 'evaluate') {
+ sr.evaluate("var s = 'PASS set string in realm';")
+ var res = sr.evaluate('s');
+ postMessage(res);
+ return;
+ }
+
+ // If Import works in a worker, then it ought to work in a shadow realm
+ //
+ // See https://bugzilla.mozilla.org/show_bug.cgi?id=1247687 and
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1772162
+ if (e.data == 'import') {
+ var import_worked = false;
+ var importValue_worked = false;
+ var importNested_worked = false;
+ try {
+ var module = await import("./shadow_realm_module.js");
+ if (module.x != 1) {
+ throw "mismatch";
+ }
+ import_worked = true;
+ } catch (e) { }
+
+ try {
+ await sr.importValue("./shadow_realm_module.js", 'x').then((x) => {
+ if (x == 1) { importValue_worked = true; }
+ });
+ } catch (e) { }
+
+ try {
+ sr.evaluate(`
+ var imported = false;
+ import("./shadow_realm_module.js").then((module) => {
+ if (module.x == 1) {
+ imported = true;
+ }
+ });
+ true;
+ `);
+
+ importNested_worked = sr.evaluate("imported");
+ } catch (e) {
+
+ }
+
+ if (importValue_worked == importNested_worked) {
+ postMessage(`PASS: import in workers ${
+ import_worked ? "worked" : "failed"
+ }. importValue, and nested import all ${
+ importValue_worked ? "worked" : "failed"
+ } `);
+ resolve();
+ return;
+ }
+
+ postMessage(`FAIL: importValue ${importValue_worked}, import ${import_worked}, importNested ${importNested_worked}`);
+ resolve();
+ return;
+ }
+
+
+ // Reply back with finish
+ if (e.data == 'finish') {
+ await allSettled;
+ postMessage("finish");
+ return;
+ }
+ } catch (e) {
+ postMessage("FAIL: " + e.message);
+ }
+ postMessage('Unknown message type.');
+}