diff --git a/fetch/ED14.json b/fetch/ED14.json new file mode 100644 index 0000000..11cc9a1 --- /dev/null +++ b/fetch/ED14.json @@ -0,0 +1,9251 @@ +{ + "results": [ + { + "test": "/fetch/api/basic/accept-header.any.html", + "subtests": [ + { + "name": "Request through fetch should have 'accept' header with value '*/*'", + "status": "PASS", + "message": null + }, + { + "name": "Request through fetch should have 'accept' header with value 'custom/*'", + "status": "PASS", + "message": null + }, + { + "name": "Request through fetch should have a 'accept-language' header", + "status": "FAIL", + "message": "assert_true: expected true got false" + }, + { + "name": "Request through fetch should have 'accept-language' header with value 'bzh'", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/conditional-get.html", + "subtests": [ + { + "name": "Testing conditional GET with ETags", + "status": "FAIL", + "message": "assert_equals: expected (string) \"304\" but got (object) null" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/error-after-response.html", + "subtests": [ + { + "name": "Response reader read() promise should reject after a network error happening after resolving fetch promise", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Response reader closed promise should reject after a network error happening after resolving fetch promise", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Unable to get property 'then' of undefined or null reference\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/integrity-sharedworker.html", + "subtests": [ + { + "name": "Fetch in sharedworker: integrity handling", + "status": "FAIL", + "message": "'SharedWorker' is undefined" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/integrity-worker.html", + "subtests": [ + { + "name": "Empty string integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-256 integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-384 integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-512 integrity", + "status": "PASS", + "message": null + }, + { + "name": "Invalid integrity", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Multiple integrities: valid stronger than invalid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: invalid stronger than valid", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Multiple integrities: invalid as strong as valid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: both are valid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: both are invalid", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS empty integrity", + "status": "PASS", + "message": null + }, + { + "name": "CORS SHA-512 integrity", + "status": "PASS", + "message": null + }, + { + "name": "CORS invalid integrity", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/integrity.html", + "subtests": [ + { + "name": "Empty string integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-256 integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-384 integrity", + "status": "PASS", + "message": null + }, + { + "name": "SHA-512 integrity", + "status": "PASS", + "message": null + }, + { + "name": "Invalid integrity", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Multiple integrities: valid stronger than invalid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: invalid stronger than valid", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Multiple integrities: invalid as strong as valid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: both are valid", + "status": "PASS", + "message": null + }, + { + "name": "Multiple integrities: both are invalid", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS empty integrity", + "status": "PASS", + "message": null + }, + { + "name": "CORS SHA-512 integrity", + "status": "PASS", + "message": null + }, + { + "name": "CORS invalid integrity", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/mode-no-cors-worker.html", + "subtests": [ + { + "name": "Fetch ../resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch http://web-platform.test:8000/fetch/api/resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch https://web-platform.test:8443/fetch/api/resources/top.txt with no-cors mode", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetch http://web-platform.test:52963/fetch/api/resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/mode-no-cors.html", + "subtests": [ + { + "name": "Fetch ../resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch http://web-platform.test:8000/fetch/api/resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch https://web-platform.test:8443/fetch/api/resources/top.txt with no-cors mode", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetch http://web-platform.test:52963/fetch/api/resources/top.txt with no-cors mode", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/mode-same-origin.any.html", + "subtests": [ + { + "name": "Fetch ../resources/top.txt with same-origin mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch http://web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch https://web-platform.test:8443/fetch/api/resources/top.txt with same-origin mode", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch http://www1.web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch /fetch/api/basic/../resources/redirect.py?location=../resources/top.txt with same-origin mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch /fetch/api/basic/../resources/redirect.py?location=http://web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode", + "status": "PASS", + "message": null + }, + { + "name": "Fetch /fetch/api/basic/../resources/redirect.py?location=https://web-platform.test:8443/fetch/api/resources/top.txt with same-origin mode", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch /fetch/api/basic/../resources/redirect.py?location=http://www1.web-platform.test:8000/fetch/api/resources/top.txt with same-origin mode", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/referrer.any.html", + "subtests": [ + { + "name": "origin-when-cross-origin policy on a same-origin URL", + "status": "PASS", + "message": null + }, + { + "name": "origin-when-cross-origin policy on a cross-origin URL", + "status": "PASS", + "message": null + }, + { + "name": "origin-when-cross-origin policy on a cross-origin URL after same-origin redirection", + "status": "PASS", + "message": null + }, + { + "name": "origin-when-cross-origin policy on a same-origin URL after cross-origin redirection", + "status": "PASS", + "message": null + }, + { + "name": "Referrer with credentials should be stripped", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer with fragment ID should be stripped", + "status": "FAIL", + "message": "assert_equals: Request's referrer is correct expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/#fragmentIdentifier\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-forbidden-headers.any.html", + "subtests": [ + { + "name": "Accept-Charset is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Accept-Encoding is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Access-Control-Request-Headers is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Access-Control-Request-Method is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Connection is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Content-Length is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Cookie is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Cookie2 is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Date is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "DNT is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Expect is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Host is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Keep-Alive is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Origin is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Referer is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "TE is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Trailer is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Transfer-Encoding is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Upgrade is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Via is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Proxy- is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Proxy-Test is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Sec- is a forbidden request header", + "status": "PASS", + "message": null + }, + { + "name": "Sec-Test is a forbidden request header", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-head.any.html", + "subtests": [ + { + "name": "Fetch with HEAD with body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-headers.any.html", + "subtests": [ + { + "name": "Fetch with GET", + "status": "FAIL", + "message": "assert_equals: Request should have header origin: null expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Fetch with HEAD", + "status": "FAIL", + "message": "assert_equals: Request should have header origin: null expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Fetch with PUT without body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with PUT with body", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: 'URLSearchParams' is undefined\"" + }, + { + "name": "Fetch with POST without body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with text body", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: 'URLSearchParams' is undefined\"" + }, + { + "name": "Fetch with POST with FormData body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with URLSearchParams body", + "status": "FAIL", + "message": "'URLSearchParams' is undefined" + }, + { + "name": "Fetch with POST with Blob body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with ArrayBuffer body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with Uint8Array body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with Int8Array body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with Float32Array body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with Float64Array body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with DataView body", + "status": "FAIL", + "message": "assert_equals: Request should have header content-type: null expected (object) null but got (string) \"application/octet-stream\"" + }, + { + "name": "Fetch with POST with Blob body with mime type", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with Chicken", + "status": "FAIL", + "message": "assert_equals: Request should have header content-length: null expected (object) null but got (string) \"0\"" + }, + { + "name": "Fetch with Chicken with body", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: 'URLSearchParams' is undefined\"" + }, + { + "name": "Fetch with GET and mode \"cors\" does not need an Origin header", + "status": "FAIL", + "message": "assert_equals: Request should not have an Origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Fetch with POST and mode \"same-origin\" needs an Origin header", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST and mode \"no-cors\" needs an Origin header", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with PUT and mode \"same-origin\" needs an Origin header", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with TacO and mode \"same-origin\" needs an Origin header", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with TacO and mode \"cors\" needs an Origin header", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-referrer-redirected-worker.html", + "subtests": [ + { + "name": "about:client referrer", + "status": "PASS", + "message": null + }, + { + "name": "url referrer", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-referrer.any.html", + "subtests": [ + { + "name": "about:client referrer", + "status": "PASS", + "message": null + }, + { + "name": "url referrer", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/request-upload.any.html", + "subtests": [ + { + "name": "Fetch with PUT with body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with text body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with URLSearchParams body", + "status": "FAIL", + "message": "'URLSearchParams' is undefined" + }, + { + "name": "Fetch with POST with Blob body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with ArrayBuffer body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with Uint8Array body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with Int8Array body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with Float32Array body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with Float64Array body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with DataView body", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with Blob body with mime type", + "status": "PASS", + "message": null + }, + { + "name": "Fetch with POST with ReadableStream", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Fetch with POST with ReadableStream containing String", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Fetch with POST with ReadableStream containing null", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Fetch with POST with ReadableStream containing number", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Fetch with POST with ReadableStream containing ArrayBuffer", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Fetch with POST with ReadableStream containing Blob", + "status": "FAIL", + "message": "Function expected" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/response-url-worker.html", + "subtests": [ + { + "name": "Testing response url getter with http://web-platform.test:8000/ada", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000/#", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000/#ada", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000#ada", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/response-url.html", + "subtests": [ + { + "name": "Testing response url getter with http://web-platform.test:8000/ada", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000/#", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000/#ada", + "status": "PASS", + "message": null + }, + { + "name": "Testing response url getter with http://web-platform.test:8000#ada", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-about.any.html", + "subtests": [ + { + "name": "Fetching about:blank (GET) is OK", + "status": "PASS", + "message": null + }, + { + "name": "Fetching about:blank (PUT) is OK", + "status": "PASS", + "message": null + }, + { + "name": "Fetching about:blank (POST) is OK", + "status": "PASS", + "message": null + }, + { + "name": "Fetching about:invalid.com is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching about:config is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching about:unicorn is KO", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-blob-worker.html", + "subtests": [ + { + "name": "Fetching [GET] URL.createObjectURL(blob) is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching [GET] blob:http://www.web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [POST] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [OPTIONS] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [HEAD] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [PUT] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [DELETE] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [INVALID] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-blob.html", + "subtests": [ + { + "name": "Fetching [GET] URL.createObjectURL(blob) is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching [GET] blob:http://www.web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [POST] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [OPTIONS] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [HEAD] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [PUT] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [DELETE] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching [INVALID] URL.createObjectURL(blob) is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-data.any.html", + "subtests": [ + { + "name": "Fetching data:,response%27s%20body is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching data:,response%27s%20body is OK (same-origin)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching data:,response%27s%20body is OK (cors)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching data:text/plain;base64,cmVzcG9uc2UncyBib[...] is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching data:image/png;base64,cmVzcG9uc2UncyBib2[...] is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching [POST] data:,response%27s%20body is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching [HEAD] data:,response%27s%20body is OK", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Fetching [GET] data:notAdataUrl.com is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-others-worker.html", + "subtests": [ + { + "name": "Fetching aaa://web-platform.test:8000/ is KO", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Fetching cap://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching cid://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching dav://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching dict://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching dns://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching geo://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching im://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching imap://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching ipp://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching ldap://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching mailto://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching nfs://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching pop://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching rtsp://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + }, + { + "name": "Fetching snmp://web-platform.test:8000/ is KO", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/basic/scheme-others.html", + "subtests": [ + { + "name": "Fetching aaa://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching cap://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching cid://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching dav://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching dict://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching dns://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching geo://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching im://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching imap://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching ipp://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching ldap://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching mailto://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching nfs://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching pop://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching rtsp://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetching snmp://web-platform.test:8000/ is KO", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/stream-response.any.html", + "subtests": [ + { + "name": "Stream response's body", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/basic/text-utf8.html", + "subtests": [ + { + "name": "UTF-8 with BOM with Request.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 with BOM with Response.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 with BOM with fetched data (UTF-8 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 with BOM with fetched data (UTF-16 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 with BOM (Response object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 with BOM (Request object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM with Request.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM with Response.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM with fetched data (UTF-8 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM with fetched data (UTF-16 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM (Response object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-8 without BOM (Request object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 with Request.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 with Response.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 with fetched data (UTF-8 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 with fetched data (UTF-16 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 (Response object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16BE with BOM decoded as UTF-8 (Request object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 with Request.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 with Response.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 with fetched data (UTF-8 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 with fetched data (UTF-16 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 (Response object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16LE with BOM decoded as UTF-8 (Request object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 with Request.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 with Response.text()", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 with fetched data (UTF-8 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 with fetched data (UTF-16 charset)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 (Response object)", + "status": "PASS", + "message": null + }, + { + "name": "UTF-16 without BOM decoded as UTF-8 (Request object)", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-basic.any.html", + "subtests": [ + { + "name": "Same domain different port [no-cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Same domain different port [server forbid CORS]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Same domain different port [cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Same domain different protocol different port [no-cors mode]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same domain different protocol different port [server forbid CORS]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Same domain different protocol different port [cors mode]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross domain basic usage [no-cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain basic usage [server forbid CORS]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain basic usage [cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different port [no-cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different port [server forbid CORS]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain different port [cors mode]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different protocol [no-cors mode]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross domain different protocol [server forbid CORS]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain different protocol [cors mode]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-cookies.any.html", + "subtests": [ + { + "name": "Omit mode: no cookie sent", + "status": "PASS", + "message": null + }, + { + "name": "Include mode: 1 cookie", + "status": "FAIL", + "message": "assert_equals: Request includes cookie(s) expected \"a=1\" but got \"g=7; a=1\"" + }, + { + "name": "Include mode: local cookies are not sent with remote request", + "status": "FAIL", + "message": "assert_false: Request should have no cookie expected false got true" + }, + { + "name": "Include mode: remote cookies are not sent with local request", + "status": "FAIL", + "message": "assert_false: Request should have no cookie expected false got true" + }, + { + "name": "Same-origin mode: cookies are discarded in cors request", + "status": "PASS", + "message": null + }, + { + "name": "Include mode: remote cookies are not sent with other remote request", + "status": "FAIL", + "message": "assert_false: Request should have no cookie expected false got true" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-expose-star-worker.html", + "subtests": [ + { + "name": "Basic Access-Control-Expose-Headers: * support", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Cannot use * for credentialed fetches", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/cors/cors-expose-star.html", + "subtests": [ + { + "name": "Basic Access-Control-Expose-Headers: * support", + "status": "PASS", + "message": null + }, + { + "name": "Cannot use * for credentialed fetches", + "status": "FAIL", + "message": "assert_equals: expected (object) null but got (string) \"X\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-filtering-worker.html", + "subtests": [ + { + "name": "CORS filter on Cache-Control header", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "CORS filter on Content-Language header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Content-Type header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Expires header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Last-Modified header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Pragma header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Age header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Server header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Warning header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Content-Length header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Set-Cookie header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Set-Cookie2 header", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Age header, header is exposed", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Server header, header is exposed", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Warning header, header is exposed", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Content-Length header, header is exposed", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Set-Cookie header, header is exposed", + "status": "NOTRUN", + "message": null + }, + { + "name": "CORS filter on Set-Cookie2 header, header is exposed", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/cors/cors-filtering.html", + "subtests": [ + { + "name": "CORS filter on Cache-Control header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Content-Language header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Content-Type header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Expires header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Last-Modified header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Pragma header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Age header", + "status": "FAIL", + "message": "assert_false: UA should exclude Age header from response expected false got true" + }, + { + "name": "CORS filter on Server header", + "status": "FAIL", + "message": "assert_false: UA should exclude Server header from response expected false got true" + }, + { + "name": "CORS filter on Warning header", + "status": "FAIL", + "message": "assert_false: UA should exclude Warning header from response expected false got true" + }, + { + "name": "CORS filter on Content-Length header", + "status": "FAIL", + "message": "assert_false: UA should exclude Content-Length header from response expected false got true" + }, + { + "name": "CORS filter on Set-Cookie header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Set-Cookie2 header", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Age header, header is exposed", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Server header, header is exposed", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Warning header, header is exposed", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Content-Length header, header is exposed", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Set-Cookie header, header is exposed", + "status": "PASS", + "message": null + }, + { + "name": "CORS filter on Set-Cookie2 header, header is exposed", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-multiple-origins-worker.html", + "subtests": [ + { + "name": "3 origins allowed, match the 3rd (http://web-platform.test:8000)", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "3 origins allowed, match the 3rd (\"*\")", + "status": "NOTRUN", + "message": null + }, + { + "name": "3 origins allowed, match twice (http://web-platform.test:8000)", + "status": "NOTRUN", + "message": null + }, + { + "name": "3 origins allowed, match twice (\"*\")", + "status": "NOTRUN", + "message": null + }, + { + "name": "3 origins allowed, match twice (\"*\" and http://web-platform.test:8000)", + "status": "NOTRUN", + "message": null + }, + { + "name": "3 origins allowed, no match", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/cors/cors-multiple-origins.html", + "subtests": [ + { + "name": "3 origins allowed, match the 3rd (http://web-platform.test:8000)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "3 origins allowed, match the 3rd (\"*\")", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "3 origins allowed, match twice (http://web-platform.test:8000)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "3 origins allowed, match twice (\"*\")", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "3 origins allowed, match twice (\"*\" and http://web-platform.test:8000)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "3 origins allowed, no match", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-no-preflight.any.html", + "subtests": [ + { + "name": "Cross domain basic usage [GET]", + "status": "PASS", + "message": null + }, + { + "name": "Same domain different port [GET]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different port [GET]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different protocol [GET]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same domain different protocol different port [GET]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross domain [POST]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [HEAD]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Accept: */*]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Accept-Language: fr]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Language: fr]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Type: application/x-www-form-urlencoded]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Type: multipart/form-data]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Type: text/plain]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Type: text/plain;charset=utf-8]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [GET] [Content-Type: Text/Plain;charset=utf-8]", + "status": "FAIL", + "message": "assert_equals: No preflight request has been made expected \"0\" but got \"1\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-origin.any.html", + "subtests": [ + { + "name": "Cross domain different subdomain [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different subdomain [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Same domain different port [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "Same domain different port [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain different port [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain different port [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain different protocol [origin OK]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross domain different protocol [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Same domain different protocol different port [origin OK]", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same domain different protocol different port [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain [POST] [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [POST] [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cross domain [HEAD] [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "Cross domain [HEAD] [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "CORS preflight [PUT] [origin OK]", + "status": "PASS", + "message": null + }, + { + "name": "CORS preflight [PUT] [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Allowed origin: \"\" [origin KO]", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-preflight-redirect.any.html", + "subtests": [ + { + "name": "Redirection 301 on preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 301 after preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 302 on preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 302 after preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 303 on preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 303 after preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 307 on preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 307 after preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 308 on preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + }, + { + "name": "Redirection 308 after preflight failed", + "status": "FAIL", + "message": "assert_not_equals: got disallowed value undefined" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-preflight-referrer.any.html", + "subtests": [ + { + "name": "Referrer policy: no-referrer and referrer: default", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: no-referrer and referrer: 'myreferrer'", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: \"\" and referrer: default", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: \"\" and referrer: 'myreferrer'", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: origin and referrer: default", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: origin and referrer: 'myreferrer'", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: origin-when-cross-origin and referrer: default", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: origin-when-cross-origin and referrer: 'myreferrer'", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: unsafe-url and referrer: default", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Referrer policy: unsafe-url and referrer: 'myreferrer'", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-preflight-star.any.html", + "subtests": [ + { + "name": "CORS that succeeds with credentials: false; method: GET (allowed: get); header: X-Test,1 (allowed: x-test)", + "status": "PASS", + "message": null + }, + { + "name": "CORS that succeeds with credentials: false; method: SUPER (allowed: *); header: X-Test,1 (allowed: x-test)", + "status": "PASS", + "message": null + }, + { + "name": "CORS that succeeds with credentials: false; method: OK (allowed: *); header: X-Test,1 (allowed: *)", + "status": "PASS", + "message": null + }, + { + "name": "CORS that fails with credentials: true; method: OK (allowed: *); header: X-Test,1 (allowed: *)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS that fails with credentials: true; method: PUT (allowed: *); header: undefined (allowed: )", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS that fails with credentials: true; method: PUT (allowed: put); header: undefined (allowed: *)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS that fails with credentials: true; method: GET (allowed: get); header: X-Test,1 (allowed: *)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS that fails with credentials: true; method: GET (allowed: *); header: X-Test,1 (allowed: *)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-preflight-status.any.html", + "subtests": [ + { + "name": "Preflight answered with status 200", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 201", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 202", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 203", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 204", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 205", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 206", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Preflight answered with status 300", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 301", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 302", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 303", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 304", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 305", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 306", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 307", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 308", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 400", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 401", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 402", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 403", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 404", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 405", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 501", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 502", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 503", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 504", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Preflight answered with status 505", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-preflight.any.html", + "subtests": [ + { + "name": "CORS [DELETE], server allows", + "status": "PASS", + "message": null + }, + { + "name": "CORS [DELETE], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [PUT], server allows", + "status": "PASS", + "message": null + }, + { + "name": "CORS [PUT], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [PATCH], server allows", + "status": "PASS", + "message": null + }, + { + "name": "CORS [PATCH], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [NEW], server allows", + "status": "PASS", + "message": null + }, + { + "name": "CORS [NEW], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [GET] [x-test-header: allowed], server allows", + "status": "PASS", + "message": null + }, + { + "name": "CORS [GET] [x-test-header: refused], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [GET] [several headers], server allows", + "status": "FAIL", + "message": "assert_equals: Access-Control-Allow-Headers value expected \"content-type,x-test-header-a,x-test-header-b,x-test-header-c,x-test-header-d,x-test-header1,x-test-header2,x-test-header3\" but got \"x-test-header1, x-test-header2, x-test-header3, x-test-header-b, x-test-header-d, x-test-header-c, x-test-header-a, content-type\"" + }, + { + "name": "CORS [GET] [several headers], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [PUT] [several headers], server allows", + "status": "FAIL", + "message": "assert_equals: Access-Control-Allow-Headers value expected \"content-type,x-test-header-a,x-test-header-b,x-test-header-c,x-test-header-d,x-test-header1,x-test-header2,x-test-header3\" but got \"x-test-header1, x-test-header2, x-test-header3, x-test-header-b, x-test-header-d, x-test-header-c, x-test-header-a, content-type\"" + }, + { + "name": "CORS [PUT] [several headers], server refuses", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "CORS [PUT] [only safe headers], server allows", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-redirect-credentials.any.html", + "subtests": [ + { + "name": "Redirect 301 from same origin to remote without user and password", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301 from same origin to remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from same origin to remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from same origin to remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same origin with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same origin with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same origin with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to same remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to another remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to another remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 from remote to another remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from same origin to remote without user and password", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302 from same origin to remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from same origin to remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from same origin to remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same origin with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same origin with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same origin with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to same remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to another remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to another remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 from remote to another remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from same origin to remote without user and password", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303 from same origin to remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from same origin to remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from same origin to remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same origin with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same origin with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same origin with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to same remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to another remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to another remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 from remote to another remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from same origin to remote without user and password", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307 from same origin to remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from same origin to remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from same origin to remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same origin with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same origin with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same origin with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to same remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to another remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to another remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 from remote to another remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from same origin to remote without user and password", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308 from same origin to remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from same origin to remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from same origin to remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same origin with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same origin with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same origin with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to same remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to another remote with user and password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to another remote with user", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 from remote to another remote with password", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-redirect-preflight.any.html", + "subtests": [ + { + "name": "Redirect 301: same origin to cors (preflight after redirection success case)", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 301: same origin to cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Redirect 301: cors to same origin (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301: cors to same origin (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301: cors to another cors (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301: cors to another cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302: same origin to cors (preflight after redirection success case)", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302: same origin to cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Redirect 302: cors to same origin (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302: cors to same origin (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302: cors to another cors (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302: cors to another cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303: same origin to cors (preflight after redirection success case)", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303: same origin to cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Redirect 303: cors to same origin (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303: cors to same origin (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303: cors to another cors (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303: cors to another cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307: same origin to cors (preflight after redirection success case)", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307: same origin to cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Redirect 307: cors to same origin (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307: cors to same origin (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307: cors to another cors (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307: cors to another cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308: same origin to cors (preflight after redirection success case)", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308: same origin to cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Redirect 308: cors to same origin (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308: cors to same origin (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308: cors to another cors (preflight after redirection success case)", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308: cors to another cors (preflight after redirection failure case)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/cors/cors-redirect.any.html", + "subtests": [ + { + "name": "Redirect 301: cors to same cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 301: cors to another cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 301: same origin to cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 301: cors to same origin", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302: cors to same cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302: cors to another cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302: same origin to cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302: cors to same origin", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303: cors to same cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303: cors to another cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303: same origin to cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303: cors to same origin", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307: cors to same cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307: cors to another cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307: same origin to cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307: cors to same origin", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308: cors to same cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308: cors to another cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308: same origin to cors", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308: cors to same origin", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/credentials/authentication-basic.any.html", + "subtests": [ + { + "name": "User-added Authorization header with include mode", + "status": "PASS", + "message": null + }, + { + "name": "User-added Authorization header with same-origin mode", + "status": "PASS", + "message": null + }, + { + "name": "User-added Authorization header with omit mode", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/credentials/cookies.any.html", + "subtests": [ + { + "name": "Include mode: 1 cookie", + "status": "FAIL", + "message": "assert_equals: Request include cookie(s) expected \"a=1\" but got \"g=7; c=3; X; a=1\"" + }, + { + "name": "Include mode: 2 cookies", + "status": "FAIL", + "message": "assert_equals: Request include cookie(s) expected \"b=2; c=3\" but got \"g=7; c=3; X; a=1; b=2\"" + }, + { + "name": "Omit mode: discard cookies", + "status": "PASS", + "message": null + }, + { + "name": "Omit mode: no cookie is stored", + "status": "FAIL", + "message": "assert_false: Request does not have cookie(s) expected false got true" + }, + { + "name": "Omit mode: no cookie is sent", + "status": "PASS", + "message": null + }, + { + "name": "Same-origin mode: 1 cookie", + "status": "FAIL", + "message": "assert_equals: Request include cookie(s) expected \"a=1\" but got \"g=7; c=3; X; a=1; b=2; d=4; e=5; f=6\"" + }, + { + "name": "Same-origin mode: 2 cookies", + "status": "FAIL", + "message": "assert_equals: Request include cookie(s) expected \"b=2; c=3\" but got \"g=7; c=3; X; a=1; b=2; d=4; e=5; f=6\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/header-values-normalize.html", + "subtests": [ + { + "name": "XMLHttpRequest with value %00", + "status": "FAIL", + "message": "assert_throws: function \"() => xhr.setRequestHeader(\"val1\", val1)\" did not throw" + }, + { + "name": "fetch() with value %00", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "XMLHttpRequest with value %01", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %01", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %02", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %02", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %03", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %03", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %04", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %04", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %05", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %05", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %06", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %06", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %07", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %07", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %08", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %08", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %09", + "status": "FAIL", + "message": "assert_equals: expected (string) \"\" but got (object) null" + }, + { + "name": "fetch() with value %09", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %0A", + "status": "FAIL", + "message": "assert_equals: expected (string) \"\" but got (object) null" + }, + { + "name": "fetch() with value %0A", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %0D", + "status": "FAIL", + "message": "assert_equals: expected (string) \"\" but got (object) null" + }, + { + "name": "fetch() with value %0D", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %0E", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %0E", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %0F", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %0F", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %10", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %10", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %11", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %11", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %12", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %12", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %13", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %13", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %14", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %14", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %15", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %15", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %16", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %16", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %17", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %17", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %18", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %18", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %19", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %19", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1A", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1A", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1B", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1B", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1C", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1C", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1D", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1D", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1E", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1E", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %1F", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value %1F", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "XMLHttpRequest with value %20", + "status": "FAIL", + "message": "assert_equals: expected (string) \"\" but got (object) null" + }, + { + "name": "fetch() with value %20", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/header-values.html", + "subtests": [ + { + "name": "XMLHttpRequest with value x%00x needs to throw", + "status": "FAIL", + "message": "assert_throws: function \"() => xhr.setRequestHeader(\"value-test\", val)\" did not throw" + }, + { + "name": "fetch() with value x%00x needs to throw", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "XMLHttpRequest with value x%0Ax needs to throw", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value x%0Ax needs to throw", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "XMLHttpRequest with value x%0Dx needs to throw", + "status": "PASS", + "message": null + }, + { + "name": "fetch() with value x%0Dx needs to throw", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "XMLHttpRequest with all valid values", + "status": "FAIL", + "message": "assert_equals: expected \"x€x\" but got \"x€x\"" + }, + { + "name": "fetch() with all valid values", + "status": "FAIL", + "message": "TypeMismatchError" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-basic.html", + "subtests": [ + { + "name": "Create headers from no parameter", + "status": "PASS", + "message": null + }, + { + "name": "Create headers from undefined parameter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Create headers from empty object", + "status": "PASS", + "message": null + }, + { + "name": "Create headers with null should throw", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers(parameter) }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Create headers with 1 should throw", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers(parameter) }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Create headers with sequence", + "status": "PASS", + "message": null + }, + { + "name": "Create headers with record", + "status": "PASS", + "message": null + }, + { + "name": "Create headers with existing headers", + "status": "PASS", + "message": null + }, + { + "name": "Create headers with existing headers with custom iterator", + "status": "FAIL", + "message": "assert_equals: expected (string) \"test\" but got (object) null" + }, + { + "name": "Check append method", + "status": "PASS", + "message": null + }, + { + "name": "Check set method", + "status": "PASS", + "message": null + }, + { + "name": "Check has method", + "status": "PASS", + "message": null + }, + { + "name": "Check delete method", + "status": "PASS", + "message": null + }, + { + "name": "Check get method", + "status": "PASS", + "message": null + }, + { + "name": "Check keys method", + "status": "FAIL", + "message": "Object doesn't support property or method 'keys'" + }, + { + "name": "Check values method", + "status": "FAIL", + "message": "Object doesn't support property or method 'values'" + }, + { + "name": "Check entries method", + "status": "FAIL", + "message": "Object doesn't support property or method 'entries'" + }, + { + "name": "Check Symbol.iterator method", + "status": "FAIL", + "message": "Object doesn't support property or method 'ToString'" + }, + { + "name": "Check forEach method", + "status": "FAIL", + "message": "assert_true: expected true got false" + } + ], + "status": "ERROR", + "message": "Error: assert_equals: expected (undefined) undefined but got (object) object \"[object Headers]\"" + }, + { + "test": "/fetch/api/headers/headers-casing.html", + "subtests": [ + { + "name": "Create headers, names use characters with different case", + "status": "PASS", + "message": null + }, + { + "name": "Check append method, names use characters with different case", + "status": "PASS", + "message": null + }, + { + "name": "Check set method, names use characters with different case", + "status": "PASS", + "message": null + }, + { + "name": "Check delete method, names use characters with different case", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-combine.html", + "subtests": [ + { + "name": "Create headers using same name for different values", + "status": "PASS", + "message": null + }, + { + "name": "Check delete and has methods when using same name for different values", + "status": "PASS", + "message": null + }, + { + "name": "Check set methods when called with already used name", + "status": "PASS", + "message": null + }, + { + "name": "Check append methods when called with already used name", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-errors.html", + "subtests": [ + { + "name": "Create headers giving an array having one string as init argument", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers([[\"name\"]]); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Create headers giving an array having three strings as init argument", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers([[\"invalid\", \"invalidValue1\", \"invalidValue2\"]]); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Create headers giving bad header name as init argument", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers([[\"invalidĀ\", \"Value1\"]]); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Create headers giving bad header value as init argument", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Headers([[\"name\", \"invalidValueĀ\"]]); }\" did not throw" + }, + { + "name": "Check headers get with an invalid name invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.get(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers get with an invalid name [object Object]", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.get(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers delete with an invalid name invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.delete(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers delete with an invalid name [object Object]", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.delete(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers has with an invalid name invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.has(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers has with an invalid name [object Object]", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.has(name); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers set with an invalid name invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.set(name, \"Value1\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers set with an invalid name [object Object]", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.set(name, \"Value1\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers set with an invalid value invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.set(\"name\", value); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers append with an invalid name invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.append(\"invalidĀ\", \"Value1\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers append with an invalid name [object Object]", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.append(\"invalidĀ\", \"Value1\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check headers append with an invalid value invalidĀ", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.append(\"name\", value); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Headers forEach throws if argument is not callable", + "status": "FAIL", + "message": "assert_throws: function \"function () { headers.forEach(undefined); }\" threw object \"InvalidAccessError\" (\"InvalidAccessError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Headers forEach loop should stop if callback is throwing exception", + "status": "FAIL", + "message": "assert_unreached: Reached unreachable code" + } + ], + "status": "ERROR", + "message": "error" + }, + { + "test": "/fetch/api/headers/headers-idl.html", + "subtests": [ + { + "name": "Headers interface: existence and properties of interface object", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface object length", + "status": "FAIL", + "message": "assert_own_property: expected property \"length\" missing" + }, + { + "name": "Headers interface object name", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: existence and properties of interface prototype object", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: existence and properties of interface prototype object's \"constructor\" property", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: operation append(ByteString,ByteString)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 2 but got 0" + }, + { + "name": "Headers interface: operation delete(ByteString)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 1 but got 0" + }, + { + "name": "Headers interface: operation get(ByteString)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 1 but got 0" + }, + { + "name": "Headers interface: operation has(ByteString)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 1 but got 0" + }, + { + "name": "Headers interface: operation set(ByteString,ByteString)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 2 but got 0" + }, + { + "name": "Testing Symbol.iterator property of iterable interface Headers", + "status": "FAIL", + "message": "Unable to get property 'writable' of undefined or null reference" + }, + { + "name": "Testing pair iterable interface Headers", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: operation entries()", + "status": "FAIL", + "message": "assert_own_property: interface prototype object missing non-static operation expected property \"entries\" missing" + }, + { + "name": "Headers interface: operation keys()", + "status": "FAIL", + "message": "assert_own_property: interface prototype object missing non-static operation expected property \"keys\" missing" + }, + { + "name": "Headers interface: operation values()", + "status": "FAIL", + "message": "assert_own_property: interface prototype object missing non-static operation expected property \"values\" missing" + }, + { + "name": "Headers interface: operation forEach(function,any)", + "status": "FAIL", + "message": "assert_equals: property has wrong .length expected 1 but got 0" + }, + { + "name": "Headers must be primary interface of new Headers()", + "status": "PASS", + "message": null + }, + { + "name": "Stringification of new Headers()", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"append\" with the proper type (0)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling append(ByteString,ByteString) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"delete\" with the proper type (1)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling delete(ByteString) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"get\" with the proper type (2)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling get(ByteString) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"has\" with the proper type (3)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling has(ByteString) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"set\" with the proper type (4)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling set(ByteString,ByteString) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: new Headers() must inherit property \"entries\" with the proper type (6)", + "status": "FAIL", + "message": "assert_inherits: property \"entries\" not found in prototype chain" + }, + { + "name": "Headers interface: new Headers() must inherit property \"keys\" with the proper type (7)", + "status": "FAIL", + "message": "assert_inherits: property \"keys\" not found in prototype chain" + }, + { + "name": "Headers interface: new Headers() must inherit property \"values\" with the proper type (8)", + "status": "FAIL", + "message": "assert_inherits: property \"values\" not found in prototype chain" + }, + { + "name": "Headers interface: new Headers() must inherit property \"forEach\" with the proper type (9)", + "status": "PASS", + "message": null + }, + { + "name": "Headers interface: calling forEach(function,any) on new Headers() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-normalize.html", + "subtests": [ + { + "name": "Create headers with not normalized values", + "status": "PASS", + "message": null + }, + { + "name": "Check append method with not normalized values", + "status": "PASS", + "message": null + }, + { + "name": "Check set method with not normalized values", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-record.html", + "subtests": [ + { + "name": "Passing nothing to Headers constructor", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Passing undefined to Headers constructor", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Passing null to Headers constructor", + "status": "FAIL", + "message": "assert_throws: function \"function () {\n var h = new Headers(null);\n }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Basic operation with one property", + "status": "FAIL", + "message": "assert_equals: expected 4 but got 2" + }, + { + "name": "Basic operation with one property and a proto", + "status": "FAIL", + "message": "assert_equals: expected 4 but got 3" + }, + { + "name": "Correct operation ordering with two properties", + "status": "FAIL", + "message": "assert_equals: expected 6 but got 3" + }, + { + "name": "Correct operation ordering with two properties one of which has an invalid name", + "status": "FAIL", + "message": "assert_throws: function \"function () {\n var h = new Headers(proxy);\n }\" did not throw" + }, + { + "name": "Correct operation ordering with two properties one of which has an invalid value", + "status": "FAIL", + "message": "assert_throws: function \"function () {\n var h = new Headers(proxy);\n }\" did not throw" + }, + { + "name": "Correct operation ordering with non-enumerable properties", + "status": "FAIL", + "message": "assert_equals: expected 6 but got 2" + }, + { + "name": "Correct operation ordering with undefined descriptors", + "status": "FAIL", + "message": "assert_equals: expected 6 but got 4" + }, + { + "name": "Correct operation ordering with repeated keys", + "status": "FAIL", + "message": "assert_equals: expected 9 but got 3" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/headers-structure.html", + "subtests": [ + { + "name": "Headers has append method", + "status": "PASS", + "message": null + }, + { + "name": "Headers has delete method", + "status": "PASS", + "message": null + }, + { + "name": "Headers has get method", + "status": "PASS", + "message": null + }, + { + "name": "Headers has has method", + "status": "PASS", + "message": null + }, + { + "name": "Headers has set method", + "status": "PASS", + "message": null + }, + { + "name": "Headers has entries method", + "status": "FAIL", + "message": "assert_true: headers has entries method expected true got false" + }, + { + "name": "Headers has keys method", + "status": "FAIL", + "message": "assert_true: headers has keys method expected true got false" + }, + { + "name": "Headers has values method", + "status": "FAIL", + "message": "assert_true: headers has values method expected true got false" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/headers/historical.any.html", + "subtests": [ + { + "name": "Headers object no longer has a getAll() method", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/csp-blocked-worker.html", + "subtests": [ + { + "name": "Fetch is blocked by CSP, got a TypeError", + "status": "TIMEOUT", + "message": "Test timed out" + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/policies/csp-blocked.html", + "subtests": [ + { + "name": "Fetch is blocked by CSP, got a TypeError", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-no-referrer-service-worker.https.html", + "subtests": [ + { + "name": "Fetch in service worker: referrer with no-referrer policy", + "status": "FAIL", + "message": "Unable to get property 'getRegistration' of undefined or null reference" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-no-referrer-worker.html", + "subtests": [ + { + "name": "Request's referrer is empty", + "status": "TIMEOUT", + "message": "Test timed out" + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-no-referrer.html", + "subtests": [ + { + "name": "Request's referrer is empty", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin-service-worker.https.html", + "subtests": [ + { + "name": "Fetch in service worker: referrer with no-referrer policy", + "status": "FAIL", + "message": "Unable to get property 'getRegistration' of undefined or null reference" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin-when-cross-origin-service-worker.https.html", + "subtests": [ + { + "name": "Fetch in service worker: referrer with origin-when-cross-origin policy", + "status": "FAIL", + "message": "Unable to get property 'getRegistration' of undefined or null reference" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin-when-cross-origin-worker.html", + "subtests": [ + { + "name": "Request's referrer is origin", + "status": "TIMEOUT", + "message": "Test timed out" + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin-when-cross-origin.html", + "subtests": [ + { + "name": "Request's referrer is origin", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin-worker.html", + "subtests": [ + { + "name": "Request's referrer is origin", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Cross-origin referrer is overridden by client origin", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-origin.html", + "subtests": [ + { + "name": "Request's referrer is origin", + "status": "FAIL", + "message": "assert_equals: request's referrer is http://web-platform.test:8000/ expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/policies/referrer-origin.html\"" + }, + { + "name": "Cross-origin referrer is overridden by client origin", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-unsafe-url-service-worker.https.html", + "subtests": [ + { + "name": "Fetch in worker: referrer with unsafe-url policy", + "status": "FAIL", + "message": "Unable to get property 'getRegistration' of undefined or null reference" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-unsafe-url-worker.html", + "subtests": [ + { + "name": "Request's referrer is the full url of current document/worker", + "status": "TIMEOUT", + "message": "Test timed out" + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/policies/referrer-unsafe-url.html", + "subtests": [ + { + "name": "Request's referrer is the full url of current document/worker", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-count-worker.html", + "subtests": [], + "status": "TIMEOUT", + "message": "" + }, + { + "test": "/fetch/api/redirect/redirect-count.html", + "subtests": [ + { + "name": "Redirect 301 20 times", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301 21 times", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 20 times", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302 21 times", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 20 times", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303 21 times", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 20 times", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307 21 times", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 20 times", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308 21 times", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-location-worker.html", + "subtests": [ + { + "name": "Redirect 301 in \"follow\" mode without location", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Redirect 301 in \"manual\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 in \"follow\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 in \"manual\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 in \"follow\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 in \"manual\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"follow\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"manual\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"follow\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"manual\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"follow\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"manual\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"follow\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"manual\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"follow\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"manual\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"follow\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"manual\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"follow\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"manual\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"follow\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"manual\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"follow\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"manual\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"follow\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"manual\" mode without location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"follow\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"manual\" mode with invalid location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"follow\" mode with data location", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"manual\" mode with data location", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-location.html", + "subtests": [ + { + "name": "Redirect 301 in \"follow\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301 in \"manual\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 301 in \"follow\" mode with invalid location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 in \"manual\" mode with invalid location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Object doesn't support property or method 'entries'\"" + }, + { + "name": "Redirect 301 in \"follow\" mode with data location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 in \"manual\" mode with data location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302 in \"follow\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302 in \"manual\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 302 in \"follow\" mode with invalid location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 in \"manual\" mode with invalid location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Object doesn't support property or method 'entries'\"" + }, + { + "name": "Redirect 302 in \"follow\" mode with data location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 in \"manual\" mode with data location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303 in \"follow\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303 in \"manual\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 303 in \"follow\" mode with invalid location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 in \"manual\" mode with invalid location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Object doesn't support property or method 'entries'\"" + }, + { + "name": "Redirect 303 in \"follow\" mode with data location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 in \"manual\" mode with data location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307 in \"follow\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307 in \"manual\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 307 in \"follow\" mode with invalid location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 in \"manual\" mode with invalid location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Object doesn't support property or method 'entries'\"" + }, + { + "name": "Redirect 307 in \"follow\" mode with data location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 in \"manual\" mode with data location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308 in \"follow\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308 in \"manual\" mode without location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Redirect 308 in \"follow\" mode with invalid location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 in \"manual\" mode with invalid location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Object doesn't support property or method 'entries'\"" + }, + { + "name": "Redirect 308 in \"follow\" mode with data location", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 in \"manual\" mode with data location", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-method-worker.html", + "subtests": [ + { + "name": "Response.redirected should be false on not-redirected responses", + "status": "FAIL", + "message": "assert_false: expected false got undefined" + }, + { + "name": "Redirect 301 with GET", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Redirect 301 with POST", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 with HEAD", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 with GET", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 with POST", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 with HEAD", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 with GET", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 with POST", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 with HEAD", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 with GET", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 with POST", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 with HEAD", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-method.html", + "subtests": [ + { + "name": "Response.redirected should be false on not-redirected responses", + "status": "FAIL", + "message": "assert_false: expected false got undefined" + }, + { + "name": "Redirect 301 with GET", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 301 with POST", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 301 with HEAD", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 302 with GET", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 302 with POST", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 302 with HEAD", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 303 with GET", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 303 with POST", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 303 with HEAD", + "status": "FAIL", + "message": "assert_equals: Request method after redirection is HEAD expected \"HEAD\" but got \"GET\"" + }, + { + "name": "Redirect 307 with GET", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 307 with POST", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + }, + { + "name": "Redirect 307 with HEAD", + "status": "FAIL", + "message": "assert_true: expected true got undefined" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-mode-worker.html", + "subtests": [ + { + "name": "Redirect 301 in \"error\" mode ", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Redirect 301 in \"follow\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 301 in \"manual\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"error\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"follow\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 302 in \"manual\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"error\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"follow\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 303 in \"manual\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"error\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"follow\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 307 in \"manual\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"error\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"follow\" mode ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Redirect 308 in \"manual\" mode ", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-mode.html", + "subtests": [ + { + "name": "Redirect 301 in \"error\" mode ", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 301 in \"follow\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 301 in \"manual\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302 in \"error\" mode ", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 302 in \"follow\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 302 in \"manual\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303 in \"error\" mode ", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 303 in \"follow\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 303 in \"manual\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307 in \"error\" mode ", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 307 in \"follow\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 307 in \"manual\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308 in \"error\" mode ", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Redirect 308 in \"follow\" mode ", + "status": "PASS", + "message": null + }, + { + "name": "Redirect 308 in \"manual\" mode ", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-origin-worker.html", + "subtests": [ + { + "name": "Same origin to same origin redirection 301", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Same origin to other origin redirection 301", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to other origin redirection 301", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to same origin redirection 301", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to same origin redirection 302", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to other origin redirection 302", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to other origin redirection 302", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to same origin redirection 302", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to same origin redirection 303", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to other origin redirection 303", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to other origin redirection 303", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to same origin redirection 303", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to same origin redirection 307", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to other origin redirection 307", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to other origin redirection 307", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to same origin redirection 307", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to same origin redirection 308", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin to other origin redirection 308", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to other origin redirection 308", + "status": "NOTRUN", + "message": null + }, + { + "name": "Other origin to same origin redirection 308", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-origin.html", + "subtests": [ + { + "name": "Same origin to same origin redirection 301", + "status": "FAIL", + "message": "assert_equals: Check origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Same origin to other origin redirection 301", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to other origin redirection 301", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to same origin redirection 301", + "status": "PASS", + "message": null + }, + { + "name": "Same origin to same origin redirection 302", + "status": "FAIL", + "message": "assert_equals: Check origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Same origin to other origin redirection 302", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to other origin redirection 302", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to same origin redirection 302", + "status": "PASS", + "message": null + }, + { + "name": "Same origin to same origin redirection 303", + "status": "FAIL", + "message": "assert_equals: Check origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Same origin to other origin redirection 303", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to other origin redirection 303", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to same origin redirection 303", + "status": "PASS", + "message": null + }, + { + "name": "Same origin to same origin redirection 307", + "status": "FAIL", + "message": "assert_equals: Check origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Same origin to other origin redirection 307", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to other origin redirection 307", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to same origin redirection 307", + "status": "PASS", + "message": null + }, + { + "name": "Same origin to same origin redirection 308", + "status": "FAIL", + "message": "assert_equals: Check origin header expected (object) null but got (string) \"http://web-platform.test:8000\"" + }, + { + "name": "Same origin to other origin redirection 308", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to other origin redirection 308", + "status": "PASS", + "message": null + }, + { + "name": "Other origin to same origin redirection 308", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-referrer-worker.html", + "subtests": [ + { + "name": "Same origin redirection, empty init, unsafe-url redirect header ", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Same origin redirection, empty init, no-referrer-when-downgrade redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, same-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, origin-when-cross-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, no-referrer redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, strict-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty init, strict-origin-when-cross-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, unsafe-url init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, no-referrer-when-downgrade init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, same-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, origin-when-cross-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, no-referrer init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, strict-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, strict-origin-when-cross-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, unsafe-url redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, no-referrer-when-downgrade redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, same-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, origin-when-cross-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, no-referrer redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, strict-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, unsafe-url init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, no-referrer-when-downgrade init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, same-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, origin-when-cross-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, no-referrer init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, strict-origin init ", + "status": "NOTRUN", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init ", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-referrer.html", + "subtests": [ + { + "name": "Same origin redirection, empty init, unsafe-url redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty init, no-referrer-when-downgrade redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty init, same-origin redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty init, origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Same origin redirection, empty init, origin-when-cross-origin redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty init, no-referrer redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected (object) null but got (string) \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Same origin redirection, empty init, strict-origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Same origin redirection, empty init, strict-origin-when-cross-origin redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, unsafe-url init ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, no-referrer-when-downgrade init ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, same-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same origin redirection, empty redirect header, origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same origin redirection, empty redirect header, origin-when-cross-origin init ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, no-referrer init ", + "status": "PASS", + "message": null + }, + { + "name": "Same origin redirection, empty redirect header, strict-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Same origin redirection, empty redirect header, strict-origin-when-cross-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross origin redirection, empty init, unsafe-url redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty init, no-referrer-when-downgrade redirect header ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty init, same-origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected (object) null but got (string) \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty init, origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty init, origin-when-cross-origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty init, no-referrer redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected (object) null but got (string) \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty init, strict-origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty init, strict-origin-when-cross-origin redirect header ", + "status": "FAIL", + "message": "assert_equals: Check referrer header expected \"http://web-platform.test:8000/\" but got \"http://web-platform.test:8000/fetch/api/redirect/redirect-referrer.html\"" + }, + { + "name": "Cross origin redirection, empty redirect header, unsafe-url init ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, no-referrer-when-downgrade init ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, same-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross origin redirection, empty redirect header, origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross origin redirection, empty redirect header, origin-when-cross-origin init ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, no-referrer init ", + "status": "PASS", + "message": null + }, + { + "name": "Cross origin redirection, empty redirect header, strict-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "Cross origin redirection, empty redirect header, strict-origin-when-cross-origin init ", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-schemes.html", + "subtests": [ + { + "name": "Fetch: handling different schemes in redirects", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch: handling different schemes in redirects 1", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch: handling different schemes in redirects 2", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch: handling different schemes in redirects 3", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch: handling different schemes in redirects 4", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Fetch: handling different schemes in redirects 5", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-to-dataurl-worker.html", + "subtests": [ + { + "name": "Testing data URL loading after same-origin redirection (cors mode)", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Testing data URL loading after same-origin redirection (no-cors mode)", + "status": "NOTRUN", + "message": null + }, + { + "name": "Testing data URL loading after same-origin redirection (same-origin mode)", + "status": "NOTRUN", + "message": null + }, + { + "name": "Testing data URL loading after cross-origin redirection (cors mode)", + "status": "NOTRUN", + "message": null + }, + { + "name": "Testing data URL loading after cross-origin redirection (no-cors mode)", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/redirect/redirect-to-dataurl.html", + "subtests": [ + { + "name": "Testing data URL loading after same-origin redirection (cors mode)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Testing data URL loading after same-origin redirection (no-cors mode)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Testing data URL loading after same-origin redirection (same-origin mode)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Testing data URL loading after cross-origin redirection (cors mode)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Testing data URL loading after cross-origin redirection (no-cors mode)", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/multi-globals/url-parsing.html", + "subtests": [ + { + "name": "should parse the URL relative to the current settings object", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-bad-port.html", + "subtests": [ + { + "name": "Request on bad port 1 should throw TypeError.", + "status": "TIMEOUT", + "message": "Test timed out" + }, + { + "name": "Request on bad port 7 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 9 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 11 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 13 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 15 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 17 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 19 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 20 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 21 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 22 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 23 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 25 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 37 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 42 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 43 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 53 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 77 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 79 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 87 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 95 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 101 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 102 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 103 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 104 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 109 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 110 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 111 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 113 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 115 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 117 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 119 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 123 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 135 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 139 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 143 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 179 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 389 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 465 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 512 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 513 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 514 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 515 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 526 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 530 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 531 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 532 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 540 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 556 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 563 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 587 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 601 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 636 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 993 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 995 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 2049 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 3659 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 4045 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6000 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6665 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6666 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6667 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6668 should throw TypeError.", + "status": "NOTRUN", + "message": null + }, + { + "name": "Request on bad port 6669 should throw TypeError.", + "status": "NOTRUN", + "message": null + } + ], + "status": "TIMEOUT", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-default-conditional.html", + "subtests": [ + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Modified-Since header is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-None-Match header is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Unmodified-Since header is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Match header is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header (following a request without additional headers) is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header (following a request without additional headers) is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header is treated similarly to \"no-store\" with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header is treated similarly to \"no-store\" with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header is treated similarly to \"no-store\" with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode with an If-Range header is treated similarly to \"no-store\" with Last-Modified and fresh response", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-default.html", + "subtests": [ + { + "name": "RequestCache \"default\" mode checks the cache for previously cached content and goes to the network for stale responses with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode checks the cache for previously cached content and goes to the network for stale responses with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"default\" mode checks the cache for previously cached content and avoids going to the network if a fresh response exists with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 1 but got 2" + }, + { + "name": "RequestCache \"default\" mode checks the cache for previously cached content and avoids going to the network if a fresh response exists with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 1 but got 2" + }, + { + "name": "Responses with the \"Cache-Control: no-store\" header are not stored in the cache with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "Responses with the \"Cache-Control: no-store\" header are not stored in the cache with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "Responses with the \"Cache-Control: no-store\" header are not stored in the cache with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "Responses with the \"Cache-Control: no-store\" header are not stored in the cache with Last-Modified and fresh response", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-force-cache.html", + "subtests": [ + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and avoid revalidation for stale responses with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and avoid revalidation for stale responses with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and avoid revalidation for fresh responses with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and avoid revalidation for fresh responses with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response is not found with Etag and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response is not found with Last-Modified and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response is not found with Etag and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response is not found with Last-Modified and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response would vary with Etag and stale response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response would vary with Last-Modified and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response would vary with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + }, + { + "name": "RequestCache \"force-cache\" mode checks the cache for previously cached content and goes to the network if a cached response would vary with Last-Modified and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" stores the response in the cache if it goes to the network with Etag and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" stores the response in the cache if it goes to the network with Last-Modified and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" stores the response in the cache if it goes to the network with Etag and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"force-cache\" stores the response in the cache if it goes to the network with Last-Modified and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-no-cache.html", + "subtests": [ + { + "name": "RequestCache \"no-cache\" mode revalidates stale responses found in the cache with Etag and stale response", + "status": "FAIL", + "message": "assert_equals: expected \"max-age=0\" but got \"no-cache\"" + }, + { + "name": "RequestCache \"no-cache\" mode revalidates stale responses found in the cache with Last-Modified and stale response", + "status": "FAIL", + "message": "assert_equals: expected \"max-age=0\" but got \"no-cache\"" + }, + { + "name": "RequestCache \"no-cache\" mode revalidates fresh responses found in the cache with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + }, + { + "name": "RequestCache \"no-cache\" mode revalidates fresh responses found in the cache with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-no-store.html", + "subtests": [ + { + "name": "RequestCache \"no-store\" mode does not check the cache for previously cached content and goes to the network regardless with Etag and stale response", + "status": "FAIL", + "message": "assert_equals: expected (undefined) undefined but got (string) \"\\\"0.4074957599948088\\\"\"" + }, + { + "name": "RequestCache \"no-store\" mode does not check the cache for previously cached content and goes to the network regardless with Last-Modified and stale response", + "status": "FAIL", + "message": "assert_equals: expected (undefined) undefined but got (string) \"Mon, 03 Apr 2017 18:49:56 GMT\"" + }, + { + "name": "RequestCache \"no-store\" mode does not check the cache for previously cached content and goes to the network regardless with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + }, + { + "name": "RequestCache \"no-store\" mode does not check the cache for previously cached content and goes to the network regardless with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 1" + }, + { + "name": "RequestCache \"no-store\" mode does not store the response in the cache with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"no-store\" mode does not store the response in the cache with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"no-store\" mode does not store the response in the cache with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"no-store\" mode does not store the response in the cache with Last-Modified and fresh response", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-only-if-cached.html", + "subtests": [ + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and avoids revalidation for stale responses with Etag and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and avoids revalidation for stale responses with Last-Modified and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and avoids revalidation for fresh responses with Etag and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and avoids revalidation for fresh responses with Last-Modified and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and does not go to the network if a cached response is not found with Etag and fresh response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestCache \"only-if-cached\" mode checks the cache for previously cached content and does not go to the network if a cached response is not found with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") uses cached same-origin redirects to same-origin content with Etag and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") uses cached same-origin redirects to same-origin content with Last-Modified and fresh response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") uses cached same-origin redirects to same-origin content with Etag and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") uses cached same-origin redirects to same-origin content with Last-Modified and stale response", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeMismatchError\"" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") does not follow redirects across origins and rejects with Etag and fresh response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") does not follow redirects across origins and rejects with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") does not follow redirects across origins and rejects with Etag and stale response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestCache \"only-if-cached\" (with \"same-origin\") does not follow redirects across origins and rejects with Last-Modified and stale response", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw reason; }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-cache-reload.html", + "subtests": [ + { + "name": "RequestCache \"reload\" mode does not check the cache for previously cached content and goes to the network regardless with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does not check the cache for previously cached content and goes to the network regardless with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does not check the cache for previously cached content and goes to the network regardless with Etag and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does not check the cache for previously cached content and goes to the network regardless with Last-Modified and fresh response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 1 but got 2" + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 1 but got 2" + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache even if a previous response is already stored with Etag and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache even if a previous response is already stored with Last-Modified and stale response", + "status": "PASS", + "message": null + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache even if a previous response is already stored with Etag and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 3" + }, + { + "name": "RequestCache \"reload\" mode does store the response in the cache even if a previous response is already stored with Last-Modified and fresh response", + "status": "FAIL", + "message": "assert_equals: expected 2 but got 3" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-clone.sub.html", + "subtests": [ + { + "name": "Check cloning a request", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check cloning a request copies the headers", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-consume-empty.html", + "subtests": [ + { + "name": "Consume request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume request's body as json", + "status": "PASS", + "message": null + }, + { + "name": "Consume request's body as formData", + "status": "FAIL", + "message": "Object doesn't support property or method 'formData'" + }, + { + "name": "Consume empty blob request body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty text request body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty blob request body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty text request body as text", + "status": "PASS", + "message": null + } + ], + "status": "ERROR", + "message": "'URLSearchParams' is undefined" + }, + { + "test": "/fetch/api/request/request-consume.html", + "subtests": [ + { + "name": "Consume String request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume String request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume String request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume String request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume ArrayBuffer request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume ArrayBuffer request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume ArrayBuffer request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume ArrayBuffer request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume Uint8Array request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume Uint8Array request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume Uint8Array request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume Uint8Array request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume Int8Array request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume Int8Array request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume Int8Array request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume Int8Array request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume Float32Array request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume Float32Array request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume Float32Array request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume Float32Array request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume DataView request's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume DataView request's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume DataView request's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume DataView request's body as JSON", + "status": "PASS", + "message": null + }, + { + "name": "Consume FormData request's body as FormData", + "status": "FAIL", + "message": "Object doesn't support property or method 'formData'" + }, + { + "name": "Consume blob response's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume blob response's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume blob response's body as json", + "status": "PASS", + "message": null + }, + { + "name": "Consume blob response's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume blob response's body as blob (empty blob as input)", + "status": "PASS", + "message": null + }, + { + "name": "Consume JSON from text: '\"null\"'", + "status": "PASS", + "message": null + }, + { + "name": "Consume JSON from text: '\"1\"'", + "status": "PASS", + "message": null + }, + { + "name": "Consume JSON from text: '\"true\"'", + "status": "PASS", + "message": null + }, + { + "name": "Consume JSON from text: '\"\\\"string\\\"\"'", + "status": "PASS", + "message": null + }, + { + "name": "Trying to consume bad JSON text as JSON: 'undefined'", + "status": "PASS", + "message": null + }, + { + "name": "Trying to consume bad JSON text as JSON: '{'", + "status": "PASS", + "message": null + }, + { + "name": "Trying to consume bad JSON text as JSON: 'a'", + "status": "PASS", + "message": null + }, + { + "name": "Trying to consume bad JSON text as JSON: '['", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-disturbed.html", + "subtests": [ + { + "name": "Request's body: initial state", + "status": "FAIL", + "message": "assert_equals: body's default value is null expected (object) null but got (undefined) undefined" + }, + { + "name": "Request without body cannot be disturbed", + "status": "PASS", + "message": null + }, + { + "name": "Check cloning a disturbed request", + "status": "FAIL", + "message": "assert_throws: function \"function () { bodyConsumed.clone(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Check creating a new request from a disturbed request", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(bodyConsumed); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Input request used for creating new request became disturbed", + "status": "FAIL", + "message": "assert_not_equals: body should not be undefined got disallowed value undefined" + }, + { + "name": "Input request used for creating new request became disturbed even if body is not used", + "status": "FAIL", + "message": "assert_not_equals: body should not be undefined got disallowed value undefined" + }, + { + "name": "Check consuming a disturbed request", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Request construction failure should not set \"bodyUsed\"", + "status": "FAIL", + "message": "assert_throws: A get request may not have body. function \"function () { new Request(req, {method: 'GET'}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-error.html", + "subtests": [ + { + "name": "RequestInit's window is not null", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"window\" : \"http://test.url\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Input URL is not valid", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"http://:not a valid URL\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Input URL has credentials", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"http://user:pass@test.url\"); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's referrer is invalid", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"referrer\" : \"http://:not a valid URL\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's method is invalid", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"method\" : \"IN VALID\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's method is forbidden", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"method\" : \"TRACE\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's mode is no-cors and method is not simple", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"mode\" : \"no-cors\", \"method\" : \"PUT\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's mode is no-cors and integrity is not empty", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"mode\" : \"no-cors\", \"integrity\" : \"not an empty string\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "RequestInit's cache mode is only-if-cached and mode is not same-origin", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Request(\"\", {\"mode\" : \"cors\", \"cache\" : \"only-if-cached\"}); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Request should get its content-type from the init request", + "status": "PASS", + "message": null + }, + { + "name": "Request should not get its content-type from the init request if init headers are provided", + "status": "PASS", + "message": null + }, + { + "name": "Request should get its content-type from the body if none is provided", + "status": "PASS", + "message": null + }, + { + "name": "Request should get its content-type from init headers if one is provided", + "status": "PASS", + "message": null + }, + { + "name": "Bad referrerPolicy init parameter value", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Bad mode init parameter value", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Bad credentials init parameter value", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Bad cache init parameter value", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Bad redirect init parameter value", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Request with cache mode: only-if-cached and fetch mode: same-origin", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Request with cache mode: only-if-cached and fetch mode: cors", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"test\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Request with cache mode: only-if-cached and fetch mode: no-cors", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"test\", options); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-headers.html", + "subtests": [ + { + "name": "Adding valid request header \"Content-Type: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid request header \"Potato: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid request header \"proxy: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid request header \"proxya: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid request header \"sec: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid request header \"secb: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Accept-Charset: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"accept-charset: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"ACCEPT-ENCODING: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Accept-Encoding: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Access-Control-Request-Headers: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Access-Control-Request-Method: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Connection: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Content-Length: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Cookie: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Cookie2: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Date: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"DNT: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Expect: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Host: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Keep-Alive: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Origin: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Referer: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"TE: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Trailer: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Transfer-Encoding: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Upgrade: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Via: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Proxy-: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"proxy-a: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"Sec-: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid request header \"sec-b: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"Accept: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"Accept-Language: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-language: OK\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-type: application/x-www-form-urlencoded\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-type: application/x-www-form-urlencoded;charset=UTF-8\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-type: multipart/form-data\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-type: multipart/form-data;charset=UTF-8\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"content-TYPE: text/plain\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding valid no-cors request header \"CONTENT-type: text/plain;charset=UTF-8\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"Content-Type: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"Potato: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"proxy: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"proxya: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"sec: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Adding invalid no-cors request header \"secb: KO\"", + "status": "PASS", + "message": null + }, + { + "name": "Check that request constructor is filtering headers provided as init parameter", + "status": "PASS", + "message": null + }, + { + "name": "Check that no-cors request constructor is filtering headers provided as init parameter", + "status": "PASS", + "message": null + }, + { + "name": "Check that no-cors request constructor is filtering headers provided as part of request parameter", + "status": "FAIL", + "message": "assert_equals: expected (object) null but got (string) \"potato\"" + }, + { + "name": "Request should get its content-type from the init request", + "status": "PASS", + "message": null + }, + { + "name": "Request should not get its content-type from the init request if init headers are provided", + "status": "PASS", + "message": null + }, + { + "name": "Request should get its content-type from the body if none is provided", + "status": "PASS", + "message": null + }, + { + "name": "Request should get its content-type from init headers if one is provided", + "status": "PASS", + "message": null + }, + { + "name": "Testing request header creations with various objects", + "status": "PASS", + "message": null + }, + { + "name": "Testing empty Request Content-Type header", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-idl.html", + "subtests": [ + { + "name": "Request interface: existence and properties of interface object", + "status": "PASS", + "message": null + }, + { + "name": "Request interface object length", + "status": "FAIL", + "message": "assert_own_property: expected property \"length\" missing" + }, + { + "name": "Request interface object name", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: existence and properties of interface prototype object", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: existence and properties of interface prototype object's \"constructor\" property", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute method", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute url", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute headers", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute type", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute destination", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute referrer", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute referrerPolicy", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute mode", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute credentials", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute cache", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute redirect", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute integrity", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: operation clone()", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: attribute body", + "status": "FAIL", + "message": "assert_true: The prototype object must have a property \"body\" expected true got false" + }, + { + "name": "Request interface: attribute bodyUsed", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: operation arrayBuffer()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Request interface: operation blob()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Request interface: operation formData()", + "status": "FAIL", + "message": "assert_own_property: interface prototype object missing non-static operation expected property \"formData\" missing" + }, + { + "name": "Request interface: operation json()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Request interface: operation text()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Request must be primary interface of new Request(\"\")", + "status": "PASS", + "message": null + }, + { + "name": "Stringification of new Request(\"\")", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"method\" with the proper type (0)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"url\" with the proper type (1)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"headers\" with the proper type (2)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"type\" with the proper type (3)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"destination\" with the proper type (4)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"referrer\" with the proper type (5)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"referrerPolicy\" with the proper type (6)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"mode\" with the proper type (7)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"credentials\" with the proper type (8)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"cache\" with the proper type (9)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"redirect\" with the proper type (10)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"integrity\" with the proper type (11)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"clone\" with the proper type (12)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"body\" with the proper type (13)", + "status": "FAIL", + "message": "assert_inherits: property \"body\" not found in prototype chain" + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"bodyUsed\" with the proper type (14)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"arrayBuffer\" with the proper type (15)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"blob\" with the proper type (16)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"formData\" with the proper type (17)", + "status": "FAIL", + "message": "assert_inherits: property \"formData\" not found in prototype chain" + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"json\" with the proper type (18)", + "status": "PASS", + "message": null + }, + { + "name": "Request interface: new Request(\"\") must inherit property \"text\" with the proper type (19)", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-init-001.sub.html", + "subtests": [ + { + "name": "Check method init value of GET and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of HEAD and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of POST and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of PUT and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of DELETE and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of OPTIONS and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check method init value of head and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer init value of /relative/ressource and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer init value of http://web-platform.test:8000/relative/ressource?query=true#fragment and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer init value of http://web-platform.test:8000/ and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer init value of http://test.url and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check referrer init value of about:client and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer init value of and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of no-referrer and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of no-referrer-when-downgrade and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of origin and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check referrerPolicy init value of origin-when-cross-origin and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of unsafe-url and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy init value of same-origin and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check referrerPolicy init value of strict-origin and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check referrerPolicy init value of strict-origin-when-cross-origin and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check mode init value of same-origin and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check mode init value of no-cors and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check mode init value of cors and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check mode init value of navigate and associated getter", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Check credentials init value of omit and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check credentials init value of same-origin and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check credentials init value of include and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check cache init value of default and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check cache init value of no-store and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check cache init value of reload and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check cache init value of no-cache and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check cache init value of force-cache and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check redirect init value of follow and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check redirect init value of error and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check redirect init value of manual and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check integrity init value of and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check integrity init value of AZERTYUIOP1234567890 and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check window init value of null and associated getter", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-init-002.html", + "subtests": [ + { + "name": "Initialize Request with headers values", + "status": "PASS", + "message": null + }, + { + "name": "Initialize Request's body with undefined", + "status": "PASS", + "message": null + }, + { + "name": "Initialize Request's body with null", + "status": "FAIL", + "message": "TypeMismatchError" + }, + { + "name": "Initialize Request's body with application/octet-binary", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", makeRequestInit(body, \"GET\")); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Initialize Request's body with multipart/form-data", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", makeRequestInit(body, \"GET\")); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Initialize Request's body with text/plain;charset=UTF-8", + "status": "FAIL", + "message": "assert_throws: function \"function () { new Request(\"\", makeRequestInit(body, \"GET\")); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Initialize Request's body with application/x-www-form-urlencoded;charset=UTF-8", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: \"URLSearchParams not supported\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-init-003.sub.html", + "subtests": [ + { + "name": "Request: init with request or url", + "status": "FAIL", + "message": "TypeMismatchError" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-keepalive-quota.html", + "subtests": [ + { + "name": "A Keep-Alive fetch() with a small body should succeed.", + "status": "PASS", + "message": null + }, + { + "name": "A Keep-Alive fetch() with a body at the Quota Limit should succeed.", + "status": "PASS", + "message": null + }, + { + "name": "A Keep-Alive fetch() with a body over the Quota Limit should reject.", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "A Keep-Alive fetch() should return it's allocated Quota upon promise resolution.", + "status": "PASS", + "message": null + }, + { + "name": "A Keep-Alive fetch() should return only it's allocated Quota upon promise resolution.", + "status": "PASS", + "message": null + }, + { + "name": "A Keep-Alive fetch() should not be allowed if the Quota is used up.", + "status": "FAIL", + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/request/request-structure.html", + "subtests": [ + { + "name": "Request has clone method", + "status": "PASS", + "message": null + }, + { + "name": "Request has arrayBuffer method", + "status": "PASS", + "message": null + }, + { + "name": "Request has blob method", + "status": "PASS", + "message": null + }, + { + "name": "Request has formData method", + "status": "FAIL", + "message": "assert_true: request has formData method expected true got false" + }, + { + "name": "Request has json method", + "status": "PASS", + "message": null + }, + { + "name": "Request has text method", + "status": "PASS", + "message": null + }, + { + "name": "Check method attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check url attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check headers attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check type attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check destination attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check referrer attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check referrerPolicy attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check mode attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check credentials attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check cache attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check redirect attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check integrity attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check bodyUsed attribute", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/multi-globals/url-parsing.html", + "subtests": [ + { + "name": "should parse the redirect Location URL relative to the current settings object", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Unable to get property 'call' of undefined or null reference\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-cancel-stream.html", + "subtests": [ + { + "name": "Cancelling a starting blob Response stream", + "status": "PASS", + "message": null + }, + { + "name": "Cancelling a loading blob Response stream", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"InvalidStateError\"" + }, + { + "name": "Cancelling a closed blob Response stream", + "status": "FAIL", + "message": "Unable to get property 'then' of undefined or null reference" + }, + { + "name": "Cancelling a starting Response stream", + "status": "PASS", + "message": null + }, + { + "name": "Cancelling a loading Response stream", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"InvalidStateError\"" + }, + { + "name": "Cancelling a closed Response stream", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Unable to get property 'then' of undefined or null reference\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-clone.html", + "subtests": [ + { + "name": "Check Response's clone with default values, without body", + "status": "PASS", + "message": null + }, + { + "name": "Check Response's clone has the expected attribute values", + "status": "PASS", + "message": null + }, + { + "name": "Check orginal response's body after cloning", + "status": "PASS", + "message": null + }, + { + "name": "Check cloned response's body", + "status": "PASS", + "message": null + }, + { + "name": "Cannot clone a disturbed response", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { disturbedResponse.clone(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Cloned responses should provide the same data", + "status": "PASS", + "message": null + }, + { + "name": "Cancelling stream should not affect cloned one", + "status": "PASS", + "message": null + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Int8Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Int16Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Int32Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (ArrayBufferchunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Uint8Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Uint8ClampedArraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Uint16Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Uint32Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Float32Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (Float64Arraychunk)", + "status": "FAIL", + "message": "Function expected" + }, + { + "name": "Check response clone use structureClone for teed ReadableStreams (DataViewchunk)", + "status": "FAIL", + "message": "Function expected" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-consume-empty.html", + "subtests": [ + { + "name": "Consume response's body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume response's body as blob", + "status": "PASS", + "message": null + }, + { + "name": "Consume response's body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume response's body as json", + "status": "PASS", + "message": null + }, + { + "name": "Consume response's body as formData", + "status": "FAIL", + "message": "Object doesn't support property or method 'formData'" + }, + { + "name": "Consume empty blob response body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty text response body as arrayBuffer", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty blob response body as text", + "status": "PASS", + "message": null + }, + { + "name": "Consume empty text response body as text", + "status": "PASS", + "message": null + } + ], + "status": "ERROR", + "message": "'URLSearchParams' is undefined" + }, + { + "test": "/fetch/api/response/response-consume-stream.html", + "subtests": [ + { + "name": "Read empty text response's body as readableStream", + "status": "PASS", + "message": null + }, + { + "name": "Read empty blob response's body as readableStream", + "status": "PASS", + "message": null + } + ], + "status": "ERROR", + "message": "'URLSearchParams' is undefined" + }, + { + "test": "/fetch/api/response/response-consume.html", + "subtests": [ + { + "name": "Response consume", + "status": "FAIL", + "message": "'URLSearchParams' is undefined" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-error.html", + "subtests": [ + { + "name": "Throws RangeError when responseInit's status is 0", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception when status is 0 function \"function () { new Response(\"\", { \"status\" : status }); }\" threw object \"ValidationError\" (\"ValidationError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Throws RangeError when responseInit's status is 100", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception when status is 100 function \"function () { new Response(\"\", { \"status\" : status }); }\" threw object \"ValidationError\" (\"ValidationError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Throws RangeError when responseInit's status is 199", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception when status is 199 function \"function () { new Response(\"\", { \"status\" : status }); }\" threw object \"ValidationError\" (\"ValidationError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Throws RangeError when responseInit's status is 600", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception when status is 600 function \"function () { new Response(\"\", { \"status\" : status }); }\" threw object \"ValidationError\" (\"ValidationError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Throws RangeError when responseInit's status is 1000", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception when status is 1000 function \"function () { new Response(\"\", { \"status\" : status }); }\" threw object \"ValidationError\" (\"ValidationError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Throws TypeError when responseInit's statusText is \n", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception \n function \"function () { new Response(\"\", { \"statusText\" : statusText }); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Throws TypeError when responseInit's statusText is Ā", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception Ā function \"function () { new Response(\"\", { \"statusText\" : statusText }); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Throws TypeError when building a response with body and a body status of 204", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Response(\"body\", {\"status\" : status }); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Throws TypeError when building a response with body and a body status of 205", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Response(\"body\", {\"status\" : status }); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Throws TypeError when building a response with body and a body status of 304", + "status": "FAIL", + "message": "assert_throws: Expect TypeError exception function \"function () { new Response(\"body\", {\"status\" : status }); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-idl.html", + "subtests": [ + { + "name": "Response interface: existence and properties of interface object", + "status": "PASS", + "message": null + }, + { + "name": "Response interface object length", + "status": "FAIL", + "message": "assert_own_property: expected property \"length\" missing" + }, + { + "name": "Response interface object name", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: existence and properties of interface prototype object", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: existence and properties of interface prototype object's \"constructor\" property", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: operation error()", + "status": "FAIL", + "message": "assert_own_property: interface object missing static operation expected property \"error\" missing" + }, + { + "name": "Response interface: operation redirect(USVString,unsigned short)", + "status": "FAIL", + "message": "assert_own_property: interface object missing static operation expected property \"redirect\" missing" + }, + { + "name": "Response interface: attribute type", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute url", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute status", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute ok", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute statusText", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute headers", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute trailer", + "status": "FAIL", + "message": "assert_true: The prototype object must have a property \"trailer\" expected true got false" + }, + { + "name": "Response interface: operation clone()", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute body", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: attribute bodyUsed", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: operation arrayBuffer()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Response interface: operation blob()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Response interface: operation formData()", + "status": "FAIL", + "message": "assert_own_property: interface prototype object missing non-static operation expected property \"formData\" missing" + }, + { + "name": "Response interface: operation json()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Response interface: operation text()", + "status": "FAIL", + "message": "assert_unreached: Throws \"TypeError: Invalid calling object\" instead of rejecting promise Reached unreachable code" + }, + { + "name": "Response must be primary interface of new Response()", + "status": "PASS", + "message": null + }, + { + "name": "Stringification of new Response()", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"error\" with the proper type (0)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"redirect\" with the proper type (1)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: calling redirect(USVString,unsigned short) on new Response() with too few arguments must throw TypeError", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"type\" with the proper type (2)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"url\" with the proper type (3)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"status\" with the proper type (4)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"ok\" with the proper type (5)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"statusText\" with the proper type (6)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"headers\" with the proper type (7)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"trailer\" with the proper type (8)", + "status": "FAIL", + "message": "assert_inherits: property \"trailer\" not found in prototype chain" + }, + { + "name": "Response interface: new Response() must inherit property \"clone\" with the proper type (9)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"body\" with the proper type (10)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"bodyUsed\" with the proper type (11)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"arrayBuffer\" with the proper type (12)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"blob\" with the proper type (13)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"formData\" with the proper type (14)", + "status": "FAIL", + "message": "assert_inherits: property \"formData\" not found in prototype chain" + }, + { + "name": "Response interface: new Response() must inherit property \"json\" with the proper type (15)", + "status": "PASS", + "message": null + }, + { + "name": "Response interface: new Response() must inherit property \"text\" with the proper type (16)", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-init-001.html", + "subtests": [ + { + "name": "Check default value for type attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check default value for url attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check default value for ok attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check default value for status attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check default value for statusText attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check default value for body attribute", + "status": "PASS", + "message": null + }, + { + "name": "Check status init values and associated getter", + "status": "PASS", + "message": null + }, + { + "name": "Check statusText init values and associated getter", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-init-002.html", + "subtests": [ + { + "name": "Initialize Response with headers values", + "status": "PASS", + "message": null + }, + { + "name": "Initialize Response's body with application/octet-binary", + "status": "PASS", + "message": null + }, + { + "name": "Initialize Response's body with multipart/form-data", + "status": "PASS", + "message": null + }, + { + "name": "Initialize Response's body with application/x-www-form-urlencoded;charset=UTF-8", + "status": "FAIL", + "message": "assert_true: Content-Type header should be \"application/x-www-form-urlencoded;charset=UTF-8\" expected true got false" + }, + { + "name": "Initialize Response's body with text/plain;charset=UTF-8", + "status": "PASS", + "message": null + }, + { + "name": "Read Response's body as readableStream", + "status": "PASS", + "message": null + }, + { + "name": "Testing empty Response Content-Type header", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-static-error.html", + "subtests": [ + { + "name": "Check response returned by static method error()", + "status": "FAIL", + "message": "Object doesn't support property or method 'error'" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-static-redirect.html", + "subtests": [ + { + "name": "Check default redirect response", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check response returned by static method redirect(), status = 301", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check response returned by static method redirect(), status = 302", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check response returned by static method redirect(), status = 303", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check response returned by static method redirect(), status = 307", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check response returned by static method redirect(), status = 308", + "status": "FAIL", + "message": "Object doesn't support property or method 'redirect'" + }, + { + "name": "Check error returned when giving invalid url to redirect()", + "status": "PASS", + "message": null + }, + { + "name": "Check error returned when giving invalid status to redirect(), status = 200", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception function \"function () { Response.redirect(url, invalidStatus); }\" threw object \"TypeError: Object doesn't support property or method 'redirect'\" (\"TypeError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Check error returned when giving invalid status to redirect(), status = 309", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception function \"function () { Response.redirect(url, invalidStatus); }\" threw object \"TypeError: Object doesn't support property or method 'redirect'\" (\"TypeError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Check error returned when giving invalid status to redirect(), status = 400", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception function \"function () { Response.redirect(url, invalidStatus); }\" threw object \"TypeError: Object doesn't support property or method 'redirect'\" (\"TypeError\") expected object \"RangeError\" (\"RangeError\")" + }, + { + "name": "Check error returned when giving invalid status to redirect(), status = 500", + "status": "FAIL", + "message": "assert_throws: Expect RangeError exception function \"function () { Response.redirect(url, invalidStatus); }\" threw object \"TypeError: Object doesn't support property or method 'redirect'\" (\"TypeError\") expected object \"RangeError\" (\"RangeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-stream-disturbed-1.html", + "subtests": [ + { + "name": "Getting blob after getting the Response body - not disturbed, not locked", + "status": "PASS", + "message": null + }, + { + "name": "Getting text after getting the Response body - not disturbed, not locked", + "status": "PASS", + "message": null + }, + { + "name": "Getting json after getting the Response body - not disturbed, not locked", + "status": "PASS", + "message": null + }, + { + "name": "Getting arrayBuffer after getting the Response body - not disturbed, not locked", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-stream-disturbed-2.html", + "subtests": [ + { + "name": "Getting blob after getting a locked Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting text after getting a locked Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting json after getting a locked Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting arrayBuffer after getting a locked Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-stream-disturbed-3.html", + "subtests": [ + { + "name": "Getting blob after reading the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting text after reading the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting json after reading the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting arrayBuffer after reading the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-stream-disturbed-4.html", + "subtests": [ + { + "name": "Getting blob after cancelling the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting text after cancelling the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting json after cancelling the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting arrayBuffer after cancelling the Response body", + "status": "FAIL", + "message": "assert_throws: function \"function () { throw e }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-stream-disturbed-5.html", + "subtests": [ + { + "name": "Getting a body reader after consuming as blob", + "status": "FAIL", + "message": "assert_throws: function \"function () { response.body.getReader(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting a body reader after consuming as text", + "status": "FAIL", + "message": "assert_throws: function \"function () { response.body.getReader(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting a body reader after consuming as json", + "status": "FAIL", + "message": "assert_throws: function \"function () { response.body.getReader(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + }, + { + "name": "Getting a body reader after consuming as arrayBuffer", + "status": "FAIL", + "message": "assert_throws: function \"function () { response.body.getReader(); }\" threw object \"TypeMismatchError\" (\"TypeMismatchError\") expected object \"TypeError\" (\"TypeError\")" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/api/response/response-trailer.html", + "subtests": [ + { + "name": "trailer() test", + "status": "FAIL", + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Unable to get property 'then' of undefined or null reference\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/304-update.html", + "subtests": [ + { + "name": "HTTP cache updates returned headers from a Last-Modified 304.", + "status": "FAIL", + "message": "assert_equals: Response header expected \"B\" but got \"A\"" + }, + { + "name": "HTTP cache updates stored headers from a Last-Modified 304.", + "status": "FAIL", + "message": "assert_equals: Response header expected \"B\" but got \"A\"" + }, + { + "name": "HTTP cache updates returned headers from a ETag 304.", + "status": "FAIL", + "message": "assert_equals: Response header expected \"B\" but got \"A\"" + }, + { + "name": "HTTP cache updates stored headers from a ETag 304.", + "status": "FAIL", + "message": "assert_equals: Response header expected \"B\" but got \"A\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/cc-request.html", + "subtests": [ + { + "name": "HTTP cache doesn't use aged but fresh response when request contains Cache-Control: max-age=0.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't use aged but fresh response when request contains Cache-Control: max-age=1.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't use fresh response with Age header when request contains Cache-Control: max-age that is greater than remaining freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does use aged stale response when request contains Cache-Control: max-stale that permits its use.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does reuse stale response with Age header when request contains Cache-Control: max-stale that permits its use.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache doesn't reuse fresh response when request contains Cache-Control: min-fresh that wants it fresher.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't reuse fresh response with Age header when request contains Cache-Control: min-fresh that wants it fresher.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't reuse fresh response when request contains Cache-Control: no-cache.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache validates fresh response with Last-Modified when request contains Cache-Control: no-cache.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache validates fresh response with ETag when request contains Cache-Control: no-cache.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't reuse fresh response when request contains Cache-Control: no-store.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache generates 504 status code when nothing is in cache and request contains Cache-Control: only-if-cached.", + "status": "FAIL", + "message": "assert_equals: Response status expected 504 but got 200" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/freshness.html", + "subtests": [ + { + "name": "HTTP cache reuses a response with a future Expires.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does not reuse a response with a past Expires.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not reuse a response with a present Expires.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not reuse a response with an invalid Expires.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache reuses a response with positive Cache-Control: max-age.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does not reuse a response with Cache-Control: max-age=0.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache reuses a response with positive Cache-Control: max-age and a past Expires.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a response with positive Cache-Control: max-age and an invalid Expires.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does not reuse a response with Cache-Control: max-age=0 and a future Expires.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not prefer Cache-Control: s-maxage over Cache-Control: max-age.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not reuse a response when the Age header is greater than its freshness lifetime.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not store a response with Cache-Control: no-store.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not store a response with Cache-Control: no-store, even with max-age and Expires.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache stores a response with Cache-Control: no-cache, but revalidates upon use.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache stores a response with Cache-Control: no-cache, but revalidates upon use, even with max-age and Expires.", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/heuristic.html", + "subtests": [ + { + "name": "HTTP cache reuses an unknown response with Last-Modified based upon heuristic freshness when Cache-Control: public is present.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does not reuse an unknown response with Last-Modified based upon heuristic freshness when Cache-Control: public is not present.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache reuses a 200 OK response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 203 Non-Authoritative Information response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 204 No Content response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 404 Not Found response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 405 Method Not Allowed response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 410 Gone response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 414 URI Too Long response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses a 501 Not Implemented response with Last-Modified based upon heuristic freshness.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache does not use a 201 Created response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not use a 202 Accepted response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not use a 403 Forbidden response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not use a 502 Bad Gateway response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not use a 503 Service Unavailable response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not use a 504 Gateway Timeout response with Last-Modified based upon heuristic freshness.", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/invalidate.html", + "subtests": [ + { + "name": "HTTP cache invalidates after a successful response from a POST", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache does not invalidate after a failed response from an unsafe request", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 3 but got 3" + }, + { + "name": "HTTP cache invalidates after a successful response from a PUT", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache invalidates after a successful response from a DELETE", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache invalidates after a successful response from an unknown method", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache invalidates Location URL after a successful response from a POST", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache does not invalidate Location URL after a failed response from an unsafe request", + "status": "FAIL", + "message": "assert_true: cached response used for request 3 expected true got false" + }, + { + "name": "HTTP cache invalidates Location URL after a successful response from a PUT", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache invalidates Location URL after a successful response from a DELETE", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache invalidates Location URL after a successful response from an unknown method", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache invalidates Content-Location URL after a successful response from a POST", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache does not invalidate Content-Location URL after a failed response from an unsafe request", + "status": "FAIL", + "message": "assert_true: cached response used for request 3 expected true got false" + }, + { + "name": "HTTP cache invalidates Content-Location URL after a successful response from a PUT", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache invalidates Content-Location URL after a successful response from a DELETE", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + }, + { + "name": "HTTP cache invalidates Content-Location URL after a successful response from an unknown method", + "status": "FAIL", + "message": "assert_equals: Response used expected 3 but got 1" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/partial.html", + "subtests": [ + { + "name": "HTTP cache stores partial content and reuses it.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache stores complete response and serves smaller ranges from it.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache stores partial response and serves smaller ranges from it.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache stores partial content and completes it.", + "status": "FAIL", + "message": "assert_equals: expected (string) \"bytes=5-\" but got (undefined) undefined" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/status.html", + "subtests": [ + { + "name": "HTTP cache goes to the network if it has a stale 200 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 200 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 203 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 203 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 204 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 204 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 299 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 299 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 400 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 400 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 404 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 404 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 410 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 410 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 499 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 499 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 500 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 500 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 502 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 502 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 503 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 503 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 504 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 504 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache goes to the network if it has a stale 599 response.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache avoids going to the network if it has a fresh 599 response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/http-cache/vary.html", + "subtests": [ + { + "name": "HTTP cache reuses Vary response when request matches.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache doesn't use Vary response when request doesn't match.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't use Vary response when request omits variant header.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't invalidate existing Vary response.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 3 but got 3" + }, + { + "name": "HTTP cache doesn't pay attention to headers not listed in Vary.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache reuses two-way Vary response when request matches.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache doesn't use two-way Vary response when request doesn't match.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't use two-way Vary response when request omits variant header.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache reuses three-way Vary response when request matches.", + "status": "FAIL", + "message": "assert_less_than: Response used expected a number less than 2 but got 2" + }, + { + "name": "HTTP cache doesn't use three-way Vary response when request doesn't match.", + "status": "PASS", + "message": null + }, + { + "name": "HTTP cache doesn't use three-way Vary response when request omits variant header.", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/image.html", + "subtests": [ + { + "name": "URL query: ", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=x/x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=image/gif", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=image/png", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=image/png;blah", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/importscripts.html", + "subtests": [ + { + "name": "Test importScripts()", + "status": "FAIL", + "message": "assert_equals: expected \"PASS\" but got \"FAIL: Content-Type missing\"" + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/parsing-nosniff.html", + "subtests": [ + { + "name": "URL query: first", + "status": "PASS", + "message": null + }, + { + "name": "URL query: uppercase", + "status": "PASS", + "message": null + }, + { + "name": "URL query: last", + "status": "PASS", + "message": null + }, + { + "name": "URL query: quoted", + "status": "PASS", + "message": null + }, + { + "name": "URL query: quoted-single", + "status": "PASS", + "message": null + }, + { + "name": "URL query: no-x", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/script.html", + "subtests": [ + { + "name": "URL query: ", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=x/x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/javascript", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/ecmascript", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/ecmascript;blah", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/stylesheet.html", + "subtests": [ + { + "name": "URL query: ", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=x", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=x/x", + "status": "FAIL", + "message": "assert_unreached: Unexpected load event Reached unreachable code" + }, + { + "name": "URL query: ?type=text/css", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/css;blah", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + }, + { + "test": "/fetch/nosniff/worker.html", + "subtests": [ + { + "name": "URL query: ", + "status": "FAIL", + "message": "assert_unreached: Unexpected message event Reached unreachable code" + }, + { + "name": "URL query: ?type=", + "status": "FAIL", + "message": "assert_unreached: Unexpected message event Reached unreachable code" + }, + { + "name": "URL query: ?type=x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=x/x", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/javascript", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/ecmascript", + "status": "PASS", + "message": null + }, + { + "name": "URL query: ?type=text/ecmascript;yay", + "status": "PASS", + "message": null + } + ], + "status": "OK", + "message": null + } + ] +} \ No newline at end of file