<!DOCTYPE html>
<title>Access to the WebXR inline session API is deferred</title>
<meta name="variant" content="?target_hint=_self">
<meta name="variant" content="?target_hint=_blank">
<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());

promise_test(async t => {
  const uid = token();
  const bc = new PrerenderChannel('test-channel', uid);
  t.add_cleanup(_ => bc.close());

  const gotMessage = new Promise(resolve => {
    bc.addEventListener('message', e => {
      resolve(e.data);
    }, {
      once: true
    });
  });

  const url = `resources/web-xr-inline-session.https.html?uid=${uid}&target_hint=${getTargetHint()}`;
  window.open(url, '_blank', 'noopener');

  const result = await gotMessage;
  const expected = [
    {
      event: `started waiting XRSession.requestSession('inline')`,
      prerendering: true
    },
    {
      event: `prerendering change`,
      prerendering: false
    },
    {
      event: `finished waiting XRSession.requestSession('inline')`,
      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}]`);
  }

  // Send a close signal to PrerenderEventCollector on the prerendered page.
  new PrerenderChannel('close', uid).postMessage('');
}, `The access to the WebXR inline session API should be deferred until the
    prerendered page is activated`);
</script>
