1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5function busyLoop(millis) {
6    for (var d = Date.now(); Date.now() - d < millis; ) { }
7}
8
9function visible() {
10    if ("visibilityState" in document
11        && document.visibilityState == "hidden")
12        return false;
13    if ("webkitVisibilityState" in document
14        && document.webkitVisibilityState == "hidden")
15        return false;
16    if ("mozVisibilityState" in document
17        && document.mozVisibilityState == "hidden")
18        return false;
19    if ("msVisibilityState" in document
20        && document.msVisibilityState == "hidden")
21        return false;
22    return true;
23}
24
25var timerId = 0;
26function loop() {
27    timerId = 0;
28    if (!visible())
29        return;
30    busyLoop(250);
31    timerId = window.setTimeout(loop, 50);
32}
33
34function handler() {
35    if (visible() && !timerId)
36        timerId = window.setTimeout(loop, 50);
37}
38
39if ("visibilityState" in document) {
40    document.addEventListener("visibilitychange", handler, false);
41} else if ("webkitVisibilityState" in document) {
42    document.addEventListener("webkitvisibilitychange", handler, false);
43} else if ("mozVisibilityState" in document) {
44    document.addEventListener("mozvisibilitychange", handler, false);
45} else if ("msVisibilityState" in document) {
46    document.addEventListener("msvisibilitychange", handler, false);
47}
48
49loop();
50