Bug 669913 - Viewing Sync quota blocks the entire Options window. r=rnewman

Part 0: SyncStorageRequest's method should return the request object, onStartRequest should not try to process data from an aborted request.
This commit is contained in:
Philipp von Weitershausen 2011-07-14 12:11:29 -07:00
Родитель ee3fc8cbda
Коммит ad244ff27f
2 изменённых файлов: 52 добавлений и 3 удалений

Просмотреть файл

@ -606,11 +606,14 @@ SyncStorageRequest.prototype = {
this._log.debug("Couldn't set Authentication header: WeaveID not found.");
}
RESTRequest.prototype.dispatch.apply(this, arguments);
return RESTRequest.prototype.dispatch.apply(this, arguments);
},
onStartRequest: function onStartRequest(channel) {
RESTRequest.prototype.onStartRequest.call(this, channel);
if (this.status == this.ABORTED) {
return;
}
let headers = this.response.headers;
// Save the latest server timestamp when possible.

Просмотреть файл

@ -23,12 +23,13 @@ add_test(function test_user_agent_desktop() {
Services.appinfo.appBuildID + ".desktop";
let request = new SyncStorageRequest("http://localhost:8080/resource");
request.get(function (error) {
request.onComplete = function onComplete(error) {
do_check_eq(error, null);
do_check_eq(this.response.status, 200);
do_check_eq(handler.request.getHeader("User-Agent"), expectedUA);
server.stop(run_next_test);
});
};
do_check_eq(request.get(), request);
});
add_test(function test_user_agent_mobile() {
@ -86,6 +87,7 @@ add_test(function test_weave_timestamp() {
do_check_eq(error, null);
do_check_eq(this.response.status, 200);
do_check_eq(SyncStorageRequest.serverTime, TIMESTAMP);
delete SyncStorageRequest.serverTime;
server.stop(run_next_test);
});
});
@ -165,3 +167,47 @@ add_test(function test_weave_quota_error() {
server.stop(run_next_test);
});
});
add_test(function test_abort() {
function handler(request, response) {
response.setHeader("X-Weave-Timestamp", "" + TIMESTAMP, false);
response.setHeader("X-Weave-Quota-Remaining", '1048576', false);
response.setHeader("X-Weave-Backoff", '600', false);
response.setStatusLine(request.httpVersion, 200, "OK");
}
let server = httpd_setup({"/resource": handler});
let request = new SyncStorageRequest("http://localhost:8080/resource");
// Aborting a request that hasn't been sent yet is pointless and will throw.
do_check_throws(function () {
request.abort();
});
function throwy() {
do_throw("Shouldn't have gotten here!");
}
Svc.Obs.add("weave:service:backoff:interval", throwy);
Svc.Obs.add("weave:service:quota:remaining", throwy);
request.onProgress = request.onComplete = throwy;
request.get();
request.abort();
do_check_eq(request.status, request.ABORTED);
// Aborting an already aborted request is pointless and will throw.
do_check_throws(function () {
request.abort();
});
Utils.nextTick(function () {
// Verify that we didn't try to process any of the values.
do_check_eq(SyncStorageRequest.serverTime, undefined);
Svc.Obs.remove("weave:service:backoff:interval", throwy);
Svc.Obs.remove("weave:service:quota:remaining", throwy);
server.stop(run_next_test);
});
});