summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/xhr/setrequestheader-content-type.htm
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/xhr/setrequestheader-content-type.htm')
-rw-r--r--testing/web-platform/tests/xhr/setrequestheader-content-type.htm220
1 files changed, 220 insertions, 0 deletions
diff --git a/testing/web-platform/tests/xhr/setrequestheader-content-type.htm b/testing/web-platform/tests/xhr/setrequestheader-content-type.htm
new file mode 100644
index 0000000000..07238391eb
--- /dev/null
+++ b/testing/web-platform/tests/xhr/setrequestheader-content-type.htm
@@ -0,0 +1,220 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>XMLHttpRequest: setRequestHeader() - Content-Type header</title>
+ <meta name="timeout" content="long">
+ <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.
+ )
+ </script>
+ </body>
+</html>