const methods = [ "compileStreaming", "instantiateStreaming", ]; for (const method of methods) { promise_test(async t => { const controller = new AbortController(); const signal = controller.signal; controller.abort(); const request = fetch('../incrementer.wasm', { signal }); return promise_rejects_dom(t, 'AbortError', WebAssembly[method](request), `${method} should reject`); }, `${method}() on an already-aborted request should reject with AbortError`); promise_test(async t => { const controller = new AbortController(); const signal = controller.signal; const request = fetch('../incrementer.wasm', { signal }); const promise = WebAssembly[method](request); controller.abort(); return promise_rejects_dom(t, 'AbortError', promise, `${method} should reject`); }, `${method}() synchronously followed by abort should reject with AbortError`); promise_test(async t => { const controller = new AbortController(); const signal = controller.signal; return fetch('../incrementer.wasm', { signal }) .then(response => { Promise.resolve().then(() => controller.abort()); return WebAssembly[method](response); }) .catch(err => { assert_equals(err.name, "AbortError"); }); }, `${method}() asynchronously racing with abort should succeed or reject with AbortError`); }