outbound-rtp.https.html (1962B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <meta name="timeout" content="long"> 4 <title>RTCPeerConnection getStats test related to outbound-rtp stats</title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="../webrtc/RTCPeerConnection-helper.js"></script> 8 <script> 9 async function extractOutboundRtpStats(pc, expected) { 10 // If remote stats are never reported, return after 5 seconds. 11 const startTime = performance.now(); 12 let stats; 13 while (true) { 14 const report = await pc.getStats(); 15 stats = [...report.values()].filter(({type}) => type === 'outbound-rtp'); 16 if (stats.length && stats.every(({active}) => active == expected)) { 17 break; 18 } 19 if (performance.now() > startTime + 5000) { 20 break; 21 } 22 } 23 return stats; 24 } 25 26 promise_test(async (test) => { 27 const pc1 = new RTCPeerConnection(); 28 test.add_cleanup(() => pc1.close()); 29 const pc2 = new RTCPeerConnection(); 30 test.add_cleanup(() => pc2.close()); 31 32 const stream = await getNoiseStream({audio: true, video: true}); 33 stream.getTracks().forEach(t => pc1.addTrack(t, stream)); 34 exchangeIceCandidates(pc1, pc2); 35 exchangeOfferAnswer(pc1, pc2); 36 await waitForRtpAndRtcpStats(pc1); 37 let outboundStats = await extractOutboundRtpStats(pc1, true); 38 assert_equals(outboundStats.length, 2); 39 assert_true(outboundStats[0].active); 40 assert_true(outboundStats[1].active); 41 42 pc1.getSenders().forEach(async sender => { 43 const parameters = sender.getParameters(); 44 parameters.encodings[0].active = false; 45 await sender.setParameters(parameters); 46 }); 47 // Avoid any stats caching. 48 await (new Promise(r => test.step_timeout(r, 100))); 49 50 outboundStats = await extractOutboundRtpStats(pc1, false); 51 assert_equals(outboundStats.length, 2); 52 assert_false(outboundStats[0].active); 53 assert_false(outboundStats[1].active); 54 }, 'setting an encoding to false is reflected in outbound-rtp stats'); 55 </script>