<!--
    This file is modified for Cobalt. The event handlers are set in script
    instead of in tag attribute.
-->
<!DOCTYPE HTML>
<html>
<head>
    <title>default-src should cascade to img-src directive</title>
    <script src='/resources/testharness.js'></script>
    <script src='/resources/testharnessreport.js'></script>
    <script src='../support/siblingPath.js'></script>
</head>
<body>
    <h1>default-src should cascade to img-src directive</h1>
    <div id='log'></div>

    <script>
      var imgsrc = async_test("Verify cascading of default-src to img-src policy");
      var onerrorFired = false;
    </script>

    <img id='imgfail' src=''>
    <img id='imgpass' src='../support/pass.png'>

    <script>
      document.getElementById('imgfail').onload = function() {
        imgsrc.step(function() { assert_unreached("Image load was not blocked."); });
      }
      document.getElementById('imgfail').onerror = function() {
        onerrorFired = true;
      }
      document.getElementById('imgpass').onload = function() {
        imgsrc.step(function() { assert_true(true, "Image load was blocked."); });
      }
      document.getElementById('imgfail').src = buildSiblingPath('www1', '../support/fail.png');
      onload = function() {
        imgsrc.step(function() { assert_true(onerrorFired, "onerror handler for blocked img didn't fire");});
        imgsrc.done();
      }
    </script>

    <script async defer src='../support/checkReport.sub.js?reportField=violated-directive&reportValue=default-src%20%27self%27%20%27unsafe-inline%27'></script>

</body>
</html>
