| Index: lib/child/bootstrap.js |
| =================================================================== |
| --- a/lib/child/bootstrap.js |
| +++ b/lib/child/bootstrap.js |
| @@ -18,16 +18,17 @@ |
| (function() |
| { |
| const Cc = Components.classes; |
| const Ci = Components.interfaces; |
| const Cr = Components.results; |
| const Cu = Components.utils; |
| let {Loader, main, unload} = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js", {}); |
| + let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); |
| let loader = null; |
| let shutdownHandlers = []; |
| let onShutdown = |
| { |
| done: false, |
| add: function(handler) |
| @@ -45,24 +46,60 @@ |
| addMessageListener("AdblockPlus:Info", init); |
| addMessageListener("AdblockPlus:Shutdown", shutdown); |
| function init(message) |
| { |
| removeMessageListener("AdblockPlus:Info", init); |
| + let callbackPrefix = Services.appinfo.processID + " "; |
| + let maxCallbackID = 0; |
| + let callbacks = new Map(); |
| + |
| + function sendSyncMessageSingleResponse(messageName, data) |
| + { |
| + return sendSyncMessage(messageName, {data})[0]; |
| + } |
| + |
| + function sendAsyncMessageWithResponse(messageName, data, callback) |
| + { |
| + data = {data}; |
| + if (callback) |
| + { |
| + let callbackID = callbackPrefix + (++maxCallbackID); |
| + callbacks.set(callbackID, callback); |
| + data.callbackID = callbackID; |
| + } |
| + sendAsyncMessage(messageName, data); |
| + } |
| + |
| + function onResponse(message) |
| + { |
| + let {callbackID, response} = message.data; |
| + if (callbacks.has(callbackID)) |
| + { |
| + let callback = callbacks.get(callbackID); |
| + callbacks.delete(callbackID); |
| + callback(response); |
| + } |
| + } |
| + addMessageListener("AdblockPlus:Response", onResponse); |
| + onShutdown.add(() => removeMessageListener("AdblockPlus:Response", onResponse)); |
| + |
| let info = message.data; |
| loader = Loader({ |
| paths: { |
| "": info.addonRoot + "lib/" |
| }, |
| globals: { |
| Components, Cc, Ci, Cu, Cr, atob, btoa, onShutdown, |
| - addMessageListener, removeMessageListener, sendAsyncMessage, sendSyncMessage |
| + addMessageListener, removeMessageListener, |
| + sendAsyncMessage: sendAsyncMessageWithResponse, |
|
tschuster
2015/11/14 21:26:07
I don't think it's great that we use the same name
Wladimir Palant
2015/11/16 12:54:24
I don't think these will stay like that. My idea i
|
| + sendSyncMessage: sendSyncMessageSingleResponse |
| }, |
| modules: {"info": info}, |
| id: info.addonID |
| }); |
| onShutdown.add(() => unload(loader, "disable")) |
| main(loader, "child/main"); |
| } |