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