tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }