diff --git a/lib/web/fetch/index.js b/lib/web/fetch/index.js index e94f3593983..56e540d9d88 100644 --- a/lib/web/fetch/index.js +++ b/lib/web/fetch/index.js @@ -42,7 +42,10 @@ const { simpleRangeHeaderValue, buildContentRange, createInflate, - extractMimeType + extractMimeType, + hasAuthenticationEntry, + includesCredentials, + isTraversableNavigable } = require('./util') const assert = require('node:assert') const { safelyExtractBody, extractBody } = require('./body') @@ -1524,13 +1527,39 @@ async function httpNetworkOrCacheFetch ( httpRequest.headersList.delete('host', true) - // 20. If includeCredentials is true, then: + // 21. If includeCredentials is true, then: if (includeCredentials) { // 1. If the user agent is not configured to block cookies for httpRequest // (see section 7 of [COOKIES]), then: // TODO: credentials + // 2. If httpRequest’s header list does not contain `Authorization`, then: - // TODO: credentials + if (!httpRequest.headersList.contains('authorization', true)) { + // 1. Let authorizationValue be null. + let authorizationValue = null + + // 2. If there’s an authentication entry for httpRequest and either + // httpRequest’s use-URL-credentials flag is unset or httpRequest’s + // current URL does not include credentials, then set + // authorizationValue to authentication entry. + if (hasAuthenticationEntry(httpRequest) && ( + httpRequest.useURLCredentials === undefined || !includesCredentials(requestCurrentURL(httpRequest)) + )) { + // TODO + } else if (includesCredentials(requestCurrentURL(httpRequest)) && isAuthenticationFetch) { + // 3. Otherwise, if httpRequest’s current URL does include credentials + // and isAuthenticationFetch is true, set authorizationValue to + // httpRequest’s current URL, converted to an `Authorization` value + const { username, password } = requestCurrentURL(httpRequest) + authorizationValue = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}` + } + + // 4. If authorizationValue is non-null, then append (`Authorization`, + // authorizationValue) to httpRequest’s header list. + if (authorizationValue !== null) { + httpRequest.headersList.append('Authorization', authorizationValue, false) + } + } } // 21. If there’s a proxy-authentication entry, use it as appropriate. @@ -1612,10 +1641,48 @@ async function httpNetworkOrCacheFetch ( // 13. Set response’s request-includes-credentials to includeCredentials. response.requestIncludesCredentials = includeCredentials - // 14. If response’s status is 401, httpRequest’s response tainting is not - // "cors", includeCredentials is true, and request’s window is an environment - // settings object, then: - // TODO + // 14. If response’s status is 401, httpRequest’s response tainting is not "cors", + // includeCredentials is true, and request’s traversable for user prompts is + // a traversable navigable: + if (response.status === 401 && httpRequest.responseTainting !== 'cors' && includeCredentials && isTraversableNavigable(request.traversableForUserPrompts)) { + // 2. If request’s body is non-null, then: + if (request.body != null) { + // 1. If request’s body’s source is null, then return a network error. + if (request.body.source == null) { + return makeNetworkError('expected non-null body source') + } + + // 2. Set request’s body to the body of the result of safely extracting + // request’s body’s source. + request.body = safelyExtractBody(request.body.source)[0] + } + + // 3. If request’s use-URL-credentials flag is unset or isAuthenticationFetch is + // true, then: + if (request.useURLCredentials === undefined || isAuthenticationFetch) { + // 1. If fetchParams is canceled, then return the appropriate network error + // for fetchParams. + if (isCancelled(fetchParams)) { + return makeAppropriateNetworkError(fetchParams) + } + + // 2. Let username and password be the result of prompting the end user for a + // username and password, respectively, in request’s traversable for user prompts. + // TODO + + // 3. Set the username given request’s current URL and username. + // requestCurrentURL(request).username = TODO + + // 4. Set the password given request’s current URL and password. + // requestCurrentURL(request).password = TODO + } + + // 4. Set response to the result of running HTTP-network-or-cache fetch given + // fetchParams and true. + fetchParams.controller.connection.destroy() + + response = await httpNetworkOrCacheFetch(fetchParams, true) + } // 15. If response’s status is 407, then: if (response.status === 407) { diff --git a/lib/web/fetch/request.js b/lib/web/fetch/request.js index e3c11bc01ff..6ef40f99920 100644 --- a/lib/web/fetch/request.js +++ b/lib/web/fetch/request.js @@ -918,6 +918,8 @@ function makeRequest (init) { preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false, done: init.done ?? false, timingAllowFailed: init.timingAllowFailed ?? false, + useURLCredentials: init.useURLCredentials ?? undefined, + traversableForUserPrompts: init.traversableForUserPrompts ?? 'client', urlList: init.urlList, url: init.urlList[0], headersList: init.headersList diff --git a/lib/web/fetch/util.js b/lib/web/fetch/util.js index 775ef296db2..5e51bdd35aa 100644 --- a/lib/web/fetch/util.js +++ b/lib/web/fetch/util.js @@ -1429,6 +1429,28 @@ function getDecodeSplit (name, list) { return gettingDecodingSplitting(value) } +function hasAuthenticationEntry (request) { + return false +} + +/** + * @see https://url.spec.whatwg.org/#include-credentials + * @param {URL} url + */ +function includesCredentials (url) { + // A URL includes credentials if its username or password is not the empty string. + return !!(url.username && url.password) +} + +/** + * @see https://html.spec.whatwg.org/multipage/document-sequences.html#traversable-navigable + * @param {object|string} navigable + */ +function isTraversableNavigable (navigable) { + // TODO + return true +} + class EnvironmentSettingsObjectBase { get baseUrl () { return getGlobalOrigin() @@ -1491,5 +1513,8 @@ module.exports = { extractMimeType, getDecodeSplit, environmentSettingsObject, - isOriginIPPotentiallyTrustworthy + isOriginIPPotentiallyTrustworthy, + hasAuthenticationEntry, + includesCredentials, + isTraversableNavigable } diff --git a/lib/web/websocket/connection.js b/lib/web/websocket/connection.js index 06b62047e9c..4ecc8a195fc 100644 --- a/lib/web/websocket/connection.js +++ b/lib/web/websocket/connection.js @@ -33,7 +33,7 @@ function establishWebSocketConnection (url, protocols, client, handler, options) // 2. Let request be a new request, whose URL is requestURL, client is client, // service-workers mode is "none", referrer is "no-referrer", mode is // "websocket", credentials mode is "include", cache mode is "no-store" , - // and redirect mode is "error". + // redirect mode is "error", and use-URL-credentials flag is set. const request = makeRequest({ urlList: [requestURL], client, @@ -42,7 +42,8 @@ function establishWebSocketConnection (url, protocols, client, handler, options) mode: 'websocket', credentials: 'include', cache: 'no-store', - redirect: 'error' + redirect: 'error', + useURLCredentials: true }) // Note: undici extension, allow setting custom headers. diff --git a/test/web-platform-tests/expectation.json b/test/web-platform-tests/expectation.json index 6678260cab5..dc63a415cdd 100644 --- a/test/web-platform-tests/expectation.json +++ b/test/web-platform-tests/expectation.json @@ -638,7 +638,7 @@ "message": "promise_test: Unhandled rejection with value: object \"TypeError: fetch failed\"" }, { - "name": "Fetch http://web-platform.test:61273/fetch/api/resources/top.txt with no-cors mode", + "name": "Fetch http://web-platform.test:55268/fetch/api/resources/top.txt with no-cors mode", "success": false, "message": "assert_equals: Opaque filter: status is 0 expected 0 but got 200" } @@ -1320,7 +1320,8 @@ }, { "name": "url referrer", - "success": true + "success": false, + "message": "assert_equals: request's referer should be: http://web-platform.test:8000/fetch/api/basic/foo expected \"http://web-platform.test:8000/fetch/api/basic/foo\" but got \"http://web-platform.test:8000/fetch/api/basic/request-referrer.any.html\"" } ] }, @@ -2422,7 +2423,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "frame fetches with a \"frame\" Request.destination", @@ -2437,7 +2438,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "iframe fetches with a \"iframe\" Request.destination", @@ -2452,7 +2453,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "Background image fetches with an \"image\" Request.destination", @@ -2502,7 +2503,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "HTMLLinkElement with rel=prefetch fetches with an empty string Request.destination", @@ -2517,7 +2518,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "DedicatedWorker fetches with a \"worker\" Request.destination", @@ -2537,7 +2538,7 @@ { "name": "Initialize global state", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" }, { "name": "HTMLImageElement fetches with an \"image\" Request.destination", @@ -4021,7 +4022,8 @@ "cases": [ { "name": "Check request values when initialized from Request", - "success": true + "success": false, + "message": "assert_equals: Check referrer attribute expected \"http://web-platform.test:8000/\" but got \"about:client\"" }, { "name": "Check request values when initialized from Request and init values", @@ -4314,17 +4316,17 @@ { "name": "Request.isReloadNavigation is reset with non-empty RequestInit", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: navigator is not defined\"" + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Cannot read properties of undefined (reading 'getRegistration')\"" }, { "name": "Request.isHistoryNavigation is reset with non-empty RequestInit", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: navigator is not defined\"" + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Cannot read properties of undefined (reading 'getRegistration')\"" }, { "name": "Request.mode is reset with non-empty RequestInit when it's \"navigate\"", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: navigator is not defined\"" + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Cannot read properties of undefined (reading 'getRegistration')\"" } ] }, @@ -4802,13 +4804,12 @@ }, { "name": "Consume response's body: from text with correct multipart type to formData", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"TypeError: Failed to parse body as FormData.\"" + "success": true }, { "name": "Consume response's body: from text with correct multipart type to formData with BOM", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"TypeError: Failed to parse body as FormData.\"" + "message": "assert_equals: Retrieve and verify response's body expected \"--boundary-0.16075435275547334\\r\\nContent-Disposition: form-data;name=\\\"name\\\"\\r\\n\\r\\nquickfox\\r\\n--boundary-0.16075435275547334--\\r\\n\" but got \"--boundary-0.16075435275547334\\r\\nContent-Disposition: form-data;name=\\\"name\\\"\\r\\n\\r\\nquickfox\\r\\n--boundary-0.16075435275547334--\\r\\n\"" }, { "name": "Consume response's body: from text without correct multipart type to formData (error case)", @@ -4841,8 +4842,7 @@ }, { "name": "Consume response's body: from blob with correct multipart type to formData", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"TypeError: Failed to parse body as FormData.\"" + "success": true }, { "name": "Consume response's body: from blob without correct multipart type to formData (error case)", @@ -4867,7 +4867,7 @@ { "name": "Consume response's body: from FormData to blob", "success": false, - "message": "assert_equals: Blob body type should be computed from the response Content-Type expected \"multipart/form-data; boundary=----formdata-undici-081851221061\" but got \"multipart/form-data;boundary=----formdata-undici-081851221061\"" + "message": "assert_equals: Blob body type should be computed from the response Content-Type expected \"multipart/form-data; boundary=----formdata-undici-035234180410\" but got \"multipart/form-data;boundary=----formdata-undici-035234180410\"" }, { "name": "Consume response's body: from FormData to text", @@ -4917,8 +4917,7 @@ }, { "name": "Consume response's body: from stream with correct multipart type to formData", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"TypeError: Failed to parse body as FormData.\"" + "success": true }, { "name": "Consume response's body: from stream without correct multipart type to formData (error case)", @@ -4952,7 +4951,7 @@ { "name": "Consume response's body: from multipart form data blob to formData", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"TypeError: Failed to parse body as FormData.\"" + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: FileReader is not defined\"" } ] }, @@ -9454,7 +9453,7 @@ { "name": "referrer-no-referrer-service-worker", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" } ] }, @@ -9472,7 +9471,7 @@ { "name": "referrer-origin-service-worker", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" } ] }, @@ -9482,7 +9481,7 @@ { "name": "referrer-origin-when-cross-origin-service-worker", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" } ] }, @@ -9508,7 +9507,7 @@ { "name": "referrer-unsafe-url-service-worker", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'getRegistration')" } ] }, @@ -9523,8 +9522,17 @@ }, "redirect": { "redirect-back-to-original-origin.any.html": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "original => remote => original with mode: \"no-cors\"", + "success": true + }, + { + "name": "original => remote => original with mode: \"cors\"", + "success": true + } + ] }, "redirect-count.any.html": { "success": true, @@ -11547,18 +11555,15 @@ }, { "name": "Consuming the body of a resource with bad zstd content with arrayBuffer() should reject", - "success": false, - "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + "success": true }, { "name": "Consuming the body of a resource with bad zstd content with blob() should reject", - "success": false, - "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + "success": true }, { "name": "Consuming the body of a resource with bad zstd content with bytes() should reject", - "success": false, - "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + "success": true }, { "name": "Consuming the body of a resource with bad zstd content with formData() should reject", @@ -11566,13 +11571,11 @@ }, { "name": "Consuming the body of a resource with bad zstd content with json() should reject", - "success": false, - "message": "promise_rejects_js: function \"function() { throw e; }\" threw object \"SyntaxError: Unexpected token 'o', \"not actually zstd\" is not valid JSON\" (\"SyntaxError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + "success": true }, { "name": "Consuming the body of a resource with bad zstd content with text() should reject", - "success": false, - "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + "success": true } ] }, @@ -11591,13 +11594,11 @@ "cases": [ { "name": "large zstd data should be decompressed successfully", - "success": false, - "message": "assert_equals: uncompressed size should match expected 27000000 but got 2509" + "success": true }, { "name": "large zstd data should be decompressed successfully with byte stream", - "success": false, - "message": "assert_equals: we should have read the whole thing expected 27000000 but got 2509" + "success": true } ] }, @@ -11606,13 +11607,11 @@ "cases": [ { "name": "fetched zstd data with content type text should be decompressed.", - "success": false, - "message": "assert_equals: expected 10500 but got 25" + "success": true }, { "name": "fetched zstd data with content type octetstream should be decompressed.", - "success": false, - "message": "assert_equals: expected 10500 but got 25" + "success": true } ] }, @@ -12864,8 +12863,62 @@ ] }, "fetch.any.html": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "Same-origin fetch with a 'Cross-Origin-Resource-Policy: same-origin' response header.", + "success": true + }, + { + "name": "Same-origin fetch with a 'Cross-Origin-Resource-Policy: same-site' response header.", + "success": true + }, + { + "name": "Cross-origin cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' response header.", + "success": true + }, + { + "name": "Cross-origin cors fetch with a 'Cross-Origin-Resource-Policy: same-site' response header.", + "success": true + }, + { + "name": "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' response header.", + "success": false, + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-site' response header.", + "success": false, + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Cross-scheme (HTTP to HTTPS) no-cors fetch to a same-site URL with a 'Cross-Origin-Resource-Policy: same-site' response header.", + "success": true + }, + { + "name": "Cross-origin no-cors fetch to a same-site URL with a 'Cross-Origin-Resource-Policy: same-origin' response header.", + "success": true + }, + { + "name": "Valid cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-site' response header.", + "success": false, + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' response header after a redirection.", + "success": false, + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + }, + { + "name": "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' response header after a cross-origin redirection.", + "success": true + }, + { + "name": "Cross-origin no-cors fetch with a 'Cross-Origin-Resource-Policy: same-origin' redirect response header.", + "success": false, + "message": "assert_unreached: Should have rejected: undefined Reached unreachable code" + } + ] }, "fetch.https.any.html": { "success": true, @@ -13676,9 +13729,89 @@ "message": "assert_throws_js: function \"() => fetchLater()\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" }, { - "name": "fetchLater() throws TypeError on non-HTTPS URL.", + "name": "fetchLater() with same-origin (https) URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with http://localhost URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with https://localhost URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with http://127.0.0.1 URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with https://127.0.0.1 URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with http://[::1] URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with https://[::1] URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() with https://example.com URL does not throw.", + "success": false, + "message": "fetchLater is not defined" + }, + { + "name": "fetchLater() throws SecurityError on non-trustworthy http URL.", + "success": false, + "message": "assert_throws_dom: should throw SecurityError for insecure http url http://example.com function \"() => fetchLater(httpUrl)\" threw object \"ReferenceError: fetchLater is not defined\" that is not a DOMException SecurityError: property \"code\" is equal to undefined, expected 18" + }, + { + "name": "fetchLater() throws TypeError on file:// scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('file://tmp')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on ftp:// scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('ftp://example.com')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on ssh:// scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('ssh://example.com')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on wss:// scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('wss://example.com')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on about: scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('about:blank')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on javascript: scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater(`javascript:alert('');`)\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on data: scheme.", + "success": false, + "message": "assert_throws_js: function \"() => fetchLater('data:text/plain,Hello')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + }, + { + "name": "fetchLater() throws TypeError on blob: scheme.", "success": false, - "message": "assert_throws_js: function \"() => fetchLater('http://www.google.com')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" + "message": "assert_throws_js: function \"() => fetchLater('blob:https://example.com/some-uuid')\" threw object \"ReferenceError: fetchLater is not defined\" (\"ReferenceError\") expected instance of function \"function TypeError() { [native code] }\" (\"TypeError\")" }, { "name": "fetchLater() throws RangeError on negative activateAfter.", @@ -15123,7 +15256,7 @@ { "name": "Response with Cache-Control: max-age=2592000, public and Pragma: no-cache should be cached", "success": false, - "message": "assert_equals: Responses should be identical, indicating caching expected \"Timestamp: 1756778464.9260645\" but got \"Timestamp: 1756778464.9230638\"" + "message": "assert_equals: Responses should be identical, indicating caching expected \"Timestamp: 1768756436.8170867\" but got \"Timestamp: 1768756436.8148103\"" } ] }, @@ -22838,8 +22971,207 @@ }, "origin": { "assorted.window.html": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "Origin header and 308 redirect", + "success": false, + "message": "assert_equals: expected \"null\" but got \"http://web-platform.test:8000\"" + }, + { + "name": "Origin header and GET navigation", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST navigation", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin navigation with Referrer-Policy no-referrer", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer", + "success": false, + "message": "assert_equals: expected \"null\" but got \"\"" + }, + { + "name": "Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"\"" + }, + { + "name": "Origin header and GET same-origin fetch cors mode with Referrer-Policy no-referrer", + "success": true + }, + { + "name": "Origin header and POST cross-origin navigation with Referrer-Policy no-referrer", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer", + "success": false, + "message": "assert_equals: expected \"null\" but got \"\"" + }, + { + "name": "Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"\"" + }, + { + "name": "Origin header and GET cross-origin fetch cors mode with Referrer-Policy no-referrer", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"no Origin header\"" + }, + { + "name": "Origin header and POST same-origin navigation with Referrer-Policy same-origin", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin fetch no-cors mode with Referrer-Policy same-origin", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"\"" + }, + { + "name": "Origin header and POST same-origin fetch cors mode with Referrer-Policy same-origin", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"\"" + }, + { + "name": "Origin header and GET same-origin fetch cors mode with Referrer-Policy same-origin", + "success": true + }, + { + "name": "Origin header and POST cross-origin navigation with Referrer-Policy same-origin", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy same-origin", + "success": false, + "message": "assert_equals: expected \"null\" but got \"\"" + }, + { + "name": "Origin header and POST cross-origin fetch cors mode with Referrer-Policy same-origin", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"\"" + }, + { + "name": "Origin header and GET cross-origin fetch cors mode with Referrer-Policy same-origin", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"no Origin header\"" + }, + { + "name": "Origin header and POST same-origin navigation with Referrer-Policy origin-when-cross-origin", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin", + "success": true + }, + { + "name": "Origin header and POST same-origin fetch cors mode with Referrer-Policy origin-when-cross-origin", + "success": true + }, + { + "name": "Origin header and GET same-origin fetch cors mode with Referrer-Policy origin-when-cross-origin", + "success": true + }, + { + "name": "Origin header and POST cross-origin navigation with Referrer-Policy origin-when-cross-origin", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy origin-when-cross-origin", + "success": true + }, + { + "name": "Origin header and POST cross-origin fetch cors mode with Referrer-Policy origin-when-cross-origin", + "success": true + }, + { + "name": "Origin header and GET cross-origin fetch cors mode with Referrer-Policy origin-when-cross-origin", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"no Origin header\"" + }, + { + "name": "Origin header and POST same-origin navigation with Referrer-Policy no-referrer-when-downgrade", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": true + }, + { + "name": "Origin header and POST same-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": true + }, + { + "name": "Origin header and GET same-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": true + }, + { + "name": "Origin header and POST cross-origin navigation with Referrer-Policy no-referrer-when-downgrade", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": true + }, + { + "name": "Origin header and POST cross-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": true + }, + { + "name": "Origin header and GET cross-origin fetch cors mode with Referrer-Policy no-referrer-when-downgrade", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"no Origin header\"" + }, + { + "name": "Origin header and POST same-origin navigation with Referrer-Policy unsafe-url", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST same-origin fetch no-cors mode with Referrer-Policy unsafe-url", + "success": true + }, + { + "name": "Origin header and POST same-origin fetch cors mode with Referrer-Policy unsafe-url", + "success": true + }, + { + "name": "Origin header and GET same-origin fetch cors mode with Referrer-Policy unsafe-url", + "success": true + }, + { + "name": "Origin header and POST cross-origin navigation with Referrer-Policy unsafe-url", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" + }, + { + "name": "Origin header and POST cross-origin fetch no-cors mode with Referrer-Policy unsafe-url", + "success": true + }, + { + "name": "Origin header and POST cross-origin fetch cors mode with Referrer-Policy unsafe-url", + "success": true + }, + { + "name": "Origin header and GET cross-origin fetch cors mode with Referrer-Policy unsafe-url", + "success": false, + "message": "assert_equals: expected \"http://web-platform.test:8000\" but got \"no Origin header\"" + } + ] } }, "private-network-access": { @@ -22864,39 +23196,8 @@ "cases": [] }, "fetch-from-treat-as-public.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public-address to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public-address to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public-address to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public-address to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public-address to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public-address to public: no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "fetch.tentative.https.window.html?include=baseline": { "success": false, @@ -22943,839 +23244,72 @@ "cases": [] }, "nested-worker.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "nested-worker.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "preflight-cache.https.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "redirect.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to private to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local to private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private to local: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local to private: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private to local: failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private to local: failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private to local: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: no-cors failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: no-cors failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local to private: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin) to private: failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin) to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin) to private: no-cors failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin) to private: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: no-cors failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: no-cors failed second preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local: no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local (same-origin): failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local (same-origin): success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local (same-origin): no-cors failed first preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private to local (same-origin): no-cors success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-background-fetch.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-fetch-document-treat-as-public.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-fetch-document.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-fetch.tentative.https.window.html?1-8": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-fetch.tentative.https.window.html?9-last": { - "success": true, - "cases": [ - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker-update.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "update public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "update public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "update public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "service-worker.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker-blob-fetch.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker-blob-fetch.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local https to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private https to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local https to local https: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker-fetch.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker-fetch.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local https to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private https to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "shared-worker.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "websocket.tentative.https.window.html": { "success": false, @@ -23810,294 +23344,28 @@ "cases": [] }, "worker-blob-fetch.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local https to local https: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to private https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "worker-fetch.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "worker-fetch.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "local to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "local https to local https: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "private https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to private https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public https to local https: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "worker.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "worker.tentative.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failure.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "public to public: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "xhr-from-treat-as-public.tentative.https.window.html": { - "success": true, - "cases": [ - { - "name": "treat-as-public to local: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to local (same-origin): no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: failed preflight.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to private: success.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - }, - { - "name": "treat-as-public to public: no preflight required.", - "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: document is not defined\"" - } - ] + "success": false, + "cases": [] }, "xhr.https.tentative.window.html?include=from-local": { "success": false, @@ -24122,13 +23390,11 @@ "cases": [ { "name": "A simple blob range request.", - "success": false, - "message": "assert_equals: Content-Length is 12 expected \"13\" but got \"12\"" + "success": true }, { "name": "A blob range request with no type.", - "success": false, - "message": "assert_equals: Content-Length is 12 expected \"13\" but got \"12\"" + "success": true }, { "name": "A blob range request with no end.", @@ -24137,33 +23403,27 @@ }, { "name": "A blob range request with no start.", - "success": false, - "message": "assert_equals: Content-Length is 7 expected \"8\" but got \"7\"" + "success": true }, { "name": "A simple blob range request with whitespace.", - "success": false, - "message": "assert_equals: Content-Length is 12 expected \"13\" but got \"12\"" + "success": true }, { "name": "Blob content with short content and a large range end", - "success": false, - "message": "assert_equals: Content-Length is 8 expected \"9\" but got \"8\"" + "success": true }, { "name": "Blob content with short content and a range end matching content length", - "success": false, - "message": "assert_equals: Content-Length is 8 expected \"9\" but got \"8\"" + "success": true }, { "name": "Blob range with whitespace before and after hyphen", - "success": false, - "message": "assert_equals: Content-Length is 5 expected \"6\" but got \"5\"" + "success": true }, { "name": "Blob range with whitespace after hyphen", - "success": false, - "message": "assert_equals: Content-Length is 4 expected \"5\" but got \"4\"" + "success": true }, { "name": "Blob range with whitespace around equals sign", @@ -24706,7 +23966,7 @@ { "name": "Only blocks dangling markup requests", "success": false, - "message": "navigator is not defined" + "message": "Cannot read properties of undefined (reading 'register')" } ] }, @@ -24873,7 +24133,7 @@ { "name": "Second fetch returns same response", "success": false, - "message": "promise_test: Unhandled rejection with value: object \"ReferenceError: navigator is not defined\"" + "message": "promise_test: Unhandled rejection with value: object \"TypeError: Cannot read properties of undefined (reading 'register')\"" } ] }, @@ -24883,7 +24143,7 @@ { "name": "Second fetch returns same response", "success": false, - "message": "assert_equals: expected \"ohqqejvmbaayfsbxnlht\" but got \"xbssfkdevkjnzvyehxux\"" + "message": "assert_equals: expected \"qoidijwtsfvgrbpjvqow\" but got \"pyimmkhbwsuwcvgrysyj\"" } ] }, @@ -36476,8 +35736,7 @@ "cases": [ { "name": "HTTP basic authentication should work with WebSockets", - "success": false, - "message": "assert_unreached: open should succeed Reached unreachable code" + "success": true } ] }, @@ -37784,8 +37043,7 @@ "cases": [ { "name": "close-multiple", - "success": false, - "message": "assert_equals: expected 1 but got 2" + "success": true } ] }, @@ -37794,8 +37052,7 @@ "cases": [ { "name": "close-multiple", - "success": false, - "message": "assert_equals: expected 1 but got 2" + "success": true } ] }, @@ -37804,8 +37061,7 @@ "cases": [ { "name": "close-nested", - "success": false, - "message": "assert_equals: expected 1 but got 2" + "success": true } ] }, @@ -37814,8 +37070,7 @@ "cases": [ { "name": "close-nested", - "success": false, - "message": "assert_equals: expected 1 but got 2" + "success": true } ] }, @@ -39682,40 +38937,366 @@ "stream": { "tentative": { "abort.any.html?wpt_flags=h2": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "abort before constructing should prevent connection", + "success": true + }, + { + "name": "abort during handshake should work", + "success": false, + "message": "promise_rejects_dom: opened should reject function \"function() { throw e; }\" threw object \"WebSocketError: Socket never opened\" that is not a DOMException AbortError: property \"code\" is equal to 0, expected 20" + }, + { + "name": "abort after connect should do nothing", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "abort.any.html?wss": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "abort before constructing should prevent connection", + "success": true + }, + { + "name": "abort during handshake should work", + "success": false, + "message": "promise_rejects_dom: opened should reject function \"function() { throw e; }\" threw object \"WebSocketError: Socket never opened\" that is not a DOMException AbortError: property \"code\" is equal to 0, expected 20" + }, + { + "name": "abort after connect should do nothing", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "backpressure-receive.any.html?wpt_flags=h2": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "backpressure should be applied to received messages", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "backpressure-receive.any.html?wss": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "backpressure should be applied to received messages", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "backpressure-send.any.html?wpt_flags=h2": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "backpressure should be applied to sent messages", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "backpressure-send.any.html?wss": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "backpressure should be applied to sent messages", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "close.any.html?default": { "success": false, "cases": [] }, "close.any.html?wpt_flags=h2": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "close code should be sent to server and reflected back", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "no close argument should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code with empty reason should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code with non-empty reason should set code to 1000", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close(true) should throw a TypeError", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with an overlong reason should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close during handshake should work", + "success": false, + "message": "Cannot read properties of undefined (reading 'closingInfo')" + }, + { + "name": "close() with invalid code 999 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 1001 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 2999 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 5000 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "closing the writable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writer close() promise should not resolve until handshake completes", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "incomplete closing handshake should be considered unclean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with attributes not wrapped in a WebSocketError should be ignored", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a code should send that code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a code and reason should use them", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a reason but no code should default the close code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a DOMException not set code or reason", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with attributes not wrapped in a WebSocketError should be ignored", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a code should send that code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a code and reason should use them", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a reason but no code should default the close code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a DOMException not set code or reason", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "close.any.html?wss": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "close code should be sent to server and reflected back", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "no close argument should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code with empty reason should send empty Close frame", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "unspecified close code with non-empty reason should set code to 1000", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close(true) should throw a TypeError", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with an overlong reason should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close during handshake should work", + "success": false, + "message": "Cannot read properties of undefined (reading 'closingInfo')" + }, + { + "name": "close() with invalid code 999 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 1001 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 2999 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "close() with invalid code 5000 should throw", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "closing the writable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writer close() promise should not resolve until handshake completes", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "incomplete closing handshake should be considered unclean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with attributes not wrapped in a WebSocketError should be ignored", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a code should send that code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a code and reason should use them", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a reason but no code should default the close code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "aborting the writable with a DOMException not set code or reason", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable should result in a clean close", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with attributes not wrapped in a WebSocketError should be ignored", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a code should send that code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a code and reason should use them", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a reason but no code should default the close code", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "canceling the readable with a DOMException not set code or reason", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "constructor.any.html?wpt_flags=h2": { "success": false, @@ -39844,12 +39425,74 @@ ] }, "write.any.html?wpt_flags=h2": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "a write that was incomplete at close time should reject", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "garbage collection after close with a pending write promise should not crash", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a value that cannot be stringified should cause a rejection", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a resizable ArrayBuffer should be rejected", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a view on a shared buffer should be rejected", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "Garbage collecting a WebSocket stream doesn't crash while write promise is pending", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] }, "write.any.html?wss": { - "success": false, - "cases": [] + "success": true, + "cases": [ + { + "name": "a write that was incomplete at close time should reject", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "garbage collection after close with a pending write promise should not crash", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a value that cannot be stringified should cause a rejection", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a resizable ArrayBuffer should be rejected", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "writing a view on a shared buffer should be rejected", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + }, + { + "name": "Garbage collecting a WebSocket stream doesn't crash while write promise is pending", + "success": false, + "message": "promise_test: Unhandled rejection with value: object \"WebSocketError: Socket never opened\"" + } + ] } } }, diff --git a/test/web-platform-tests/wpt-runner.mjs b/test/web-platform-tests/wpt-runner.mjs index 378b79b5977..b9bb94c2346 100644 --- a/test/web-platform-tests/wpt-runner.mjs +++ b/test/web-platform-tests/wpt-runner.mjs @@ -13,6 +13,7 @@ import * as jsondiffpatch from 'jsondiffpatch' const WPT_DIR = join(import.meta.dirname, 'wpt') const EXPECTATION_PATH = join(import.meta.dirname, 'expectation.json') +const CA_CERT_PATH = join(import.meta.dirname, 'runner/certs/cacert.pem') const log = debuglog('UNDICI_WPT') @@ -76,7 +77,8 @@ function runSingleTest (url, options, expectation, timeout = 10000) { stdio: ['ignore', 'pipe', 'pipe'], env: { ...process.env, - NO_COLOR: '1' + NO_COLOR: '1', + NODE_EXTRA_CA_CERTS: CA_CERT_PATH } })