<!DOCTYPE html>
<meta charset="utf-8">
<title>Test that cache is being bypassed/validated in no-cache mode on update</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>
// Tests a service worker script fetch during an update check which
// bypasses/validates the browser cache. The fetch should have the
// 'if-none-match' request header.
//
// This tests the Update step:
//  "Set request’s cache mode to "no-cache" if any of the following are true..."
// https://w3c.github.io/ServiceWorker/#update-algorithm
//
// The test works by registering a service worker with |updateViaCache|
// set to "none". It then does an update. The test server responds with
// an updated worker script that remembers the http request headers.
// The updated worker reports back these headers to the test page.
promise_test(async (t) => {
  const script = "resources/test-request-headers-worker.py";
  const scope = "resources/";

  // Register the service worker.
  await service_worker_unregister(t, scope);
  const registration = await navigator.serviceWorker.register(
      script, {scope, updateViaCache: 'none'});
  // b/234788479 Implement waiting for update worker state tasks in
  // Install algorithm, otherwise the worker is activated too early
  await wait_for_state(t, get_newest_worker(registration), 'activated');

  // Do an update.
  await registration.update();

  const newWorker = registration.installing;
  const sawMessage = new Promise((resolve) => {
    navigator.serviceWorker.onmessage = (event) => {
      resolve(event.data);
    };
  });
  newWorker.postMessage('getHeaders');
  const result = await sawMessage;

  // Test the result.
  assert_equals(result['service-worker'], 'script');
  assert_equals(result['if-none-match'], 'etag');
}, 'headers in no-cache mode');

</script>
