<!DOCTYPE html>
<html>
    <head>
    <meta http-equiv="Content-Security-Policy" content="script-src 'nonce-nonce' *; connect-src 'self';">
    <title>script-src disallowed wildcard use</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    </head>
    <body>
    <script nonce="nonce">
        var t1 = async_test('data: URIs should not match *');
        t1.step(function() {
            var script = document.createElement("script");
            script.src = 'data:application/javascript,';
            script.addEventListener('load', t1.step_func(function() {
                assert_unreached('Should not successfully load data URI.');
            }));
            script.addEventListener('error', t1.step_func(function() {
                t1.done();
            }));
            document.head.appendChild(script);
        });

        var t2 = async_test('blob: URIs should not match *');
        t2.step(function() {
            var b = new Blob([''], { type: 'application/javascript' });
            var script = document.createElement('script');
            script.addEventListener('load', t2.step_func(function() {
                assert_unreached('Should not successfully load blob URI.');
            }));
            script.addEventListener('error', t2.step_func(function() {
                t2.done();
            }));

            script.src = URL.createObjectURL(b);
            document.head.appendChild(script);
        });

        var t3 = async_test('filesystem URIs should not match *');
        if (window.webkitRequestFileSystem) {
            window.webkitRequestFileSystem(TEMPORARY, 1024*1024 /*1MB*/, function(fs) {
                fs.root.getFile('fail.js', {create: true}, function(fileEntry) {
                    fileEntry.createWriter(function(fileWriter) {
                        var script = document.createElement('script');

                        script.addEventListener('load', t3.step_func(function() {
                            assert_unreached('Should not successfully load filesystem URI.');
                        }));
                        script.addEventListener('error', t3.step_func(function() {
                            t3.done();
                        }));

                        script.src = fileEntry.toURL('application/javascript');
                        document.body.appendChild(script);
                    });
                });
            });
        } else {
          t3.done();
        }
    </script>
    </body>
</html>
