diff --git a/services/sync/modules/dav.js b/services/sync/modules/dav.js index 66463de72bc..deb5c862711 100644 --- a/services/sync/modules/dav.js +++ b/services/sync/modules/dav.js @@ -63,7 +63,6 @@ function DAVCollection(baseURL, defaultPrefix) { this.baseURL = baseURL; this.defaultPrefix = defaultPrefix; this._identity = 'DAV:default'; - this._authProvider = new DummyAuthProvider(); this._log = Log4Moz.Service.getLogger("Service.DAV"); this._log.level = Log4Moz.Level[Utils.prefs.getCharPref("log.logger.service.dav")]; @@ -130,9 +129,9 @@ DAVCollection.prototype = { request.addEventListener("load", new Utils.EventListener(self.cb, "load"), false); request.addEventListener("error", new Utils.EventListener(self.cb, "error"), false); request = request.QueryInterface(Ci.nsIXMLHttpRequest); + request.mozBackgroundRequest = true; request.open(op, this._baseURL + path, true); - // Force cache validation let channel = request.channel; channel = channel.QueryInterface(Ci.nsIRequest); @@ -149,15 +148,10 @@ DAVCollection.prototype = { request.setRequestHeader(key, headers[key]); } - this._authProvider._authFailed = false; - request.channel.notificationCallbacks = this._authProvider; - request.send(data); let event = yield; ret = event.target; - if (this._authProvider._authFailed) - this._log.warn("_makeRequest: authentication failed"); if (ret.status < 200 || ret.status >= 300) this._log.warn("_makeRequest: got status " + ret.status); @@ -315,8 +309,7 @@ DAVCollection.prototype = { this.GET("", self.cb); let resp = yield; - if (this._authProvider._authFailed || - resp.status < 200 || resp.status >= 300) { + if (resp.status < 200 || resp.status >= 300) { self.done(false); yield; } @@ -338,8 +331,7 @@ DAVCollection.prototype = { "", self.cb); let resp = yield; - if (this._authProvider._authFailed || - resp.status < 200 || resp.status >= 300) { + if (resp.status < 200 || resp.status >= 300) { self.done(false); yield; } @@ -375,8 +367,7 @@ DAVCollection.prototype = { "", self.cb); let resp = yield; - if (this._authProvider._authFailed || - resp.status < 200 || resp.status >= 300) { + if (resp.status < 200 || resp.status >= 300) { self.done(); yield; } @@ -414,8 +405,7 @@ DAVCollection.prototype = { this.UNLOCK("lock", self.cb); let resp = yield; - if (this._authProvider._authFailed || - resp.status < 200 || resp.status >= 300) { + if (resp.status < 200 || resp.status >= 300) { self.done(false); yield; } @@ -451,154 +441,3 @@ DAVCollection.prototype = { self.done(unlocked); } }; - - -/* - * Auth provider object - * Taken from nsMicrosummaryService.js and massaged slightly - */ - -function DummyAuthProvider() {} -DummyAuthProvider.prototype = { - // Implement notification callback interfaces so we can suppress UI - // and abort loads for bad SSL certs and HTTP authorization requests. - - // Interfaces this component implements. - interfaces: [Ci.nsIBadCertListener, - Ci.nsIAuthPromptProvider, - Ci.nsIAuthPrompt, - Ci.nsIPrompt, - Ci.nsIProgressEventSink, - Ci.nsIInterfaceRequestor, - Ci.nsISupports], - - // Auth requests appear to succeed when we cancel them (since the server - // redirects us to a "you're not authorized" page), so we have to set a flag - // to let the load handler know to treat the load as a failure. - get _authFailed() { return this.__authFailed; }, - set _authFailed(newValue) { return this.__authFailed = newValue; }, - - // nsISupports - - QueryInterface: function DAP_QueryInterface(iid) { - if (!this.interfaces.some( function(v) { return iid.equals(v); } )) - throw Cr.NS_ERROR_NO_INTERFACE; - - // nsIAuthPrompt and nsIPrompt need separate implementations because - // their method signatures conflict. The other interfaces we implement - // within DummyAuthProvider itself. - switch(iid) { - case Ci.nsIAuthPrompt: - return this.authPrompt; - case Ci.nsIPrompt: - return this.prompt; - default: - return this; - } - }, - - // nsIInterfaceRequestor - - getInterface: function DAP_getInterface(iid) { - return this.QueryInterface(iid); - }, - - // nsIBadCertListener - - // Suppress UI and abort secure loads from servers with bad SSL certificates. - - confirmUnknownIssuer: function DAP_confirmUnknownIssuer(socketInfo, cert, certAddType) { - return false; - }, - - confirmMismatchDomain: function DAP_confirmMismatchDomain(socketInfo, targetURL, cert) { - return false; - }, - - confirmCertExpired: function DAP_confirmCertExpired(socketInfo, cert) { - return false; - }, - - notifyCrlNextupdate: function DAP_notifyCrlNextupdate(socketInfo, targetURL, cert) { - }, - - // nsIAuthPromptProvider - - getAuthPrompt: function(aPromptReason, aIID) { - this._authFailed = true; - throw Cr.NS_ERROR_NOT_AVAILABLE; - }, - - // HTTP always requests nsIAuthPromptProvider first, so it never needs - // nsIAuthPrompt, but not all channels use nsIAuthPromptProvider, so we - // implement nsIAuthPrompt too. - - // nsIAuthPrompt - - get authPrompt() { - var resource = this; - return { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]), - prompt: function(dialogTitle, text, passwordRealm, savePassword, defaultText, result) { - resource._authFailed = true; - return false; - }, - promptUsernameAndPassword: function(dialogTitle, text, passwordRealm, savePassword, user, pwd) { - resource._authFailed = true; - return false; - }, - promptPassword: function(dialogTitle, text, passwordRealm, savePassword, pwd) { - resource._authFailed = true; - return false; - } - }; - }, - - // nsIPrompt - - get prompt() { - var resource = this; - return { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrompt]), - alert: function(dialogTitle, text) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - alertCheck: function(dialogTitle, text, checkMessage, checkValue) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - confirm: function(dialogTitle, text) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - confirmCheck: function(dialogTitle, text, checkMessage, checkValue) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - confirmEx: function(dialogTitle, text, buttonFlags, button0Title, button1Title, button2Title, checkMsg, checkValue) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - prompt: function(dialogTitle, text, value, checkMsg, checkValue) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - promptPassword: function(dialogTitle, text, password, checkMsg, checkValue) { - resource._authFailed = true; - return false; - }, - promptUsernameAndPassword: function(dialogTitle, text, username, password, checkMsg, checkValue) { - resource._authFailed = true; - return false; - }, - select: function(dialogTitle, text, count, selectList, outSelection) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - } - }; - }, - - // nsIProgressEventSink - - onProgress: function DAP_onProgress(aRequest, aContext, - aProgress, aProgressMax) { - }, - - onStatus: function DAP_onStatus(aRequest, aContext, - aStatus, aStatusArg) { - } -}; diff --git a/services/sync/modules/service.js b/services/sync/modules/service.js index ed2bbe9b08b..063a06d0269 100644 --- a/services/sync/modules/service.js +++ b/services/sync/modules/service.js @@ -427,15 +427,6 @@ WeaveSvc.prototype = { _login: function WeaveSync__login(password, passphrase) { let self = yield; - // XmlHttpRequests fail when the window that triggers them goes away - // because of bug 317600, and the first XmlHttpRequest we do happens - // just before the login dialog closes itself (for logins prompted by - // that dialog), so it triggers the bug. To work around it, we pause - // here and then continue after a 0ms timeout. - let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); - timer.initWithCallback({ notify: self.cb }, 0, Ci.nsITimer.TYPE_ONE_SHOT); - yield; - // cache password & passphrase // if null, we'll try to get them from the pw manager below ID.get('WeaveID').setTempPassword(password);