<!DOCTYPE html>
<title>Test fenced frame in CSPEE</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(t) => {
  const iframe = attachIFrameContext({
    attributes: [["csp", "frame-src *"]],
    headers: [["Allow-CSP-From", "*"]]
  });
  t.step_timeout(() => t.done(), 1000);
  await iframe.execute(async (t) => {
    const fencedframe = attachFencedFrameContext({
      headers: [["Allow-CSP-From", "*"]]
    });
    await fencedframe.execute(() => {});
  });
  assert_unreached("fenced frame should not be loaded.");
}, 'fenced frame should not be loaded in CSPEE');

promise_test(async(t) => {
  const iframe_a = attachIFrameContext({
    attributes: [["csp", "frame-src *"]],
    headers: [["Allow-CSP-From", "*"]]
  });
  t.step_timeout(() => t.done(), 1000);
  await iframe_a.execute(async (t) => {
    const iframe_b = attachIFrameContext({headers: [["Allow-CSP-From", "*"]]});
    await iframe_b.execute(async (t) => {
      const fencedframe = attachFencedFrameContext({
        headers: [["Allow-CSP-From", "*"]]
      });
      await fencedframe.execute(() => {});
    });
  });
  assert_unreached("fenced frame should not be loaded.");
}, 'fenced frame should not be loaded if any ancestor has CSPEE');

promise_test(async(t) => {
  const iframe = attachIFrameContext({
    attributes: [["csp", "frame-src *"]],
    headers: [["Allow-CSP-From", "*"]]
  });
  await iframe.execute(async (t) => {
    assert_false(navigator.canLoadAdAuctionFencedFrame());
  });
}, 'canLoadOpaqueURL considers CSPEE headers');

promise_test(async(t) => {
  const iframe_a = attachIFrameContext({
    attributes: [["csp", "frame-src *"]],
    headers: [["Allow-CSP-From", "*"]]
  });
  await iframe_a.execute(async (t) => {
    const iframe_b = attachIFrameContext({headers: [["Allow-CSP-From", "*"]]});
    await iframe_b.execute(async (t) => {
      assert_false(navigator.canLoadAdAuctionFencedFrame());
    });
  });
}, 'canLoadOpaqueURL considers CSPEE headers up the ancestor chain');

promise_test(async(t) => {
  const iframe = attachIFrameContext();
  await iframe.execute(async (t) => {
    assert_true(navigator.canLoadAdAuctionFencedFrame());
  });
}, 'canLoadOpaqueURL returns true if no CSPEE headers are present in iframe');
</script>
</body>
