restriction-wake-lock.https.html (2273B)
1 <!DOCTYPE html> 2 <title>Access to the Wake Lock API is deferred</title> 3 <meta name="timeout" content="long"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/resources/testdriver.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 <script src="/common/utils.js"></script> 9 <script src="../resources/utils.js"></script> 10 <script src="resources/utils.js"></script> 11 12 <body> 13 <script> 14 setup(() => assertSpeculationRulesIsSupported()); 15 16 promise_test(async t => { 17 const uid = token(); 18 const bc = new PrerenderChannel('test-channel', uid); 19 20 // We grant the permission here to make a more discerning test because 21 // navigator.wakeLock.request() waits until the permission is granted, which 22 // is deferred during prerendering so the test would trivially pass without 23 // the permission. 24 await test_driver.set_permission({ name: 'screen-wake-lock' }, 'granted'); 25 26 const gotMessage = new Promise(resolve => { 27 bc.addEventListener('message', e => { 28 resolve(e.data); 29 }, { 30 once: true 31 }); 32 }); 33 const url = `resources/wake-lock.https.html?uid=${uid}`; 34 window.open(url, '_blank', 'noopener'); 35 36 const result = await gotMessage; 37 const expected = [ 38 { 39 event: 'started waiting navigator.wakeLock.request test', 40 prerendering: true 41 }, 42 { 43 event: 'navigator.wakeLock.request failed', 44 prerendering: true 45 }, 46 { 47 event: 'requesting navigator.wakeLock.request on prerendering change', 48 prerendering: false 49 }, 50 { 51 event: 'prerendering change', 52 prerendering: false 53 }, 54 { 55 event: 'finished waiting navigator.wakeLock.request test', 56 prerendering: false 57 }, 58 ]; 59 assert_equals(result.length, expected.length); 60 for (let i = 0; i < result.length; i++) { 61 assert_equals(result[i].event, expected[i].event, `event[${i}]`); 62 assert_equals(result[i].prerendering, expected[i].prerendering, 63 `prerendering[${i}]`); 64 } 65 bc.close(); 66 67 // Send a close signal to PrerenderEventCollector on the prerendered page. 68 new PrerenderChannel('close', uid).postMessage(''); 69 }, `the access to the Wake Lock API should be deferred until the prerendered 70 page is activated`); 71 </script>