<!DOCTYPE HTML>
<html>
<head>
  <title>Test that reports are sent when report-endpoint points to path-absolute-url</title>
  <script src='/resources/testharness.js'></script>
  <script src='/resources/testharnessreport.js'></script>
  <script src='resources/report-helper.js'></script>
</head>
<body>
  <script>
    var t = async_test("Test that image does not load");
    const base_url = `${location.protocol}//${location.host}`;
    async_test(function(t) {
    window.addEventListener("securitypolicyviolation", t.step_func(function(e) {
        assert_equals(e.blockedURI, `${base_url}/reporting/resources/fail.png`);
        assert_equals(e.violatedDirective, "img-src");
        t.done();
      }));
    }, "Event is fired");

    async_test(function(t) {
      var observer = new ReportingObserver(function(reports, observer) {
        t.step(function() {
          assert_equals(reports.length, 1);

          // Ensure that the contents of the report are valid.

          assert_equals(reports[0].type, "csp-violation");
          assert_equals(reports[0].url, location.href);
          assert_equals(reports[0].body.documentURL, location.href);
          assert_equals(reports[0].body.referrer, "");
          assert_equals(reports[0].body.blockedURL,
                        `${base_url}/reporting/resources/fail.png`);
          assert_equals(reports[0].body.effectiveDirective, "img-src");
          assert_equals(reports[0].body.originalPolicy,
                        "script-src 'self' 'unsafe-inline'; img-src 'none'; report-to csp-group");
          assert_equals(reports[0].body.sourceFile, location.href);
          assert_equals(reports[0].body.sample, "");
          assert_equals(reports[0].body.disposition, "enforce");
          assert_equals(reports[0].body.statusCode, 200);
          assert_equals(reports[0].body.lineNumber, 61);
          assert_equals(reports[0].body.columnNumber, 0);
        });

        t.done();
      });
      observer.observe();
    }, "Report is observable to ReportingObserver");
  </script>
  <img src='/reporting/resources/fail.png'
    onload='t.unreached_func("The image should not have loaded");'
    onerror='t.done();'>
  <script>
    promise_test(async t => {
      const endpoint = `${base_url}/reporting/resources/report.py`;
      const id = '33444bb6-e444-4978-9d62-d3825844041f';
      await wait(3000);
      const reports = await pollReports(endpoint, id);
      checkReportExists(reports, 'csp-violation', location.href);
    }, "Reporting endpoints received reports.");
  </script>

</body>
</html>
