<!DOCTYPE html>
<title>Test Prerender pages maintain their own Client Hint Caches</title>
<meta name="timeout" content="long">
<script src="/common/utils.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/client-hints/resources/open-and-add-load-event.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 initialization_bc = new PrerenderChannel(`test-channel`, uid);
    t.add_cleanup(_ => initialization_bc.close());

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

    // Initialization. For the active pages, it has the client hint cache of
    // "sec-ch-ua-bitness".
    await open_and_add_load_event('resources/accept-ch.html');
    window.open(
        `resources/echo-client-hints-received.py?uid=${uid}`, '_blank',
        'noopener');

    const result = await gotMessage;
    assert_equals(result.result, 'PASSED', result.reason);
  },
  'Prerender page should maintain their own client hints cache and do not propagate it to' +
      'the global cache until activation');

</script>
