Bug 1097749 - Standalone rooms should display the room name once the room has been joined. r=nperriault
a=kwierso for the CLOSED TREE
This commit is contained in:
@@ -304,6 +304,21 @@ loop.store.ActiveRoomStore = (function() {
|
|||||||
|
|
||||||
this._setRefreshTimeout(actionData.expires);
|
this._setRefreshTimeout(actionData.expires);
|
||||||
this._sdkDriver.connectSession(actionData);
|
this._sdkDriver.connectSession(actionData);
|
||||||
|
|
||||||
|
// If we haven't got a room name yet, go and get one. We typically
|
||||||
|
// need to do this in the case of the standalone window.
|
||||||
|
// XXX When bug 1103331 lands this can be moved to earlier.
|
||||||
|
if (!this._storeState.roomName) {
|
||||||
|
this._mozLoop.rooms.get(this._storeState.roomToken,
|
||||||
|
function(err, result) {
|
||||||
|
if (err) {
|
||||||
|
console.error("Failed to get room data:", err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.dispatcher.dispatch(new sharedActions.UpdateRoomInfo(result));
|
||||||
|
}.bind(this));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -68,6 +68,44 @@ loop.StandaloneMozLoop = (function(mozL10n) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
StandaloneMozLoopRooms.prototype = {
|
StandaloneMozLoopRooms.prototype = {
|
||||||
|
/**
|
||||||
|
* Request information about a specific room from the server.
|
||||||
|
*
|
||||||
|
* @param {String} roomToken Room identifier
|
||||||
|
* @param {Function} callback Function that will be invoked once the operation
|
||||||
|
* finished. The first argument passed will be an
|
||||||
|
* `Error` object or `null`. The second argument will
|
||||||
|
* be the list of rooms, if it was fetched successfully.
|
||||||
|
*/
|
||||||
|
get: function(roomToken, callback) {
|
||||||
|
var req = $.ajax({
|
||||||
|
url: this._baseServerUrl + "/rooms/" + roomToken,
|
||||||
|
method: "GET",
|
||||||
|
contentType: "application/json",
|
||||||
|
beforeSend: function(xhr) {
|
||||||
|
if (this.sessionToken) {
|
||||||
|
xhr.setRequestHeader("Authorization", "Basic " + btoa(this.sessionToken));
|
||||||
|
}
|
||||||
|
}.bind(this)
|
||||||
|
});
|
||||||
|
|
||||||
|
req.done(function(responseData) {
|
||||||
|
try {
|
||||||
|
// We currently only require things we need rather than everything possible.
|
||||||
|
callback(null, validate(responseData, {
|
||||||
|
roomName: String,
|
||||||
|
roomOwner: String,
|
||||||
|
roomUrl: String
|
||||||
|
}));
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Error requesting call info", err.message);
|
||||||
|
callback(err);
|
||||||
|
}
|
||||||
|
}.bind(this));
|
||||||
|
|
||||||
|
req.fail(failureHandler.bind(this, callback));
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal function to actually perform a post to a room.
|
* Internal function to actually perform a post to a room.
|
||||||
*
|
*
|
||||||
@@ -115,6 +153,16 @@ loop.StandaloneMozLoop = (function(mozL10n) {
|
|||||||
* `Error` object or `null`.
|
* `Error` object or `null`.
|
||||||
*/
|
*/
|
||||||
join: function(roomToken, callback) {
|
join: function(roomToken, callback) {
|
||||||
|
function callbackWrapper(err, result) {
|
||||||
|
// XXX Save the sessionToken for purposes of get.
|
||||||
|
// When bug 1103331 this can probably be removed.
|
||||||
|
if (result) {
|
||||||
|
this.sessionToken = result.sessionToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(err, result);
|
||||||
|
}
|
||||||
|
|
||||||
this._postToRoom(roomToken, null, {
|
this._postToRoom(roomToken, null, {
|
||||||
action: "join",
|
action: "join",
|
||||||
displayName: mozL10n.get("rooms_display_name_guest"),
|
displayName: mozL10n.get("rooms_display_name_guest"),
|
||||||
@@ -124,7 +172,7 @@ loop.StandaloneMozLoop = (function(mozL10n) {
|
|||||||
sessionId: String,
|
sessionId: String,
|
||||||
sessionToken: String,
|
sessionToken: String,
|
||||||
expires: Number
|
expires: Number
|
||||||
}, callback);
|
}, callbackWrapper.bind(this));
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -384,6 +384,34 @@ describe("loop.store.ActiveRoomStore", function () {
|
|||||||
actionData);
|
actionData);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should call mozLoop.rooms.get to get the room data if the roomName" +
|
||||||
|
"is not known", function() {
|
||||||
|
store.setStoreState({roomName: undefined});
|
||||||
|
|
||||||
|
store.joinedRoom(new sharedActions.JoinedRoom(fakeJoinedData));
|
||||||
|
|
||||||
|
sinon.assert.calledOnce(fakeMozLoop.rooms.get);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should dispatch UpdateRoomInfo if mozLoop.rooms.get is successful",
|
||||||
|
function() {
|
||||||
|
var roomDetails = {
|
||||||
|
roomName: "fakeName",
|
||||||
|
roomUrl: "http://invalid",
|
||||||
|
roomOwner: "gavin"
|
||||||
|
};
|
||||||
|
|
||||||
|
fakeMozLoop.rooms.get.callsArgWith(1, null, roomDetails);
|
||||||
|
|
||||||
|
store.setStoreState({roomName: undefined});
|
||||||
|
|
||||||
|
store.joinedRoom(new sharedActions.JoinedRoom(fakeJoinedData));
|
||||||
|
|
||||||
|
sinon.assert.calledOnce(dispatcher.dispatch);
|
||||||
|
sinon.assert.calledWithExactly(dispatcher.dispatch,
|
||||||
|
new sharedActions.UpdateRoomInfo(roomDetails));
|
||||||
|
});
|
||||||
|
|
||||||
it("should call mozLoop.rooms.refreshMembership before the expiresTime",
|
it("should call mozLoop.rooms.refreshMembership before the expiresTime",
|
||||||
function() {
|
function() {
|
||||||
store.joinedRoom(new sharedActions.JoinedRoom(fakeJoinedData));
|
store.joinedRoom(new sharedActions.JoinedRoom(fakeJoinedData));
|
||||||
|
|||||||
@@ -76,6 +76,42 @@ describe("loop.StandaloneMozLoop", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("#rooms.get", function() {
|
||||||
|
it("should GET to the server", function() {
|
||||||
|
mozLoop.rooms.get("fakeToken", callback);
|
||||||
|
|
||||||
|
expect(requests).to.have.length.of(1);
|
||||||
|
expect(requests[0].url).eql(fakeBaseServerUrl + "/rooms/fakeToken");
|
||||||
|
expect(requests[0].method).eql("GET");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the callback with success parameters", function() {
|
||||||
|
mozLoop.rooms.get("fakeToken", callback);
|
||||||
|
|
||||||
|
var roomDetails = {
|
||||||
|
roomName: "fakeName",
|
||||||
|
roomUrl: "http://invalid",
|
||||||
|
roomOwner: "gavin"
|
||||||
|
};
|
||||||
|
|
||||||
|
requests[0].respond(200, {"Content-Type": "application/json"},
|
||||||
|
JSON.stringify(roomDetails));
|
||||||
|
|
||||||
|
sinon.assert.calledOnce(callback);
|
||||||
|
sinon.assert.calledWithExactly(callback, null, roomDetails);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should call the callback with failure parameters", function() {
|
||||||
|
mozLoop.rooms.get("fakeToken", callback);
|
||||||
|
|
||||||
|
requests[0].respond(401, {"Content-Type": "application/json"},
|
||||||
|
JSON.stringify(fakeServerErrorDescription));
|
||||||
|
sinon.assert.calledWithMatch(callback, sinon.match(function(err) {
|
||||||
|
return /HTTP 401 Unauthorized/.test(err.message);
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
describe("#rooms.join", function() {
|
describe("#rooms.join", function() {
|
||||||
it("should POST to the server", function() {
|
it("should POST to the server", function() {
|
||||||
mozLoop.rooms.join("fakeToken", callback);
|
mozLoop.rooms.join("fakeToken", callback);
|
||||||
|
|||||||
Reference in New Issue
Block a user