| OLD | NEW |
| 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/js-test.js"></script> |
| 5 </head> | 5 </head> |
| 6 <body> | 6 <body> |
| 7 <script src="script-tests/webtiming.js"></script> | 7 <script> |
| 8 <script src="script-tests/webtiming-defer.js" defer></script> | 8 description("This test checks that all of the <a href='http://dev.w3.org/2006/we
bapi/WebTiming/'>Web Timing</a> attributes are available and have reasonable val
ues in the right order."); |
| 9 |
| 10 window.performance = window.performance || {}; |
| 11 var navigation = performance.navigation || {}; |
| 12 var timing = performance.timing || {}; |
| 13 |
| 14 // Get the order of magnitude correct without a chance for flakiness. |
| 15 var oneHourMilliseconds = 60 * 60 * 1000; |
| 16 var currentUTC = 0; // FIXME: Use performance.now() when available. |
| 17 var oneHourAgoUTC = currentUTC - oneHourMilliseconds; |
| 18 |
| 19 function sleepFiftyMilliseconds() { |
| 20 var endTime = (new Date()).getTime() + 50; |
| 21 while ((new Date().getTime() < endTime)) { } |
| 22 } |
| 23 window.addEventListener("load", sleepFiftyMilliseconds, false); |
| 24 |
| 25 function checkTimingBeforeLoad() |
| 26 { |
| 27 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 28 |
| 29 shouldBe("timing.redirectStart", "0"); |
| 30 shouldBe("timing.redirectEnd", "0"); |
| 31 shouldBe("navigation.redirectCount", "0"); |
| 32 |
| 33 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 34 |
| 35 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 36 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 37 |
| 38 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 39 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 40 |
| 41 shouldBe("timing.secureConnectionStart", "0"); |
| 42 |
| 43 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 44 |
| 45 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 46 |
| 47 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 48 shouldBe("timing.domInteractive", "0"); |
| 49 shouldBe("timing.domContentLoadedEventStart", "0"); |
| 50 shouldBe("timing.domContentLoadedEventEnd", "0"); |
| 51 shouldBe("timing.domComplete", "0"); |
| 52 |
| 53 shouldBe("timing.loadEventStart", "0"); |
| 54 shouldBe("timing.loadEventEnd", "0"); |
| 55 } |
| 56 |
| 57 function checkTimingWhileDeferred() |
| 58 { |
| 59 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 60 |
| 61 shouldBe("timing.redirectStart", "0"); |
| 62 shouldBe("timing.redirectEnd", "0"); |
| 63 shouldBe("navigation.redirectCount", "0"); |
| 64 |
| 65 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 66 |
| 67 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 68 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 69 |
| 70 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 71 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 72 |
| 73 shouldBe("timing.secureConnectionStart", "0"); |
| 74 |
| 75 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 76 |
| 77 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 78 |
| 79 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 80 shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.domLoading"); |
| 81 shouldBe("timing.domContentLoadedEventStart", "0"); |
| 82 shouldBe("timing.domContentLoadedEventEnd", "0"); |
| 83 shouldBe("timing.domComplete", "0"); |
| 84 |
| 85 shouldBe("timing.loadEventStart", "0"); |
| 86 shouldBe("timing.loadEventEnd", "0"); |
| 87 |
| 88 window.addEventListener("DOMContentLoaded", checkWebTimingOnDOMContentLoaded
, false); |
| 89 } |
| 90 |
| 91 function checkWebTimingOnDOMContentLoaded() { |
| 92 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 93 |
| 94 shouldBe("timing.redirectStart", "0"); |
| 95 shouldBe("timing.redirectEnd", "0"); |
| 96 shouldBe("navigation.redirectCount", "0"); |
| 97 |
| 98 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 99 |
| 100 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 101 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 102 |
| 103 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 104 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 105 |
| 106 shouldBe("timing.secureConnectionStart", "0"); |
| 107 |
| 108 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 109 |
| 110 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 111 |
| 112 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 113 shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.domLoading"); |
| 114 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventStart", "timing.domI
nteractive"); |
| 115 shouldBe("timing.domContentLoadedEventEnd", "0"); |
| 116 shouldBe("timing.domComplete", "0"); |
| 117 |
| 118 shouldBe("timing.loadEventStart", "0"); |
| 119 shouldBe("timing.loadEventEnd", "0"); |
| 120 |
| 121 var body = document.getElementsByTagName("body")[0]; |
| 122 var script = document.createElement("script"); |
| 123 script.async = true; |
| 124 script.type = "text/javascript"; |
| 125 script.src = "resources/webtiming-async.js"; |
| 126 body.appendChild(script); |
| 127 } |
| 128 |
| 129 function checkWebTimingWhileAsync() |
| 130 { |
| 131 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 132 |
| 133 shouldBe("timing.redirectStart", "0"); |
| 134 shouldBe("timing.redirectEnd", "0"); |
| 135 shouldBe("navigation.redirectCount", "0"); |
| 136 |
| 137 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 138 |
| 139 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 140 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 141 |
| 142 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 143 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 144 |
| 145 shouldBe("timing.secureConnectionStart", "0"); |
| 146 |
| 147 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 148 |
| 149 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 150 |
| 151 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 152 shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd"); |
| 153 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventStart", "timing.domI
nteractive"); |
| 154 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventEnd", "timing.domCon
tentLoadedEventStart"); |
| 155 shouldBe("timing.domComplete", "0"); |
| 156 |
| 157 shouldBe("timing.loadEventStart", "0"); |
| 158 shouldBe("timing.loadEventEnd", "0"); |
| 159 |
| 160 window.addEventListener("load", checkWebTimingOnLoad, false); |
| 161 } |
| 162 |
| 163 function checkWebTimingOnLoad() |
| 164 { |
| 165 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 166 |
| 167 shouldBe("timing.redirectStart", "0"); |
| 168 shouldBe("timing.redirectEnd", "0"); |
| 169 shouldBe("navigation.redirectCount", "0"); |
| 170 |
| 171 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 172 |
| 173 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 174 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 175 |
| 176 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 177 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 178 |
| 179 shouldBe("timing.secureConnectionStart", "0"); |
| 180 |
| 181 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 182 |
| 183 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 184 shouldBeGreaterThanOrEqual("timing.responseEnd", "timing.responseStart"); |
| 185 |
| 186 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 187 shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd"); |
| 188 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventStart", "timing.domI
nteractive"); |
| 189 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventEnd", "timing.domCon
tentLoadedEventStart"); |
| 190 shouldBeGreaterThanOrEqual("timing.domComplete", "timing.domContentLoadedEve
ntEnd"); |
| 191 |
| 192 shouldBeGreaterThanOrEqual("timing.loadEventStart", "timing.responseEnd"); |
| 193 shouldBe("timing.loadEventEnd", "0"); |
| 194 |
| 195 setTimeout("checkWebTimingAfterLoad()", 0); |
| 196 } |
| 197 |
| 198 function checkWebTimingAfterLoad() |
| 199 { |
| 200 shouldBeGreaterThanOrEqual("timing.navigationStart", "oneHourAgoUTC"); |
| 201 |
| 202 shouldBe("timing.redirectStart", "0"); |
| 203 shouldBe("timing.redirectEnd", "0"); |
| 204 shouldBe("navigation.redirectCount", "0"); |
| 205 |
| 206 shouldBeGreaterThanOrEqual("timing.fetchStart", "timing.navigationStart"); |
| 207 |
| 208 shouldBeGreaterThanOrEqual("timing.domainLookupStart", "timing.fetchStart"); |
| 209 shouldBeGreaterThanOrEqual("timing.domainLookupEnd", "timing.domainLookupSta
rt"); |
| 210 |
| 211 shouldBeGreaterThanOrEqual("timing.connectStart", "timing.domainLookupEnd"); |
| 212 shouldBeGreaterThanOrEqual("timing.connectEnd", "timing.connectStart"); |
| 213 |
| 214 shouldBe("timing.secureConnectionStart", "0"); |
| 215 |
| 216 shouldBeGreaterThanOrEqual("timing.requestStart", "timing.connectEnd"); |
| 217 |
| 218 shouldBeGreaterThanOrEqual("timing.responseStart", "timing.requestStart"); |
| 219 shouldBeGreaterThanOrEqual("timing.responseEnd", "timing.responseStart"); |
| 220 |
| 221 shouldBeGreaterThanOrEqual("timing.domLoading", "timing.fetchStart"); |
| 222 shouldBeGreaterThanOrEqual("timing.domInteractive", "timing.responseEnd"); |
| 223 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventStart", "timing.domI
nteractive"); |
| 224 shouldBeGreaterThanOrEqual("timing.domContentLoadedEventEnd", "timing.domCon
tentLoadedEventStart"); |
| 225 shouldBeGreaterThanOrEqual("timing.domComplete", "timing.domContentLoadedEve
ntEnd"); |
| 226 |
| 227 shouldBeGreaterThanOrEqual("timing.loadEventStart", "timing.responseEnd"); |
| 228 shouldBeGreaterThanOrEqual("timing.loadEventEnd", "timing.loadEventStart + 5
0"); |
| 229 |
| 230 finishJSTest(); |
| 231 } |
| 232 |
| 233 jsTestIsAsync = true; |
| 234 checkTimingBeforeLoad(); |
| 235 </script> |
| 236 <script src="resources/webtiming-defer.js" defer></script> |
| 9 </body> | 237 </body> |
| 10 </html> | 238 </html> |
| OLD | NEW |