<!DOCTYPE html>
<meta name="timeout" content="long">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>

<script>
const worker = 'resources/fetch-event-within-sw-worker.js';

async function registerSwAndOpenFrame(t) {
  const registration = await navigator.serviceWorker.register(
      worker, { scope: 'resources/' });
  t.add_cleanup(() => registration.unregister());
  await wait_for_state(t, registration.installing, 'activated');

  const frame = await with_iframe('resources/simple.html');
  t.add_cleanup(() => frame.remove());
  return frame;
}

async function deleteCaches() {
  const cacheKeys = await caches.keys();
  await Promise.all(cacheKeys.map(c => caches.delete(c)));
}

promise_test(async t => {
  t.add_cleanup(deleteCaches);

  const iframe = await registerSwAndOpenFrame(t);
  const fetchText =
      await iframe.contentWindow.fetch('sample.txt').then(r => r.text());

  const cache = await iframe.contentWindow.caches.open('test');
  await cache.add('sample.txt');

  const response = await cache.match('sample.txt');
  const cacheText = await (response ? response.text() : 'cache match failed');
  assert_equals(fetchText, 'intercepted', 'fetch intercepted');
  assert_equals(cacheText, 'intercepted', 'cache.add intercepted');
}, 'Service worker intercepts requests from window');

promise_test(async t => {
  const iframe = await registerSwAndOpenFrame(t);
  const [fetchText, cacheText] = await Promise.all([
    iframe.contentWindow.fetch('sample.txt-inner-fetch').then(r => r.text()),
    iframe.contentWindow.fetch('sample.txt-inner-cache').then(r => r.text())
  ]);
  assert_equals(fetchText, 'Hello world\n', 'fetch within SW not intercepted');
  assert_equals(cacheText, 'Hello world\n',
                'cache.add within SW not intercepted');
}, 'Service worker does not intercept fetch/cache requests within service ' +
   'worker');
</script>
