3 <script src=
"../../resources/js-test.js"></script>
5 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.');
7 var jsTestIsAsync
= true;
10 var firstTimerWhileNotVisible
= true;
11 var isPageVisible
= true;
12 var timeoutInterval
= 100;
14 var timerAlignmentInterval
= 1000;
18 var time
= Date
.now();
20 if (firstTimerWhileNotVisible
) {
21 firstTimerIntervalWhilePageNotVisible
= time
- previousTime
;
22 var minValue
= timeoutInterval
- tolerance
;
23 shouldBeGreaterThanOrEqual("firstTimerIntervalWhilePageNotVisible", minValue
.toString());
24 var maxValue
= timeoutInterval
+ timerAlignmentInterval
+ tolerance
;
25 shouldBeTrue("firstTimerIntervalWhilePageNotVisible <= " + maxValue
);
26 firstTimerWhileNotVisible
= false;
28 timerIntervalWhilePageNotVisible
= time
- previousTime
;
29 shouldBeCloseTo("timerIntervalWhilePageNotVisible", timerAlignmentInterval
, tolerance
);
32 timerIntervalWhilePageVisible
= time
- previousTime
;
33 shouldBeCloseTo("timerIntervalWhilePageVisible", timeoutInterval
, tolerance
);
39 if (timerCount
== 1) {
40 testRunner
.setPageVisibility("hidden");
41 isPageVisible
= false;
42 } else if (timerCount
== 3) {
43 testRunner
.setPageVisibility("visible");
45 } else if (timerCount
== 5) {
46 testRunner
.setPageVisibility("prerender");
47 isPageVisible
= false;
48 firstTimerWhileNotVisible
= true;
49 } else if (timerCount
== 7) {
50 testRunner
.setPageVisibility("visible");
52 } else if (timerCount
>= 8){
56 previousTime
= Date
.now();
57 setTimeout(testTimer
, timeoutInterval
);
62 if (!window
.testRunner
) {
63 debug('This test requires testRunner');
67 var timeoutIntervalSpans
= document
.getElementsByClassName('timeoutInterval');
68 for (var i
= 0; i
< timeoutIntervalSpans
.length
; i
++)
69 timeoutIntervalSpans
[i
].innerText
= timeoutInterval
;
71 document
.getElementById('alignmentInterval').innerText
= timerAlignmentInterval
/ 1000;
73 testRunner
.dumpAsText();
74 previousTime
= Date
.now();
75 setTimeout(testTimer
, timeoutInterval
);
79 <body onload=
"runTest()">
81 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.