<!doctype html>
<html>

<head>
  <title>MediaRecorder peer connection</title>
  <link rel="help"
        href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#dom-mediarecorder-mimeType">
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <script src="../../mediacapture-streams/permission-helper.js"></script>
  <script src="../utils/peerconnection.js"></script>
</head>

<body>
  <video id="remote" autoplay width="240"></video>
  <script>

[{kind: "video", audio: false, codecPreference: "VP8", codecRegex: /.*vp8.*/},
 {kind: "audio/video", audio: true, codecPreference: "VP8", codecRegex: /.*vp8.*/},
 {kind: "video", audio: false, codecPreference: "VP9", codecRegex: /.*vp9.*/},
 {kind: "audio/video", audio: true, codecPreference: "VP9", codecRegex: /.*vp9.*/}]
  .forEach(args => {
    promise_test(async t => {
      const [localPc, remotePc, stream] = await startConnection(
          t, args.audio, /*video=*/true, args.codecPreference);

      // Needed for the tests to get exercised in Chrome (bug)
      document.getElementById('remote').srcObject = stream;

      const recorder = new MediaRecorder(stream);  // Passthrough.
      const onstartPromise = new Promise(resolve => {
        recorder.onstart = t.step_func(() => {
          assert_regexp_match(
                recorder.mimeType, args.codecRegex,
                "mimeType is matching " + args.codecPreference +
                " in case of passthrough.");
          resolve();
        });
      });
      recorder.start();
      await(onstartPromise);
    }, "PeerConnection passthrough MediaRecorder receives " +
          args.codecPreference + " after onstart with a " + args.kind +
          " stream.");
  });

promise_test(async t => {
  const [localPc, remotePc, stream, transceivers] = await startConnection(
      t, /*audio=*/false, /*video=*/true, /*videoCodecPreference=*/"VP8");

  // Needed for the tests to get exercised in Chrome (bug)
  document.getElementById('remote').srcObject = stream;

  const recorder = new MediaRecorder(stream);  // Possibly passthrough.
  recorder.start();
  await waitForReceivedFramesOrPackets(t, remotePc, false, true, 10);

  // Switch codec to VP9; we expect onerror to not be invoked.
  recorder.onerror = t.step_func(() => assert_unreached(
      "MediaRecorder should be prepared to handle codec switches"));
  setTransceiverCodecPreference(transceivers.video, "VP9");
  await Promise.all([
    exchangeOfferAnswer(localPc, remotePc),
    waitForReceivedCodec(t, remotePc, "VP9")
  ]);
}, "PeerConnection passthrough MediaRecorder should be prepared to handle " +
        "the codec switching from VP8 to VP9");

</script>
</body>

</html>
