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

promise_test(async t => {
  const stream = await getNoiseStream({video: true});
  t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
  const [track] = stream.getTracks();
  const caller = new RTCPeerConnection();
  t.add_cleanup(() => caller.close());
  caller.addTrack(track);
  const callee = new RTCPeerConnection();
  t.add_cleanup(() => callee.close());
  callee.addTrack(track);
  var callerSender = caller.getTransceivers()[0].sender;
  assert_equals(callerSender.getParameters().codecs.length, 0);
  assert_equals(callerSender.getParameters().headerExtensions.length, 0,
                "caller header extensions before offer");
  const offer = await caller.createOffer();
  await caller.setLocalDescription(offer);
  await callee.setRemoteDescription(offer);
  // Check that it is a single 2-way transceiver.
  assert_equals(callee.getTransceivers().length, 1);
  var calleeSender = callee.getTransceivers()[0].sender;
  assert_equals(calleeSender.getParameters().codecs.length, 0);
  const answer = await callee.createAnswer();
  await callee.setLocalDescription(answer);
  assert_greater_than(calleeSender.getParameters().codecs.length, 0,
                      "callee codecs after answer");
  await caller.setRemoteDescription(answer);
  assert_greater_than(callerSender.getParameters().codecs.length, 0,
                      "caller codecs after answer");
  assert_greater_than(callerSender.getParameters().headerExtensions.length, 0,
                      "caller header extensions after answer");
}, 'getParameters() surfaces codecs on two-way sender with addTrack at the right time');

</script>
