commit aa6037c088958387e8090b259989d940f3f04f63
parent 289b0493771199a8b68a877dac4277535290fb2d
Author: Tom Najdek <tom@doppnet.com>
Date: Wed, 31 May 2017 16:32:39 +0100
Re-introduce custom implementation of setTimeout
* Resolves issues with some tests failing
Diffstat:
1 file changed, 52 insertions(+), 0 deletions(-)
diff --git a/resource/require.js b/resource/require.js
@@ -6,6 +6,56 @@ var require = (function() {
var { Loader, Require, Module } = Components.utils.import('resource://gre/modules/commonjs/toolkit/loader.js');
var requirer = Module('/', '/');
var _runningTimers = {};
+ var window = {};
+
+ window.setTimeout = function (func, ms) {
+ var id = Math.floor(Math.random() * (1000000000000 - 1)) + 1
+ var useMethodjit = Components.utils.methodjit;
+ var timer = Components.classes["@mozilla.org/timer;1"]
+ .createInstance(Components.interfaces.nsITimer);
+ timer.initWithCallback({"notify":function() {
+ // Remove timer from object so it can be garbage collected
+ delete _runningTimers[id];
+
+ // Execute callback function
+ try {
+ func();
+ } catch(err) {
+ // Rethrow errors that occur so that they appear in the error
+ // console with the appropriate name and line numbers. While the
+ // the errors appear without this, the line numbers get eaten.
+ var scriptError = Components.classes["@mozilla.org/scripterror;1"]
+ .createInstance(Components.interfaces.nsIScriptError);
+ scriptError.init(
+ err.message || err.toString(),
+ err.fileName || err.filename || null,
+ null,
+ err.lineNumber || null,
+ null,
+ scriptError.errorFlag,
+ 'component javascript'
+ );
+ Components.classes["@mozilla.org/consoleservice;1"]
+ .getService(Components.interfaces.nsIConsoleService)
+ .logMessage(scriptError);
+ typeof Zotero !== 'undefined' && Zotero.debug(err.stack, 1);
+ }
+ }}, ms, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
+ _runningTimers[id] = timer;
+ return id;
+ };
+
+ window.clearTimeout = function (id) {
+ var timer = _runningTimers[id];
+ if (timer) {
+ timer.cancel();
+ }
+ delete _runningTimers[id];
+ };
+
+ window.debug = function (msg) {
+ dump(msg + "\n\n");
+ };
var loader = Loader({
id: 'zotero/require',
@@ -17,6 +67,8 @@ var require = (function() {
console: typeof console !== 'undefined' && console || {},
navigator: typeof navigator !== 'undefined' && navigator || {},
window,
+ setTimeout: window.setTimeout,
+ clearTimeout: window.clearTimeout,
Zotero: typeof Zotero !== 'undefined' && Zotero || {}
}
});