WPT
wpt / webrtc / RTCPeerConnection-onnegotiationneeded.html
Spec: WebRTC ↗
Runs: Chrome 155.0.8038.0 (wpt@7addae031, 2026-09-02) | Firefox 157.0a1 (wpt@7addae031, 2026-09-02) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-a7884 (wpt@b1a7025f8, 2026-09-02) | 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 | 24/24 | 24/24 | 24/24 | 0/24 | 0/24 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Creating first data channel should fire negotiationneeded event | PASS | PASS | PASS | FAIL | FAIL | — |
| calling createDataChannel twice should fire negotiationneeded event once | PASS | PASS | PASS | FAIL | FAIL | — |
| addTransceiver() should fire negotiationneeded event | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling addTransceiver() twice should fire negotiationneeded event once | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling both addTransceiver() and createDataChannel() should fire negotiationneeded event once | PASS | PASS | PASS | FAIL | FAIL | — |
| negotiationneeded event should not fire if signaling state is not stable | PASS | PASS | PASS | FAIL | FAIL | — |
| negotiationneeded event should fire only after signaling state goes back to stable after setRemoteDescription | PASS | PASS | PASS | FAIL | FAIL | — |
| negotiationneeded event should fire only after signaling state goes back to stable after setLocalDescription | PASS | PASS | PASS | FAIL | FAIL | — |
| negotiationneeded event should fire only after signalingstatechange event fires from setRemoteDescription | PASS | PASS | PASS | FAIL | FAIL | — |
| negotiationneeded event should fire only after signalingstatechange event fires from setLocalDescription | PASS | PASS | PASS | FAIL | FAIL | — |
| addTrack should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| removeTrack should cause negotiationneeded to fire on the caller | PASS | PASS | PASS | FAIL | FAIL | — |
| removeTrack should cause negotiationneeded to fire on the callee | PASS | PASS | PASS | FAIL | FAIL | — |
| Updating the direction of the transceiver should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with a different stream as before should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with an additional stream should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with a stream removed should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with all streams removed should cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with the same stream as before should not cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with duplicates of the same stream as before should not cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with the same streams as before in a different order should not cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Calling setStreams with duplicates of the same streams as before should not cause negotiationneeded to fire | PASS | PASS | PASS | FAIL | FAIL | — |
| Adding two transceivers, one at a time, results in the expected number of negotiationneeded events | PASS | PASS | PASS | FAIL | FAIL | — |