tor-browser

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

identity.tentative.any.js (1712B)


      1 // META: global=window,dedicatedworker,jsshell,shadowrealm
      2 // META: script=/wasm/jsapi/assertions.js
      3 // META: script=/wasm/jsapi/wasm-module-builder.js
      4 
      5 test(() => {
      6  const tag = new WebAssembly.Tag({ parameters: ["i32"] });
      7  const exn = new WebAssembly.Exception(tag, [42]);
      8  const exn_same_payload = new WebAssembly.Exception(tag, [42]);
      9  const exn_diff_payload = new WebAssembly.Exception(tag, [53]);
     10 
     11  const builder = new WasmModuleBuilder();
     12  const jsfuncIndex = builder.addImport("module", "jsfunc", kSig_v_v);
     13  const tagIndex = builder.addImportedTag("module", "tag", kSig_v_i);
     14  const imports = {
     15    module: {
     16      jsfunc: function() { throw exn; },
     17      tag: tag
     18    }
     19  };
     20 
     21  builder
     22    .addFunction("catch_rethrow", kSig_v_v)
     23    .addBody([
     24      kExprTry, kWasmStmt,
     25        kExprCallFunction, jsfuncIndex,
     26      kExprCatch, tagIndex,
     27        kExprDrop,
     28        kExprRethrow, 0x00,
     29      kExprEnd
     30    ])
     31    .exportFunc();
     32 
     33  builder
     34    .addFunction("catch_all_rethrow", kSig_v_v)
     35    .addBody([
     36      kExprTry, kWasmStmt,
     37        kExprCallFunction, jsfuncIndex,
     38      kExprCatchAll,
     39        kExprRethrow, 0x00,
     40      kExprEnd
     41    ])
     42    .exportFunc();
     43 
     44  const buffer = builder.toBuffer();
     45  WebAssembly.instantiate(buffer, imports).then(result => {
     46    try {
     47      result.instance.exports.catch_rethrow();
     48    } catch (e) {
     49      assert_equals(e, exn);
     50      assert_not_equals(e, exn_same_payload);
     51      assert_not_equals(e, exn_diff_payload);
     52    }
     53    try {
     54      result.instance.exports.catch_all_rethrow();
     55    } catch (e) {
     56      assert_equals(e, exn);
     57      assert_not_equals(e, exn_same_payload);
     58      assert_not_equals(e, exn_diff_payload);
     59    }
     60  });
     61 }, "Identity check");