Bug 1151862 - Get the full list of Loop rooms on first notification if we haven't got it previously. r=mikedeboer

This commit is contained in:
Mark Banner 2015-05-06 12:47:10 +01:00
Родитель 284a13a8d7
Коммит 7c97c2e5a5
3 изменённых файлов: 125 добавлений и 1 удалений

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

@ -727,8 +727,12 @@ let LoopRoomsInternal = {
return;
}
let oldDirty = gDirty;
gDirty = true;
this.getAll(version, () => {});
// If we were already dirty, then get the full set of rooms. For example,
// we'd already be dirty if we had started up but not got the list of rooms
// yet.
this.getAll(oldDirty ? null : version, () => {});
},
/**

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

@ -0,0 +1,119 @@
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
Cu.import("resource://services-common/utils.js");
Cu.import("resource:///modules/loop/LoopRooms.jsm");
Cu.import("resource:///modules/Chat.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
const kGuestKey = "uGIs-kGbYt1hBBwjyW7MLQ";
const kChannelGuest = MozLoopService.channelIDs.roomsGuest;
const kRoomsResponses = new Map([
["_nxD4V4FflQ", {
roomToken: "_nxD4V4FflQ",
// Encrypted with roomKey "FliIGLUolW-xkKZVWstqKw".
// roomKey is wrapped with kGuestKey.
context: {
wrappedKey: "F3V27oPB+FgjFbVPML2PupONYqoIZ53XRU4BqG46Lr3eyIGumgCEqgjSe/MXAXiQ//8=",
value: "df7B4SNxhOI44eJjQavCevADyCCxz6/DEZbkOkRUMVUxzS42FbzN6C2PqmCKDYUGyCJTwJ0jln8TLw==",
alg: "AES-GCM"
},
roomUrl: "http://localhost:3000/rooms/_nxD4V4FflQ",
maxSize: 2,
ctime: 1405517546,
participants: [{
displayName: "Alexis",
account: "alexis@example.com",
roomConnectionId: "2a1787a6-4a73-43b5-ae3e-906ec1e763cb"
}, {
displayName: "Adam",
roomConnectionId: "781f012b-f1ea-4ce1-9105-7cfc36fb4ec7"
}]
}],
["QzBbvGmIZWU", {
roomToken: "QzBbvGmIZWU",
roomName: "Second Room Name",
roomUrl: "http://localhost:3000/rooms/QzBbvGmIZWU",
maxSize: 2,
ctime: 140551741
}],
]);
let gRoomsAdded = [];
let gRoomsUpdated = [];
const onRoomAdded = function(e, room) {
gRoomsAdded.push(room);
};
const onRoomUpdated = function(e, room) {
gRoomsUpdated.push(room);
};
let gQueryString = null;
add_task(function* setup_server() {
loopServer.registerPathHandler("/registration", (req, res) => {
res.setStatusLine(null, 200, "OK");
res.processAsync();
res.finish();
});
loopServer.registerPathHandler("/rooms", (req, res) => {
gQueryString = req.queryString;
res.setStatusLine(null, 200, "OK");
// For this simple test, always send all rooms, even though this wouldn't
// happen normally.
res.write(JSON.stringify([...kRoomsResponses.values()]));
res.processAsync();
res.finish();
});
mockPushHandler.registrationPushURL = kEndPointUrl;
yield MozLoopService.promiseRegisteredWithServers();
});
// Test if notifying from push correctly gets all rooms the first time.
add_task(function* test_notification_firstTime() {
roomsPushNotification("1", kChannelGuest);
// Wait for the notification to complete before we getAll, otherwise
// the getAll may cover up what we're testing.
yield waitForCondition(() => gRoomsAdded.length === 2);
let rooms = yield LoopRooms.promise("getAll");
Assert.equal(rooms.length, 2);
Assert.equal(gQueryString, "", "Query string should not be set.");
});
// Test if notifying from push correctly only gets the specific room the second time.
add_task(function* test_notification_firstTime() {
roomsPushNotification("2", kChannelGuest);
yield waitForCondition(() => gRoomsUpdated.length === 2);
let rooms = yield LoopRooms.promise("getAll");
Assert.equal(rooms.length, 2);
Assert.equal(gQueryString, "version=2", "Query string should be set.");
});
function run_test() {
setupFakeLoopServer();
Services.prefs.setCharPref("loop.key", kGuestKey);
LoopRooms.on("add", onRoomAdded);
LoopRooms.on("update", onRoomUpdated);
do_register_cleanup(function () {
Services.prefs.clearUserPref("loop.key");
LoopRooms.off("add", onRoomAdded);
LoopRooms.off("update", onRoomUpdated);
});
run_next_test();
}

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

@ -7,6 +7,7 @@ skip-if = toolkit == 'gonk'
[test_loopapi_hawk_request.js]
[test_looppush_initialize.js]
[test_looprooms.js]
[test_looprooms_first_notification.js]
[test_loopservice_directcall.js]
[test_loopservice_dnd.js]
[test_loopservice_encryptionkey.js]