<!DOCTYPE html>
<title>CSP blocks WebBundle</title>
<link
  rel="help"
  href="https://github.com/WICG/webpackage/blob/main/explainers/subresource-loading.md"
/>
<meta
  http-equiv="Content-Security-Policy"
  content="
    default-src
      https://web-platform.test:8444/web-bundle/resources/wbn/relative-url-file.js
      https://web-platform.test:8444/resources/testharness.js
      https://web-platform.test:8444/resources/testharnessreport.js
      https://web-platform.test:8444/web-bundle/resources/test-helpers.js
      'unsafe-inline';
    img-src
      https://web-platform.test:8444/web-bundle/resources/wbn/pass.png;"
/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/test-helpers.js"></script>
<body>
  <script>
    // This bundle should be blocked because its URL is not listed in CSP directive.
    const bundle_url =
      "https://web-platform.test:8444/web-bundle/resources/wbn/relative-url.wbn";

    const subresource_url =
      "https://web-platform.test:8444/web-bundle/resources/wbn/relative-url-file.js";

    promise_test(() => {
      // if a WebBundle is blocked by CSP,
      // - A request for the WebBundle should fail.
      // - A subresource request associated with the bundle should fail.
      // - A window.load should be fired. In other words, any request shouldn't remain
      //   pending forever.

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

      const script_webbundle = createWebBundleElement(bundle_url, [
        subresource_url,
      ]);
      const webbundle_error = new Promise((resolve) => {
        script_webbundle.addEventListener("error", () => {
          resolve();
        });
      });
      document.body.appendChild(script_webbundle);

      const script_js = document.createElement("script");
      script_js.src = subresource_url;
      const script_js_error = new Promise((resolve) => {
        script_js.addEventListener("error", () => {
          resolve();
        });
      });
      document.body.appendChild(script_js);

      return Promise.all([window_load, webbundle_error, script_js_error]);
    }, "WebBundle and subresource loadings should fail when CSP blocks a WebBundle");
  </script>
</body>
