Bug 1915045 Ensure decode tasks are scheduled on BufferingState::Enter() r=media...
[gecko.git] / js / xpconnect / tests / mochitest / shadow_realm_worker.js
blobc91c9bc30cd461b4dab2a70883917f4c6cd8f0c6
2 var sr = new ShadowRealm();
3 var resolve;
5 var allSettled = new Promise((resolved) => { resolve = resolved });
7 self.onmessage = async function (e) {
8   try {
9     // Test evaluate
10     if (e.data === 'evaluate') {
11       sr.evaluate("var s = 'PASS set string in realm';")
12       var res = sr.evaluate('s');
13       postMessage(res);
14       return;
15     }
17     // If Import works in a worker, then it ought to work in a shadow realm
18     //
19     // See  https://bugzilla.mozilla.org/show_bug.cgi?id=1247687 and
20     //      https://bugzilla.mozilla.org/show_bug.cgi?id=1772162
21     if (e.data == 'import') {
22       var import_worked = false;
23       var importValue_worked = false;
24       var importNested_worked = false;
25       try {
26         var module = await import("./shadow_realm_module.js");
27         if (module.x != 1) {
28           throw "mismatch";
29         }
30         import_worked = true;
31       } catch (e) { }
33       try {
34         await sr.importValue("./shadow_realm_module.js", 'x').then((x) => {
35           if (x == 1) { importValue_worked = true; }
36         });
37       } catch (e) { }
39       try {
40         sr.evaluate(`
41         var imported = false;
42         import("./shadow_realm_module.js").then((module) => {
43           if (module.x == 1) {
44             imported = true;
45           }
46         });
47         true;
48         `);
50         importNested_worked = sr.evaluate("imported");
51       } catch (e) {
53       }
55       if (importValue_worked == importNested_worked) {
56         postMessage(`PASS: import in workers ${
57           import_worked ? "worked" : "failed"
58         }. importValue, and nested import all ${
59           importValue_worked ? "worked" : "failed"
60         } `);
61         resolve();
62         return;
63       }
65       postMessage(`FAIL: importValue ${importValue_worked}, import ${import_worked}, importNested ${importNested_worked}`);
66       resolve();
67       return;
68     }
71     // Reply back with finish
72     if (e.data == 'finish') {
73       await allSettled;
74       postMessage("finish");
75       return;
76     }
77   } catch (e) {
78     postMessage("FAIL: " + e.message);
79   }
80   postMessage('Unknown message type.');