<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests Stale While Revalidate is not executed for fetch API</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script>
const verify_headers = (header_list, response, verification_func) => {
  header_list.forEach(header => {
    const value = response.headers.get(header+"-recieved");
    if(value) {
      verification_func(value);
    }
  });
};

promise_test(async (test) => {
  const request_token = token();
  const string_list_client_hint_headers = [
    "sec-ch-ua",
  ];
  const string_client_hint_headers = [
    "sec-ch-ua-arch",
    "sec-ch-ua-platform",
    "sec-ch-ua-platform-version",
    "sec-ch-ua-model",
    "sec-ch-ua-full-version",
    "sec-ch-prefers-color-scheme",
    "sec-ch-ua-full-version-list",
  ];
  const boolean_client_hint_headers = [
    "sec-ch-mobile",
  ];

  const response = await fetch("resources/echo-ua-client-hints-received.py");
  verify_headers(string_client_hint_headers, response, value => {
    if(value) {
      // Check that the hints have quotes
      // TODO(yoav): this doesn't account for parameters. Need an SH parser, that verifies no parameters are present.
      assert_equals(value.slice(0,1), "\"");
      assert_equals(value.slice(-1), "\"");
    }
  });
  verify_headers(string_list_client_hint_headers, response, value => {
    // Check that the hints have quotes
    // TODO(yoav): this doesn't account for list parsing or parameters. Need an SH parser, that verifies this is a list of strings with a "v" parameter present in at least one value.
    assert_false((typeof value) == "undefined");
    assert_equals(value.slice(0,1), "\"");
    assert_equals(value.slice(-1), "\"");
  });
  verify_headers(boolean_client_hint_headers, response, value => {
    if(value) {
      // Check that the value is a valid boolean
      assert_false((typeof value) == "undefined");
      assert_equals(value.slice(0,1), "?");
      const num = value.slice(-1);
      assert_true(num == "0" || num == "1");
    }
  });
}, 'User agent client hint header values are surrounded by quotes');
</script>
