81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
|
|
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.');
|
|
}
|