Bug 1227539: allow a single argument to be passed to push message subscribers. r=Standard8
--- a/browser/extensions/loop/content/shared/js/loopapi-client.js
+++ b/browser/extensions/loop/content/shared/js/loopapi-client.js
@@ -146,17 +146,21 @@ var loop = loop || {};
loop.subscribe = function subscribe(name, callback) {
if (!gListeningForPushMessages) {
gRootObj.addMessageListener(kPushMessageName, gListeningForPushMessages = function(message) {
var eventName = message.data[0];
if (!gSubscriptionsMap[eventName]) {
return;
}
gSubscriptionsMap[eventName].forEach(function(cb) {
- cb.apply(null, message.data[1]);
+ var data = message.data[1];
+ if (!Array.isArray(data)) {
+ data = [data];
+ }
+ cb.apply(null, data);
});
});
}
if (!gSubscriptionsMap[name]) {
gSubscriptionsMap[name] = [];
}
gSubscriptionsMap[name].push(callback);
--- a/browser/extensions/loop/test/shared/loopapi-client_test.js
+++ b/browser/extensions/loop/test/shared/loopapi-client_test.js
@@ -238,16 +238,26 @@ describe("loopapi-client", function() {
sinon.assert.calledOnce(stub1);
sinon.assert.calledWithExactly(stub1, "Foo", "Bar");
sinon.assert.calledOnce(stub2);
sinon.assert.calledWithExactly(stub2, "Foo", "Bar");
sinon.assert.calledOnce(stub3);
sinon.assert.calledWithExactly(stub3, "Foo", "Bar");
});
+
+ it("should invoke subscription with non-array arguments too", function() {
+ var stub = sinon.stub();
+ loop.subscribe("LoopStatusChanged", stub);
+
+ sendMessage({ data: ["LoopStatusChanged", "Foo"] });
+
+ sinon.assert.calledOnce(stub);
+ sinon.assert.calledWithExactly(stub, "Foo");
+ });
});
describe("unsubscribe", function() {
it("should remove subscriptions from the map", function() {
var handler = function() {};
loop.subscribe("LoopStatusChanged", handler);
loop.unsubscribe("LoopStatusChanged", handler);