<!DOCTYPE html>
<title>Navigate ancestor helper</title>

<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="utils.js"></script>
<body>
<script>
(async () => {
  // This document is loaded into either a top-level fenced frame, a nested
  // fenced frame, or an iframe in a top-level fenced frame. In any case, this
  // document is always the inner-most document in any test. It navigates an
  // ancestor frame by clicking the anchor above via script. When this document
  // is loaded in a fenced frame, the frame that should actually navigate is
  // this one, since fenced frames are top-level browsing contexts.
  // When this document is loaded into a top-level fenced frame or a nested
  // fenced frame, we test that the right frame is navigated in
  // `navigate-ancestor-test-runner.https.html`. When this document is loaded
  // into an iframe in a top-level fenced frame, we test that the navigation is
  // blocked due to the sandbox behavior of fenced frame trees.
  const [navigate_ancestor_key, ancestor_type] = parseKeylist();
  const url = generateURL(`navigate-ancestor-destination.https.html`,
      [navigate_ancestor_key]);
  await simulateGesture();
  try {
    window[ancestor_type].location = url;
  } catch (e) {
    window[ancestor_type].postMessage('location change failed.');
  }
})();
</script>
</body>
