15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function busyLoop(millis) { 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var d = Date.now(); Date.now() - d < millis; ) { } 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function visible() { 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if ("visibilityState" in document 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) && document.visibilityState == "hidden") 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ("webkitVisibilityState" in document 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && document.webkitVisibilityState == "hidden") 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ("mozVisibilityState" in document 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && document.mozVisibilityState == "hidden") 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ("msVisibilityState" in document 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && document.msVisibilityState == "hidden") 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var timerId = 0; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function loop() { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timerId = 0; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!visible()) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) busyLoop(250); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timerId = window.setTimeout(loop, 50); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function handler() { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (visible() && !timerId) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timerId = window.setTimeout(loop, 50); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)if ("visibilityState" in document) { 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.addEventListener("visibilitychange", handler, false); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} else if ("webkitVisibilityState" in document) { 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.addEventListener("webkitvisibilitychange", handler, false); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} else if ("mozVisibilityState" in document) { 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.addEventListener("mozvisibilitychange", handler, false); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} else if ("msVisibilityState" in document) { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) document.addEventListener("msvisibilitychange", handler, false); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)loop(); 50