| <!doctype html> |
| <meta charset=utf-8> |
| <title>RTCRtpReceiver.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: |
| // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html |
| // https://w3c.github.io/webrtc-stats/archives/20170614/webrtc-stats.html |
| |
| // The following helper functions are called from RTCPeerConnection-helper.js: |
| // doSignalingHandshake |
| |
| // The following helper function is called from RTCStats-helper.js |
| // validateStatsReport |
| // assert_stats_report_has_stats |
| |
| /* |
| 5.3. RTCRtpReceiver Interface |
| interface RTCRtpReceiver { |
| Promise<RTCStatsReport> getStats(); |
| ... |
| }; |
| |
| getStats |
| 1. Let selector be the RTCRtpReceiver 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 |
| 4. If selector is an RTCRtpReceiver, gather stats for and add the following objects |
| to result: |
| - All RTCInboundRTPStreamStats objects corresponding to selector. |
| - All stats objects referenced directly or indirectly by the RTCInboundRTPStreamStats |
| 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(); |
| callee.addTrack(track, stream); |
| |
| const { receiver } = caller.addTransceiver('audio'); |
| |
| await doSignalingHandshake(caller, callee); |
| const statsReport = await receiver.getStats(); |
| validateStatsReport(statsReport); |
| assert_stats_report_has_stats(statsReport, ['inbound-rtp']); |
| }, 'receiver.getStats() via addTransceiver should return stats report containing inbound-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(); |
| caller.addTrack(track, stream); |
| |
| await doSignalingHandshake(caller, callee); |
| const receiver = callee.getReceivers()[0]; |
| const statsReport = await receiver.getStats(); |
| validateStatsReport(statsReport); |
| assert_stats_report_has_stats(statsReport, ['inbound-rtp']); |
| }, 'receiver.getStats() via addTrack should return stats report containing inbound-rtp stats'); |
| |
| </script> |