<!DOCTYPE html>
<title>Access to the Web Locks API is deferred</title>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="../resources/utils.js"></script>
<script src="resources/utils.js"></script>

<body>
<script>
setup(() => assertSpeculationRulesIsSupported());

function RunTest(method, description) {
  promise_test(async t => {
    const uid = token();
    const bc = new PrerenderChannel('test-channel', uid);

    const gotMessage = new Promise(resolve => {
      bc.addEventListener('message', e => {
        resolve(e.data);
      }, {
        once: true
      });
    });
    const url = `resources/web-locks.html?method=${method}&uid=${uid}`;
    window.open(url, '_blank', 'noopener');

    const result = await gotMessage;
    const expected = [
      {event: `started waiting navigator.locks.${method}`,  prerendering: true},
      {event: 'prerendering change',                      prerendering: false},
      {event: `finished waiting navigator.locks.${method}`, prerendering: false},
    ];
    assert_equals(result.length, expected.length);
    for (let i = 0; i < result.length; i++) {
      assert_equals(result[i].event, expected[i].event, `event[${i}]`);
      assert_equals(result[i].prerendering, expected[i].prerendering,
        `prerendering[${i}]`);
    }
    bc.close();

    // Send a close signal to PrerenderEventCollector on the prerendered page.
    new PrerenderChannel('close', uid).postMessage('');
  }, description);
}

RunTest(`request`, `navigator.locks.request should be deferred until the prerendered page is activated`);
RunTest(`query`, `navigator.locks.query should be deferred until the prerendered page is activated`);
</script>
