<!doctype html>
<html>
<head>
<title>Test that mediastreamtrack are properly ended</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#mediastreamtrack">
</head>
<body>
<p class="instructions">When prompted, accept to share your video and audio
stream, and then revoke that permission.</p>
<h1 class="instructions">Description</h1>
<p class="instructions">This test checks that the video and audio tracks of
MediaStream object returned by the success callback in getUserMedia are
correctly set into inactive state when permission is revoked.</p>

<div id='log'></div>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script>
var t = async_test("Tests that the video MediaStreamTrack objects are properly ended on permission revocation", {timeout: 20000}); // longer timeout since requires user interaction
t.step(function () {
  navigator.mediaDevices.getUserMedia({audio: true,video: true}).then(t.step_func(function (stream) {
    var vidTrack = stream.getVideoTracks()[0];
    assert_equals(vidTrack.readyState, "live", "The video track object is in live state");
    var audTrack = stream.getAudioTracks()[0];
    assert_equals(audTrack.readyState, "live", "The audio track object is in live state");
    vidTrack.onended = t.step_func(function () {
        assert_equals(vidTrack.readyState, "ended", "Video track has been ended as expected");
        assert_equals(audTrack.readyState, "ended", "Audio track has been ended as expected");
        assert_false(stream.active, "MediaStream has been inactive as expected");
        t.done();
      });
    }), function (error) {}
  );
});
</script>
</body>
</html>
