summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/general/navigation_timing.html
blob: 72ce60fb73ecfe5d268aa68b29df3be4fee8ebc6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<!--
  Any copyright is dedicated to the Public Domain.
  http://creativecommons.org/publicdomain/zero/1.0/
-->

<!DOCTYPE html>
<html>
<head>
	<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
	<script type="application/javascript">

var timingParams = [
  "navigationStart",
  "unloadEventStart",
  "unloadEventEnd",
  "redirectStart",
  "redirectEnd",
  "fetchStart",
  "domainLookupStart",
  "domainLookupEnd",
  "connectStart",
  "connectEnd",
  "requestStart",
  "responseStart",
  "responseEnd",
  "domLoading",
  "domInteractive",
  "domContentLoadedEventStart",
  "domContentLoadedEventEnd",
  "domComplete",
  "loadEventStart",
  "loadEventEnd"
  ];

function is(received, expected, message) {
  window.opener.is(received, expected, message);
}

function isnot(received, notExpected, message) {
  window.opener.isnot(received, notExpected, message);
}

window.onload = function() {
  if (location.href.includes("_blank")) {
    test_blank();
    return;
  }

  if (location.href.includes("_self")) {
    test_self();
    return;
  }
}

function checkTimingValues(expectedValues) {
  for (var name of timingParams) {
    if (name in expectedValues) {
      is(window.performance.timing[name], expectedValues[name], name+" should be "+expectedValues[name]);
    } else {
      isnot(window.performance.timing[name], 0, name+" should not be 0");
    }
  }
}

function test_blank() {
  // We set a timeout to make sure this is run after onload is called
  setTimeout(function(){
    // When loading the page in _blank, unloadEvent and redirect timestamps should be 0
    var expectedValues = { "unloadEventStart": 0, "unloadEventEnd": 0, "redirectStart": 0, "redirectEnd": 0 };
    checkTimingValues(expectedValues);

    // change location in order to test a _self load
    window.location.href = "navigation_timing.html?x=1#_self";
  }, 0);
}

function test_self() {
  // We set a timeout to make sure this is run after onload is called
  setTimeout(function(){
    // When simply loading in _self, redirect timestamps should be 0 (unloadEventStart/End != 0)
    var expectedValues = { "redirectStart": 0, "redirectEnd": 0 };
    checkTimingValues(expectedValues);

    window.opener.finishTests();
  }, 0);
}

</script>

</script>
</head>
<body>
  <a target="_blank"
     href="https://bugzilla.mozilla.org/show_bug.cgi?id=1099092"
     title="Navigation timing">
    Bug #1099092 - Navigation Timing has incorrect values when page is load via link with target=_blank attribute
  </a>
  <p id="display"></p>
</body>
</html>