<!DOCTYPE html>
<title>Test window.top</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="resources/utils.js"></script>

<body>

<script>
promise_test(async () => {
  const window_top_key = token();
  const window_top_ack_key = token();

  attachFencedFrame(generateURL("resources/window-top-inner.html",
      [window_top_key, window_top_ack_key, "not nested"]));

  // Get the result for the top-level fenced frame.
  const fenced_frame_result = await nextValueFromServer(window_top_key);
  assert_equals(fenced_frame_result, "pass: fenced frame", "The top-level " +
                                     "fenced frame has the right value for " +
                                     "`window.top`");

  // Write an ACK, so that the fenced frame knows it can send message over the
  // `window_top_key` channel again.
  writeValueToServer(window_top_ack_key, "ACK");

  // Get the result for the iframe inside the fenced frame.
  const iframe_in_fenced_frame_result = await nextValueFromServer(window_top_key);
  assert_equals(iframe_in_fenced_frame_result, "pass: fenced frame > iframe",
                "The iframe inside the top-level fenced frame has the right " +
                "value for `window.top`");

  writeValueToServer(window_top_ack_key, "ACK");

  // Get the result for the nested fenced frame.
  const nested_fenced_frame_result = await nextValueFromServer(window_top_key);
  assert_equals(nested_fenced_frame_result, "pass: fenced frame > fenced frame",
                "The nested fenced frame inside the top-level fenced frame " +
                "has the right value for `window.top`");
}, "window.top");
</script>

</body>
