tor-browser

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

response-consume-stream.any.js (3164B)


      1 // META: global=window,worker
      2 // META: title=Response consume
      3 // META: script=../resources/utils.js
      4 
      5 promise_test(function(test) {
      6    var body = "";
      7    var response = new Response("");
      8    return validateStreamFromString(response.body.getReader(), "");
      9 }, "Read empty text response's body as readableStream");
     10 
     11 promise_test(function(test) {
     12    var response = new Response(new Blob([], { "type" : "text/plain" }));
     13    return validateStreamFromString(response.body.getReader(), "");
     14 }, "Read empty blob response's body as readableStream");
     15 
     16 var formData = new FormData();
     17 formData.append("name", "value");
     18 var textData = JSON.stringify("This is response's body");
     19 var blob = new Blob([textData], { "type" : "text/plain" });
     20 var urlSearchParamsData = "name=value";
     21 var urlSearchParams = new URLSearchParams(urlSearchParamsData);
     22 
     23 for (const mode of [undefined, "byob"]) {
     24    promise_test(function(test) {
     25        var response = new Response(blob);
     26        return validateStreamFromString(response.body.getReader({ mode }), textData);
     27    }, `Read blob response's body as readableStream with mode=${mode}`);
     28 
     29    promise_test(function(test) {
     30        var response = new Response(textData);
     31        return validateStreamFromString(response.body.getReader({ mode }), textData);
     32    }, `Read text response's body as readableStream with mode=${mode}`);
     33 
     34    promise_test(function(test) {
     35        var response = new Response(urlSearchParams);
     36        return validateStreamFromString(response.body.getReader({ mode }), urlSearchParamsData);
     37    }, `Read URLSearchParams response's body as readableStream with mode=${mode}`);
     38 
     39    promise_test(function(test) {
     40        var arrayBuffer = new ArrayBuffer(textData.length);
     41        var int8Array = new Int8Array(arrayBuffer);
     42        for (var cptr = 0; cptr < textData.length; cptr++)
     43            int8Array[cptr] = textData.charCodeAt(cptr);
     44 
     45        return validateStreamFromString(new Response(arrayBuffer).body.getReader({ mode }), textData);
     46    }, `Read array buffer response's body as readableStream with mode=${mode}`);
     47 
     48    promise_test(function(test) {
     49        var response = new Response(formData);
     50        return validateStreamFromPartialString(response.body.getReader({ mode }),
     51        "Content-Disposition: form-data; name=\"name\"\r\n\r\nvalue");
     52    }, `Read form data response's body as readableStream with mode=${mode}`);
     53 }
     54 
     55 test(function() {
     56    assert_equals(Response.error().body, null);
     57 }, "Getting an error Response stream");
     58 
     59 test(function() {
     60    assert_equals(Response.redirect("/").body, null);
     61 }, "Getting a redirect Response stream");
     62 
     63 promise_test(async function(test) {
     64  var buffer = new ArrayBuffer(textData.length);
     65 
     66  var body = new Response(textData).body;
     67  const reader = body.getReader( {mode: 'byob'} );
     68 
     69  let offset = 3;
     70  while (offset < textData.length) {
     71    const {done, value} = await reader.read(new Uint8Array(buffer, offset));
     72    if (done) {
     73      break;
     74    }
     75    buffer = value.buffer;
     76    offset += value.byteLength;
     77  }
     78 
     79  validateBufferFromString(buffer, `\0\0\0\"This is response's bo`, 'Buffer should be validated');
     80 }, `Reading with offset from Response stream`);