wakelock-document-hidden.https.html (1971B)
1 <!DOCTYPE html> 2 <html> 3 <title>Screen wake locks respect page visibility changes</title> 4 <link rel="help" href="https://w3c.github.io/screen-wake-lock/#handling-document-loss-of-visibility"> 5 <body> 6 <script src="/resources/testharness.js"></script> 7 <script src="/resources/testharnessreport.js"></script> 8 <script src="/resources/testdriver.js"></script> 9 <script src="/resources/testdriver-vendor.js"></script> 10 <script src="/page-visibility/resources/window_state_context.js"></script> 11 <script> 12 'use strict'; 13 14 promise_test(async t => { 15 await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); 16 17 const {minimize, restore} = window_state_context(t); 18 await minimize(); 19 20 assert_true(document.hidden); 21 await promise_rejects_dom(t, "NotAllowedError", navigator.wakeLock.request('screen'), 22 "new screen locks are not allowed when the page is not visible"); 23 }, "navigator.wakeLock.request('screen') fails when the document is hidden"); 24 25 promise_test(async t => { 26 await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); 27 28 const { minimize, restore } = window_state_context(t); 29 30 const screenLock1 = await navigator.wakeLock.request('screen'); 31 const screenLock2 = await navigator.wakeLock.request('screen'); 32 33 assert_false(screenLock1.released, "The released attribute is initially false"); 34 assert_false(screenLock2.released, "The released attribute is initially false"); 35 36 const wait1 = new EventWatcher(t, screenLock1, 'release').wait_for('release'); 37 const wait2 = new EventWatcher(t, screenLock2, 'release').wait_for('release'); 38 39 await minimize(); 40 assert_true(document.hidden); 41 42 await Promise.all([wait1, wait2]); 43 44 assert_true(screenLock1.released, "The released attribute is true after the lock is released"); 45 assert_true(screenLock2.released, "The released attribute is true after the lock is released"); 46 }, "Screen wake locks are released when the document the page is hidden"); 47 </script> 48 </body> 49 </html>