michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, you can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: var EXPORTED_SYMBOLS = ['addListener', 'addObject', michael@0: 'removeListener', michael@0: 'sendMessage', 'log', 'pass', 'fail']; michael@0: michael@0: var listeners = {}; michael@0: michael@0: // add a listener for a specific message type michael@0: function addListener(msgType, listener) { michael@0: if (listeners[msgType] === undefined) { michael@0: listeners[msgType] = []; michael@0: } michael@0: michael@0: listeners[msgType].push(listener); michael@0: } michael@0: michael@0: // add each method in an object as a message listener michael@0: function addObject(object) { michael@0: for (var msgType in object) { michael@0: addListener(msgType, object[msgType]); michael@0: } michael@0: } michael@0: michael@0: // remove a listener for all message types michael@0: function removeListener(listener) { michael@0: for (var msgType in listeners) { michael@0: for (let i = 0; i < listeners.length; ++i) { michael@0: if (listeners[msgType][i] == listener) { michael@0: listeners[msgType].splice(i, 1); // remove listener from array michael@0: } michael@0: } michael@0: } michael@0: } michael@0: michael@0: function sendMessage(msgType, obj) { michael@0: if (listeners[msgType] === undefined) { michael@0: return; michael@0: } michael@0: michael@0: for (let i = 0; i < listeners[msgType].length; ++i) { michael@0: listeners[msgType][i](obj); michael@0: } michael@0: } michael@0: michael@0: function log(obj) { michael@0: sendMessage('log', obj); michael@0: } michael@0: michael@0: function pass(obj) { michael@0: sendMessage('pass', obj); michael@0: } michael@0: michael@0: function fail(obj) { michael@0: sendMessage('fail', obj); michael@0: }