node-datachannel 0.10.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/.github/workflows/build-linux.yml +7 -2
  2. package/.github/workflows/build-win.yml +3 -3
  3. package/.gitmodules +3 -0
  4. package/CMakeLists.txt +1 -1
  5. package/README.md +18 -4
  6. package/cmake/toolchain/ci.cmake +1 -1
  7. package/examples/client-server/client-benchmark.js +7 -9
  8. package/examples/client-server/client-periodic.js +7 -9
  9. package/examples/client-server/client.js +7 -9
  10. package/examples/client-server/package-lock.json +0 -27
  11. package/examples/client-server/package.json +0 -1
  12. package/examples/client-server/signaling-server.js +21 -10
  13. package/examples/electron-demo/README.md +1 -1
  14. package/examples/electron-demo/package-lock.json +316 -372
  15. package/examples/electron-demo/package.json +2 -1
  16. package/examples/electron-demo/webpack.main.config.js +10 -0
  17. package/examples/websocket/websocket-client.js +20 -0
  18. package/examples/websocket/websocket-server.js +22 -0
  19. package/jest.config.cjs +1 -1
  20. package/lib/index.cjs +52 -9
  21. package/lib/index.js +22 -15
  22. package/lib/node-datachannel.js +7 -0
  23. package/lib/websocket-server.js +34 -0
  24. package/package.json +3 -3
  25. package/polyfill/Events.js +5 -3
  26. package/polyfill/Exception.js +23 -0
  27. package/polyfill/README.md +4 -0
  28. package/polyfill/RTCDataChannel.js +19 -11
  29. package/polyfill/RTCError.d.ts +11 -0
  30. package/polyfill/RTCError.js +65 -0
  31. package/polyfill/RTCIceCandidate.js +22 -23
  32. package/polyfill/RTCPeerConnection.js +157 -42
  33. package/polyfill/index.cjs +350 -82
  34. package/polyfill/index.js +3 -0
  35. package/src/peer-connection-wrapper.cpp +11 -3
  36. package/src/web-socket-server-wrapper.cpp +23 -23
  37. package/src/web-socket-server-wrapper.h +8 -6
  38. package/src/web-socket-wrapper.cpp +7 -1
  39. package/test/connectivity.js +1 -23
  40. package/test/wpt-tests/README.md +46 -0
  41. package/test/wpt-tests/chrome-failed-tests.js +42 -0
  42. package/test/wpt-tests/index.js +96 -0
  43. package/test/wpt-tests/last-test-results.md +301 -0
  44. package/test/wpt-tests/package-lock.json +1712 -0
  45. package/test/wpt-tests/package.json +19 -0
  46. package/test/wpt-tests/wpt-test-list.js +139 -0
  47. package/test/wpt-tests/wpt.js +131 -0
  48. package/test/wpt.js +0 -50
@@ -0,0 +1,301 @@
1
+
2
+ > wpt-tests@1.0.0 run:test
3
+ > node index.js
4
+
5
+ # Running tests for Chrome...
6
+ Running test: /webrtc/getstats.html
7
+ Running test: /webrtc/historical.html
8
+ Running test: /webrtc/no-media-call.html
9
+ Running test: /webrtc/promises-call.html
10
+ Running test: /webrtc/receiver-track-live.https.html
11
+ Running test: /webrtc/recvonly-transceiver-can-become-sendrecv.https.html
12
+ Running test: /webrtc/RollbackEvents.https.html
13
+ Running test: /webrtc/RTCCertificate.html
14
+ Running test: /webrtc/RTCConfiguration-bundlePolicy.html
15
+ Running test: /webrtc/RTCConfiguration-iceCandidatePoolSize.html
16
+ Running test: /webrtc/RTCConfiguration-iceServers.html
17
+ Running test: /webrtc/RTCConfiguration-iceTransportPolicy.html
18
+ Running test: /webrtc/RTCConfiguration-rtcpMuxPolicy.html
19
+ Running test: /webrtc/RTCConfiguration-validation.html
20
+ Running test: /webrtc/RTCDataChannel-bufferedAmount.html
21
+ Running test: /webrtc/RTCDataChannelEvent-constructor.html
22
+ Running test: /webrtc/RTCDataChannel-iceRestart.html
23
+ Running test: /webrtc/RTCDataChannel-id.html
24
+ Running test: /webrtc/RTCDataChannel-send-blob-order.html
25
+ Running test: /webrtc/RTCDtlsTransport-getRemoteCertificates.html
26
+ Running test: /webrtc/RTCDtlsTransport-state.html
27
+ Running test: /webrtc/RTCDTMFSender-insertDTMF.https.html
28
+ Running test: /webrtc/RTCDTMFSender-ontonechange.https.html
29
+ Running test: /webrtc/RTCDTMFSender-ontonechange-long.https.html
30
+ Running test: /webrtc/RTCError.html
31
+ Running test: /webrtc/RTCIceCandidate-constructor.html
32
+ Running test: /webrtc/RTCIceConnectionState-candidate-pair.https.html
33
+ Running test: /webrtc/RTCIceTransport.html
34
+ Running test: /webrtc/RTCPeerConnection-addIceCandidate.html
35
+ Running test: /webrtc/RTCPeerConnection-addTcpIceCandidate.html
36
+
37
+ # Running tests for node-datachannel...
38
+ Running test: /webrtc/getstats.html
39
+ Running test: /webrtc/historical.html
40
+ Running test: /webrtc/no-media-call.html
41
+ Running test: /webrtc/promises-call.html
42
+ Running test: /webrtc/receiver-track-live.https.html
43
+ Running test: /webrtc/recvonly-transceiver-can-become-sendrecv.https.html
44
+ Running test: /webrtc/RollbackEvents.https.html
45
+ Running test: /webrtc/RTCCertificate.html
46
+ Running test: /webrtc/RTCConfiguration-bundlePolicy.html
47
+ Running test: /webrtc/RTCConfiguration-iceCandidatePoolSize.html
48
+ Running test: /webrtc/RTCConfiguration-iceServers.html
49
+ Running test: /webrtc/RTCConfiguration-iceTransportPolicy.html
50
+ Running test: /webrtc/RTCConfiguration-rtcpMuxPolicy.html
51
+ Running test: /webrtc/RTCConfiguration-validation.html
52
+ Running test: /webrtc/RTCDataChannel-bufferedAmount.html
53
+ Running test: /webrtc/RTCDataChannelEvent-constructor.html
54
+ Running test: /webrtc/RTCDataChannel-iceRestart.html
55
+ Running test: /webrtc/RTCDataChannel-id.html
56
+ Running test: /webrtc/RTCDataChannel-send-blob-order.html
57
+ Running test: /webrtc/RTCDtlsTransport-getRemoteCertificates.html
58
+ Running test: /webrtc/RTCDtlsTransport-state.html
59
+ Running test: /webrtc/RTCDTMFSender-insertDTMF.https.html
60
+ Running test: /webrtc/RTCDTMFSender-ontonechange.https.html
61
+ Running test: /webrtc/RTCDTMFSender-ontonechange-long.https.html
62
+ Running test: /webrtc/RTCError.html
63
+ Running test: /webrtc/RTCIceCandidate-constructor.html
64
+ Running test: /webrtc/RTCIceConnectionState-candidate-pair.https.html
65
+ Running test: /webrtc/RTCIceTransport.html
66
+ Running test: /webrtc/RTCPeerConnection-addIceCandidate.html
67
+ Running test: /webrtc/RTCPeerConnection-addTcpIceCandidate.html
68
+
69
+ # Tests Report
70
+ Total Tests [Chrome]: 398
71
+ Total Tests [Library]: 398 (We expect this to be equal to Total Tests [Chrome])
72
+ Passed Tests: 269
73
+ Failed Tests (Chrome + Library): 41 (We don't care about these tests)
74
+ Failed Tests: 88
75
+
76
+ ## Failed Tests
77
+ ### /webrtc/historical.html
78
+ - name: RTCRtpTransceiver member setDirection should not exist
79
+ message: RTCRtpTransceiver is not defined
80
+ ### /webrtc/recvonly-transceiver-can-become-sendrecv.https.html
81
+ - name: [audio] recvonly transceiver can become sendrecv
82
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
83
+ - name: [video] recvonly transceiver can become sendrecv
84
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
85
+ ### /webrtc/RTCCertificate.html
86
+ - name: Constructing RTCPeerConnection with expired certificate should reject with InvalidAccessError
87
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
88
+ - name: Calling setConfiguration with different set of certs should reject with InvalidModificationError
89
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
90
+ - name: RTCCertificate should have at least one fingerprint
91
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
92
+ - name: RTCPeerConnection({ certificates }) should generate offer SDP with fingerprint of provided certificate
93
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
94
+ ### /webrtc/RTCConfiguration-bundlePolicy.html
95
+ - name: Default bundlePolicy should be balanced
96
+ message: assert_equals: expected (string) "balanced" but got (undefined) undefined
97
+ - name: new RTCPeerConnection({ bundlePolicy: undefined }) should have bundlePolicy balanced
98
+ message: assert_equals: expected (string) "balanced" but got (undefined) undefined
99
+ - name: new RTCPeerConnection({ bundlePolicy: null }) should throw TypeError
100
+ message: assert_throws_js: function "() =>
101
+ new RTCPeerConnection({ bundlePolicy: null })" did not throw
102
+ - name: new RTCPeerConnection({ bundlePolicy: 'invalid' }) should throw TypeError
103
+ message: assert_throws_js: function "() =>
104
+ new RTCPeerConnection({ bundlePolicy: 'invalid' })" did not throw
105
+ - name: setConfiguration({ bundlePolicy: 'max-compat' }) with initial bundlePolicy max-bundle should throw InvalidModificationError
106
+ message: assert_throws_dom: function "() =>
107
+ pc.setConfiguration({ bundlePolicy: 'max-compat' })" did not throw
108
+ - name: setConfiguration({}) with initial bundlePolicy max-bundle should throw InvalidModificationError
109
+ message: assert_throws_dom: function "() =>
110
+ pc.setConfiguration({})" did not throw
111
+ ### /webrtc/RTCConfiguration-iceCandidatePoolSize.html
112
+ - name: Initialize a new RTCPeerConnection with no iceCandidatePoolSize
113
+ message: assert_equals: expected (number) 0 but got (undefined) undefined
114
+ - name: Initialize a new RTCPeerConnection with iceCandidatePoolSize: -1 (Out Of Range)
115
+ message: assert_throws_js: function "() => {
116
+ new RTCPeerConnection({
117
+ iceCandidatePoolSize: -1
118
+ });
119
+ }" did not throw
120
+ - name: Initialize a new RTCPeerConnection with iceCandidatePoolSize: 256 (Out Of Range)
121
+ message: assert_throws_js: function "() => {
122
+ new RTCPeerConnection({
123
+ iceCandidatePoolSize: 256
124
+ });
125
+ }" did not throw
126
+ - name: Reconfigure RTCPeerConnection instance iceCandidatePoolSize to -1 (Out Of Range)
127
+ message: assert_throws_js: function "() => {
128
+ pc.setConfiguration({
129
+ iceCandidatePoolSize: -1
130
+ });
131
+ }" did not throw
132
+ - name: Reconfigure RTCPeerConnection instance iceCandidatePoolSize to 256 (Out Of Range)
133
+ message: assert_throws_js: function "() => {
134
+ pc.setConfiguration({
135
+ iceCandidatePoolSize: 256
136
+ });
137
+ }" did not throw
138
+ ### /webrtc/RTCConfiguration-iceTransportPolicy.html
139
+ - name: new RTCPeerConnection(config) - with null iceTransportPolicy should throw TypeError
140
+ message: assert_throws_js: function "() =>
141
+ makePc({ iceTransportPolicy: null })" threw object "SyntaxError: Invalid ICE transport policy, expected string" ("SyntaxError") expected instance of function "function TypeError() { [native code] }" ("TypeError")
142
+ - name: setConfiguration(config) - with null iceTransportPolicy should throw TypeError
143
+ message: assert_throws_js: function "() =>
144
+ makePc({ iceTransportPolicy: null })" did not throw
145
+ - name: iceTransportPolicy "relay" on offerer should prevent candidate gathering
146
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
147
+ - name: iceTransportPolicy "relay" on answerer should prevent candidate gathering
148
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
149
+ - name: Changing iceTransportPolicy from "all" to "relay" causes an ICE restart which should fail, with no new candidates
150
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
151
+ - name: Changing iceTransportPolicy from "relay" to "all" causes an ICE restart which should succeed
152
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
153
+ - name: Changing iceTransportPolicy from "all" to "relay", and back to "all" prompts an ICE restart
154
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
155
+ - name: Changing iceTransportPolicy from "all" to "relay" on the answerer has no effect on a subsequent offer/answer
156
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
157
+ ### /webrtc/RTCConfiguration-rtcpMuxPolicy.html
158
+ - name: new RTCPeerConnection() should have default rtcpMuxPolicy require
159
+ message: assert_equals: expected (string) "require" but got (undefined) undefined
160
+ - name: new RTCPeerConnection({ rtcpMuxPolicy: undefined }) should have default rtcpMuxPolicy require
161
+ message: assert_equals: expected (string) "require" but got (undefined) undefined
162
+ - name: new RTCPeerConnection(config) - with { rtcpMuxPolicy: null } should throw TypeError
163
+ message: assert_throws_js: function "() =>
164
+ makePc({ rtcpMuxPolicy: null })" did not throw
165
+ - name: setConfiguration(config) - with { rtcpMuxPolicy: null } should throw TypeError
166
+ message: assert_throws_js: function "() =>
167
+ makePc({ rtcpMuxPolicy: null })" did not throw
168
+ - name: new RTCPeerConnection(config) - with { rtcpMuxPolicy: 'invalid' } should throw TypeError
169
+ message: assert_throws_js: function "() =>
170
+ makePc({ rtcpMuxPolicy: 'invalid' })" did not throw
171
+ - name: setConfiguration(config) - with { rtcpMuxPolicy: 'invalid' } should throw TypeError
172
+ message: assert_throws_js: function "() =>
173
+ makePc({ rtcpMuxPolicy: 'invalid' })" did not throw
174
+ - name: setConfiguration({ rtcpMuxPolicy: 'negotiate' }) with initial rtcpMuxPolicy require should throw InvalidModificationError
175
+ message: assert_throws_dom: function "() =>
176
+ pc.setConfiguration({ rtcpMuxPolicy: 'negotiate' })" did not throw
177
+ - name: setConfiguration({ rtcpMuxPolicy: 'require' }) with initial rtcpMuxPolicy negotiate should throw InvalidModificationError
178
+ message: assert_throws_dom: function "() =>
179
+ pc.setConfiguration({ rtcpMuxPolicy: 'require' })" did not throw
180
+ - name: setConfiguration({}) with initial rtcpMuxPolicy require should leave rtcpMuxPolicy to require
181
+ message: assert_equals: expected (string) "require" but got (undefined) undefined
182
+ - name: setConfiguration({}) with initial rtcpMuxPolicy negotiate should throw InvalidModificationError
183
+ message: assert_throws_dom: function "() =>
184
+ pc.setConfiguration({})" did not throw
185
+ - name: setRemoteDescription throws InvalidAccessError when called with an offer without rtcp-mux and rtcpMuxPolicy is set to require
186
+ message: assert_unreached: Should have rejected: undefined Reached unreachable code
187
+ ### /webrtc/RTCDataChannel-bufferedAmount.html
188
+ - name: datachannel bufferedAmount should increase to byte length of encodedunicode string sent
189
+ message: assert_equals: Expect bufferedAmount to be the byte length of the unicode string expected 12 but got 0
190
+ - name: datachannel bufferedAmount should increase to byte length of buffer sent
191
+ message: assert_equals: Expect bufferedAmount to increase to byte length of sent buffer expected 5 but got 0
192
+ - name: datachannel bufferedAmount should not decrease immediately after initiating closure
193
+ message: assert_equals: Expect bufferedAmount to increase to byte length of sent buffer expected 5 but got 0
194
+ - name: datachannel bufferedAmount should not decrease after closing the peer connection
195
+ message: assert_equals: Expect bufferedAmount to increase to byte length of sent buffer expected 5 but got 0
196
+ ### /webrtc/RTCDataChannel-iceRestart.html
197
+ - name: Data channel remains usable after ICE restart
198
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
199
+ - name: Data channel remains usable at each step of an ICE restart
200
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
201
+ ### /webrtc/RTCDataChannel-id.html
202
+ - name: DTLS client uses odd data channel IDs
203
+ message: promise_test: Unhandled rejection with value: object "Error: libdatachannel error while adding remote description: Got the local description as remote description"
204
+ - name: DTLS server uses even data channel IDs
205
+ message: promise_test: Unhandled rejection with value: object "Error: libdatachannel error while adding remote description: Got the local description as remote description"
206
+ - name: In-band negotiation with a specific ID should not work
207
+ message: assert_equals: expected (object) null but got (number) 42
208
+ - name: Odd/even role should not be violated when mixing with negotiated channels
209
+ message: assert_equals: Channel id must be null before DTLS role has been determined expected (object) null but got (number) 65535
210
+ ### /webrtc/RTCDtlsTransport-getRemoteCertificates.html
211
+ - name: RTCDtlsTransport.prototype.getRemoteCertificates
212
+ message: AudioContext is not defined
213
+ ### /webrtc/RTCDtlsTransport-state.html
214
+ - name: DTLS transport goes to connected state
215
+ message: promise_test: Unhandled rejection with value: object "ReferenceError: AudioContext is not defined"
216
+ - name: close() causes the other end's DTLS transport to close
217
+ message: promise_test: Unhandled rejection with value: object "ReferenceError: AudioContext is not defined"
218
+ - name: stop bundled transceiver retains dtls transport state
219
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
220
+ ### /webrtc/RTCDTMFSender-insertDTMF.https.html
221
+ - name: insertDTMF() should succeed if tones contains valid DTMF characters
222
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
223
+ - name: insertDTMF() should throw InvalidCharacterError if tones contains invalid DTMF characters
224
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
225
+ - name: insertDTMF() should throw InvalidStateError if transceiver is stopped
226
+ message: Not implemented
227
+ - name: insertDTMF() should throw InvalidStateError if transceiver.currentDirection is recvonly
228
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
229
+ - name: insertDTMF() should throw InvalidStateError if transceiver.currentDirection is inactive
230
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
231
+ - name: insertDTMF() should set toneBuffer to provided tones normalized, with old tones overridden
232
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
233
+ - name: insertDTMF() after remove and close should reject
234
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
235
+ ### /webrtc/RTCDTMFSender-ontonechange.https.html
236
+ - name: insertDTMF() with default duration and intertoneGap should fire tonechange events at the expected time
237
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
238
+ - name: insertDTMF() with explicit duration and intertoneGap should fire tonechange events at the expected time
239
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
240
+ - name: insertDTMF('') should not fire any tonechange event, including for '' tone
241
+ message: assert_unreached: Unexpected promise rejection: TypeError: Cannot read properties of undefined (reading 'getUserMedia') Reached unreachable code
242
+ - name: insertDTMF() with duration less than 40 should be clamped to 40
243
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
244
+ - name: insertDTMF() with interToneGap less than 30 should be clamped to 30
245
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
246
+ - name: insertDTMF with comma should delay next tonechange event for a constant 2000ms
247
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
248
+ - name: insertDTMF() with transceiver stopped in the middle should stop future tonechange events from firing
249
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
250
+ - name: Calling insertDTMF() in the middle of tonechange events should cause future tonechanges to be updated to new tones
251
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
252
+ - name: Calling insertDTMF() multiple times in the middle of tonechange events should cause future tonechanges to be updated the last provided tones
253
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
254
+ - name: Calling insertDTMF('') in the middle of tonechange events should stop future tonechange events from firing
255
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
256
+ - name: Setting transceiver.currentDirection to recvonly in the middle of tonechange events should stop future tonechange events from firing
257
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
258
+ - name: Tone change event constructor works
259
+ message: RTCDTMFToneChangeEvent is not defined
260
+ - name: Tone change event with unexpected name should not crash
261
+ message: RTCDTMFToneChangeEvent is not defined
262
+ ### /webrtc/RTCDTMFSender-ontonechange-long.https.html
263
+ - name: insertDTMF with duration greater than 6000 should be clamped to 6000
264
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
265
+ ### /webrtc/RTCIceConnectionState-candidate-pair.https.html
266
+ - name: On ICE connected, getStats() contains a connected candidate-pair
267
+ message: promise_test: Unhandled rejection with value: object "TypeError: Cannot read properties of undefined (reading 'getUserMedia')"
268
+ ### /webrtc/RTCIceTransport.html
269
+ - name: RTCIceTransport should be in state "new" initially
270
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
271
+ - name: RTCIceTransport should not transition to "checking" until after the answer is set _and_ the first remote candidate is received
272
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
273
+ - name: RTCIceTransport should transition to "disconnected" if packets stop flowing
274
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
275
+ - name: RTCIceTransport should transition to "disconnected" if packets stop flowing (DataChannel case)
276
+ message: assert_equals: expected "checking" but got "connected"
277
+ - name: Local ICE restart should not result in a different ICE transport
278
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
279
+ - name: Local ICE restart should not result in a different ICE transport (DataChannel case)
280
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
281
+ - name: Remote ICE restart should not result in a different ICE transport
282
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
283
+ - name: Remote ICE restart should not result in a different ICE transport (DataChannel case)
284
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
285
+ - name: RTCIceTransport should transition to "closed" if the underlying transport is closed because the answer used bundle
286
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
287
+ - name: RTCIceTransport should synchronously transition to "closed" with no event if the underlying transport is closed due to PC.close()
288
+ message: promise_test: Unhandled rejection with value: object "Error: Not implemented"
289
+ ### /webrtc/RTCPeerConnection-addIceCandidate.html
290
+ - name: addIceCandidate with second sdpMid and sdpMLineIndex should add candidate to second media stream
291
+ message: assert_true: Expect candidate line to be found after media line m=video expected true got false
292
+ - name: Adding multiple candidates should add candidates to their corresponding media stream
293
+ message: assert_true: Expect candidate line to be found after media line m=video expected true got false
294
+ - name: Add candidate for media stream 2 with null usernameFragment should succeed
295
+ message: assert_true: Expect candidate line to be found after media line m=video expected true got false
296
+ ### /webrtc/RTCPeerConnection-addTcpIceCandidate.html
297
+ - name: TCP candidate aimed at port 8001 accepted
298
+ message: promise_test: Unhandled rejection with value: undefined
299
+ - name: TCP addIceCandidate aimed at port 8001 accepted
300
+ message: promise_test: Unhandled rejection with value: object "OperationError: Invalid sdpMid format"
301
+ End of tests