<!DOCTYPE html>
<title>CSP for subresource WebBundle (allowed cases)</title>
<link
  rel="help"
  href="https://github.com/WICG/webpackage/blob/main/explainers/subresource-loading.md"
/>
<meta
  http-equiv="Content-Security-Policy"
  content="
    script-src
      https://web-platform.test:8444/web-bundle/resources/wbn/urn-uuid.wbn
      https://web-platform.test:8444/web-bundle/resources/wbn/uuid-in-package.wbn
      https://web-platform.test:8444/resources/testharness.js
      https://web-platform.test:8444/resources/testharnessreport.js
      'unsafe-inline';
    img-src
      https://web-platform.test:8444/web-bundle/resources/wbn/pass.png;
    frame-src
      https://web-platform.test:8444/web-bundle/resources/wbn/urn-uuid.wbn
      https://web-platform.test:8444/web-bundle/resources/wbn/uuid-in-package.wbn"
>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<link rel="webbundle" href="../resources/wbn/subresource.wbn"
      resources="https://web-platform.test:8444/web-bundle/resources/wbn/pass.png" />
<link rel="webbundle" href="../resources/wbn/urn-uuid.wbn"
      resources="urn:uuid:020111b3-437a-4c5c-ae07-adb6bbffb720
                 urn:uuid:429fcc4e-0696-4bad-b099-ee9175f023ae" />
<link rel="webbundle" href="../resources/wbn/uuid-in-package.wbn"
      resources="uuid-in-package:020111b3-437a-4c5c-ae07-adb6bbffb720
                 uuid-in-package:429fcc4e-0696-4bad-b099-ee9175f023ae" />
<script>
  promise_test(() => {
    return new Promise((resolve, reject) => {
      const img = document.createElement('img');
      img.src = 'https://web-platform.test:8444/web-bundle/resources/wbn/pass.png';
      img.onload = resolve;
      img.onerror = reject;
      document.body.appendChild(img);
    });
  }, 'URL matching of CSP should be done based on the subresource URL ' +
     'when the subresource URL is HTTPS URL.');

  promise_test(async () => {
    const result = await new Promise((resolve) => {
      // This function will be called from the script.
      window.report_result = resolve;
      const script = document.createElement('script');
      script.src = 'urn:uuid:020111b3-437a-4c5c-ae07-adb6bbffb720';
      document.body.appendChild(script);
    });
    assert_equals(result, 'OK');
  }, 'URL matching of script-src CSP should be done based on the bundle URL ' +
     'when the subresource URL is urn:uuid URL.');

  promise_test(async () => {
    const result = await new Promise((resolve) => {
      // This function will be called from the script.
      window.report_result = resolve;
      const script = document.createElement('script');
      script.src = 'uuid-in-package:020111b3-437a-4c5c-ae07-adb6bbffb720';
      document.body.appendChild(script);
    });
    assert_equals(result, 'OK');
  }, 'URL matching of script-src CSP should be done based on the bundle URL ' +
     'when the subresource URL is uuid-in-package: URL.');

  promise_test(async () => {
    const frame_url = 'urn:uuid:429fcc4e-0696-4bad-b099-ee9175f023ae';
    const iframe = document.createElement('iframe');
    iframe.src = frame_url;
    const load_promise = new Promise((resolve) => {
      iframe.addEventListener('load', resolve);
    });
    document.body.appendChild(iframe);
    await load_promise;
    assert_equals(
        await evalInIframe(iframe, 'location.href'),
        frame_url);
  }, 'URL matching of frame-src CSP should be done based on the bundle URL ' +
     'when the frame URL is urn:uuid URL.');

  promise_test(async () => {
    const frame_url = 'uuid-in-package:429fcc4e-0696-4bad-b099-ee9175f023ae';
    const iframe = document.createElement('iframe');
    iframe.src = frame_url;
    const load_promise = new Promise((resolve) => {
      iframe.addEventListener('load', resolve);
    });
    document.body.appendChild(iframe);
    await load_promise;
    assert_equals(
        await evalInIframe(iframe, 'location.href'),
        frame_url);
  }, 'URL matching of frame-src CSP should be done based on the bundle URL ' +
     'when the frame URL is uuid-in-package: URL.');

  async function evalInIframe(iframe, code) {
    const message_promise = new Promise((resolve) => {
        window.addEventListener(
            'message',
            (e) => { resolve(e.data); },
            { once : true });
      });
    iframe.contentWindow.postMessage(code,'*');
    return message_promise;
  }
</script>
</body>
