<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection.prototype.ondatachannel</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../webrtc/RTCPeerConnection-helper.js"></script>
<script>
'use strict';

promise_test(async (t) => {
  const resolver = new Resolver();
  const pc1 = new RTCPeerConnection();
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  t.add_cleanup(() => pc2.close());

  const dc1 = pc1.createDataChannel('test', {
    ordered: false,
    maxRetransmits: 1,
    protocol: 'custom',
    priority: 'high'
  });

  assert_equals(dc1.priority, 'high');

  pc2.ondatachannel = t.step_func((event) => {
    const dc2 = event.channel;

    assert_equals(dc2.priority, 'high');

    resolver.resolve();
  });

  exchangeIceCandidates(pc1, pc2);
  await exchangeOfferAnswer(pc1, pc2);

  await resolver;
}, 'In-band negotiated channel created on remote peer should match the same configuration as local ' +
  'peer');

promise_test(async (t) => {
  const resolver = new Resolver();
  const pc1 = new RTCPeerConnection();
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  t.add_cleanup(() => pc2.close());

  const dc1 = pc1.createDataChannel('');

  assert_equals(dc1.priority, 'low');

  pc2.ondatachannel = t.step_func((event) => {
    const dc2 = event.channel;
    assert_equals(dc2.priority, 'low');

    resolver.resolve();
  });

  exchangeIceCandidates(pc1, pc2);
  await exchangeOfferAnswer(pc1, pc2);

  await resolver;
}, 'In-band negotiated channel created on remote peer should match the same (default) ' +
  'configuration as local peer');

</script>
