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