tor-browser

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

utils.js (4280B)


      1 var RESOURCES_DIR = "../resources/";
      2 
      3 function dirname(path) {
      4    return path.replace(/\/[^\/]*$/, '/')
      5 }
      6 
      7 function checkRequest(request, ExpectedValuesDict) {
      8  for (var attribute in ExpectedValuesDict) {
      9    switch(attribute) {
     10      case "headers":
     11        for (var key in ExpectedValuesDict["headers"].keys()) {
     12          assert_equals(request["headers"].get(key), ExpectedValuesDict["headers"].get(key),
     13            "Check headers attribute has " + key + ":" + ExpectedValuesDict["headers"].get(key));
     14        }
     15        break;
     16 
     17      case "body":
     18        //for checking body's content, a dedicated asyncronous/promise test should be used
     19        assert_true(request["headers"].has("Content-Type") , "Check request has body using Content-Type header")
     20        break;
     21 
     22      case "method":
     23      case "referrer":
     24      case "referrerPolicy":
     25      case "credentials":
     26      case "cache":
     27      case "redirect":
     28      case "integrity":
     29      case "url":
     30      case "destination":
     31        assert_equals(request[attribute], ExpectedValuesDict[attribute], "Check " + attribute + " attribute")
     32        break;
     33 
     34      default:
     35        break;
     36    }
     37  }
     38 }
     39 
     40 function stringToArray(str) {
     41  var array = new Uint8Array(str.length);
     42  for (var i=0, strLen = str.length; i < strLen; i++)
     43    array[i] = str.charCodeAt(i);
     44  return array;
     45 }
     46 
     47 function encode_utf8(str)
     48 {
     49    if (self.TextEncoder)
     50        return (new TextEncoder).encode(str);
     51    return stringToArray(unescape(encodeURIComponent(str)));
     52 }
     53 
     54 function validateBufferFromString(buffer, expectedValue, message)
     55 {
     56  return assert_array_equals(new Uint8Array(buffer !== undefined ? buffer : []), stringToArray(expectedValue), message);
     57 }
     58 
     59 function validateStreamFromString(reader, expectedValue, retrievedArrayBuffer) {
     60  // Passing Uint8Array for byte streams; non-byte streams will simply ignore it
     61  return reader.read(new Uint8Array(64)).then(function(data) {
     62    if (!data.done) {
     63      assert_true(data.value instanceof Uint8Array, "Fetch ReadableStream chunks should be Uint8Array");
     64      var newBuffer;
     65      if (retrievedArrayBuffer) {
     66        newBuffer =  new Uint8Array(data.value.length + retrievedArrayBuffer.length);
     67        newBuffer.set(retrievedArrayBuffer, 0);
     68        newBuffer.set(data.value, retrievedArrayBuffer.length);
     69      } else {
     70        newBuffer = data.value;
     71      }
     72      return validateStreamFromString(reader, expectedValue, newBuffer);
     73    }
     74    validateBufferFromString(retrievedArrayBuffer, expectedValue, "Retrieve and verify stream");
     75  });
     76 }
     77 
     78 function validateStreamFromPartialString(reader, expectedValue, retrievedArrayBuffer) {
     79  // Passing Uint8Array for byte streams; non-byte streams will simply ignore it
     80  return reader.read(new Uint8Array(64)).then(function(data) {
     81    if (!data.done) {
     82      assert_true(data.value instanceof Uint8Array, "Fetch ReadableStream chunks should be Uint8Array");
     83      var newBuffer;
     84      if (retrievedArrayBuffer) {
     85        newBuffer =  new Uint8Array(data.value.length + retrievedArrayBuffer.length);
     86        newBuffer.set(retrievedArrayBuffer, 0);
     87        newBuffer.set(data.value, retrievedArrayBuffer.length);
     88      } else {
     89        newBuffer = data.value;
     90      }
     91      return validateStreamFromPartialString(reader, expectedValue, newBuffer);
     92    }
     93 
     94    var string = new TextDecoder("utf-8").decode(retrievedArrayBuffer);
     95    return assert_true(string.search(expectedValue) != -1, "Retrieve and verify stream");
     96  });
     97 }
     98 
     99 // From streams tests
    100 function delay(milliseconds)
    101 {
    102  return new Promise(function(resolve) {
    103    step_timeout(resolve, milliseconds);
    104  });
    105 }
    106 
    107 function requestForbiddenHeaders(desc, forbiddenHeaders) {
    108  var url = RESOURCES_DIR + "inspect-headers.py";
    109  var requestInit = {"headers": forbiddenHeaders}
    110  var urlParameters = "?headers=" + Object.keys(forbiddenHeaders).join("|");
    111 
    112  promise_test(function(test){
    113    return fetch(url + urlParameters, requestInit).then(function(resp) {
    114      assert_equals(resp.status, 200, "HTTP status is 200");
    115      assert_equals(resp.type , "basic", "Response's type is basic");
    116      for (var header in forbiddenHeaders)
    117        assert_not_equals(resp.headers.get("x-request-" + header), forbiddenHeaders[header], header + " does not have the value we defined");
    118    });
    119  }, desc);
    120 }