<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
<script src="/common/utils.js"></script>
<script src="../resources/utils.js"></script>
<script src="resources/utils.sub.js"></script>

<meta name="variant" content="?from_protocol=http&to_protocol=http">
<meta name="variant" content="?from_protocol=http&to_protocol=https">
<meta name="variant" content="?from_protocol=https&to_protocol=http">
<meta name="variant" content="?from_protocol=https&to_protocol=https">

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

  // This is split across four test variants due to the test timeouts.
  let { from_protocol, to_protocol } = Object.fromEntries(new URLSearchParams(location.search));
  promise_test(async t => {
    let agent = await spawnWindow(t, { protocol: from_protocol });
    let nextUrl = agent.getExecutorURL({ protocol: to_protocol, page: 2 });
    await agent.forceSinglePrefetch(nextUrl);
    await agent.navigate(nextUrl);

    if (to_protocol == "https") {
      assert_prefetched(await agent.getRequestHeaders(), "Prefetch should work for HTTPS urls.");
    } else {
      assert_not_prefetched(await agent.getRequestHeaders(), "Prefetch should not work for HTTP urls.");
    }
  }, `test single ${to_protocol} url prefetch from a ${from_protocol} url`);
</script>
