Merge pull request #495 from aurimasv/Fx-connector
Fix race condition when starting in Connector mode
This commit is contained in:
commit
7b7b4e6e9e
|
@ -102,15 +102,45 @@ var Zotero_Browser = new function() {
|
|||
* Initialize some variables and prepare event listeners for when chrome is done loading
|
||||
*/
|
||||
function init() {
|
||||
if (!Zotero || !Zotero.initialized || !window.hasOwnProperty("gBrowser")) {
|
||||
if (!window.hasOwnProperty("gBrowser")) {
|
||||
return;
|
||||
}
|
||||
|
||||
window.addEventListener("load",
|
||||
function(e) { Zotero_Browser.chromeLoad(e) }, false);
|
||||
var zoteroInitDone;
|
||||
if (!Zotero || !Zotero.initialized) {
|
||||
// Zotero either failed to load or is reloading in Connector mode
|
||||
// In case of the latter, listen for the 'zotero-loaded' event (once) and retry
|
||||
var zoteroInitDone_deferred = Q.defer();
|
||||
var obs = Components.classes["@mozilla.org/observer-service;1"]
|
||||
.getService(Components.interfaces.nsIObserverService);
|
||||
var observer = {
|
||||
"observe":function() {
|
||||
obs.removeObserver(observer, 'zotero-loaded')
|
||||
zoteroInitDone_deferred.resolve();
|
||||
}
|
||||
};
|
||||
obs.addObserver(observer, 'zotero-loaded', false);
|
||||
|
||||
zoteroInitDone = zoteroInitDone_deferred.promise;
|
||||
} else {
|
||||
zoteroInitDone = Q();
|
||||
}
|
||||
|
||||
ZoteroPane_Local.addReloadListener(reload);
|
||||
reload();
|
||||
var chromeLoaded = Q.defer();
|
||||
window.addEventListener("load", function(e) { chromeLoaded.resolve() }, false);
|
||||
|
||||
// Wait for Zotero to init and chrome to load before proceeding
|
||||
Q.all([
|
||||
zoteroInitDone.then(function() {
|
||||
ZoteroPane_Local.addReloadListener(reload);
|
||||
reload();
|
||||
}),
|
||||
chromeLoaded.promise
|
||||
])
|
||||
.then(function() {
|
||||
Zotero_Browser.chromeLoad()
|
||||
})
|
||||
.done();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
*/
|
||||
|
||||
Zotero.Server = new function() {
|
||||
var _onlineObserverRegistered;
|
||||
var _onlineObserverRegistered, serv;
|
||||
this.responseCodes = {
|
||||
200:"OK",
|
||||
201:"Created",
|
||||
|
@ -47,8 +47,13 @@ Zotero.Server = new function() {
|
|||
return;
|
||||
}
|
||||
|
||||
if(serv) {
|
||||
Zotero.debug("Already listening on port " + serv.port);
|
||||
return;
|
||||
}
|
||||
|
||||
// start listening on socket
|
||||
var serv = Components.classes["@mozilla.org/network/server-socket;1"]
|
||||
serv = Components.classes["@mozilla.org/network/server-socket;1"]
|
||||
.createInstance(Components.interfaces.nsIServerSocket);
|
||||
try {
|
||||
// bind to a random port on loopback only
|
||||
|
@ -56,13 +61,25 @@ Zotero.Server = new function() {
|
|||
serv.asyncListen(Zotero.Server.SocketListener);
|
||||
|
||||
Zotero.debug("HTTP server listening on "+(bindAllAddr ? "*": " 127.0.0.1")+":"+serv.port);
|
||||
|
||||
Zotero.addShutdownListener(this.close.bind(this));
|
||||
} catch(e) {
|
||||
Zotero.debug("Not initializing HTTP server");
|
||||
serv = undefined;
|
||||
}
|
||||
|
||||
_registerOnlineObserver()
|
||||
}
|
||||
|
||||
/**
|
||||
* releases bound port
|
||||
*/
|
||||
this.close = function() {
|
||||
if(!serv) return;
|
||||
serv.close();
|
||||
serv = undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* Parses a query string into a key => value object
|
||||
* @param {String} queryString Query string
|
||||
|
|
Loading…
Reference in New Issue
Block a user