1<!doctype html> 2<html> 3<head> 4<script src="/resources/testharness.js"></script> 5<script src="/resources/testharnessreport.js"></script> 6</head> 7<body> 8<script> 9const windowOrigin = performance.timeOrigin; 10 11test(() => { 12 // Use a 30ms cushion when comparing with Date() to account for inaccuracy. 13 const startTime = Date.now(); 14 assert_greater_than_equal(startTime + 30, windowOrigin, 'Date.now() should be at least as large as the window timeOrigin.'); 15 const startNow = performance.now(); 16 assert_less_than_equal(startTime, windowOrigin + startNow + 30, 'Date.now() should be close to window timeOrigin.'); 17}, 'Window timeOrigin is close to Date.now() when there is no system clock adjustment.'); 18 19const workerScript = 'postMessage({timeOrigin: performance.timeOrigin})'; 20const blob = new Blob([workerScript]); 21 22async_test(function(t) { 23 const beforeWorkerCreation = performance.now(); 24 const worker = new Worker(URL.createObjectURL(blob)); 25 worker.addEventListener('message', t.step_func_done(function(event) { 26 const workerOrigin = event.data.timeOrigin; 27 assert_greater_than_equal(workerOrigin, windowOrigin + beforeWorkerCreation, 'Worker timeOrigin should be greater than the window timeOrigin.'); 28 const afterWorkerCreation = performance.now(); 29 assert_less_than_equal(workerOrigin - windowOrigin, afterWorkerCreation, 'Window and worker timeOrigins should be close.'); 30 })); 31}, 'Window and worker timeOrigins are close when created one after another.'); 32 33async_test(function(t) { 34 this.step_timeout(function() { 35 const workerCreation = performance.now(); 36 const worker = new Worker(URL.createObjectURL(blob)); 37 worker.addEventListener('message', t.step_func_done(function(event) { 38 const workerOrigin = event.data.timeOrigin; 39 assert_greater_than_equal(workerOrigin - windowOrigin, 200, 'We waited 200ms to spawn the second worker, so its timeOrigin should be greater than that of the window.'); 40 })); 41 }, 200); 42}, 'Window and worker timeOrigins differ when worker is created after a delay.'); 43</script> 44</body> 45</html>