<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Request ETag</title>
    <meta name="help" href="https://fetch.spec.whatwg.org/#request">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/utils.js"></script>
  </head>
  <body>
    <script>
    promise_test(function() {
      var cacheBuster = token(); // ensures first request is uncached
      var url = "../resources/cache.py?v=" + cacheBuster;
      var etag;

      // make the first request
      return fetch(url).then(function(response) {
        // ensure we're getting the regular, uncached response
        assert_equals(response.status, 200);
        assert_equals(response.headers.get("X-HTTP-STATUS"), null)

        return response.text(); // consuming the body, just to be safe
      }).then(function(body) {
        // make a second request
        return fetch(url);
      }).then(function(response) {
        // while the server responds with 304 if our browser sent the correct
        // If-None-Match request header, at the JavaScript level this surfaces
        // as 200
        assert_equals(response.status, 200);
        assert_equals(response.headers.get("X-HTTP-STATUS"), "304")

        etag = response.headers.get("ETag")

        return response.text(); // consuming the body, just to be safe
      }).then(function(body) {
        // make a third request, explicitly setting If-None-Match request header
        var headers = { "If-None-Match": etag }
        return fetch(url, { headers: headers })
      }).then(function(response) {
        // 304 now surfaces thanks to the explicit If-None-Match request header
        assert_equals(response.status, 304);
      });
    }, "Testing conditional GET with ETags");

    done();
    </script>
  </body>
</html>
