MediaStreamTrack-end-manual.https.html (2290B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>Test that mediastreamtrack are properly ended</title> 5 <link rel="author" title="Dominique Hazael-Massieux" href="mailto:dom@w3.org"/> 6 <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediastreamtrack"> 7 </head> 8 <body> 9 <p class="instructions">When prompted, accept to share your video and audio 10 stream, and then revoke that permission.</p> 11 <h1 class="instructions">Description</h1> 12 <p class="instructions">This test checks that the video and audio tracks of 13 MediaStream object returned by the success callback in getUserMedia are 14 correctly set into inactive state when permission is revoked.</p> 15 16 <div id='log'></div> 17 <script src=/resources/testharness.js></script> 18 <script src=/resources/testharnessreport.js></script> 19 <script src=/resources/testdriver.js></script> 20 <script src=/resources/testdriver-vendor.js></script> 21 <script src=permission-helper.js></script> 22 <script> 23 'use strict'; 24 promise_test(async t => { 25 await setMediaPermission(); 26 const stream = await navigator.mediaDevices.getUserMedia({ 27 audio: true, 28 video: true, 29 }); 30 31 const vidTrack = stream.getVideoTracks()[0]; 32 assert_equals(vidTrack.readyState, "live", 33 "The video track object is in live state"); 34 const vidEnded = new Promise(r => vidTrack.onended = r); 35 const audTrack = stream.getAudioTracks()[0]; 36 assert_equals(audTrack.readyState, "live", 37 "The audio track object is in live state"); 38 const audEnded = new Promise(r => audTrack.onended = r); 39 40 await Promise.race([vidEnded, audEnded]); 41 assert_equals(stream.getTracks().filter(t => t.readyState == "ended").length, 42 1, "Only one track is ended after first track's ended event"); 43 assert_equals(stream.getTracks().filter(t => t.readyState == "live").length, 44 1, "One track is still live after first track's ended event"); 45 assert_true(stream.active, "MediaStream is still active"); 46 47 await Promise.all([vidEnded, audEnded]); 48 assert_equals(vidTrack.readyState, "ended", "Video track ended as expected"); 49 assert_equals(audTrack.readyState, "ended", "Audio track ended as expected"); 50 assert_false(stream.active, "MediaStream has become inactive as expected"); 51 }, "Tests that MediaStreamTracks end properly on permission revocation"); 52 </script> 53 </body> 54 </html>