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

    <script>
      var t1 = async_test("Should load the style with a correct hash");
      var t2 = async_test("Should not load style that does not match hash");
      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>#content1 { margin-left: 2px; }</style>
    <style>#content2 { margin-left: 2px; }</style>
</head>
<body>
    <div id='log'></div>

    <div id="content1">Lorem ipsum</div>
    <div id="content2">Lorem ipsum</div>

    <script>
      function make_assert(contentId, assertTrue) {
        var contentEl = document.getElementById(contentId);
        var marginLeftVal = getComputedStyle(contentEl).getPropertyValue('margin-left');
        if (assertTrue) assert_true(marginLeftVal == "2px");
        else assert_false(marginLeftVal == "2px");
      }

      t1.step(function() {
        make_assert("content1", true);
        t1.done();
      });

      t2.step(function() {
        make_assert("content2", false);
        t2.done();
      });

    </script>
</body>
</html>
