RTCRtpSender.https.html (4828B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>RTCRtpSender</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script> 7 'use strict'; 8 9 test((t) => { 10 const pc = new RTCPeerConnection(); 11 t.add_cleanup(() => pc.close()); 12 13 const t1 = pc.addTransceiver("audio"); 14 const t2 = pc.addTransceiver("video"); 15 16 assert_not_equals(t1.sender.dtmf, null); 17 assert_equals(t2.sender.dtmf, null); 18 }, "Video sender @dtmf is null"); 19 20 promise_test(async t => { 21 const pc1 = new RTCPeerConnection(); 22 t.add_cleanup(() => pc1.close()); 23 const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 24 assert_equals(transceiver.sender.transport, null); 25 }, 'RTCRtpSender should have a null transport initially'); 26 27 promise_test(async t => { 28 const pc1 = new RTCPeerConnection(); 29 t.add_cleanup(() => pc1.close()); 30 const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 31 await pc1.setLocalDescription(); 32 assert_true(transceiver.sender.transport instanceof RTCDtlsTransport); 33 }, 'RTCRtpSender should have a transport after sLD(offer)'); 34 35 promise_test(async t => { 36 const pc1 = new RTCPeerConnection(); 37 t.add_cleanup(() => pc1.close()); 38 const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 39 await pc1.setLocalDescription(); 40 await pc1.setLocalDescription({type: 'rollback', sdp: ''}); 41 assert_equals(transceiver.sender.transport, null); 42 }, 'RTCRtpSender should have a null transport after rollback of sLD(offer)'); 43 44 promise_test(async t => { 45 const pc1 = new RTCPeerConnection(); 46 t.add_cleanup(() => pc1.close()); 47 const pc2 = new RTCPeerConnection(); 48 t.add_cleanup(() => pc2.close()); 49 const sender = pc1.addTransceiver('audio', { direction: 'recvonly' }); 50 await pc2.setRemoteDescription(await pc1.createOffer()); 51 const [transceiver] = pc2.getTransceivers(); 52 assert_equals(transceiver.sender.transport, null); 53 }, 'RTCRtpSender should have a null transport after sRD(offer)'); 54 55 promise_test(async t => { 56 const pc1 = new RTCPeerConnection(); 57 t.add_cleanup(() => pc1.close()); 58 const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 59 await pc1.setLocalDescription(); 60 assert_true(transceiver.sender.transport instanceof RTCDtlsTransport); 61 assert_true(transceiver.receiver.transport instanceof RTCDtlsTransport); 62 assert_equals(transceiver.sender.transport, transceiver.receiver.transport); 63 }, 'RTCRtpSender should have the same transport object as its corresponding RTCRtpReceiver'); 64 65 promise_test(async t => { 66 const pc1 = new RTCPeerConnection({bundlePolicy: 'max-bundle'}); 67 t.add_cleanup(() => pc1.close()); 68 const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 69 const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' }); 70 await pc1.setLocalDescription(); 71 assert_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport); 72 }, 'RTCRtpSenders that share a bundle transport should have the same transport object'); 73 74 promise_test(async t => { 75 const pc1 = new RTCPeerConnection({bundlePolicy: 'max-compat'}); 76 t.add_cleanup(() => pc1.close()); 77 const pc2 = new RTCPeerConnection(); 78 t.add_cleanup(() => pc2.close()); 79 const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 80 const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' }); 81 await pc1.setLocalDescription(); 82 assert_not_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport); 83 await pc2.setRemoteDescription(pc1.localDescription); 84 await pc1.setRemoteDescription(await pc2.createAnswer()); 85 // pc2 will accept the bundle, so these should be the same now 86 assert_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport); 87 }, 'RTCRtpSenders that do not necessarily share a bundle transport should not have the same transport object'); 88 89 promise_test(async t => { 90 const pc1 = new RTCPeerConnection(); 91 t.add_cleanup(() => pc1.close()); 92 const pc2 = new RTCPeerConnection(); 93 t.add_cleanup(() => pc2.close()); 94 95 const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' }); 96 await pc1.setLocalDescription(); 97 const transportBefore = transceiver.sender.transport; 98 99 await pc2.setRemoteDescription(pc1.localDescription); 100 await pc1.setRemoteDescription(await pc2.createAnswer()); 101 await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true})); 102 103 const transportAfter = transceiver.sender.transport; 104 assert_equals(transportAfter, transportBefore); 105 }, 'RTCRtpSender should have the same transport object after an ICE restart'); 106 107 </script>