<!DOCTYPE html>
<!-- TODO(kristijanburnik): Remove subres. duplication. Reuse a template. -->
<html>
  <head>
    <title>Fetch messaging - same-origin Fetch request</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <!-- Common global functions for referrer-policy tests. -->
    <script src="/referrer-policy/generic/common.js"></script>
  </head>
  <body>
    <h1>Fetch messaging - same-origin Fetch request</h1>
    <p>If you can read JSON encoded HTTP request headers of the Fetch below,
       the messaging works as expected.</p>

    <pre id="received_message">Running...</pre>

    <script>
      test(function() {
        assert_true(!!window.fetch, "Fetch is not supported by this browser.");
      }, "Fetch is supported by the browser.");

      (function() {
        if (!window.fetch)
          return;

        var fetch_test = async_test("Fetch is responding with HTTP headers");
        var urlPath = '/referrer-policy/generic/subresource/xhr.py';
        var url = location.protocol + "//" + location.hostname + ":" +
                  location.port + urlPath;
        queryFetch(url, function(message) {
          var pre = document.getElementById('received_message')
          var headers = message.headers;
          pre.innerHTML = "";
          pre.innerHTML += url + ":\n\n";
          pre.innerHTML += JSON.stringify(headers, null, 2) + "\n\n";
          fetch_test.step(function() {
            assert_own_property(headers, "host")
            assert_own_property(headers, "connection")
          });
          fetch_test.done();
        });
      })();
    </script>

    <div id="log"></div>
  </body>
</html>
