| <!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> |