<!DOCTYPE HTML>
<html>
<head>
  <title>Test that reports are sent without credentials to cross-origin endpoints</title>
  <script src='/resources/testharness.js'></script>
  <script src='/resources/testharnessreport.js'></script>
  <script src='resources/report-helper.js'></script>
</head>
<body>
  <script>
    const base_url = `${location.protocol}//${location.host}`;
    const endpoint = `${base_url}/reporting/resources/report.py`;
      const id = 'fe5ca189-269a-4e74-a4dd-d7a3b33139d5';

    promise_test(async t => {
      // Set credentials, and set up test to clear them afterwards.
      await fetch('/cookies/resources/set-cookie.py?name=report&path=%2F', {mode: 'no-cors', credentials: 'include', cache: 'no-store'});
      t.add_cleanup(() => fetch("/cookies/resources/set.py?report=; path=%2F; expires=Thu, 01 Jan 1970 00:00:01 GMT"));

      // Trigger a CSP error.
      await new Promise(resolve => {
        const img = document.createElement('img');
        img.src = "/reporting/resources/fail.png";
        img.addEventListener('error', resolve);
        document.body.appendChild(img);
      });

      // Wait for report to be received.
      await wait(3000);
      const reports = await pollReports(endpoint, id);
      checkReportExists(reports, 'csp-violation', location.href);

      // Validate that credentials were not sent to cross-origin endpoint.
      const cookies = await pollCookies(endpoint, id);
      assert_equals(Object.keys(cookies).length, 0, "Credentials were absent from report");
    }, "Reporting endpoints did not receive credentials.");
  </script>
</body>
</html>
