<!doctype html>
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>RTCPeerConnection canTrickleIceCandidates tests</title>
</head>
<body>
  <!--  These files are in place when executing on W3C.  -->
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script type="text/javascript">
  // tests support for RTCPeerConnection.canTrickleIceCandidates:
  // http://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-cantrickleicecandidates
  const sdp = 'v=0\r\n' +
      'o=- 166855176514521964 2 IN IP4 127.0.0.1\r\n' +
      's=-\r\n' +
      't=0 0\r\n' +
      'a=ice-options:trickle\r\n' +
      'm=audio 9 UDP/TLS/RTP/SAVPF 111\r\n' +
      'c=IN IP4 0.0.0.0\r\n' +
      'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
      'a=ice-ufrag:someufrag\r\n' +
      'a=ice-pwd:somelongpwdwithenoughrandomness\r\n' +
      'a=fingerprint:sha-256 8C:71:B3:8D:A5:38:FD:8F:A4:2E:A2:65:6C:86:52:BC:E0:6E:94:F2:9F:7C:4D:B5:DF:AF:AA:6F:44:90:8D:F4\r\n' +
      'a=setup:actpass\r\n' +
      'a=rtcp-mux\r\n' +
      'a=mid:mid1\r\n' +
      'a=sendonly\r\n' +
      'a=msid:stream1 track1\r\n' +
      'a=ssrc:1001 cname:some\r\n' +
      'a=rtpmap:111 opus/48000/2\r\n';

  test(function() {
    var pc = new RTCPeerConnection();
    assert_equals(pc.canTrickleIceCandidates, null, 'canTrickleIceCandidates property is null');
  }, 'canTrickleIceCandidates property is null prior to setRemoteDescription');

  promise_test(function() {
    var pc = new RTCPeerConnection();

    return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp}))
    .then(function() {
      assert_true(pc.canTrickleIceCandidates, 'canTrickleIceCandidates property is true after setRemoteDescription');
    })
  }, 'canTrickleIceCandidates property is true after setRemoteDescription with a=ice-options:trickle');

  promise_test(function() {
    var pc = new RTCPeerConnection();

    return pc.setRemoteDescription(new RTCSessionDescription({type: 'offer', sdp: sdp.replace('a=ice-options:trickle\r\n', '')}))
    .then(function() {
      assert_false(pc.canTrickleIceCandidates, 'canTrickleIceCandidates property is false after setRemoteDescription');
    })
  }, 'canTrickleIceCandidates property is false after setRemoteDescription without a=ice-options:trickle');
</script>

</body>
</html>
