<!doctype html>
<html>
<head>
<title>Adding a track to an inactive MediaStream</title>
<link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/>
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStream-addTrack-void-MediaStreamTrack-track">
<link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#widl-MediaStreamTrack-stop-void">
</head>
<body>
<p class="instructions">When prompted, accept to share your audio stream, then
your video stream.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that adding a track to an inactive
MediaStream is allowed.</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var t = async_test("Tests that adding a track to an inactive MediaStream is allowed", {timeout:20000});
t.step(function () {
  var audio, video;

  navigator.mediaDevices.getUserMedia({audio:true}).then(gotAudio);
  function gotAudio(stream) {
    audio = stream;
    navigator.mediaDevices.getUserMedia({video:true}).then(gotVideo);
  }

  function gotVideo(stream) {
    video = stream;
    t.step(function () {
       audio.getAudioTracks()[0].stop();
       assert_false(audio.active, "audio stream is inactive after stopping its only audio track");
       assert_true(video.active, "video stream is active");
       audio.addTrack(video.getVideoTracks()[0]);
       audio.removeTrack(audio.getAudioTracks()[0]);
     });
    t.done();
  }
});
</script>
</body>
</html>
