File: header-values-normalize.html

package info (click to toggle)
firefox-esr 78.15.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,301,156 kB
  • sloc: cpp: 5,665,905; javascript: 4,798,386; ansic: 2,878,233; python: 977,004; asm: 270,347; xml: 181,456; java: 111,756; sh: 72,926; makefile: 21,819; perl: 13,380; cs: 4,725; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; exp: 505; php: 436; lisp: 260; awk: 152; ruby: 103; csh: 80; sed: 53; sql: 45
file content (72 lines) | stat: -rw-r--r-- 2,484 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!doctype html>
<meta charset=utf8>
<meta name=timeout content=long>
<title>Header value normalizing test</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<script>
for(let i = 0; i < 0x21; i++) {
  let fail = false,
      strip = false

  // REMOVE 0x0B/0x0C exception once https://github.com/web-platform-tests/wpt/issues/8372 is fixed
  if(i === 0x0B || i === 0x0C)
    continue

  if(i === 0) {
    fail = true
  }

  if(i === 0x09 || i === 0x0A || i === 0x0D || i === 0x20) {
    strip = true
  }

  let url = "../resources/inspect-headers.py?headers=val1|val2|val3",
      val = String.fromCharCode(i),
      expectedVal = strip ? "" : val,
      val1 = val,
      expectedVal1 = expectedVal,
      val2 = "x" + val,
      expectedVal2 = "x" + expectedVal,
      val3 = val + "x",
      expectedVal3 = expectedVal + "x"

  async_test((t) => {
    let xhr = new XMLHttpRequest()
    xhr.open("POST", url)
    if(fail) {
        assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val1", val1))
        assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val2", val2))
        assert_throws_dom("SyntaxError", () => xhr.setRequestHeader("val3", val3))
        t.done()
    } else {
      xhr.setRequestHeader("val1", val1)
      xhr.setRequestHeader("val2", val2)
      xhr.setRequestHeader("val3", val3)
      xhr.onload = t.step_func_done(() => {
        assert_equals(xhr.getResponseHeader("x-request-val1"), expectedVal1)
        assert_equals(xhr.getResponseHeader("x-request-val2"), expectedVal2)
        assert_equals(xhr.getResponseHeader("x-request-val3"), expectedVal3)
      })
      xhr.send()
    }
  }, "XMLHttpRequest with value " + encodeURI(val))

  promise_test((t) => {
    if(fail) {
      return Promise.all([
        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val1": val1} })),
        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val2": val2} })),
        promise_rejects_js(t, TypeError, fetch(url, { headers: {"val3": val3} }))
      ])
    } else {
      return fetch(url, { headers: {"val1": val1, "val2": val2, "val3": val3} }).then((res) => {
        assert_equals(res.headers.get("x-request-val1"), expectedVal1)
        assert_equals(res.headers.get("x-request-val2"), expectedVal2)
        assert_equals(res.headers.get("x-request-val3"), expectedVal3)
      })
    }
  }, "fetch() with value " + encodeURI(val))
}
</script>