Index: lib/messaging.js |
=================================================================== |
--- a/lib/messaging.js |
+++ b/lib/messaging.js |
@@ -12,16 +12,18 @@ |
* GNU General Public License for more details. |
* |
* You should have received a copy of the GNU General Public License |
* along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
*/ |
"use strict"; |
+let {EventEmitter} = require("events"); |
+ |
const MESSAGE_NAME = "AdblockPlus:Message"; |
const RESPONSE_NAME = "AdblockPlus:Response"; |
function isPromise(value) |
{ |
// value instanceof Promise won't work - there can be different Promise |
// classes (e.g. in different contexts) and there can also be promise-like |
// classes (e.g. Task). |
@@ -116,18 +118,18 @@ LightWeightPort.prototype = |
* Communication port wrapping the message manager API to send and receive |
* messages. |
* @param {nsIMessageManager} messageManager |
* @constructor |
*/ |
function Port(messageManager) |
{ |
this._messageManager = messageManager; |
+ this._eventEmitter = new EventEmitter(); |
- this._callbacks = new Map(); |
this._responseCallbacks = new Map(); |
this._responseCallbackCounter = 0; |
this._handleRequest = this._handleRequest.bind(this); |
this._handleResponse = this._handleResponse.bind(this); |
this._messageManager.addMessageListener(MESSAGE_NAME, this._handleRequest); |
this._messageManager.addMessageListener(RESPONSE_NAME, this._handleResponse); |
} |
@@ -203,21 +205,17 @@ Port.prototype = { |
{ |
this._responseCallbacks.delete(callbackID); |
callback(processor.value); |
} |
}, |
_dispatch: function(messageName, payload, sender) |
{ |
- let callbacks = this._callbacks.get(messageName); |
- if (!callbacks) |
- return undefined; |
- |
- callbacks = callbacks.slice(); |
+ let callbacks = this._eventEmitter.listeners(messageName); |
let processor = new ResponseProcessor(messageName); |
for (let callback of callbacks) |
{ |
try |
{ |
processor.add(callback(payload, sender)); |
} |
catch (e) |
@@ -241,37 +239,27 @@ Port.prototype = { |
/** |
* Adds a handler for the specified message. |
* @param {string} messageName message that would trigger the callback |
* @param {Port~messageHandler} callback |
*/ |
on: function(messageName, callback) |
{ |
- let callbacks = this._callbacks.get(messageName); |
- if (callbacks) |
- callbacks.push(callback); |
- else |
- this._callbacks.set(messageName, [callback]); |
+ this._eventEmitter.on(messageName, callback); |
}, |
/** |
* Removes a handler for the specified message. |
* @param {string} messageName message that would trigger the callback |
* @param {Port~messageHandler} callback |
*/ |
off: function(messageName, callback) |
{ |
- let callbacks = this._callbacks.get(messageName); |
- if (!callbacks) |
- return; |
- |
- let index = callbacks.indexOf(callback); |
- if (index >= 0) |
- callbacks.splice(index, 1); |
+ this._eventEmitter.off(messageName, callback); |
}, |
/** |
* Sends a message. |
* @param {string} messageName message identifier |
* @param [payload] data to attach to the message |
*/ |
emit: function(messageName, payload) |