<!DOCTYPE html>
<title>Access to the Camera of the user media device 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/media-devices-access.https.html?video=true&uid=${uid}&target_hint=${getTargetHint()}`;
  window.open(url, '_blank', 'noopener');
  // According to spec, gUM will resolve only if the window has focus.
  window.focus();

  const result = await gotMessage;
  const expected = [
    {
      event: 'started waiting navigator.mediaDevices.getUserMedia',
      prerendering: true
    },
    {
      event: 'prerendering change',
      prerendering: false
    },
    {
      event: 'finished waiting navigator.mediaDevices.getUserMedia',
      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 camera of the user media should be deferred until the
    prerendered page is activated`);
</script>
