<!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");
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>
