| <!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> |
| 'use strict'; |
| promise_test(async t => { |
| const stream = await navigator.mediaDevices.getUserMedia({ |
| audio: true, |
| video: true, |
| }); |
| |
| const vidTrack = stream.getVideoTracks()[0]; |
| assert_equals(vidTrack.readyState, "live", |
| "The video track object is in live state"); |
| const vidEnded = new Promise(r => vidTrack.onended = r); |
| const audTrack = stream.getAudioTracks()[0]; |
| assert_equals(audTrack.readyState, "live", |
| "The audio track object is in live state"); |
| const audEnded = new Promise(r => audTrack.onended = r); |
| |
| await Promise.race([vidEnded, audEnded]); |
| assert_equals(stream.getTracks().filter(t => t.readyState == "ended").length, |
| 1, "Only one track is ended after first track's ended event"); |
| assert_equals(stream.getTracks().filter(t => t.readyState == "live").length, |
| 1, "One track is still live after first track's ended event"); |
| assert_true(stream.active, "MediaStream is still active"); |
| |
| await Promise.all([vidEnded, audEnded]); |
| assert_equals(vidTrack.readyState, "ended", "Video track ended as expected"); |
| assert_equals(audTrack.readyState, "ended", "Audio track ended as expected"); |
| assert_false(stream.active, "MediaStream has become inactive as expected"); |
| }, "Tests that MediaStreamTracks end properly on permission revocation"); |
| </script> |
| </body> |
| </html> |