<!DOCTYPE html>
<html>

<head>
    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
    <meta http-equiv="Content-Security-Policy" content="connect-src 'self'; script-src 'self' 'unsafe-inline'; child-src 'self';">
    <title>worker-connect-src-blocked</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src='../support/logTest.sub.js?logs=["violated-directive=worker-src","TEST COMPLETE"]'></script>
    <script src='../support/alertAssert.sub.js?alerts=[]'></script>
</head>
<p>This test loads a worker, from a guid.
    The worker should be blocked from loading with a child-src policy of 'self'
    as the blob: scheme must be specified explicitly.
    A report should be sent to the report-uri specified
    with this resource.</p>
<body>
    <script>
        window.addEventListener('securitypolicyviolation', function(e) {
            log("violated-directive=" + e.violatedDirective);
        });
    
        try {
            var blob = new Blob([
                "postMessage('FAIL');" +
                "postMessage('TEST COMPLETE');"
                ],
                {type : 'application/javascript'});
            var url = URL.createObjectURL(blob);
            var worker = new Worker(url);
            worker.onmessage = function(event) {
                alert_assert(event.data);
            };
            worker.onerror = function(event) {
                log('TEST COMPLETE');
                event.preventDefault();
            }
        } catch (e) {
            log('TEST COMPLETE');
        }
        function timeout() {
            log('TEST COMPLETE');
        }
    </script>
    <div id="log"></div>
</body>

</html>
