websockets

edit

WPT coverage of the tests of websockets at the revision 5602b0f210e3. The tests link to their results in the browsers on wpt.fyi. The tentative tests (experimental features) and the reftests are listed separately from the stable tests.

GroupPassingTestsDisabledPass rate
Stable198204097%
Tentative01200%
Reftests000–
All198216092%

Failure reasons

The tests that do not pass (failing or disabled), by kind of reason. A test with several reasons counts once per kind.

  • TEST BUG: 1
  • NOT IMPLEMENTED: 14
  • TEST RUNNER: 1
  • OUT OF SCOPE: 2

Stable tests

TestResultSubtestsKindDescription
Close-1000-reason.any.jsPass6 / 6
Close-1000-verify-code.any.jsPass6 / 6
Close-1000.any.jsPass6 / 6
Close-1005-verify-code.any.jsPass6 / 6
Close-1005.any.jsPass6 / 6
Close-2999-reason.any.jsPass6 / 6
Close-3000-reason.any.jsPass6 / 6
Close-3000-verify-code.any.jsPass6 / 6
Close-4999-reason.any.jsPass6 / 6
Close-Reason-124Bytes.any.jsPass6 / 6
Close-delayed.any.jsPass6 / 6
Close-onlyReason.any.jsPass6 / 6
Close-readyState-Closed.any.jsPass6 / 6
Close-readyState-Closing.any.jsPass6 / 6
Close-reason-unpaired-surrogates.any.jsPass6 / 6
Close-server-initiated-close.any.jsPass6 / 6
Close-undefined.any.jsPass6 / 6
Create-asciiSep-protocol-string.any.jsPass6 / 6
Create-blocked-port.any.jsFail670 / 672TEST RUNNERMETA: pac (the proxy auto-config resources/https-proxy.sub.pac) is not supported: bad-port-<port>.wpt is not routed to the WPT server, so the Basic check WebSocket to an allowed port fails
Create-extensions-empty.any.jsPass6 / 6
Create-http-urls.any.jsPass2 / 2
Create-invalid-urls.any.jsPass16 / 16
Create-non-absolute-url.any.jsPass10 / 10
Create-nonAscii-protocol-string.any.jsPass6 / 6
Create-on-worker-shutdown.any.jsPass2 / 2
Create-protocol-with-space.any.jsPass6 / 6
Create-protocols-repeated-case-insensitive.any.jsPass6 / 6
Create-protocols-repeated.any.jsPass6 / 6
Create-url-with-space.any.jsPass6 / 6
Create-url-with-windows-1252-encoding.htmlPass1 / 1
Create-valid-url-array-protocols.any.jsPass6 / 6
Create-valid-url-binaryType-blob.any.jsPass6 / 6
Create-valid-url-protocol-empty.any.jsPass6 / 6
Create-valid-url-protocol-setCorrectly.any.jsPass6 / 6
Create-valid-url-protocol-string.any.jsPass6 / 6
Create-valid-url-protocol.any.jsPass6 / 6
Create-valid-url.any.jsPass6 / 6
Send-0byte-data.any.jsPass6 / 6
Send-65K-data.any.jsPass6 / 6
Send-before-open.any.jsPass6 / 6
Send-binary-65K-arraybuffer.any.jsPass6 / 6
Send-binary-arraybuffer.any.jsPass6 / 6
Send-binary-arraybufferview-float16.any.jsPass6 / 6
Send-binary-arraybufferview-float32.any.jsPass6 / 6
Send-binary-arraybufferview-float64.any.jsPass6 / 6
Send-binary-arraybufferview-int16-offset.any.jsPass6 / 6
Send-binary-arraybufferview-int32.any.jsPass6 / 6
Send-binary-arraybufferview-int8.any.jsPass6 / 6
Send-binary-arraybufferview-uint16-offset-length.any.jsPass6 / 6
Send-binary-arraybufferview-uint32-offset.any.jsPass6 / 6
Send-binary-arraybufferview-uint8-offset-length.any.jsPass6 / 6
Send-binary-arraybufferview-uint8-offset.any.jsPass6 / 6
Send-binary-blob.any.jsPass6 / 6
Send-data.any.jsPass6 / 6
Send-data.worker.jsPass3 / 3
Send-null.any.jsPass6 / 6
Send-paired-surrogates.any.jsPass6 / 6
Send-unicode-data.any.jsPass6 / 6
Send-unpaired-surrogates.any.jsPass6 / 6
back-forward-cache-with-closed-websocket-connection.window.jsPass1 / 1
back-forward-cache-with-open-websocket-connection-and-close-it-in-pagehide.window.jsPass1 / 1
back-forward-cache-with-open-websocket-connection.window.jsPass1 / 1
basic-auth.any.jsPass6 / 6
binary/001.htmlPass3 / 3
binary/002.htmlPass3 / 3
binary/004.htmlPass3 / 3
binary/005.htmlPass3 / 3
binaryType-wrong-value.any.jsPass6 / 6
bufferedAmount-unchanged-by-sync-xhr.any.jsPass9 / 9
close-invalid.any.jsPass36 / 36
closing-handshake/002.htmlPass3 / 3
closing-handshake/003.htmlPass3 / 3
closing-handshake/004.htmlPass3 / 3
constructor.any.jsPass6 / 6
constructor/001.htmlPass3 / 3
constructor/004.htmlPass483 / 483
constructor/005.htmlPass3 / 3
constructor/006.htmlPass3 / 3
constructor/007.htmlPass3 / 3
constructor/008.htmlPass8 / 8
constructor/009.htmlPass3 / 3
constructor/010.htmlPass3 / 3
constructor/011.htmlPass3 / 3
constructor/012.htmlPass3 / 3
constructor/013.htmlPass3 / 3
constructor/014.htmlPass2 / 2
constructor/016.htmlPass3 / 3
constructor/017.htmlPass6 / 6
constructor/018.htmlPass3 / 3
constructor/019.htmlPass3 / 3
constructor/020.htmlPass3 / 3
constructor/021.htmlPass3 / 3
constructor/022.htmlPass3 / 3
constructor/option-bag.any.jsFail0 / 8NOT IMPLEMENTEDthe options dictionary of the constructor (new WebSocket(url, { protocols })), a proposal that is not in the WebSockets Standard
constructor/target-address-space.any.jsFail0 / 24NOT IMPLEMENTEDthe options dictionary of the constructor and its targetAddressSpace member (Local Network Access)
constructor/third-param-ignored.any.jsPass18 / 18
cookies/001.htmlPass3 / 3
cookies/002.htmlPass3 / 3
cookies/003.htmlPass3 / 3
cookies/004.htmlPass2 / 2
cookies/005.htmlPass2 / 2
cookies/006.htmlPass3 / 3
cookies/007.htmlPass3 / 3
cookies/cross-origin-cookie-set.htmlFail0 / 1TEST BUGthe cookie without SameSite attribute set by the response of a cross-site WebSocket handshake is Lax by default, so it is not stored (fails in Chrome and Safari, which also treat the cookies as Lax by default)
cookies/third-party-cookie-accepted.https.htmlPass1 / 1
eventhandlers.any.jsPass24 / 24
extended-payload-length.htmlPass12 / 12
idlharness.any.jsPass124 / 124
interfaces/CloseEvent/clean-close.htmlPass3 / 3
interfaces/CloseEvent/constructor.htmlPass2 / 2
interfaces/CloseEvent/historical.htmlPass1 / 1
interfaces/WebSocket/bufferedAmount/bufferedAmount-arraybuffer.htmlPass3 / 3
interfaces/WebSocket/bufferedAmount/bufferedAmount-blob.htmlPass3 / 3
interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-getter.htmlPass2 / 2
interfaces/WebSocket/bufferedAmount/bufferedAmount-defineProperty-setter.htmlPass2 / 2
interfaces/WebSocket/bufferedAmount/bufferedAmount-deleting.htmlPass2 / 2
interfaces/WebSocket/bufferedAmount/bufferedAmount-getting.htmlPass3 / 3
interfaces/WebSocket/bufferedAmount/bufferedAmount-initial.htmlPass2 / 2
interfaces/WebSocket/bufferedAmount/bufferedAmount-large.htmlPass3 / 3
interfaces/WebSocket/bufferedAmount/bufferedAmount-readonly.htmlPass2 / 2
interfaces/WebSocket/bufferedAmount/bufferedAmount-unicode.htmlPass3 / 3
interfaces/WebSocket/close/close-basic.htmlPass2 / 2
interfaces/WebSocket/close/close-connecting-async.any.jsPass6 / 6
interfaces/WebSocket/close/close-connecting.htmlPass2 / 2
interfaces/WebSocket/close/close-multiple.htmlPass2 / 2
interfaces/WebSocket/close/close-nested.htmlPass2 / 2
interfaces/WebSocket/close/close-replace.htmlPass2 / 2
interfaces/WebSocket/close/close-return.htmlPass2 / 2
interfaces/WebSocket/constants/001.htmlPass8 / 8
interfaces/WebSocket/constants/002.htmlPass8 / 8
interfaces/WebSocket/constants/003.htmlPass8 / 8
interfaces/WebSocket/constants/004.htmlPass16 / 16
interfaces/WebSocket/constants/005.htmlPass8 / 8
interfaces/WebSocket/constants/006.htmlPass8 / 8
interfaces/WebSocket/events/001.htmlPass12 / 12
interfaces/WebSocket/events/002.htmlPass12 / 12
interfaces/WebSocket/events/003.htmlPass2 / 2
interfaces/WebSocket/events/004.htmlPass2 / 2
interfaces/WebSocket/events/006.htmlPass2 / 2
interfaces/WebSocket/events/007.htmlPass3 / 3
interfaces/WebSocket/events/008.htmlPass2 / 2
interfaces/WebSocket/events/009.htmlPass2 / 2
interfaces/WebSocket/events/010.htmlPass8 / 8
interfaces/WebSocket/events/011.htmlPass8 / 8
interfaces/WebSocket/events/012.htmlPass8 / 8
interfaces/WebSocket/events/013.htmlPass8 / 8
interfaces/WebSocket/events/014.htmlPass8 / 8
interfaces/WebSocket/events/015.htmlPass3 / 3
interfaces/WebSocket/events/016.htmlPass3 / 3
interfaces/WebSocket/events/017.htmlPass3 / 3
interfaces/WebSocket/events/018.htmlPass3 / 3
interfaces/WebSocket/events/019.htmlPass8 / 8
interfaces/WebSocket/events/020.htmlPass2 / 2
interfaces/WebSocket/extensions/001.htmlPass2 / 2
interfaces/WebSocket/protocol/protocol-initial.htmlPass2 / 2
interfaces/WebSocket/readyState/001.htmlPass2 / 2
interfaces/WebSocket/readyState/002.htmlPass2 / 2
interfaces/WebSocket/readyState/003.htmlPass2 / 2
interfaces/WebSocket/readyState/004.htmlPass2 / 2
interfaces/WebSocket/readyState/005.htmlPass2 / 2
interfaces/WebSocket/readyState/006.htmlPass2 / 2
interfaces/WebSocket/readyState/007.htmlPass2 / 2
interfaces/WebSocket/readyState/008.htmlPass2 / 2
interfaces/WebSocket/send/001.htmlPass2 / 2
interfaces/WebSocket/send/002.htmlPass2 / 2
interfaces/WebSocket/send/003.htmlPass2 / 2
interfaces/WebSocket/send/004.htmlPass6 / 6
interfaces/WebSocket/send/005.htmlPass2 / 2
interfaces/WebSocket/send/006.htmlPass3 / 3
interfaces/WebSocket/send/007.htmlPass3 / 3
interfaces/WebSocket/send/008.htmlPass2 / 2
interfaces/WebSocket/send/009.htmlPass3 / 3
interfaces/WebSocket/send/010.htmlPass22 / 22
interfaces/WebSocket/send/011.htmlPass3 / 3
interfaces/WebSocket/send/012.htmlPass3 / 3
interfaces/WebSocket/url/001.htmlPass2 / 2
interfaces/WebSocket/url/002.htmlPass2 / 2
interfaces/WebSocket/url/003.htmlPass2 / 2
interfaces/WebSocket/url/004.htmlPass2 / 2
interfaces/WebSocket/url/005.htmlPass2 / 2
interfaces/WebSocket/url/006.htmlPass2 / 2
interfaces/WebSocket/url/resolve.htmlPass2 / 2
keeping-connection-open/001.htmlPass3 / 3
mixed-content.https.any.jsPass3 / 3
multi-globals/message-received.htmlPass2 / 2
multi-globals/url-parsing/url-parsing.htmlPass1 / 1
opening-handshake/001.htmlPass3 / 3
opening-handshake/002.htmlPass3 / 3
opening-handshake/003-sets-origin.worker.jsPass1 / 1
opening-handshake/003.htmlPass2 / 2
opening-handshake/005.htmlPass2 / 2
opening-handshake/006.htmlPass2 / 2
opening-handshake/received-301-code.htmlPass1 / 1
referrer.any.jsPass2 / 2
remove-own-iframe-during-onerror.window.jsPass3 / 3
security/001.htmlPass2 / 2
security/002.htmlPass2 / 2
send-data-isolation.sub.htmlPass3 / 3
send-many-64K-messages-with-backpressure.any.jsPass9 / 9
unload-a-document/001.htmlPass3 / 3
unload-a-document/002.htmlFail0 / 3OUT OF SCOPEthe test expects the popup to be restored from the back/forward cache by history.back(); the popup is opened without noopener, and the back/forward cache does not keep the documents of a popup that its opener can script (as in Chromium), so it is loaded again and reports that the document was discarded
unload-a-document/003.htmlPass1 / 1
unload-a-document/004.htmlFail0 / 1OUT OF SCOPEthe test expects the document of the iframe to be restored from the back/forward cache by history.back(); as in the browsers, only the documents of the top-level traversables are kept in the back/forward cache, so the document of the iframe is loaded again and reports that it was discarded
unload-a-document/005.htmlPass3 / 3

Tentative tests

TestResultSubtestsKindDescription
back-forward-cache-closes-open-websocket-connection.tentative.window.jsFail0 / 1NOT IMPLEMENTEDthe tentative tests expect the behaviors of Chromium: a page served with Cache-Control: no-store is kept in the back/forward cache, and an open WebSocket is closed when its page enters it. As in the other browsers, a document whose response has Cache-Control: no-store is not cached, and a WebSocket that is still connecting or open once the pagehide event handlers ran makes the document unsalvageable (https://html.spec.whatwg.org/multipage/document-lifecycle.html#unloading-document-cleanup-steps), so the BFCache executor reports a failed precondition
back-forward-cache-with-closed-websocket-connection-ccns.tentative.window.jsFail0 / 1NOT IMPLEMENTEDthe tentative tests expect the behaviors of Chromium: a page served with Cache-Control: no-store is kept in the back/forward cache, and an open WebSocket is closed when its page enters it. As in the other browsers, a document whose response has Cache-Control: no-store is not cached, and a WebSocket that is still connecting or open once the pagehide event handlers ran makes the document unsalvageable (https://html.spec.whatwg.org/multipage/document-lifecycle.html#unloading-document-cleanup-steps), so the BFCache executor reports a failed precondition
back-forward-cache-with-open-websocket-connection-ccns.tentative.window.jsFail0 / 1NOT IMPLEMENTEDthe tentative tests expect the behaviors of Chromium: a page served with Cache-Control: no-store is kept in the back/forward cache, and an open WebSocket is closed when its page enters it. As in the other browsers, a document whose response has Cache-Control: no-store is not cached, and a WebSocket that is still connecting or open once the pagehide event handlers ran makes the document unsalvageable (https://html.spec.whatwg.org/multipage/document-lifecycle.html#unloading-document-cleanup-steps), so the BFCache executor reports a failed precondition
stream/tentative/abort.any.jsFail0 / 30NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/backpressure-receive.any.jsFail0 / 6NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/backpressure-send.any.jsFail0 / 6NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/close.any.jsFail0 / 243NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/constructor.any.jsFail0 / 48NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/read.any.jsFail0 / 9NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/remote-close.any.jsFail0 / 63NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/websocket-error.any.jsFail0 / 30NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)
stream/tentative/write.any.jsFail0 / 54NOT IMPLEMENTEDWebSocketStream and WebSocketError (a proposal of the WebSockets Standard)