<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/test-helpers.sub.js"></script>
<script>

service_worker_test(
    'resources/performance-timeline-worker.js',
    'Test Performance Timeline API in Service Worker');

// The purpose of this test is to verify that service worker overhead
// is included in the Performance API's timing information.
promise_test(t => {
  let script = 'resources/empty-but-slow-worker.js';
  let scope = 'resources/dummy.txt?slow-sw-timing';
  let url = new URL(scope, window.location).href;
  let slowURL = url + '&slow';
  let frame;
  return service_worker_unregister_and_register(t, script, scope)
    .then(reg => {
        t.add_cleanup(() => service_worker_unregister(t, scope));

        return wait_for_state(t, reg.installing, 'activated');
      })
    .then(_ => with_iframe(scope))
    .then(f => {
      frame = f;
      return frame.contentWindow.fetch(url).then(r => r && r.text());
    })
    .then(_ => {
      return frame.contentWindow.fetch(slowURL).then(r => r && r.text());
    })
    .then(_ => {
      function elapsed(u) {
        let entry = frame.contentWindow.performance.getEntriesByName(u);
        return entry[0] ? entry[0].duration : undefined;
      }
      let urlTime = elapsed(url);
      let slowURLTime = elapsed(slowURL);
      // Verify the request slowed by the service worker is indeed measured
      // to be slower.  Note, we compare to smaller delay instead of the exact
      // delay amount to avoid making the test racy under automation.
      assert_greater_than(slowURLTime, urlTime + 1000,
                  'Slow service worker request should measure increased delay.');
      frame.remove();
    })
}, 'empty service worker fetch event included in performance timings');

</script>
