tor-browser

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

request-structure.any.js (3718B)


      1 // META: global=window,worker
      2 // META: title=Request structure
      3 
      4 var request = new Request("");
      5 var methods = ["clone",
      6                //Request implements Body
      7                "arrayBuffer",
      8                "blob",
      9                "formData",
     10                "json",
     11                "text"
     12              ];
     13 var attributes = ["method",
     14                  "url",
     15                  "headers",
     16                  "destination",
     17                  "referrer",
     18                  "referrerPolicy",
     19                  "mode",
     20                  "credentials",
     21                  "cache",
     22                  "redirect",
     23                  "integrity",
     24                  "isReloadNavigation",
     25                  "isHistoryNavigation",
     26                  "duplex",
     27                  //Request implements Body
     28                  "bodyUsed"
     29                 ];
     30 var internalAttributes = ["priority",
     31                          "internalpriority",
     32                          "blocking"
     33                         ];
     34 
     35 function isReadOnly(request, attributeToCheck) {
     36  var defaultValue = undefined;
     37  var newValue = undefined;
     38  switch (attributeToCheck) {
     39    case "method":
     40      defaultValue = "GET";
     41      newValue = "POST";
     42      break;
     43 
     44    case "url":
     45      //default value is base url
     46      //i.e http://example.com/fetch/api/request-structure.html
     47      newValue = "http://url.test";
     48      break;
     49 
     50    case "headers":
     51      request.headers = new Headers ({"name":"value"});
     52      assert_false(request.headers.has("name"), "Headers attribute is read only");
     53      return;
     54 
     55    case "destination":
     56      defaultValue = "";
     57      newValue = "worker";
     58      break;
     59 
     60    case "referrer":
     61      defaultValue = "about:client";
     62      newValue = "http://url.test";
     63      break;
     64 
     65    case "referrerPolicy":
     66      defaultValue = "";
     67      newValue = "unsafe-url";
     68      break;
     69 
     70    case "mode":
     71      defaultValue = "cors";
     72      newValue = "navigate";
     73      break;
     74 
     75    case "credentials":
     76      defaultValue = "same-origin";
     77      newValue = "cors";
     78      break;
     79 
     80    case "cache":
     81      defaultValue = "default";
     82      newValue = "reload";
     83      break;
     84 
     85    case "redirect":
     86      defaultValue = "follow";
     87      newValue = "manual";
     88      break;
     89 
     90    case "integrity":
     91      newValue = "CannotWriteIntegrity";
     92      break;
     93 
     94    case "bodyUsed":
     95      defaultValue = false;
     96      newValue = true;
     97      break;
     98 
     99    case "isReloadNavigation":
    100      defaultValue = false;
    101      newValue = true;
    102      break;
    103 
    104    case "isHistoryNavigation":
    105      defaultValue = false;
    106      newValue = true;
    107      break;
    108 
    109    case "duplex":
    110      defaultValue = "half";
    111      newValue = "full";
    112      break;
    113 
    114    default:
    115      return;
    116  }
    117 
    118  request[attributeToCheck] = newValue;
    119  if (defaultValue === undefined)
    120    assert_not_equals(request[attributeToCheck], newValue, "Attribute " + attributeToCheck + " is read only");
    121  else
    122    assert_equals(request[attributeToCheck], defaultValue,
    123      "Attribute " + attributeToCheck + " is read only. Default value is " + defaultValue);
    124 }
    125 
    126 for (var idx in methods) {
    127  test(function() {
    128    assert_true(methods[idx] in request, "request has " + methods[idx] + " method");
    129  }, "Request has " + methods[idx] + " method");
    130 }
    131 
    132 for (var idx in attributes) {
    133  test(function() {
    134    assert_true(attributes[idx] in request, "request has " + attributes[idx] + " attribute");
    135    isReadOnly(request, attributes[idx]);
    136  }, "Check " + attributes[idx] + " attribute");
    137 }
    138 
    139 for (var idx in internalAttributes) {
    140  test(function() {
    141    assert_false(internalAttributes[idx] in request, "request does not expose " + internalAttributes[idx] + " attribute");
    142  }, "Request does not expose " + internalAttributes[idx] + " attribute");
    143 }