tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>