<!DOCTYPE html>
<title>Test transparent fenced frame navigations with blocked CSP</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>
<script src="/common/get-host-info.sub.js"></script>
<script src="/common/dispatcher/dispatcher.js"></script>

<body>
<script>
const blockedCSPs = [
  "none",
  "https://localhost:80",
  "https://*:80",
  "https://localhost:*"
];
blockedCSPs.forEach((csp) => {
  promise_test(async() => {
    const iframe = setupCSP(csp);
    const key = token();
    const url = generateURL("/fenced-frame/resources/embeddee.html", [key]);

    await iframe.execute(async (key, url, csp) => {
      let promise = new Promise((resolve) => {
        window.addEventListener('securitypolicyviolation', function(e) {
          resolve(e.violatedDirective + ";" + e.blockedURI);
        }, {once: true});
      });

      attachFencedFrame(url);

      await promise.then((result) => {
        assert_equals(result, "fenced-frame-src;" + url,
            "The fenced frame should not load for CSP fenced-frame-src " + csp);
      });
    }, [key, url, csp]);
  }, "Fenced frame loaded for CSP fenced-frame-src " + csp);
});
</script>
</body>
