tor-browser

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

header-values-normalize.any.js (2476B)


      1 // META: title=Header value normalizing test
      2 // META: global=window,worker
      3 // META: timeout=long
      4 
      5 "use strict";
      6 
      7 for(let i = 0; i < 0x21; i++) {
      8  let fail = false,
      9      strip = false
     10 
     11  // REMOVE 0x0B/0x0C exception once https://github.com/web-platform-tests/wpt/issues/8372 is fixed
     12  if(i === 0x0B || i === 0x0C)
     13    continue
     14 
     15  if(i === 0) {
     16    fail = true
     17  }
     18 
     19  if(i === 0x09 || i === 0x0A || i === 0x0D || i === 0x20) {
     20    strip = true
     21  }
     22 
     23  let url = "../resources/inspect-headers.py?headers=val1|val2|val3",
     24      val = String.fromCharCode(i),
     25      expectedVal = strip ? "" : val,
     26      val1 = val,
     27      expectedVal1 = expectedVal,
     28      val2 = "x" + val,
     29      expectedVal2 = "x" + expectedVal,
     30      val3 = val + "x",
     31      expectedVal3 = expectedVal + "x"
     32 
     33  // XMLHttpRequest is not available in service workers
     34  if (!self.GLOBAL.isWorker()) {
     35    async_test((t) => {
     36      let xhr = new XMLHttpRequest()
     37      xhr.open("POST", url)
     38      if(fail) {
     39          assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val1", val1))
     40          assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val2", val2))
     41          assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val3", val3))
     42          t.done()
     43      } else {
     44        xhr.setRequestHeader("val1", val1)
     45        xhr.setRequestHeader("val2", val2)
     46        xhr.setRequestHeader("val3", val3)
     47        xhr.onload = t.step_func_done(() => {
     48          assert_equals(xhr.getResponseHeader("x-request-val1"), expectedVal1)
     49          assert_equals(xhr.getResponseHeader("x-request-val2"), expectedVal2)
     50          assert_equals(xhr.getResponseHeader("x-request-val3"), expectedVal3)
     51        })
     52        xhr.send()
     53      }
     54    }, "XMLHttpRequest with value " + encodeURI(val))
     55  }
     56 
     57  promise_test((t) => {
     58    if(fail) {
     59      return Promise.all([
     60        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val1": val1} })),
     61        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val2": val2} })),
     62        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val3": val3} }))
     63      ])
     64    } else {
     65      return fetch(url, { headers: {"val1": val1, "val2": val2, "val3": val3} }).then((res) => {
     66        assert_equals(res.headers.get("x-request-val1"), expectedVal1)
     67        assert_equals(res.headers.get("x-request-val2"), expectedVal2)
     68        assert_equals(res.headers.get("x-request-val3"), expectedVal3)
     69      })
     70    }
     71  }, "fetch() with value " + encodeURI(val))
     72 }