https://github.com/web-platform-tests/wpt
Raw File
Tip revision: 9868ad502b989cff5d9a64ac8c0fee9c98f3a5b8 authored by Andy Paicu on 23 March 2018, 15:46:19 UTC
Remove browsing context name on cross origin navigation
Tip revision: 9868ad5
RTCRtpReceiver-getSynchronizationSources.https.html
<!doctype html>
<meta charset=utf-8>
<title>RTCRtpReceiver.prototype.getSynchronizationSources</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
  'use strict';

  // Test is based on the following editor draft:
  // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html

  /*
    5.3.  RTCRtpReceiver Interface
      interface RTCRtpReceiver {
        ...
        sequence<RTCRtpSynchronizationSource> getSynchronizationSources();
      };

      interface RTCRtpSynchronizationSource {
        readonly attribute DOMHighResTimeStamp timestamp;
        readonly attribute unsigned long       source;
        readonly attribute byte                audioLevel;
        readonly attribute boolean?            voiceActivityFlag;
      };
   */

  promise_test(() => {
    const pc1 = new RTCPeerConnection();
    const pc2 = new RTCPeerConnection();

    const ontrackPromise = new Promise(resolve => {
      pc2.addEventListener('track', trackEvent => {
        const { receiver } = trackEvent;
        assert_true(receiver instanceof RTCRtpReceiver,
          'Expect trackEvent.receiver to be instance of RTCRtpReceiver');

        resolve(receiver);
      });
    });

    return getTrackFromUserMedia('audio')
    .then(([track, mediaStream]) => {
      pc1.addTrack(track, mediaStream);
      exchangeIceCandidates(pc1, pc2);
      return doSignalingHandshake(pc1, pc2);
    })
    .then(() => ontrackPromise)
    .then(receiver => {
      const syncSources = receiver.getSynchronizationSources();
      assert_greater_than(syncSources.length, 0,
        'Expect SSRCs to be available after RTP connection is established');

      for(const ssrc of syncSources) {
        assert_true(ssrc instanceof RTCRtpSynchronizationSource,
          'Expect synchronizationSources elements to be instance of RTCSynchronizationSource');

        assert_equals(typeof ssrc.timestamp, 'number',
          'Expect ssrc.timestamp attribute to be DOMHighResTimeStamp');

        assert_true(Number.isInteger(ssrc.source) && ssrc.source > 0,
          'Expect SSRC identifier to be unsigned long');

        assert_true(Number.isInteger(ssrc.audioLevel) &&
          ssrc.audioLevel >= 0 && ssrc.audioLevel <= 127,
          'Expect ssrc.audioLevel to be byte value from 0-127.');

        if(ssrc.voiceActivityFlag !== null) {
          assert_equals(typeof ssrc.voiceActivityFlag, 'boolean',
            'Expect ssrc.voiceActivity to be either null or boolean');
        }
      }
    });
  }, `getContributingSources() should return list of CSRC after connection is established`);

</script>
back to top