Bug 1397061 - Adjust clock skew according to CDN cache age r=mgoodwin

MozReview-Commit-ID: 9HPiNIp8bJM

--HG--
extra : rebase_source : c01ec8c17034a8173c46e9507613b88df65e47ba
This commit is contained in:
Mathieu Leplatre 2018-05-30 23:26:59 +02:00
parent b1ba712637
commit dd30c35e2c
2 changed files with 27 additions and 1 deletions

View File

@ -164,7 +164,10 @@ async function fetchLatestChanges(url, lastEtag) {
// The server should always return ETag. But we've had situations where the CDN
// was interfering.
const currentEtag = response.headers.has("ETag") ? response.headers.get("ETag") : undefined;
const serverTimeMillis = Date.parse(response.headers.get("Date"));
let serverTimeMillis = Date.parse(response.headers.get("Date"));
// Since the response is served via a CDN, the Date header value could have been cached.
const ageSeconds = response.headers.has("Age") ? parseInt(response.headers.get("Age"), 10) : 0;
serverTimeMillis += ageSeconds * 1000;
// Check if the server asked the clients to back off.
let backoffSeconds;

View File

@ -248,6 +248,29 @@ add_task(async function test_check_clockskew_is_updated() {
add_task(clear_state);
add_task(async function test_check_clockskew_takes_age_into_account() {
const currentTime = Date.now();
const skew = 5000;
const serverTime = currentTime - skew;
const ageCDN = 3600;
function serverResponse(request, response) {
response.setHeader("Content-Type", "application/json; charset=UTF-8");
response.setHeader("Date", (new Date(serverTime)).toUTCString());
response.setHeader("Age", `${ageCDN}`);
response.write(JSON.stringify({data: []}));
response.setStatusLine(null, 200, "OK");
}
server.registerPathHandler(CHANGES_PATH, serverResponse);
await RemoteSettings.pollChanges();
const clockSkew = Services.prefs.getIntPref(PREF_CLOCK_SKEW_SECONDS);
Assert.equal(clockSkew, skew / 1000 - ageCDN, `clockSkew is ${clockSkew}`);
});
add_task(clear_state);
add_task(async function test_backoff() {
const startHistogram = getUptakeTelemetrySnapshot(TELEMETRY_HISTOGRAM_KEY);