Bug 1171261 - Only track pending channel registrations. r=dragana

This commit is contained in:
Kit Cambridge 2015-06-06 22:17:04 -07:00
parent 31a5ab9f9d
commit d8338f8319
2 changed files with 24 additions and 25 deletions

View File

@ -803,8 +803,11 @@ this.PushService = {
return this._db.put(aRecord)
.then(_ => aRecord, error => {
// Unable to save.
this._sendRequest("unregister", aRecord);
// Unable to save. Destroy the subscription in the background.
this._sendRequest("unregister", aRecord).catch(err => {
debug("_onRegisterSuccess: Error unregistering stale subscription" +
err);
});
throw error;
});
},
@ -879,7 +882,7 @@ this.PushService = {
* not.
*/
_unregister: function(aPageRecord) {
debug("unregisterWithServer()");
debug("_unregister()");
if (!aPageRecord.scope) {
return Promise.reject({state: 0, error: "NotFoundError"});

View File

@ -951,24 +951,22 @@ this.PushServiceWebSocket = {
}
if (action == "register") {
record.channelID = this._generateID();
}
var data = {channelID: record.channelID,
messageType: action};
let data = {channelID: this._generateID(),
messageType: action};
var p = new Promise((resolve, reject) => {
this._pendingRequests[data.channelID] = {record: record,
resolve: resolve,
reject: reject,
ctime: Date.now()
};
this._queueRequest(data);
});
if (action == "unregister") {
return Promise.resolve();
} else {
return p;
return new Promise((resolve, reject) => {
this._pendingRequests[data.channelID] = {record: record,
resolve: resolve,
reject: reject,
ctime: Date.now()
};
this._queueRequest(data);
});
}
this._queueRequest({channelID: record.channelID,
messageType: action});
return Promise.resolve();
},
_queueStart: Promise.resolve(),
@ -986,13 +984,11 @@ this.PushServiceWebSocket = {
_send(data) {
if (this._currentState == STATE_READY) {
if (data.messageType == "ack") {
if (data.messageType != "register" ||
typeof this._pendingRequests[data.channelID] == "object") {
// check if request has not been cancelled
this._wsSendMessage(data);
} else {
// check if request has not been canelled
if (typeof this._pendingRequests[data.channelID] == "object") {
this._wsSendMessage(data);
}
}
}
},