tor-browser

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

wasm_stream_instantiate_test.any.js (5601B)


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