<!doctype html>
<html>
<head>
    <meta http-equiv="Content-Security-Policy" content="style-src 'nonce-nonceynonce';">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>

    <script>
      var t_spv = async_test("Should fire a securitypolicyviolation event");

      document.addEventListener("securitypolicyviolation", t_spv.step_func_done(function(e) {
        assert_equals("style-src-elem", e.violatedDirective);
      }));
    </script>
    <style id="style1" nonce="not-nonceynonce"
           onerror="styleError();">
        #content {
            margin-left: 2px;
        }
    </style>
</head>
<body>
    <div id='log'></div>

    <div id="content">Lorem ipsum</div>

    <script>
        function verifyStep1() {
            var marginLeft = getComputedStyle(document.querySelector("#content")).getPropertyValue('margin-left');
            assert_false(marginLeft == '2px', "Content still does not have a 2px margin-left after initial style.");
        }

        function setupStep2() {
            var sty = document.createElement("style");
            sty.nonce = "not-nonceynonce";
            sty.innerHTML = "#content { margin-left: 2px; }";
            sty.onerror = styleError;
            document.body.appendChild(sty);
        }
        function verifyStep2() {
            var marginLeft = getComputedStyle(document.querySelector("#content")).getPropertyValue('margin-left');
            assert_false(marginLeft == '2px', "Content still does not have a 2px margin-left after inserted style.");
        }

        function setupStep3() {
            var e = document.getElementById('style1');
            e.innerHTML = "#content { margin-left: 2px; }";
        }
        function verifyStep3() {
            var marginLeft = getComputedStyle(document.querySelector("#content")).getPropertyValue('margin-left');
            assert_false(marginLeft == '2px', "Content still does not have a 2px margin-left after changing style.");
            test.done();
        }

        var verifySteps = [ verifyStep1, verifyStep2, verifyStep3 ];
        var setupSteps = [ setupStep2, setupStep3 ];

        var test = async_test("Test that paragraph remains unmodified and error events received.");

        function styleError() {
            test.step(function() {
                verifySteps.shift()();
                var nextSetup = setupSteps.shift();
                if (nextSetup)
                    nextSetup();
            });
        }
    </script>

</body>
</html>
