<!doctype html>
<meta charset=utf-8>
<title>RTCPeerConnection addTrack does not deadlock</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="RTCPeerConnection-helper.js"></script>
<script>
  'use strict';

  // This test sets up two peer connections using a sequence of operations
  // that triggered a deadlock in Chrome. See https://crbug.com/736725.
  // If a deadlock is introduced again, this test times out.
  promise_test(async t => {
    const pc1 = new RTCPeerConnection();
    t.add_cleanup(() => pc1.close());
    const stream = await getNoiseStream(
      {audio: false, video: true});
    t.add_cleanup(() => stream.getTracks().forEach(track => track.stop()));
    const videoTrack = stream.getVideoTracks()[0];
    pc1.addTrack(videoTrack, stream);
    const offer = await pc1.createOffer();
    await pc1.setLocalDescription(offer);
    const pc2 = new RTCPeerConnection();
    t.add_cleanup(() => pc2.close());
    const srdPromise = pc2.setRemoteDescription(offer);
    pc2.addTrack(videoTrack, stream);
    // The deadlock encountered in https://crbug.com/736725 occured here.
    await srdPromise;
    await pc2.createAnswer();
  }, 'RTCPeerConnection addTrack does not deadlock.');
</script>
