<!DOCTYPE html>
<html>

<head>
    <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.-->
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'nonce-abc' 'sha256-3iveTSiUbmzN7COYvdDwyaXXzJ3SrjKlTaOvQ/GdRpo=' 'sha256-EgE/bwVJ+ZLL9F5hNjDqD4C7nlFFrdDaKeNIJ2cUem4='; connect-src 'self';">
    <title>scripthash-basic-blocked</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="../support/logTest.sub.js?logs=[]"></script>
    <script>
        window.addEventListener('securitypolicyviolation', function(e) {
            alert_assert("Fail");
        });
    </script>

    <script>
        var t_alert = async_test('Expecting alerts: ["PASS (1/1)"]');
        var expected_alerts = ["PASS (1/1)"];

        function alert_assert(msg) {
            t_alert.step(function() {
                if (msg.match(/^FAIL/i)) {
                    assert_unreached(msg);
                    t_alert.done();
                }
                for (var i = 0; i < expected_alerts.length; i++) {
                    if (expected_alerts[i] == msg) {
                        assert_equals(expected_alerts[i], msg);
                        expected_alerts.splice(i, 1);
                        if (expected_alerts.length == 0) {
                            t_alert.done();
                        }
                        return;
                    }
                }
                assert_unreached('unexpected alert: ' + msg);
                t_log.done();
            });
        }

    </script>
    <script>
        alert_assert('PASS (1/1)');

    </script>
    <script>
        alert_assert('FAIL (1/4)');

    </script>
    <script>
        alert_assert('FAIL (2/4)');

    </script>
    <script>
        alert_assert('FAIL (3/4)');

    </script>
    <script>
        alert_assert('FAIL (4/4)');

    </script>
</head>

<body>
    <p>
        This tests the effect of a valid script-hash value, with one valid script and several invalid ones. It passes if one alert is executed and a CSP violation is reported.
    </p>
    <div id="log"></div>
</body>

</html>
