<!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>
function wait25ms(test) {
  return new Promise(resolve => {
    test.step_timeout(() => {
      resolve();
    }, 25);
  });
}

promise_test(async (test) => {
  var request_token = token();
  var client_hint_headers = [
    "device-memory",
    "dpr",
    "width",
    "viewport-width",
    "rtt",
    "downlink",
    "ect",
    "sec-ch-lang",
    "sec-ch-ua",
    "sec-ch-ua-arch",
    "sec-ch-ua-platform",
    "sec-ch-ua-model",
  ];

  const response = await fetch(`resources/stale-echo-client-hints.py?token=` + request_token);
  const response2 = await fetch(`resources/stale-echo-client-hints.py?token=` + request_token);

  assert_equals(response.headers.get('Unique-Id'), response2.headers.get('Unique-Id'));

  while(true) {
    const revalidation_check = await fetch(`resources/stale-echo-client-hints.py?query&token=` + request_token);
    if (revalidation_check.headers.get('Count') == '2') {
      client_hint_headers.forEach(header => {
        assert_equals(revalidation_check.headers.get(header+"-recieved"), revalidation_check.headers.get(header+"-previous"));
      });
      break;
    }
    await wait25ms(test);
  }
}, 'Same headers sent for revalidation request');
</script>