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 }