• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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>