1<!DOCTYPE html> 2<meta charset="utf-8"> 3<title>WebAssembly.compileStreaming</title> 4<script src="/resources/testharness.js"></script> 5<script src="/resources/testharnessreport.js"></script> 6<script src="/common/get-host-info.sub.js"></script> 7<script> 8 promise_test(async function() { 9 const response = await fetch('resources/incrementer.wasm'); 10 const module = await WebAssembly.compileStreaming(response); 11 assert_true(module instanceof WebAssembly.Module); 12 }, "compileStreaming using resolved response"); 13 14 promise_test(async function() { 15 const response = await fetch('resources/incrementer.wasm'); 16 const module = await WebAssembly.compileStreaming(response); 17 const instance = new WebAssembly.Instance(module); 18 assert_true(instance instanceof WebAssembly.Instance); 19 }, "compileStreaming using resolved response and check instantiate"); 20 21 promise_test(async function() { 22 const result = fetch('resources/incrementer.wasm'); 23 const module = await WebAssembly.compileStreaming(result); 24 const instance = new WebAssembly.Instance(module); 25 assert_true(instance instanceof WebAssembly.Instance); 26 }, "compileStreaming using promise response from fetch and check instantiate"); 27 28 promise_test(async function(t) { 29 const result = fetch('resources/incrementer.wrong_mime_type.wasm'); 30 await promise_rejects_js(t, TypeError, WebAssembly.compileStreaming(result)); 31 }, "compileStreaming raise error if wrong mime type"); 32 33 promise_test(async function(t) { 34 const result = fetch('resources/incrementer.no_mime_type.wasm?pipe=header(Content-Type,)'); 35 await promise_rejects_js(t, TypeError, WebAssembly.compileStreaming(result)); 36 }, "compileStreaming raise error if no mime type"); 37 38 promise_test(async function(t) { 39 const result = fetch('webapi/status.py?status=404'); 40 await promise_rejects_js(t, TypeError, WebAssembly.compileStreaming(result)); 41 }, "compileStreaming raise error if 404 status"); 42 43 const getWasmUrl = fileName => { 44 const host_info = get_host_info(); 45 const url = host_info.HTTP_ORIGIN_WITH_DIFFERENT_PORT + '/wasm/webapi/'; 46 return url + fileName + "?pipe=header(Access-Control-Allow-Origin,*)"; 47 }; 48 49 promise_test(async function() { 50 const result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "cors"} ); 51 const module = await WebAssembly.compileStreaming(result); 52 assert_true(module instanceof WebAssembly.Module); 53 }, "compileStreaming check CORS"); 54 55 promise_test(async function(t) { 56 const result = fetch(getWasmUrl('resources/incrementer.wasm'), {"mode": "no-cors"} ); 57 await promise_rejects_js(t, TypeError, WebAssembly.compileStreaming(result)); 58 }, "compileStreaming raise error if no-cors"); 59 60 promise_test(async function() { 61 const v = await fetch('resources/incrementer.wasm'); 62 const buffer = await v.arrayBuffer(); 63 const response = new Response(buffer, { headers: { "Content-Type" : "application/wasm" }}); 64 const module = await WebAssembly.compileStreaming(response); 65 assert_true(module instanceof WebAssembly.Module); 66 }, "compileStreaming receive promise with response created from ArrayBuffer"); 67 68 promise_test(async function() { 69 const v = await fetch('resources/incrementer.wasm'); 70 const buffer = await v.arrayBuffer(); 71 const stream = new ReadableStream({ 72 start(controller) { 73 (async () => { 74 await Promise.resolve().then(() => controller.enqueue(new Uint8Array(buffer.slice(0, 20)))); 75 await Promise.resolve().then(() => controller.enqueue(new Uint8Array(buffer.slice(20, buffer.byteLength)))); 76 await Promise.resolve().then(() => controller.close()); 77 })(); 78 } 79 }); 80 const response = new Response(stream, { headers: { "Content-Type" : "application/wasm" }}); 81 const module = await WebAssembly.compileStreaming(response); 82 assert_true(module instanceof WebAssembly.Module); 83 }, "compileStreaming using ReadableStream with Uint8Array chunks"); 84 85 promise_test(async function(t) { 86 const v = await fetch('resources/incrementer.wasm'); 87 const buffer = await v.arrayBuffer(); 88 const stream = new ReadableStream({ 89 start(controller) { 90 // Enqueuing an ArrayBuffer rather a Uint8Array per 91 // https://streams.spec.whatwg.org/#read-loop 92 controller.enqueue(buffer); 93 controller.close(); 94 } 95 }); 96 const response = new Response(stream, { headers: { "Content-Type" : "application/wasm" }}); 97 await promise_rejects_js(t, TypeError, WebAssembly.compileStreaming(response)); 98 }, "compileStreaming using ReadableStream with ArrayBuffer chunk"); 99 100 promise_test(async function() { 101 const response = await fetch('resources/incrementer.wasm'); 102 const blob = await response.blob(); 103 const module = await WebAssembly.compileStreaming(new Response(blob, { headers: { "Content-Type" : "application/wasm" }})); 104 assert_true(module instanceof WebAssembly.Module); 105 }, "compileStreaming using blob"); 106 107 promise_test(async function(t) { 108 const response = await fetch('resources/incrementer.wasm'); 109 const blob = await response.blob(); 110 const formData = new FormData; 111 formData.append('blob', blob); 112 formData.append('blob2', "Hello"); 113 await promise_rejects_js(t, WebAssembly.CompileError, WebAssembly.compileStreaming(new Response(formData, { headers: { "Content-Type" : "application/wasm" }}))); 114 }, "compileStreaming using FormData"); 115</script> 116