<!doctype html>
<html>
<head>
<meta charset=utf-8>
<meta name="timeout" content="long">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="RTCPeerConnection-helper.js"></script>
</head>
<body>
<script>
  'use strict';

// This test checks that <video> capture works via PeerConnection.

promise_test(async t => {
  const sourceVideo = document.createElement('video');
  sourceVideo.src = "/media/test-v-128k-320x240-24fps-8kfr.webm";
  sourceVideo.loop = true;

  const onCanPlay = new Promise(r => sourceVideo.oncanplay = r);
  await onCanPlay;

  const pc1 = new RTCPeerConnection();
  t.add_cleanup(() => pc1.close());
  const pc2 = new RTCPeerConnection();
  t.add_cleanup(() => pc2.close());

  // Attach video to pc1.
  const stream = sourceVideo.captureStream();
  const tracks = stream.getTracks();
  pc1.addTrack(tracks[0]);

  const destVideo = document.createElement('video');
  destVideo.autoplay = true;

  // Setup pc1->pc2.
  const haveTrackEvent1 = new Promise(r => pc2.ontrack = r);
  exchangeIceCandidates(pc1, pc2);
  await pc1.setLocalDescription();
  await pc2.setRemoteDescription(pc1.localDescription);
  await pc2.setLocalDescription();
  await pc1.setRemoteDescription(pc2.localDescription);

  // Display pc2 received track in video element.
  const onLoadedMetadata = new Promise(r => destVideo.onloadedmetadata = r);
  destVideo.srcObject = new MediaStream([(await haveTrackEvent1).track]);

  // Start playback and wait for video on the other side.
  sourceVideo.play();
  await onLoadedMetadata;

  // Wait until the video has non-zero resolution and some non-black pixels.
  await new Promise(p => {
    function checkColor()  {
        if (destVideo.videoWidth > 0 && getVideoSignal(destVideo) > 0.0)
          p();
        else
          t.step_timeout(checkColor, 0);
    }
    checkColor();
  });

  // Uses Helper.js GetVideoSignal to query |destVideo| pixel value at a certain position.
  const pixelValue = getVideoSignal(destVideo);

  // Anything non-black means that capture works.
  assert_not_equals(pixelValue, 0);
  }, "Capturing a video element and sending it via PeerConnection");
</script>
</body>
</html>
