| <!doctype html> |
| <meta charset=utf-8> |
| <title>RTCRtpSender.prototype.getStats</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="RTCPeerConnection-helper.js"></script> |
| <script src="dictionary-helper.js"></script> |
| <script src="RTCStats-helper.js"></script> |
| <script> |
| 'use strict'; |
| |
| // Test is based on the following editor draft: |
| // webrtc-pc 20171130 |
| // webrtc-stats 20171122 |
| |
| // The following helper functions are called from RTCPeerConnection-helper.js: |
| // exchangeOfferAnswer |
| |
| // The following helper function is called from RTCStats-helper.js |
| // validateStatsReport |
| // assert_stats_report_has_stats |
| |
| /* |
| 5.2. RTCRtpSender Interface |
| getStats |
| 1. Let selector be the RTCRtpSender object on which the method was invoked. |
| 2. Let p be a new promise, and run the following steps in parallel: |
| 1. Gather the stats indicated by selector according to the stats selection |
| algorithm. |
| 2. Resolve p with the resulting RTCStatsReport object, containing the |
| gathered stats. |
| 3. Return p. |
| |
| 8.5. The stats selection algorithm |
| 3. If selector is an RTCRtpSender, gather stats for and add the following objects |
| to result: |
| - All RTCOutboundRTPStreamStats objects corresponding to selector. |
| - All stats objects referenced directly or indirectly by the RTCOutboundRTPStreamStats |
| objects added. |
| */ |
| |
| promise_test(async t => { |
| const caller = new RTCPeerConnection(); |
| t.add_cleanup(() => caller.close()); |
| const callee = new RTCPeerConnection(); |
| t.add_cleanup(() => callee.close()); |
| |
| const stream = await getNoiseStream({audio:true}); |
| t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); |
| const [track] = stream.getTracks(); |
| const { sender } = caller.addTransceiver(track); |
| |
| await exchangeOfferAnswer(caller, callee); |
| const statsReport = await sender.getStats(); |
| validateStatsReport(statsReport); |
| assert_stats_report_has_stats(statsReport, ['outbound-rtp']); |
| }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats'); |
| |
| promise_test(async t => { |
| const caller = new RTCPeerConnection(); |
| t.add_cleanup(() => caller.close()); |
| const callee = new RTCPeerConnection(); |
| t.add_cleanup(() => callee.close()); |
| const stream = await getNoiseStream({audio:true}); |
| t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); |
| const [track] = stream.getTracks(); |
| const sender = caller.addTrack(track, stream); |
| |
| await exchangeOfferAnswer(caller, callee); |
| const statsReport = await sender.getStats(); |
| validateStatsReport(statsReport); |
| assert_stats_report_has_stats(statsReport, ['outbound-rtp']); |
| }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats'); |
| |
| </script> |