<!DOCTYPE html>
<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="../resources/utils.js"></script>
<script src="resources/utils.js"></script>

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

promise_test(async t => {
  // The key used for storing a test result in the server.
  const key = token();

  // Open the test runner in a popup - it will prerender itself, record the
  // test results, and send them back to this harness.
  const url = `resources/prerender-state.html?key=${key}`;
  window.open(url, '_blank', 'noopener');

  // Wait until the test sends us the results.
  let result = await nextValueFromServer(key);
  result = JSON.parse(result);

  assert_equals(result.prerenderingTypeOf, "boolean",
                "typeof(document.prerendering) is 'boolean'.");
  assert_equals(result.onprerenderingChangeTypeOf, "object",
                "typeof(document.onprerenderingchange) is 'object'.");

  assert_equals(
    result.onprerenderingchangeCalledBeforeActivate, false,
    "prerenderingchange event should not be called prior to activation.");
  assert_equals(
    result.prerenderingValueBeforeActivate, true,
    "document.prerendering should be true prior to activation.");

  assert_equals(result.onprerenderingchangeCalledAfterActivate, true,
                "prerenderingchange event should be called after activation.");
  assert_equals(result.prerenderingValueAfterActivate, false,
                "document.prerendering should be false after activation.");
  assert_equals(result.eventBubbles, false,
                "prerenderingchange event.bubbles should be false.");
  assert_equals(result.eventCancelable, false,
                "prerenderingchange event.cancelable should be false.");
}, 'Test document.prerendering and its change event.');
</script>
