1 /** 2 * Copyright (C) 2012 KO GmbH <copyright@kogmbh.com> 3 * 4 * @licstart 5 * This file is part of WebODF. 6 * 7 * WebODF is free software: you can redistribute it and/or modify it 8 * under the terms of the GNU Affero General Public License (GNU AGPL) 9 * as published by the Free Software Foundation, either version 3 of 10 * the License, or (at your option) any later version. 11 * 12 * WebODF is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU Affero General Public License for more details. 16 * 17 * You should have received a copy of the GNU Affero General Public License 18 * along with WebODF. If not, see <http://www.gnu.org/licenses/>. 19 * @licend 20 * 21 * @source: http://www.webodf.org/ 22 * @source: https://github.com/kogmbh/WebODF/ 23 */ 24 25 /*global core,runtime */ 26 27 /** 28 * An iterator that iterators through positions in a DOM tree. 29 * @constructor 30 * @param {!number} timeout 31 * @param {!number=} maxChecks 32 */ 33 core.LoopWatchDog = function LoopWatchDog(timeout, maxChecks) { 34 "use strict"; 35 var startTime = Date.now(), 36 /**@type{!number}*/ 37 checks = 0; 38 function check() { 39 var t; 40 if (timeout) { 41 t = Date.now(); 42 if (t - startTime > timeout) { 43 runtime.log("alert", "watchdog timeout"); 44 throw "timeout!"; 45 } 46 } 47 if (maxChecks > 0) { 48 checks += 1; 49 if (checks > maxChecks) { 50 runtime.log("alert", "watchdog loop overflow"); 51 throw "loop overflow"; 52 } 53 } 54 } 55 this.check = check; 56 }; 57