forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html>
 | |
| <meta charset=utf-8>
 | |
| <title>RTCRtpSender</title>
 | |
| <script src="/resources/testharness.js"></script>
 | |
| <script src="/resources/testharnessreport.js"></script>
 | |
| <script>
 | |
|   'use strict';
 | |
| 
 | |
| test((t) => {
 | |
|     const pc = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc.close());
 | |
| 
 | |
|     const t1 = pc.addTransceiver("audio");
 | |
|     const t2 = pc.addTransceiver("video");
 | |
| 
 | |
|     assert_not_equals(t1.sender.dtmf, null);
 | |
|     assert_equals(t2.sender.dtmf, null);
 | |
| }, "Video sender @dtmf is null");
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     assert_equals(transceiver.sender.transport, null);
 | |
|   }, 'RTCRtpSender should have a null transport initially');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     assert_true(transceiver.sender.transport instanceof RTCDtlsTransport);
 | |
|   }, 'RTCRtpSender should have a transport after sLD(offer)');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     await pc1.setLocalDescription({type: 'rollback', sdp: ''});
 | |
|     assert_equals(transceiver.sender.transport, null);
 | |
|   }, 'RTCRtpSender should have a null transport after rollback of sLD(offer)');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const pc2 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc2.close());
 | |
|     const sender = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     await pc2.setRemoteDescription(await pc1.createOffer());
 | |
|     const [transceiver] = pc2.getTransceivers();
 | |
|     assert_equals(transceiver.sender.transport, null);
 | |
|   }, 'RTCRtpSender should have a null transport after sRD(offer)');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     assert_true(transceiver.sender.transport instanceof RTCDtlsTransport);
 | |
|     assert_true(transceiver.receiver.transport instanceof RTCDtlsTransport);
 | |
|     assert_equals(transceiver.sender.transport, transceiver.receiver.transport);
 | |
|   }, 'RTCRtpSender should have the same transport object as its corresponding RTCRtpReceiver');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection({bundlePolicy: 'max-bundle'});
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     assert_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport);
 | |
|   }, 'RTCRtpSenders that share a bundle transport should have the same transport object');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection({bundlePolicy: 'max-compat'});
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const pc2 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc2.close());
 | |
|     const audioTransceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     const videoTransceiver = pc1.addTransceiver('video', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     assert_not_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport);
 | |
|     await pc2.setRemoteDescription(pc1.localDescription);
 | |
|     await pc1.setRemoteDescription(await pc2.createAnswer());
 | |
|     // pc2 will accept the bundle, so these should be the same now
 | |
|     assert_equals(videoTransceiver.sender.transport, audioTransceiver.sender.transport);
 | |
|   }, 'RTCRtpSenders that do not necessarily share a bundle transport should not have the same transport object');
 | |
| 
 | |
|   promise_test(async t => {
 | |
|     const pc1 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc1.close());
 | |
|     const pc2 = new RTCPeerConnection();
 | |
|     t.add_cleanup(() => pc2.close());
 | |
| 
 | |
|     const transceiver = pc1.addTransceiver('audio', { direction: 'recvonly' });
 | |
|     await pc1.setLocalDescription();
 | |
|     const transportBefore = transceiver.sender.transport;
 | |
| 
 | |
|     await pc2.setRemoteDescription(pc1.localDescription);
 | |
|     await pc1.setRemoteDescription(await pc2.createAnswer());
 | |
|     await pc1.setLocalDescription(await pc1.createOffer({iceRestart: true}));
 | |
| 
 | |
|     const transportAfter = transceiver.sender.transport;
 | |
|     assert_equals(transportAfter, transportBefore);
 | |
|   }, 'RTCRtpSender should have the same transport object after an ICE restart');
 | |
| 
 | |
| </script>
 | 
