WPT
wpt / webrtc / RTCPeerConnection-createDataChannel.html?rest
Spec: WebRTC ↗
Runs: Chrome 155.0.8039.0 (wpt@6ec9fd59f, 2026-09-03) | Firefox 157.0a1 (wpt@6ec9fd59f, 2026-09-03) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-795e1 (wpt@7e3d005d7, 2026-09-03) | Servo Servo 0.6 (wpt@09159dcb3, 2026-09-02) | Blitz 188486089 (wpt@a95401e4e, 2026-09-02)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 48/48 | 48/48 | 48/48 | 0/48 | 0/48 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| createDataChannel with no argument should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with closed connection should throw InvalidStateError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel attribute default values | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with provided parameters should initialize attributes to provided values | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with label "foo" should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with label null should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with label undefined should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with label lone surrogate should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with ordered false should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with ordered null/undefined should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with maxPacketLifeTime 0 should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with maxRetransmits 0 should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with both maxPacketLifeTime and maxRetransmits undefined should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with both maxPacketLifeTime and maxRetransmits should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with protocol "foo" should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with protocol null should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with protocol undefined should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with protocol lone surrogate should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 0 and negotiated true should succeed, and set the channel's id | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 1 and negotiated true should succeed, and set the channel's id | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 65534 and negotiated true should succeed, and set the channel's id | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id -1 and negotiated not set should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 65536 and negotiated not set should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id -1 should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 65535 should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with id 65536 should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with too long label should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with too long label (2 byte unicode) should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with same label used twice should not throw | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with negotiated true and id should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with too long protocol should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with too long protocol (2 byte unicode) should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with maximum length label and protocol should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with negotiated false should succeed | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with negotiated false and id 42 should ignore the id | PASS | PASS | PASS | FAIL | FAIL | — |
| createDataChannel with negotiated true and id not defined should throw TypeError | PASS | PASS | PASS | FAIL | FAIL | — |
| Channels created (after SCTP connected) should have id assigned | PASS | PASS | PASS | FAIL | FAIL | — |
| Reusing a data channel id that is in use should throw OperationError | PASS | PASS | PASS | FAIL | FAIL | — |
| Reusing a data channel id that is in use (after setRemoteDescription) should throw OperationError | PASS | PASS | PASS | FAIL | FAIL | — |
| Reusing a data channel id that is in use (after setRemoteDescription, negotiated via DCEP) should throw OperationError | PASS | PASS | PASS | FAIL | FAIL | — |
| New datachannel should be in the connecting state after creation (after connection establishment) | PASS | PASS | PASS | FAIL | FAIL | — |
| addTrack, then creating datachannel, should negotiate properly | PASS | PASS | PASS | FAIL | FAIL | — |
| addTrack, then creating datachannel, should negotiate properly when max-bundle is used | PASS | PASS | PASS | FAIL | FAIL | — |
| Renegotiation with audio/video and datachannel should work properly | PASS | PASS | PASS | FAIL | FAIL | — |
| New negotiated datachannel should be in the connecting state after creation (after connection establishment) | PASS | PASS | PASS | FAIL | FAIL | — |
| addTrack, then creating negotiated datachannel, should negotiate properly | PASS | PASS | PASS | FAIL | FAIL | — |
| addTrack, then creating negotiated datachannel, should negotiate properly when max-bundle is used | PASS | PASS | PASS | FAIL | FAIL | — |
| Renegotiation with audio/video and negotiated datachannel should work properly | PASS | PASS | PASS | FAIL | FAIL | — |