GUM-permissions-query.https.html (2518B)
1 <!doctype html> 2 <html> 3 <head> 4 <title>Check permissions.query with getUserMedia</title> 5 </head> 6 <body> 7 <p class="instructions">When prompted, accept to share your camera or microphone.</p> 8 <h1 class="instructions">Description</h1> 9 <p class="instructions">This test checks that permissions.query() of camera and 10 microphone produce "granted" after successful calls to getUserMedia for the 11 respective device kinds.</p> 12 <div id='log'></div> 13 <script src=/resources/testharness.js></script> 14 <script src=/resources/testharnessreport.js></script> 15 <script src=/resources/testdriver.js></script> 16 <script src=/resources/testdriver-vendor.js></script> 17 <script src=permission-helper.js></script> 18 <script> 19 promise_test(async t => { 20 let status = await navigator.permissions.query({name: "camera"}); 21 assert_equals(status.state, "prompt", "initial camera state is prompt"); 22 23 let eventFired = false; 24 status.onchange = () => eventFired = true; 25 26 // state is set by setMediaPermission in automation & by gUM when run manually 27 await setMediaPermission("granted", ["camera"]); 28 const stream = await navigator.mediaDevices.getUserMedia({video: true}); 29 t.add_cleanup(() => stream.getTracks()[0].stop()); 30 status.onchange = null; // defer assert to not overshadow main assert below 31 32 status = await navigator.permissions.query({name: "camera"}); 33 assert_equals(status.state, "granted", "camera is granted after getUserMedia"); 34 assert_true(eventFired, "status.onchange fired for camera permission change"); 35 }, "camera is granted after getUserMedia, according to permissions.query()"); 36 37 promise_test(async t => { 38 let status = await navigator.permissions.query({name: "microphone"}); 39 assert_equals(status.state, "prompt", "initial microphone state is prompt"); 40 let eventFired = false; 41 status.onchange = () => eventFired = true; 42 43 // state is set by setMediaPermission in automation & by gUM when run manually 44 await setMediaPermission("granted", ["microphone"]); 45 const stream = await navigator.mediaDevices.getUserMedia({audio: true}); 46 t.add_cleanup(() => stream.getTracks()[0].stop()); 47 status.onchange = null; // defer assert to not overshadow main assert below 48 49 status = await navigator.permissions.query({name: "microphone"}); 50 assert_equals(status.state, "granted", "microphone is granted after getUserMedia"); 51 assert_true(eventFired, "status.onchange fired for microphone permission change"); 52 }, "microphone is granted after getUserMedia, according to permissions.query()"); 53 54 </script> 55 </body> 56 </html>