tor-browser

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

request-headers.any.js (6733B)


      1 // META: global=window,worker
      2 // META: title=Request Headers
      3 
      4 var validRequestHeaders = [
      5  ["Content-Type", "OK"],
      6  ["Potato", "OK"],
      7  ["proxy", "OK"],
      8  ["proxya", "OK"],
      9  ["sec", "OK"],
     10  ["secb", "OK"],
     11  ["Set-Cookie2", "OK"],
     12  ["User-Agent", "OK"],
     13 ];
     14 var invalidRequestHeaders = [
     15  ["Accept-Charset", "KO"],
     16  ["accept-charset", "KO"],
     17  ["ACCEPT-ENCODING", "KO"],
     18  ["Accept-Encoding", "KO"],
     19  ["Access-Control-Request-Headers", "KO"],
     20  ["Access-Control-Request-Method", "KO"],
     21  ["Connection", "KO"],
     22  ["Content-Length", "KO"],
     23  ["Cookie", "KO"],
     24  ["Cookie2", "KO"],
     25  ["Date", "KO"],
     26  ["DNT", "KO"],
     27  ["Expect", "KO"],
     28  ["Host", "KO"],
     29  ["Keep-Alive", "KO"],
     30  ["Origin", "KO"],
     31  ["Referer", "KO"],
     32  ["Set-Cookie", "KO"],
     33  ["TE", "KO"],
     34  ["Trailer", "KO"],
     35  ["Transfer-Encoding", "KO"],
     36  ["Upgrade", "KO"],
     37  ["Via", "KO"],
     38  ["Proxy-", "KO"],
     39  ["proxy-a", "KO"],
     40  ["Sec-", "KO"],
     41  ["sec-b", "KO"],
     42 ];
     43 
     44 var validRequestNoCorsHeaders = [
     45  ["Accept", "OK"],
     46  ["Accept-Language", "OK"],
     47  ["content-language", "OK"],
     48  ["content-type", "application/x-www-form-urlencoded"],
     49  ["content-type", "application/x-www-form-urlencoded;charset=UTF-8"],
     50  ["content-type", "multipart/form-data"],
     51  ["content-type", "multipart/form-data;charset=UTF-8"],
     52  ["content-TYPE", "text/plain"],
     53  ["CONTENT-type", "text/plain;charset=UTF-8"],
     54 ];
     55 var invalidRequestNoCorsHeaders = [
     56  ["Content-Type", "KO"],
     57  ["Potato", "KO"],
     58  ["proxy", "KO"],
     59  ["proxya", "KO"],
     60  ["sec", "KO"],
     61  ["secb", "KO"],
     62  ["Empty-Value", ""],
     63 ];
     64 
     65 validRequestHeaders.forEach(function(header) {
     66  test(function() {
     67    var request = new Request("");
     68    request.headers.set(header[0], header[1]);
     69    assert_equals(request.headers.get(header[0]), header[1]);
     70  }, "Adding valid request header \"" + header[0] + ": " + header[1] + "\"");
     71 });
     72 invalidRequestHeaders.forEach(function(header) {
     73  test(function() {
     74    var request = new Request("");
     75    request.headers.set(header[0], header[1]);
     76    assert_equals(request.headers.get(header[0]), null);
     77  }, "Adding invalid request header \"" + header[0] + ": " + header[1] + "\"");
     78 });
     79 
     80 validRequestNoCorsHeaders.forEach(function(header) {
     81  test(function() {
     82    var requestNoCors = new Request("", {"mode": "no-cors"});
     83    requestNoCors.headers.set(header[0], header[1]);
     84    assert_equals(requestNoCors.headers.get(header[0]), header[1]);
     85  }, "Adding valid no-cors request header \"" + header[0] + ": " + header[1] + "\"");
     86 });
     87 invalidRequestNoCorsHeaders.forEach(function(header) {
     88  test(function() {
     89    var requestNoCors = new Request("", {"mode": "no-cors"});
     90    requestNoCors.headers.set(header[0], header[1]);
     91    assert_equals(requestNoCors.headers.get(header[0]), null);
     92  }, "Adding invalid no-cors request header \"" + header[0] + ": " + header[1] + "\"");
     93 });
     94 
     95 test(function() {
     96  var headers = new Headers([["Cookie2", "potato"]]);
     97  var request = new Request("", {"headers": headers});
     98  assert_equals(request.headers.get("Cookie2"), null);
     99 }, "Check that request constructor is filtering headers provided as init parameter");
    100 
    101 test(function() {
    102  var headers = new Headers([["Content-Type", "potato"]]);
    103  var request = new Request("", {"headers": headers, "mode": "no-cors"});
    104  assert_equals(request.headers.get("Content-Type"), null);
    105 }, "Check that no-cors request constructor is filtering headers provided as init parameter");
    106 
    107 test(function() {
    108  var headers = new Headers([["Content-Type", "potato"]]);
    109  var initialRequest = new Request("", {"headers": headers});
    110  var request = new Request(initialRequest, {"mode": "no-cors"});
    111  assert_equals(request.headers.get("Content-Type"), null);
    112 }, "Check that no-cors request constructor is filtering headers provided as part of request parameter");
    113 
    114 test(function() {
    115  var initialHeaders = new Headers([["Content-Type", "potato"]]);
    116  var initialRequest = new Request("", {"headers" : initialHeaders});
    117  var request = new Request(initialRequest);
    118  assert_equals(request.headers.get("Content-Type"), "potato");
    119 }, "Request should get its content-type from the init request");
    120 
    121 test(function() {
    122  var initialHeaders = new Headers([["Content-Type", "potato"]]);
    123  var initialRequest = new Request("", {"headers" : initialHeaders});
    124  var headers = new Headers([]);
    125  var request = new Request(initialRequest, {"headers" : headers});
    126  assert_false(request.headers.has("Content-Type"));
    127 }, "Request should not get its content-type from the init request if init headers are provided");
    128 
    129 test(function() {
    130  var initialHeaders = new Headers([["Content-Type-Extra", "potato"]]);
    131  var initialRequest = new Request("", {"headers" : initialHeaders, "body" : "this is my plate", "method" : "POST"});
    132  var request = new Request(initialRequest);
    133  assert_equals(request.headers.get("Content-Type"), "text/plain;charset=UTF-8");
    134 }, "Request should get its content-type from the body if none is provided");
    135 
    136 test(function() {
    137  var initialHeaders = new Headers([["Content-Type", "potato"]]);
    138  var initialRequest = new Request("", {"headers" : initialHeaders, "body" : "this is my plate", "method" : "POST"});
    139  var request = new Request(initialRequest);
    140  assert_equals(request.headers.get("Content-Type"), "potato");
    141 }, "Request should get its content-type from init headers if one is provided");
    142 
    143 test(function() {
    144  var array = [["hello", "worldAHH"]];
    145  var object = {"hello": 'worldOOH'};
    146  var headers = new Headers(array);
    147 
    148  assert_equals(headers.get("hello"), "worldAHH");
    149 
    150  var request1 = new Request("", {"headers": headers});
    151  var request2 = new Request("", {"headers": array});
    152  var request3 = new Request("", {"headers": object});
    153 
    154  assert_equals(request1.headers.get("hello"), "worldAHH");
    155  assert_equals(request2.headers.get("hello"), "worldAHH");
    156  assert_equals(request3.headers.get("hello"), "worldOOH");
    157 }, "Testing request header creations with various objects");
    158 
    159 promise_test(function(test) {
    160  var request = new Request("", {"headers" : [["Content-Type", ""]], "body" : "this is my plate", "method" : "POST"});
    161  return request.blob().then(function(blob) {
    162    assert_equals(blob.type, "", "Blob type should be the empty string");
    163  });
    164 }, "Testing empty Request Content-Type header");
    165 
    166 test(function() {
    167  const request1 = new Request("");
    168  assert_equals(request1.headers, request1.headers);
    169 
    170  const request2 = new Request("", {"headers": {"X-Foo": "bar"}});
    171  assert_equals(request2.headers, request2.headers);
    172  const headers = request2.headers;
    173  request2.headers.set("X-Foo", "quux");
    174  assert_equals(headers, request2.headers);
    175  headers.set("X-Other-Header", "baz");
    176  assert_equals(headers, request2.headers);
    177 }, "Test that Request.headers has the [SameObject] extended attribute");