<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<meta http-equiv="content-security-policy" content="connect-src 'self'">
<script>
  // External URLs inherit policy.
  fetch_tests_from_worker(new Worker("./support/connect-src-self.sub.js"));
  fetch_tests_from_worker(new Worker("./support/connect-src-self.sub.js?pipe=sub|header(Content-Security-Policy,connect-src 'none')"));
  fetch_tests_from_worker(new Worker("./support/connect-src-self.sub.js?pipe=sub|header(Content-Security-Policy,connect-src *)"));
  fetch_tests_from_worker(new Worker("./support/connect-src-self.sub.js?pipe=sub|header(Content-Security-Policy,default-src 'none')"));
  fetch_tests_from_worker(new Worker("./support/connect-src-self.sub.js?pipe=sub|header(Content-Security-Policy,default-src *)"));

  async_test(t => {
    fetch("./support/connect-src-self.sub.js")
      .then(r => r.blob())
      .then(b => {
        // 'blob:' URLs inherit policy.
        var u = URL.createObjectURL(b);
        fetch_tests_from_worker(new Worker(u));

        if (!window.webkitRequestFileSystem)
          return t.done();


        // 'filesystem:' urls inherit policy.
        window.webkitRequestFileSystem(window.TEMPORARY, 1024*1024, fs => {
          fs.root.getFile('dedicated-inheritance-worker.js', { create: true }, entry => {
            entry.createWriter(w => {
              w.onwriteend = _ => {
                var u = entry.toURL();
                fetch_tests_from_worker(new Worker(u));

                // explicit_done: yay.
                t.done();
              };
              w.onerror = _ => t.unreached_func();
              w.write(b);
            });
          });
        });
    });
  }, "Filesystem and blob.");
</script>
