Index: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/performance-timeline.https.html |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/performance-timeline.https.html b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/performance-timeline.https.html |
index 182076baa9841f1aed31175ff960fa063d6ef0c0..d2ed677e6d011c9cf3aeb22a7bbf8cdb5d5e4b61 100644 |
--- a/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/performance-timeline.https.html |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/performance-timeline.https.html |
@@ -8,4 +8,45 @@ 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 => wait_for_state(t, reg.installing, 'activated')) |
+ .then(_ => with_iframe(scope)) |
+ .then(f => { |
+ frame = f; |
+ return Promise.all([ |
+ // This will get effectively an empty service worker FetchEvent |
+ // handler. It should have no additional delay. Note that the |
+ // text() call is necessary to complete the response and have the |
+ // timings show up in the performance entries. |
+ frame.contentWindow.fetch(url).then(r => r && r.text()), |
+ // This will cause the service worker to spin for two seconds |
+ // in its FetchEvent handler. |
+ 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_true(slowURLTime >= urlTime + 1500, |
+ 'Slow service worker request should measure increased delay.'); |
+ frame.remove(); |
+ return service_worker_unregister_and_done(t, scope); |
+ }) |
+}, 'empty service worker fetch event included in performance timings'); |
+ |
</script> |