diff options
author | James Lal <james@lightsofapollo.com> | 2013-01-09 05:30:41 -0800 |
---|---|---|
committer | James Lal <james@lightsofapollo.com> | 2013-01-09 05:30:41 -0800 |
commit | 75c6e99f3d3ff16cc6f5dc26b7bf1dbbb4b3f648 (patch) | |
tree | bf3539c61581137225f2e848f289271bd7fbb1a7 /caldav.js | |
parent | 3f8833038d337d2840dc7ca06ddcb8c26a21bd14 (diff) | |
parent | ff00ab9fcaf0f791b1873ca1cd4d80e8a6dd6cda (diff) | |
download | jsCalDAV-75c6e99f3d3ff16cc6f5dc26b7bf1dbbb4b3f648.tar.gz |
Merge pull request #9 from mozilla-b2g/memory-improvements
Memory improvements
Diffstat (limited to 'caldav.js')
-rw-r--r-- | caldav.js | 56 |
1 files changed, 29 insertions, 27 deletions
@@ -2040,15 +2040,6 @@ function write (chunk) { }, /** - * Aborts request if its in progress. - */ - abort: function abort() { - if (this.xhr) { - this.xhr.abort(); - } - }, - - /** * @param {String} user basic auth user. * @param {String} password basic auth pass. * @return {String} basic auth token. @@ -2077,9 +2068,6 @@ function write (chunk) { } else { xhr = new this.xhrClass(); } - - this.xhr = xhr; - // This hack is in place due to some platform // bug in gecko when using mozSystem xhr // the credentials only seem to work as expected @@ -2094,6 +2082,12 @@ function write (chunk) { )); } + var useMozChunkedText = false; + if (this.globalXhrOptions && this.globalXhrOptions.useMozChunkedText) { + useMozChunkedText = true; + xhr.responseType = 'moz-chunked-text'; + } + for (header in this.headers) { if (Object.hasOwnProperty.call(this.headers, header)) { xhr.setRequestHeader(header, this.headers[header]); @@ -2107,13 +2101,20 @@ function write (chunk) { if ('onprogress' in xhr) { hasProgressEvents = true; var last = 0; - xhr.onprogress = function onProgress(event) { - var chunk = xhr.responseText.substr(last, event.loaded); - last = event.loaded; - if (this.ondata) { - this.ondata(chunk); - } - }.bind(this); + + if (useMozChunkedText) { + xhr.onprogress = function onChunkedProgress(event) { + this.ondata(xhr.responseText); + }.bind(this); + } else { + xhr.onprogress = function onProgress(event) { + var chunk = xhr.responseText.substr(last, event.loaded); + last = event.loaded; + if (this.ondata) { + this.ondata(chunk); + } + }.bind(this); + } } xhr.onreadystatechange = function onReadyStateChange() { @@ -2136,6 +2137,8 @@ function write (chunk) { this.waiting = true; xhr.send(this._seralize()); + + return xhr; } }; @@ -2602,26 +2605,26 @@ function write (chunk) { default: message = this.code; } - Error.call(this, message); } + CaldavHttpError.prototype = { __proto__: Error.prototype, constructor: CaldavHttpError } - + // Unauthenticated error for // Google Calendar function UnauthenticatedError() { var message = "Wrong username or/and password"; Error.call(this, message); } - + UnauthenticatedError.prototype = { __proto__: Error.prototype, constructor: UnauthenticatedError } - + module.exports = { CaldavHttpError: CaldavHttpError, UnauthenticatedError: UnauthenticatedError @@ -2700,8 +2703,7 @@ function write (chunk) { }; // in the future we may stream data somehow - req.send(function xhrResult() { - var xhr = req.xhr; + req.send(function xhrResult(err, xhr) { if (xhr.status > 199 && xhr.status < 300) { // success self.sax.close(); @@ -3021,8 +3023,7 @@ function write (chunk) { content += this.filter.toString(); } - var out = this.template.render(content); - return out; + return this.template.render(content); } }; @@ -3110,6 +3111,7 @@ function write (chunk) { if (!principal) { principal = findProperty('principal-URL', data, true); } + if ('unauthenticated' in principal) { callback(new Errors.UnauthenticatedError()); } else if (principal.href){ |