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");