<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/visibility.js"></script>
<script>
description('<a href="http://crbug.com/259680">Bug 259680</a>: JavaScript setInterval lagging behind');
var jsTestIsAsync = true;
var intervalDuration = 1000;
var testDuration = 4000;
var expectedNumFires = 4;
var numFires = 0;
var tolerance = 1;
var intervalID;
var startTime;
function timerFired()
{
++numFires;
var currentTime = new Date().getTime();
if (currentTime >= startTime + testDuration) {
shouldBeCloseTo("numFires", expectedNumFires, tolerance);
clearInterval(intervalID);
finishJSTest();
return;
}
}
function runTest()
{
assert_equals(document.visibilityState, "hidden");
if (!window.testRunner) {
debug('This test requires testRunner');
return;
}
startTime = new Date().getTime();
intervalID = window.setInterval(timerFired, intervalDuration);
}
</script>
</head>
<body onload="setMainWindowHidden(true).then(runTest)">
<p>
This test ensures that intervals on background pages whose duration is close to the timer alignment interval don't miss every other firing.
</p>
</body>
</html>