tor-browser

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

serialization-via-idb.any.js (1393B)


      1 // META: script=/IndexedDB/resources/support.js
      2 "use strict";
      3 
      4 function createEmptyWasmModule() {
      5  return new WebAssembly.Module(
      6      new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]));
      7 }
      8 
      9 async_test(t => {
     10  const openReq = createdb(t);
     11 
     12  openReq.onupgradeneeded = e => {
     13    const db = e.target.result;
     14    const store = db.createObjectStore("store", { keyPath: "key" });
     15 
     16    assert_throws_dom("DataCloneError", () => {
     17      store.put({ key: 1, property: createEmptyWasmModule() });
     18    });
     19    t.done();
     20  };
     21 }, "WebAssembly.Module cloning via IndexedDB: basic case");
     22 
     23 async_test(t => {
     24  const openReq = createdb(t);
     25 
     26  openReq.onupgradeneeded = e => {
     27    const db = e.target.result;
     28    const store = db.createObjectStore("store", { keyPath: "key" });
     29 
     30    let getter1Called = false;
     31    let getter2Called = false;
     32 
     33    assert_throws_dom("DataCloneError", () => {
     34      store.put({ key: 1, property: [
     35        { get x() { getter1Called = true; return 5; } },
     36        createEmptyWasmModule(),
     37        { get x() { getter2Called = true; return 5; } }
     38      ]});
     39    });
     40 
     41    assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called");
     42    assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called");
     43    t.done();
     44  };
     45 }, "WebAssembly.Module cloning via the IndexedDB: is interleaved correctly");