зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1218591 - Reset the WebSocket retry counter when the server replies. r=dragana
--HG-- extra : commitid : L8bN4lFe50x
This commit is contained in:
Родитель
93f1a9c66a
Коммит
4792069b33
|
@ -1127,9 +1127,6 @@ this.PushServiceWebSocket = {
|
|||
return;
|
||||
}
|
||||
|
||||
// Since we've had a successful connection reset the retry fail count.
|
||||
this._retryFailCount = 0;
|
||||
|
||||
let data = {
|
||||
messageType: "hello",
|
||||
use_webpush: true,
|
||||
|
@ -1196,12 +1193,10 @@ this.PushServiceWebSocket = {
|
|||
return;
|
||||
}
|
||||
|
||||
// If we are not waiting for a hello message, reset the retry fail count
|
||||
if (this._currentState != STATE_WAITING_FOR_HELLO) {
|
||||
debug('Reseting _retryFailCount and _pingIntervalRetryTimes');
|
||||
this._retryFailCount = 0;
|
||||
this._pingIntervalRetryTimes = {};
|
||||
}
|
||||
// If we receive a message, we know the connection succeeded. Reset the
|
||||
// connection attempt and ping interval counters.
|
||||
this._retryFailCount = 0;
|
||||
this._pingIntervalRetryTimes = {};
|
||||
|
||||
let doNotHandle = false;
|
||||
if ((message === '{}') ||
|
||||
|
|
|
@ -378,7 +378,11 @@ MockWebSocket.prototype = {
|
|||
() => this._listener.onServerClose(this._context, statusCode, reason),
|
||||
() => this._listener.onStop(this._context, Cr.NS_BASE_STREAM_CLOSED)
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
serverInterrupt(result = Cr.NS_ERROR_NET_RESET) {
|
||||
waterfall(() => this._listener.onStop(this._context, result));
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
'use strict';
|
||||
|
||||
const {PushDB, PushService, PushServiceWebSocket} = serviceExports;
|
||||
|
||||
const userAgentID = '05f7b940-51b6-4b6f-8032-b83ebb577ded';
|
||||
|
||||
function run_test() {
|
||||
do_get_profile();
|
||||
setPrefs({
|
||||
userAgentID: userAgentID,
|
||||
pingInterval: 10000,
|
||||
retryBaseInterval: 25,
|
||||
});
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
add_task(function* test_ws_retry() {
|
||||
let db = PushServiceWebSocket.newPushDB();
|
||||
do_register_cleanup(() => {return db.drop().then(_ => db.close());});
|
||||
|
||||
yield db.put({
|
||||
channelID: '61770ba9-2d57-4134-b949-d40404630d5b',
|
||||
pushEndpoint: 'https://example.org/push/1',
|
||||
scope: 'https://example.net/push/1',
|
||||
version: 1,
|
||||
originAttributes: '',
|
||||
quota: Infinity,
|
||||
});
|
||||
|
||||
let alarmDelays = [];
|
||||
let setAlarm = PushService.setAlarm;
|
||||
PushService.setAlarm = function(delay) {
|
||||
alarmDelays.push(delay);
|
||||
setAlarm.apply(this, arguments);
|
||||
};
|
||||
|
||||
let handshakeDone;
|
||||
let handshakePromise = new Promise(resolve => handshakeDone = resolve);
|
||||
PushService.init({
|
||||
serverURI: "wss://push.example.org/",
|
||||
networkInfo: new MockDesktopNetworkInfo(),
|
||||
makeWebSocket(uri) {
|
||||
return new MockWebSocket(uri, {
|
||||
onHello(request) {
|
||||
if (alarmDelays.length == 10) {
|
||||
PushService.setAlarm = setAlarm;
|
||||
this.serverSendMsg(JSON.stringify({
|
||||
messageType: 'hello',
|
||||
status: 200,
|
||||
uaid: userAgentID,
|
||||
}));
|
||||
handshakeDone();
|
||||
return;
|
||||
}
|
||||
this.serverInterrupt();
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
yield waitForPromise(
|
||||
handshakePromise,
|
||||
45000,
|
||||
'Timed out waiting for successful handshake'
|
||||
);
|
||||
deepEqual(alarmDelays, [25, 50, 100, 200, 400, 800, 1600, 3200, 6400, 10000],
|
||||
'Wrong reconnect alarm delays');
|
||||
});
|
|
@ -40,6 +40,7 @@ run-sequentially = This will delete all existing push subscriptions.
|
|||
[test_webapps_cleardata.js]
|
||||
[test_updateRecordNoEncryptionKeys_ws.js]
|
||||
[test_reconnect_retry.js]
|
||||
[test_retry_ws.js]
|
||||
#http2 test
|
||||
[test_resubscribe_4xxCode_http2.js]
|
||||
[test_resubscribe_5xxCode_http2.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче