<!DOCTYPE html>
<title>Access to the setSinkId of the Audio 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/audio-setSinkId.https.html?sinkId=default&uid=${uid}&target_hint=${getTargetHint()}`;
  window.open(url, '_blank', 'noopener');

  const result = await gotMessage;
  const expected = [
    {
      event: 'started waiting Audio.setSinkId',
      prerendering: true
    },
    {
      event: 'prerendering change',
      prerendering: false
    },
    {
      event: 'finished waiting Audio.setSinkId',
      prerendering: false
    },
  ];
  // The spec, https://wicg.github.io/nav-speculation/prerendering.html#audio-output-patch,
  // mentions selectAudioOutput() but this test uses setSinkId() function.
  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 setSinkId of Audio API should be deferred until the
    prerendered page is activated`);
</script>
