<!DOCTYPE html>
<title>Test prerendering</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/utils.js"></script>
<script src="/common/utils.js"></script>

<body>

<script>
promise_test(async t => {
  assert_implements(
      'supports' in HTMLScriptElement,
      'HTMLScriptElement.supports is not supported');
  assert_implements(
      HTMLScriptElement.supports('speculationrules'),
      '<script type="speculationrules"> is not supported');

  const prerender_ready_key = token();
  const prerender_loaded_key = token();
  const prerender_activated_key = token();
  const url = generateURL('resources/prerender-inner.html',
      [prerender_ready_key, prerender_loaded_key, prerender_activated_key]);

  // TODO: This test expects that the browser always triggers prerendering when
  // SpeculationRules is provided. But SpeculationRules allows browsers not to
  // trigger the speculative resource loading even if SpeculationRules is
  // specified. So we have to use a new WebDriver API that deterministically
  // triggers prerendering.
  // https://github.com/WICG/nav-speculation/blob/main/speculation-rules-testing.md
  const script = document.createElement('script');
  script.type = 'speculationrules';
  script.text = `{"prerender": [{"source": "list", "urls": ["${url}"] }] }`;
  document.head.appendChild(script);

  const ready_result = await nextValueFromServer(prerender_ready_key);
  assert_equals(ready_result, 'ready');

  attachFencedFrame(url);

  const loaded_or_acrivated_result = await Promise.race([
      nextValueFromServer(prerender_loaded_key),
      nextValueFromServer(prerender_activated_key)
    ]);
  assert_equals(loaded_or_acrivated_result, 'loaded');
}, 'Fenced Frame must not load prerendered page.');
</script>

</body>
