<head>
<script src="../../resources/js-test.js"></script>
<script>
- description('<a href="https://bugs.webkit.org/show_bug.cgi?id=98474">Bug 98474</a>: Throttle DOM timers on hidden pages.');
+ description('<a href="https://bugs.webkit.org/show_bug.cgi?id=98474">Bug 98474</a>: Throttle DOM timers on hidden pages and <a href="http://crbug.com/400343">bug 400343</a> prerender pages.');
var jsTestIsAsync = true;
var previousTime = 0;
var timerCount = 0;
- var firstTimerWhileHidden = true;
+ var firstTimerWhileNotVisible = true;
var isPageVisible = true;
var timeoutInterval = 100;
var tolerance = 20;
{
var time = Date.now();
if (!isPageVisible) {
- if (firstTimerWhileHidden) {
- firstTimerIntervalWhilePageHidden = time - previousTime;
+ if (firstTimerWhileNotVisible) {
+ firstTimerIntervalWhilePageNotVisible = time - previousTime;
var minValue = timeoutInterval - tolerance;
- shouldBeGreaterThanOrEqual("firstTimerIntervalWhilePageHidden", minValue.toString());
+ shouldBeGreaterThanOrEqual("firstTimerIntervalWhilePageNotVisible", minValue.toString());
var maxValue = timeoutInterval + timerAlignmentInterval + tolerance;
- shouldBeTrue("firstTimerIntervalWhilePageHidden <= " + maxValue);
- firstTimerWhileHidden = false;
+ shouldBeTrue("firstTimerIntervalWhilePageNotVisible <= " + maxValue);
+ firstTimerWhileNotVisible = false;
} else {
- timerIntervalWhilePageHidden = time - previousTime;
- shouldBeCloseTo("timerIntervalWhilePageHidden", timerAlignmentInterval, tolerance);
+ timerIntervalWhilePageNotVisible = time - previousTime;
+ shouldBeCloseTo("timerIntervalWhilePageNotVisible", timerAlignmentInterval, tolerance);
}
} else {
timerIntervalWhilePageVisible = time - previousTime;
} else if (timerCount == 3) {
testRunner.setPageVisibility("visible");
isPageVisible = true;
- } else if (timerCount >= 4){
+ } else if (timerCount == 5) {
+ testRunner.setPageVisibility("prerender");
+ isPageVisible = false;
+ firstTimerWhileNotVisible = true;
+ } else if (timerCount == 7) {
+ testRunner.setPageVisibility("visible");
+ isPageVisible = true;
+ } else if (timerCount >= 8){
finishJSTest();
return;
}
</head>
<body onload="runTest()">
<p>
- This test measures the time taken to fire a <span class="timeoutInterval"></span>ms DOM Timer when the page visibility is set to "visible", "hidden" and then back to "visible". Due to hidden page timer throttling, the timer should fire close to <span id="alignmentInterval"></span>s when page is hidden. And it should fire close to <span class="timeoutInterval"></span>ms, when the page is visible.
+ This test measures the time taken to fire a <span class="timeoutInterval"></span>ms DOM Timer when the page visibility is set to "visible", "hidden", "visible", "prerender" and then back to "visible". Due to page timer throttling, the timer should fire close to <span id="alignmentInterval"></span>s when page is hidden or prerender. And it should fire close to <span class="timeoutInterval"></span>ms, when the page is visible.
</p>
</body>
</html>