mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
d9a82c9c27
The Identity singleton is going away. This refactors SyncStorageRequest to not use it. Behavior now works like Resource. Instances are obtained from the Service singleton and have authentication functionality attached.
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
|
|
|
Cu.import("resource://services-common/log4moz.js");
|
|
Cu.import("resource://services-common/rest.js");
|
|
Cu.import("resource://services-sync/util.js");
|
|
Cu.import("resource://services-sync/constants.js");
|
|
|
|
const EXPORTED_SYMBOLS = ["SyncStorageRequest"];
|
|
|
|
const STORAGE_REQUEST_TIMEOUT = 5 * 60; // 5 minutes
|
|
|
|
/**
|
|
* RESTRequest variant for use against a Sync storage server.
|
|
*/
|
|
function SyncStorageRequest(uri) {
|
|
RESTRequest.call(this, uri);
|
|
|
|
this.authenticator = null;
|
|
}
|
|
SyncStorageRequest.prototype = {
|
|
|
|
__proto__: RESTRequest.prototype,
|
|
|
|
_logName: "Sync.StorageRequest",
|
|
|
|
/**
|
|
* The string to use as the base User-Agent in Sync requests.
|
|
* These strings will look something like
|
|
*
|
|
* Firefox/4.0 FxSync/1.8.0.20100101.mobile
|
|
*
|
|
* or
|
|
*
|
|
* Firefox Aurora/5.0a1 FxSync/1.9.0.20110409.desktop
|
|
*/
|
|
userAgent:
|
|
Services.appinfo.name + "/" + Services.appinfo.version + // Product.
|
|
" FxSync/" + WEAVE_VERSION + "." + // Sync.
|
|
Services.appinfo.appBuildID + ".", // Build.
|
|
|
|
/**
|
|
* Wait 5 minutes before killing a request.
|
|
*/
|
|
timeout: STORAGE_REQUEST_TIMEOUT,
|
|
|
|
dispatch: function dispatch(method, data, onComplete, onProgress) {
|
|
// Compose a UA string fragment from the various available identifiers.
|
|
if (Svc.Prefs.get("sendVersionInfo", true)) {
|
|
let ua = this.userAgent + Svc.Prefs.get("client.type", "desktop");
|
|
this.setHeader("user-agent", ua);
|
|
}
|
|
|
|
if (this.authenticator) {
|
|
this.authenticator(this);
|
|
} else {
|
|
this._log.debug("No authenticator found.");
|
|
}
|
|
|
|
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.
|
|
if (headers["x-weave-timestamp"]) {
|
|
SyncStorageRequest.serverTime = parseFloat(headers["x-weave-timestamp"]);
|
|
}
|
|
|
|
// This is a server-side safety valve to allow slowing down
|
|
// clients without hurting performance.
|
|
if (headers["x-weave-backoff"]) {
|
|
Svc.Obs.notify("weave:service:backoff:interval",
|
|
parseInt(headers["x-weave-backoff"], 10));
|
|
}
|
|
|
|
if (this.response.success && headers["x-weave-quota-remaining"]) {
|
|
Svc.Obs.notify("weave:service:quota:remaining",
|
|
parseInt(headers["x-weave-quota-remaining"], 10));
|
|
}
|
|
}
|
|
};
|