<!DOCTYPE html>
<title>Test successful named frame navigation.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>
<script src="resources/utils.js"></script>

<body>
<script>
promise_test(async () => {
  // This test uses the following layout:
  // A: Top-level frame
  //   B: fencedframe
  //   C: iframe
  //
  // The purpose is to test that named target lookups of C succeed in A, i.e.
  // that lookups work even when the first child of a frame is fenced.

  const fencedframe = attachFencedFrameContext();
  const iframe = attachIFrameContext();

  // Give the iframe a name.
  await iframe.execute(() => { window.name = "target_frame"; });

  // Modify state in the iframe, using a JS navigation to the target name.
  window.open("javascript:window.success=true;", "target_frame");

  // Check that the navigation happened in the iframe.
  await iframe.execute(() => {
    // If the JS code didn't run in the iframe, `window.success` would be
    // undefined.
    assert_true(window.success, 'The JS code ran in the iframe.');
  });
}, 'navigate iframe sibling of fenced frame');
</script>
</body>
