diff options
Diffstat (limited to 'docshell/test/test_bug570341.html')
-rw-r--r-- | docshell/test/test_bug570341.html | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/docshell/test/test_bug570341.html b/docshell/test/test_bug570341.html new file mode 100644 index 000000000..d09afa4bd --- /dev/null +++ b/docshell/test/test_bug570341.html @@ -0,0 +1,142 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=570341 +--> +<head> + <title>Test for Bug 570341</title> + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +<script> + var start = Date.now(); + var moments = {}; + + var unload = 0; + var wasEnabled = true; + + function collectMoments() { + var win = frames[0]; + var timing = (win.performance && win.performance.timing) || {}; + for (var p in timing) { + moments[p] = timing[p]; + } + for (var p in win) { + if (p.substring(0,9) == '_testing_') { + moments[p.substring(9)] = win[p]; + } + } + moments['evt_unload'] = unload; + return moments; + } + + function showSequence(node){ + while(node.firstChild) { + node.removeChild(node.firstChild); + } + var sequence = []; + for (var p in moments) { + sequence.push(p); + } + sequence.sort(function(a, b){ + return moments[a] - moments[b]; + }); + table = document.createElement('table'); + node.appendChild(table); + row = document.createElement('tr'); + table.appendChild(row); + cell = document.createElement('td'); + row.appendChild(cell); + cell.appendChild(document.createTextNode('start')); + cell = document.createElement('td'); + row.appendChild(cell); + cell.appendChild(document.createTextNode(start)); + for (var i = 0; i < sequence.length; ++i) { + var prop = sequence[i]; + row = document.createElement('tr'); + table.appendChild(row); + cell = document.createElement('td'); + row.appendChild(cell); + cell.appendChild(document.createTextNode(prop)); + cell = document.createElement('td'); + row.appendChild(cell); + cell.appendChild(document.createTextNode(moments[prop])); + } + } + + function checkValues(){ + var win = frames[0]; + ok(win.performance, + 'window.performance is missing or not accessible for frame'); + ok(!win.performance || win.performance.timing, + 'window.performance.timing is missing or not accessible for frame'); + collectMoments(); + + var sequences = [ + ['navigationStart', 'unloadEventStart', 'unloadEventEnd'], + ['navigationStart', 'fetchStart', 'domainLookupStart', 'domainLookupEnd', + 'connectStart', 'connectEnd', 'requestStart', 'responseStart', 'responseEnd'], + ['responseStart', 'domLoading', 'domInteractive', 'domComplete'], + ['domContentLoadedEventStart', 'domContentLoadedEventEnd', + 'loadEventStart', 'loadEventEnd'] + ] + + for (var i = 0; i < sequences.length; ++i) { + var seq = sequences[i]; + for (var j = 0; j < seq.length; ++j) { + var prop = seq[j]; + if (j > 0) { + var prevProp = seq[j-1]; + ok(moments[prevProp] <= moments[prop], + ['Expected ', prevProp, ' to happen before ', prop, + ', got ', prevProp, ' = ', moments[prevProp], + ', ', prop, ' = ', moments[prop]].join('')); + } + } + } + + SimpleTest.finish() + } + +window.onload = function() { + var win = frames[0]; + win.addEventListener('unload', function(){ + unload = Date.now(); + }, true); + var seenLoad = 0; + win.addEventListener('load', function (){ + seenLoad = Date.now(); + }, true); + frames[0].location = 'bug570341_recordevents.html' + var interval = setInterval(function () { + // time constants here are arbitrary, chosen to allow the test to pass + var stopPolling = (win.performance && win.performance.loadEventEnd) || + (seenLoad && Date.now() >= seenLoad + 3000) || + Date.now() >= start + 30000; + if (stopPolling) { + clearInterval(interval); + checkValues(); + } else if (win._testing_evt_load) { + seenLoad = Date.now(); + } + }, 100); +} +</script> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=570341">Mozilla Bug 570341</a> +<div id="frames"> +<iframe name="child0" src="navigation/blank.html"></iframe> +</div> +<button type="button" onclick="showSequence(document.getElementById('display'))"> + Show Events</button> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script type="application/javascript"> +SimpleTest.waitForExplicitFinish(); +</script> +</pre> +</body> +</html> |