<!DOCTYPE html>
<title>Test transparent url navigated in fenced frame interacting with CSP</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>
function setupCSP(csp) {
  let meta = document.createElement('meta');
  meta.httpEquiv = "Content-Security-Policy";
  meta.content = "fenced-frame-src " + csp;
  document.head.appendChild(meta);
}

const allowedCSPs = ["*", "https:", "'self'"];
allowedCSPs.forEach((csp) => {
  promise_test(async(t) => {
    setupCSP(csp);

    t.step_timeout(t.unreached_func(
      "The fenced frame should load for CSP fenced-frame-src " + csp), 3000);

    const fencedframe = attachFencedFrameContext();
    await fencedframe.execute(() => {});
  }, "Fenced frame loaded for CSP fenced-frame-src " + csp);
});

const blockedCSPs = ["'none'"];
blockedCSPs.forEach((csp) => {
  promise_test(async(t) => {
    setupCSP(csp);

    const csp_violation = new Promise(resolve => {
      window.addEventListener("securitypolicyviolation", resolve);
    });

    const fencedframe = attachFencedFrameContext();

    const fencedframe_loaded = fencedframe.execute(() => {});
    fencedframe_loaded.then(t.unreached_func(
        "The fenced frame should not load for CSP fenced-frame-src " + csp));

    const csp_violation_event = await csp_violation;
    const remote_url = getRemoteContextURL(location.origin).toString();
    assert_true(csp_violation_event.blockedURI.includes(remote_url),
        "blockedURI should include the url");
  }, "Fenced frame blocked for CSP fenced-frame-src " + csp);
});
</script>
</body>
