fix non-triggering setTimeout calls and restore r9383
This commit is contained in:
parent
65bd289910
commit
11e337a189
|
@ -196,10 +196,21 @@ if(appInfo.platformVersion[0] >= 2) {
|
||||||
var _broadcastInitComplete = false;
|
var _broadcastInitComplete = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A set of nsITimerCallbacks to be executed when Zotero.wait() completes
|
* Maintains nsITimers to be used when Zotero.wait() completes (to reduce performance penalty
|
||||||
|
* of initializing new objects)
|
||||||
|
*/
|
||||||
|
var _waitTimers = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maintains nsITimerCallbacks to be used when Zotero.wait() completes
|
||||||
*/
|
*/
|
||||||
var _waitTimerCallbacks = [];
|
var _waitTimerCallbacks = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maintains running nsITimers in global scope, so that they don't disappear randomly
|
||||||
|
*/
|
||||||
|
var _runningTimers = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the extension
|
* Initialize the extension
|
||||||
*/
|
*/
|
||||||
|
@ -1501,11 +1512,10 @@ if(appInfo.platformVersion[0] >= 2) {
|
||||||
_waiting = false;
|
_waiting = false;
|
||||||
|
|
||||||
// requeue nsITimerCallbacks that came up during Zotero.wait() but couldn't execute
|
// requeue nsITimerCallbacks that came up during Zotero.wait() but couldn't execute
|
||||||
for each(var timerCallback in _waitTimerCallbacks) {
|
for(var i in _waitTimers) {
|
||||||
var timer = Components.classes["@mozilla.org/timer;1"].
|
_waitTimers[i].initWithCallback(_waitTimerCallbacks[i], 0, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
||||||
createInstance(Components.interfaces.nsITimer);
|
|
||||||
timer.initWithCallback(timerCallback, 0, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
|
||||||
}
|
}
|
||||||
|
_waitTimers = [];
|
||||||
_waitTimerCallbacks = [];
|
_waitTimerCallbacks = [];
|
||||||
|
|
||||||
//Zotero.debug("Waited " + cycles + " cycles");
|
//Zotero.debug("Waited " + cycles + " cycles");
|
||||||
|
@ -1523,19 +1533,21 @@ if(appInfo.platformVersion[0] >= 2) {
|
||||||
var timer = Components.classes["@mozilla.org/timer;1"].
|
var timer = Components.classes["@mozilla.org/timer;1"].
|
||||||
createInstance(Components.interfaces.nsITimer);
|
createInstance(Components.interfaces.nsITimer);
|
||||||
var timerCallback = {"notify":function() {
|
var timerCallback = {"notify":function() {
|
||||||
//
|
if(_waiting) {
|
||||||
// DEBUG: This can result in the callback not being triggered in Fx4+
|
|
||||||
//
|
|
||||||
//if(_waiting) {
|
|
||||||
// if our callback gets called during Zotero.wait(), queue it to be set again
|
// if our callback gets called during Zotero.wait(), queue it to be set again
|
||||||
// when Zotero.wait() completes
|
// when Zotero.wait() completes
|
||||||
//_waitTimerCallbacks.push(timerCallback);
|
_waitTimers.push(timer);
|
||||||
//} else {
|
_waitTimerCallbacks.push(timerCallback);
|
||||||
// otherwise, execute callback function
|
} else {
|
||||||
|
// execute callback function
|
||||||
func();
|
func();
|
||||||
//}
|
// remove timer from global scope, so it can be garbage collected
|
||||||
|
_runningTimers.splice(_runningTimers.indexOf(timer), 1);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
timer.initWithCallback(timerCallback, ms, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
timer.initWithCallback(timerCallback, ms, Components.interfaces.nsITimer.TYPE_ONE_SHOT);
|
||||||
|
// add timer to global scope so that it doesn't get garbage collected before it completes
|
||||||
|
_runningTimers.push(timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue
Block a user