tor-browser

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

request-consume.any.js (6363B)


      1 // META: global=window,worker
      2 // META: title=Request consume
      3 // META: script=../resources/utils.js
      4 
      5 function checkBodyText(request, expectedBody) {
      6  return request.text().then(function(bodyAsText) {
      7    assert_equals(bodyAsText, expectedBody, "Retrieve and verify request's body");
      8    assert_true(request.bodyUsed, "body as text: bodyUsed turned true");
      9  });
     10 }
     11 
     12 async function checkBodyBlob(request, expectedBody, checkContentType) {
     13  const bodyAsBlob = await request.blob();
     14 
     15  if (checkContentType)
     16    assert_equals(bodyAsBlob.type, "text/plain", "Blob body type should be computed from the request Content-Type");
     17 
     18  const body = await bodyAsBlob.text();
     19  assert_equals(body, expectedBody, "Retrieve and verify request's body");
     20  assert_true(request.bodyUsed, "body as blob: bodyUsed turned true");
     21 }
     22 
     23 function checkBodyArrayBuffer(request, expectedBody) {
     24  return request.arrayBuffer().then(function(bodyAsArrayBuffer) {
     25    validateBufferFromString(bodyAsArrayBuffer, expectedBody, "Retrieve and verify request's body");
     26    assert_true(request.bodyUsed, "body as arrayBuffer: bodyUsed turned true");
     27  });
     28 }
     29 
     30 function checkBodyBytes(request, expectedBody) {
     31  return request.bytes().then(function(bodyAsUint8Array) {
     32    assert_true(bodyAsUint8Array instanceof Uint8Array);
     33    validateBufferFromString(bodyAsUint8Array.buffer, expectedBody, "Retrieve and verify request's body");
     34    assert_true(request.bodyUsed, "body as bytes: bodyUsed turned true");
     35  });
     36 }
     37 
     38 function checkBodyJSON(request, expectedBody) {
     39  return request.json().then(function(bodyAsJSON) {
     40    var strBody = JSON.stringify(bodyAsJSON)
     41    assert_equals(strBody, expectedBody, "Retrieve and verify request's body");
     42    assert_true(request.bodyUsed, "body as json: bodyUsed turned true");
     43  });
     44 }
     45 
     46 function checkBodyFormData(request, expectedBody) {
     47  return request.formData().then(function(bodyAsFormData) {
     48    assert_true(bodyAsFormData instanceof FormData, "Should receive a FormData");
     49    assert_true(request.bodyUsed, "body as formData: bodyUsed turned true");
     50  });
     51 }
     52 
     53 function checkRequestBody(body, expected, bodyType) {
     54  promise_test(function(test) {
     55    var request = new Request("", {"method": "POST", "body": body, "headers": [["Content-Type", "text/PLAIN"]] });
     56    assert_false(request.bodyUsed, "bodyUsed is false at init");
     57    return checkBodyText(request, expected);
     58  }, "Consume " + bodyType  + " request's body as text");
     59  promise_test(function(test) {
     60    var request = new Request("", {"method": "POST", "body": body });
     61    assert_false(request.bodyUsed, "bodyUsed is false at init");
     62    return checkBodyBlob(request, expected);
     63  }, "Consume " + bodyType  + " request's body as blob");
     64  promise_test(function(test) {
     65    var request = new Request("", {"method": "POST", "body": body });
     66    assert_false(request.bodyUsed, "bodyUsed is false at init");
     67    return checkBodyArrayBuffer(request, expected);
     68  }, "Consume " + bodyType  + " request's body as arrayBuffer");
     69  promise_test(function(test) {
     70    var request = new Request("", {"method": "POST", "body": body });
     71    assert_false(request.bodyUsed, "bodyUsed is false at init");
     72    return checkBodyBytes(request, expected);
     73  }, "Consume " + bodyType  + " request's body as bytes");
     74  promise_test(function(test) {
     75    var request = new Request("", {"method": "POST", "body": body });
     76    assert_false(request.bodyUsed, "bodyUsed is false at init");
     77    return checkBodyJSON(request, expected);
     78  }, "Consume " + bodyType  + " request's body as JSON");
     79 }
     80 
     81 var textData = JSON.stringify("This is response's body");
     82 var blob = new Blob([textData], { "type" : "text/plain" });
     83 
     84 checkRequestBody(textData, textData, "String");
     85 
     86 var string = "\"123456\"";
     87 function getArrayBuffer() {
     88    var arrayBuffer = new ArrayBuffer(8);
     89    var int8Array = new Int8Array(arrayBuffer);
     90    for (var cptr = 0; cptr < 8; cptr++)
     91        int8Array[cptr] = string.charCodeAt(cptr);
     92    return arrayBuffer;
     93 }
     94 
     95 function getArrayBufferWithZeros() {
     96    var arrayBuffer = new ArrayBuffer(10);
     97    var int8Array = new Int8Array(arrayBuffer);
     98    for (var cptr = 0; cptr < 8; cptr++)
     99        int8Array[cptr + 1] = string.charCodeAt(cptr);
    100    return arrayBuffer;
    101 }
    102 
    103 checkRequestBody(getArrayBuffer(), string, "ArrayBuffer");
    104 checkRequestBody(new Uint8Array(getArrayBuffer()), string, "Uint8Array");
    105 checkRequestBody(new Int8Array(getArrayBufferWithZeros(), 1, 8), string, "Int8Array");
    106 checkRequestBody(new Float32Array(getArrayBuffer()), string, "Float32Array");
    107 checkRequestBody(new DataView(getArrayBufferWithZeros(), 1, 8), string, "DataView");
    108 
    109 promise_test(function(test) {
    110  var formData = new FormData();
    111  formData.append("name", "value")
    112  var request = new Request("", {"method": "POST", "body": formData });
    113  assert_false(request.bodyUsed, "bodyUsed is false at init");
    114  return checkBodyFormData(request, formData);
    115 }, "Consume FormData request's body as FormData");
    116 
    117 function checkBlobResponseBody(blobBody, blobData, bodyType, checkFunction) {
    118  promise_test(function(test) {
    119    var response = new Response(blobBody);
    120    assert_false(response.bodyUsed, "bodyUsed is false at init");
    121    return checkFunction(response, blobData);
    122  }, "Consume blob response's body as " + bodyType);
    123 }
    124 
    125 checkBlobResponseBody(blob, textData, "blob", checkBodyBlob);
    126 checkBlobResponseBody(blob, textData, "text", checkBodyText);
    127 checkBlobResponseBody(blob, textData, "json", checkBodyJSON);
    128 checkBlobResponseBody(blob, textData, "arrayBuffer", checkBodyArrayBuffer);
    129 checkBlobResponseBody(blob, textData, "bytes", checkBodyBytes);
    130 checkBlobResponseBody(new Blob([""]), "", "blob (empty blob as input)", checkBodyBlob);
    131 
    132 var goodJSONValues = ["null", "1", "true", "\"string\""];
    133 goodJSONValues.forEach(function(value) {
    134  promise_test(function(test) {
    135    var request = new Request("", {"method": "POST", "body": value});
    136    return request.json().then(function(v) {
    137      assert_equals(v, JSON.parse(value));
    138    });
    139  }, "Consume JSON from text: '" + JSON.stringify(value) + "'");
    140 });
    141 
    142 var badJSONValues = ["undefined", "{", "a", "["];
    143 badJSONValues.forEach(function(value) {
    144  promise_test(function(test) {
    145    var request = new Request("", {"method": "POST", "body": value});
    146    return promise_rejects_js(test, SyntaxError, request.json());
    147  }, "Trying to consume bad JSON text as JSON: '" + value + "'");
    148 });