<!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-ua",
    "sec-ch-ua-arch",
    "sec-ch-ua-platform",
    "sec-ch-ua-platform-version",
    "sec-ch-ua-model",
    "sec-ch-ua-mobile",
    "sec-ch-prefers-color-scheme",
    "sec-ch-viewport-height",
  ];

  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>
