// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/. // // This file is simplified from the one there, because it only tests that the // module can be passed and that functions can be run. The SharedArrayBuffer // version also tests that the memory is shared between the agents. "use strict"; function createWasmModule() { return fetch('incrementer.wasm') .then(response => { if (!response.ok) throw new Error(response.statusText); return response.arrayBuffer(); }) .then(WebAssembly.compile); } function testModule(module) { let instance = new WebAssembly.Instance(module); let increment = instance.exports["increment"]; assert_equals(typeof increment, "function", `The type of the increment export should be "function", got ${typeof increment}`); let result = increment(42); assert_equals(result, 43, `increment(42) should be 43, got ${result}`); } self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin) => { return createWasmModule().then(module => { return new Promise(resolve => { whereToListen.onmessage = t.step_func(({ data }) => { switch (data.message) { case "module received": { testModule(data.module); resolve(); break; } } }); whereToSend.postMessage({ message: "send module", module }, origin); }); }); }; self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => { whereToListen.onmessage = ({ data }) => { switch (data.message) { case "send module": { let module = data.module; testModule(data.module); whereToSendBackTo.postMessage({ message: "module received", module }, origin); break; } } }; };