<!DOCTYPE html>
<html>

<head>
    <title>child-src-worker-blocked</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <meta http-equiv="Content-Security-Policy" content="child-src 'none'; script-src 'unsafe-inline'; connect-src 'self';">
</head>

<body>
    <p> This test used to check the child-src csp controlling worker creation. This behaviour has been deprecated but it's still supported
        until the transition is done. This still tests that behaviour but we need to go through extra hoops to make sure 'script-src'
        does not affect the result in any way (for instance by allowing 'self').
    </p>
    <script>
      async_test(function(t) {
        document.addEventListener("securitypolicyviolation", t.step_func(function(e) {
          if (e.blockedURI != "{{location[scheme]}}://{{location[host]}}/content-security-policy/support/post-message.js")
            return;

          assert_equals(e.violatedDirective, "worker-src");
          t.done();
        }));
      }, "Should throw a securitypolicyviolation event");

      async_test(function(t) {
        try {
          var foo = new Worker('{{location[scheme]}}://{{location[host]}}/content-security-policy/support/post-message.js');
          foo.onerror = function(event) {
            event.preventDefault();
            t.done();
          }
          foo.onmessage = function(event) {
            assert_unreached("Should not be able to start worker");
          };
        } catch (e) {
          t.done();
        }
      }, "Should block worker because it does not match any directive including the deprecated 'child-src'");
    </script>
    <div id="log"></div>
</body>
</html>
