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");