Skip to content

Commit 7a2bcbd

Browse files
AnshulMalikfoolip
authored andcommitted
Implement RTCIceTransport.role. ,smaug?bwc
Differential Revision: https://phabricator.services.mozilla.com/D284388 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=2018843 gecko-commit: 649756ae004ba461b9d35a652f61a096f1520e54 gecko-reviewers: bwc, webidl
1 parent 4f93fab commit 7a2bcbd

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

webrtc/RTCIceTransport.html

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,55 @@
504504

505505
assert_equals(sender.transport.iceTransport.getRemoteCandidates().length, 0);
506506
}, 'RTCIceTransport does not expose remote peer-reflexive candidates.');
507+
508+
promise_test(async t => {
509+
const pc1 = new RTCPeerConnection();
510+
t.add_cleanup(() => pc1.close());
511+
const pc2 = new RTCPeerConnection();
512+
t.add_cleanup(() => pc2.close());
513+
const {sender} = pc1.addTransceiver('audio');
514+
515+
await pc1.setLocalDescription();
516+
const {iceTransport: iceTransport1} = sender.transport;
517+
assert_equals(iceTransport1.role, 'unknown', 'offerer role should be unknown after setLocalDescription');
518+
519+
await pc2.setRemoteDescription(pc1.localDescription);
520+
await pc2.setLocalDescription();
521+
const {iceTransport: iceTransport2} = pc2.getTransceivers()[0].sender.transport;
522+
assert_equals(iceTransport2.role, 'controlled', 'answerer role should be controlled after setLocalDescription(answer)');
523+
assert_equals(iceTransport1.role, 'unknown', 'offerer role should still be unknown before setRemoteDescription(answer)');
524+
525+
await pc1.setRemoteDescription(pc2.localDescription);
526+
assert_equals(iceTransport1.role, 'controlling', 'offerer role should be controlling after setRemoteDescription(answer)');
527+
}, 'RTCIceTransport.role should be "unknown" before the answer is applied');
528+
529+
promise_test(async t => {
530+
const pc1 = new RTCPeerConnection();
531+
t.add_cleanup(() => pc1.close());
532+
const pc2 = new RTCPeerConnection();
533+
t.add_cleanup(() => pc2.close());
534+
const {sender} = pc1.addTransceiver('audio');
535+
536+
await pc1.setLocalDescription();
537+
const {iceTransport: iceTransport1} = sender.transport;
538+
await pc2.setRemoteDescription(pc1.localDescription);
539+
await pc2.setLocalDescription();
540+
const {iceTransport: iceTransport2} = pc2.getTransceivers()[0].sender.transport;
541+
await pc1.setRemoteDescription(pc2.localDescription);
542+
543+
assert_equals(iceTransport1.role, 'controlling');
544+
assert_equals(iceTransport2.role, 'controlled');
545+
546+
// ICE restart initiated by the answerer; pc2 becomes the new offerer
547+
pc2.restartIce();
548+
await pc2.setLocalDescription();
549+
await pc1.setRemoteDescription(pc2.localDescription);
550+
await pc1.setLocalDescription();
551+
await pc2.setRemoteDescription(pc1.localDescription);
552+
553+
assert_equals(iceTransport1.role, 'controlling', 'offerer role should not change after answerer-initiated ICE restart');
554+
assert_equals(iceTransport2.role, 'controlled', 'answerer role should not change after answerer-initiated ICE restart');
555+
}, 'RTCIceTransport.role should not change when the answerer initiates an ICE restart');
507556
}
508557

509558
</script>

0 commit comments

Comments
 (0)