| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>XMLHttpRequest: setRequestHeader() - Content-Type header</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method"> |
| </head> |
| <body> |
| <div id="log"></div> |
| <script> |
| function request(inputGenerator, headersToSend, expectedType, title) { |
| test(function() { |
| const toSend = inputGenerator(), |
| client = new XMLHttpRequest() |
| client.open("POST", "resources/inspect-headers.py?filter_name=Content-Type", false) |
| for(header in headersToSend) { |
| if (headersToSend.hasOwnProperty(header)) { |
| client.setRequestHeader(header, headersToSend[header]); |
| } |
| } |
| client.send(toSend) |
| |
| const actual = client.responseText |
| if (expectedType === undefined || expectedType === null) { |
| assert_equals(actual, ""); |
| } else if (expectedType instanceof RegExp) { |
| assert_regexp_match(actual, expectedType); |
| } else { |
| assert_equals(actual, "Content-Type: " + expectedType + "\n"); |
| } |
| }, title) |
| } |
| request( |
| function _String() { return ""; }, |
| {"Content-Type": ""}, |
| "", |
| 'setRequestHeader("") sends a blank string' |
| ) |
| request( |
| function _String() { return ""; }, |
| {"Content-Type": " "}, |
| "", |
| 'setRequestHeader(" ") sends the string " "' |
| ) |
| request( |
| function _String() { return ""; }, |
| {"Content-Type": null}, |
| "null", |
| 'setRequestHeader(null) sends the string "null"' |
| ) |
| request( |
| function _String() { return ""; }, |
| {"Content-Type": undefined}, |
| "undefined", |
| 'setRequestHeader(undefined) sends the string "undefined"' |
| ) |
| request( |
| function _String() { return "test"; }, |
| {}, |
| "text/plain;charset=UTF-8", |
| 'String request has correct default Content-Type of "text/plain;charset=UTF-8"' |
| ) |
| request( |
| function _String() { return "test()"; }, |
| {"Content-Type": "text/javascript;charset=ASCII"}, |
| "text/javascript;charset=UTF-8", |
| "String request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" |
| ) |
| request( |
| function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, |
| {"Content-Type": ""}, |
| "", |
| 'XML Document request respects setRequestHeader("")' |
| ) |
| request( |
| function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, |
| {}, |
| "application/xml;charset=UTF-8", |
| 'XML Document request has correct default Content-Type of "application/xml;charset=UTF-8"' |
| ) |
| request( |
| function _XMLDocument() { return new DOMParser().parseFromString("<xml/>", "application/xml"); }, |
| {"Content-Type": "application/xhtml+xml;charset=ASCII"}, |
| "application/xhtml+xml;charset=UTF-8", |
| "XML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" |
| ) |
| request( |
| function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, |
| {"Content-Type": ""}, |
| "", |
| 'HTML Document request respects setRequestHeader("")' |
| ) |
| request( |
| function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, |
| {}, |
| "text/html;charset=UTF-8", |
| 'HTML Document request has correct default Content-Type of "text/html;charset=UTF-8"' |
| ) |
| request( |
| function _HTMLDocument() { return new DOMParser().parseFromString("<html></html>", "text/html"); }, |
| {"Content-Type": "text/html+junk;charset=ASCII"}, |
| "text/html+junk;charset=UTF-8", |
| "HTML Document request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" |
| ) |
| request( |
| function _Blob() { return new Blob(["test"]); }, |
| {"Content-Type": ""}, |
| "", |
| 'Blob request respects setRequestHeader("") to be specified' |
| ) |
| request( |
| function _Blob() { return new Blob(["test"]); }, |
| {}, |
| undefined, |
| "Blob request with unset type sends no Content-Type without setRequestHeader() call" |
| ) |
| request( |
| function _Blob() { return new Blob(["test"]); }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=ASCII", |
| "Blob request with unset type keeps setRequestHeader() Content-Type and charset" |
| ) |
| request( |
| function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, |
| {"Content-Type": ""}, |
| "", |
| 'Blob request with set type respects setRequestHeader("") to be specified' |
| ) |
| request( |
| function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=ASCII"}); }, |
| {}, |
| "application/xml;charset=ascii", // new Blob lowercases the type argument |
| "Blob request with set type uses that it for Content-Type unless setRequestHeader()" |
| ) |
| request( |
| function _Blob() { return new Blob(["<xml/>"], {type : "application/xml;charset=UTF8"}); }, |
| {"Content-Type": "application/xml+junk;charset=ASCII"}, |
| "application/xml+junk;charset=ASCII", |
| "Blob request with set type keeps setRequestHeader() Content-Type and charset" |
| ) |
| request( |
| function _ArrayBuffer() { return new ArrayBuffer(10); }, |
| {"Content-Type": ""}, |
| "", |
| 'ArrayBuffer request respects setRequestHeader("")' |
| ) |
| request( |
| function _ArrayBuffer() { return new ArrayBuffer(10); }, |
| {}, |
| undefined, |
| "ArrayBuffer request sends no Content-Type without setRequestHeader() call" |
| ) |
| request( |
| function _ArrayBuffer() { return new ArrayBuffer(10); }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=ASCII", |
| "ArrayBuffer request keeps setRequestHeader() Content-Type and charset" |
| ) |
| request( |
| function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, |
| {"Content-Type": ""}, |
| "", |
| 'ArrayBufferView request respects setRequestHeader("")' |
| ) |
| request( |
| function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, |
| {}, |
| undefined, |
| "ArrayBufferView request sends no Content-Type without setRequestHeader() call" |
| ) |
| request( |
| function _Uint8Array() { return new Uint8Array(new ArrayBuffer(10)); }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=ASCII", |
| "ArrayBufferView request keeps setRequestHeader() Content-Type and charset" |
| ) |
| request( |
| function _FormData() { return new FormData(); }, |
| {"Content-Type": ""}, |
| "", |
| 'FormData request respects setRequestHeader("")' |
| ) |
| request( |
| function _FormData() { return new FormData(); }, |
| {}, |
| /multipart\/form-data; boundary=(.*)/, |
| 'FormData request has correct default Content-Type of "multipart\/form-data; boundary=_"' |
| ) |
| request( |
| function _FormData() { return new FormData(); }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=ASCII", |
| "FormData request keeps setRequestHeader() Content-Type and charset" |
| ) |
| request( |
| function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, |
| {"Content-Type": ""}, |
| "", |
| 'URLSearchParams respects setRequestHeader("")' |
| ) |
| request( |
| function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, |
| {}, |
| "application/x-www-form-urlencoded;charset=UTF-8", |
| 'URLSearchParams request has correct default Content-Type of "application/x-www-form-urlencoded;charset=UTF-8"' |
| ) |
| request( |
| function _URLSearchParams() { return new URLSearchParams("q=testQ&topic=testTopic") }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=UTF-8", |
| "URLSearchParams request keeps setRequestHeader() Content-Type, with charset adjusted to UTF-8" |
| // the default Content-Type for URLSearchParams has a charset specified (utf-8) in |
| // https://fetch.spec.whatwg.org/#bodyinit, so the user's must be changed to match it |
| // as per https://xhr.spec.whatwg.org/#the-send%28%29-method step 4. |
| ) |
| request( |
| function _ReadableStream() { return new ReadableStream() }, |
| {"Content-Type": ""}, |
| "", |
| 'ReadableStream request respects setRequestHeader("")' |
| ) |
| request( |
| function _ReadableStream() { return new ReadableStream() }, |
| {}, |
| undefined, |
| "ReadableStream request with under type sends no Content-Type without setRequestHeader() call" |
| ) |
| request( |
| function _ReadableStream() { return new ReadableStream() }, |
| {"Content-Type": "application/xml;charset=ASCII"}, |
| "application/xml;charset=ASCII", |
| "ReadableStream request keeps setRequestHeader() Content-Type and charset" |
| ) |
| </script> |
| </body> |
| </html> |