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