keep long living references to timers
This commit is contained in:
parent
b8b3b838cb
commit
a7c753e5b3
|
@ -31,6 +31,7 @@ let log = firetray.Logging.getLogger("firetray.Handler");
|
|||
firetray.Handler = {
|
||||
|
||||
initialized: false,
|
||||
timers: {},
|
||||
inBrowserApp: false,
|
||||
inMailApp: false,
|
||||
appHasChat: false,
|
||||
|
@ -106,7 +107,9 @@ firetray.Handler = {
|
|||
}
|
||||
}
|
||||
|
||||
if (this.isChatEnabled()) {
|
||||
let chatIsEnabled = this.isChatEnabled();
|
||||
log.info('isChatEnabled='+chatIsEnabled);
|
||||
if (chatIsEnabled) {
|
||||
Cu.import("resource://firetray/FiretrayMessaging.jsm"); // needed for existsChatAccount
|
||||
Cu.import("resource://firetray/FiretrayChat.jsm");
|
||||
firetray.Utils.addObservers(firetray.Handler, [
|
||||
|
@ -145,11 +148,9 @@ firetray.Handler = {
|
|||
},
|
||||
|
||||
isChatEnabled: function() {
|
||||
let chatIsEnabled = (this.appHasChat &&
|
||||
Services.prefs.getBoolPref("mail.chat.enabled") &&
|
||||
firetray.Utils.prefService.getBoolPref("chat_icon_enable"));
|
||||
log.info('isChatEnabled='+chatIsEnabled);
|
||||
return chatIsEnabled;
|
||||
return this.appHasChat &&
|
||||
Services.prefs.getBoolPref("mail.chat.enabled") &&
|
||||
firetray.Utils.prefService.getBoolPref("chat_icon_enable");
|
||||
},
|
||||
|
||||
tryCloseLibs: function() {
|
||||
|
@ -192,16 +193,17 @@ firetray.Handler = {
|
|||
case "before-first-paint":
|
||||
log.debug("before-first-paint: "+subject.baseURI);
|
||||
firetray.Utils.removeObservers(firetray.Handler, [ "before-first-paint" ]);
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
if (firetray.Utils.prefService.getBoolPref('start_hidden')) {
|
||||
log.debug("start_hidden");
|
||||
firetray.Handler.hideAllWindows();
|
||||
}
|
||||
firetray.Handler.timers['before-first-paint'] =
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
if (firetray.Utils.prefService.getBoolPref('start_hidden')) {
|
||||
log.debug("start_hidden");
|
||||
firetray.Handler.hideAllWindows();
|
||||
}
|
||||
|
||||
firetray.Handler.appStarted = true;
|
||||
log.debug("*** appStarted ***");
|
||||
});
|
||||
firetray.Handler.appStarted = true;
|
||||
log.debug("*** appStarted ***");
|
||||
});
|
||||
break;
|
||||
|
||||
case "xpcom-will-shutdown":
|
||||
|
@ -327,11 +329,12 @@ firetray.Handler = {
|
|||
|
||||
// FIXME: obviously we need to wait to avoid seg fault on jsapi.cpp:827
|
||||
// 827 if (t->data.requestDepth) {
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
for(var key in firetray.Handler.windows) break;
|
||||
firetray.Handler.windows[key].chromeWin.open(home);
|
||||
});
|
||||
firetray.Handler.timers['open-browser-window'] =
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
for(var key in firetray.Handler.windows) break;
|
||||
firetray.Handler.windows[key].chromeWin.open(home);
|
||||
});
|
||||
} catch (x) { log.error(x); }
|
||||
},
|
||||
|
||||
|
@ -346,12 +349,13 @@ firetray.Handler = {
|
|||
|
||||
quitApplication: function() {
|
||||
try {
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
|
||||
.getService(Ci.nsIAppStartup);
|
||||
appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
|
||||
});
|
||||
firetray.Handler.timers['quit-application'] =
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_NOWAIT_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
let appStartup = Cc['@mozilla.org/toolkit/app-startup;1']
|
||||
.getService(Ci.nsIAppStartup);
|
||||
appStartup.quit(Ci.nsIAppStartup.eAttemptQuit);
|
||||
});
|
||||
} catch (x) { log.error(x); }
|
||||
},
|
||||
|
||||
|
@ -467,11 +471,12 @@ firetray.VersionChangeHandler = {
|
|||
}
|
||||
|
||||
if (tabmail) {
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
log.debug("openMailTab");
|
||||
tabmail.openTab("contentTab", {contentPage: url});
|
||||
});
|
||||
firetray.Handler.timers['open-mail-tab'] =
|
||||
firetray.Utils.timer(FIRETRAY_DELAY_BROWSER_STARTUP_MILLISECONDS,
|
||||
Ci.nsITimer.TYPE_ONE_SHOT, function() {
|
||||
log.debug("openMailTab");
|
||||
tabmail.openTab("contentTab", {contentPage: url});
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@ let log = firetray.Logging.getLogger("firetray.Messaging");
|
|||
|
||||
firetray.Messaging = {
|
||||
initialized: false,
|
||||
cleaningTimer: null,
|
||||
currentMsgCount: null,
|
||||
newMsgCount: null,
|
||||
observedTopics: {},
|
||||
|
|
|
@ -225,6 +225,11 @@ firetray.Utils = {
|
|||
return list;
|
||||
},
|
||||
|
||||
/*
|
||||
* keep a long-living reference to the returned timer, if you don't want to
|
||||
* see it GC'ed ! see
|
||||
* http://www.joshmatthews.net/blog/2011/03/nsitimer-anti-pattern/
|
||||
*/
|
||||
timer: function(delay, timerType, callback) {
|
||||
var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
|
||||
timer.initWithCallback({ notify: callback },
|
||||
|
|
Loading…
Reference in New Issue