Index: LayoutTests/http/tests/serviceworker/resource-timing.html |
diff --git a/LayoutTests/http/tests/serviceworker/resource-timing.html b/LayoutTests/http/tests/serviceworker/resource-timing.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..29600aa1b1732a0a7af1c74f978b6d73c9534173 |
--- /dev/null |
+++ b/LayoutTests/http/tests/serviceworker/resource-timing.html |
@@ -0,0 +1,58 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script src="../resources/get-host-info.js"></script> |
+<script src="resources/test-helpers.js"></script> |
+<script> |
+function resourceUrl(path) { |
+ return get_host_info()['HTTP_ORIGIN'] + base_path() + path; |
+} |
+ |
+function verify(performance, resource, description) { |
+ var entry = performance.getEntriesByName(resourceUrl(resource))[0]; |
+ assert_greater_than(entry.workerStart, 0, description); |
+ assert_greater_than_equal(entry.workerStart, entry.startTime, description); |
+ assert_less_than_equal(entry.workerStart, entry.fetchStart, description); |
+ if (resource.indexOf('redirect.php') != -1) { |
+ assert_less_than_equal(entry.workerStart, entry.redirectStart, |
+ description); |
+ } else { |
+ assert_equals(entry.redirectStart, 0, description); |
+ } |
+} |
+ |
+async_test(function(t) { |
+ var worker_url = 'resources/resource-timing-worker.js'; |
+ var scope = 'resources/resource-timing-iframe.html'; |
+ var registration; |
+ |
+ service_worker_unregister_and_register(t, worker_url, scope) |
+ .then(function(r) { |
+ registration = r; |
+ return wait_for_state(t, r.installing, 'activated'); |
+ }) |
+ .then(function() { |
+ return with_iframe(scope); |
+ }) |
+ .then(function(frame) { |
+ var performance = frame.contentWindow.performance; |
+ verify(performance, 'resources/dummy.js', 'Generated response'); |
+ verify(performance, 'resources/empty.js', 'Network fallback'); |
+ verify(performance, 'resources/redirect.php?Redirect=empty.js', |
+ 'Redirect'); |
+ frame.remove(); |
+ return registration.unregister(); |
+ }) |
+ .then(function() { |
+ t.done(); |
+ }) |
+ .catch(unreached_rejection(t)); |
+}, 'Controlled resource loads'); |
+ |
+test(function() { |
+ var url = resourceUrl('resources/test-helpers.js'); |
+ var entry = window.performance.getEntriesByName(url)[0]; |
+ assert_equals(entry.workerStart, 0, 'Non-controlled'); |
+}, 'Non-controlled resource loads'); |
+ |
+</script> |