 Issue 29329246:
  Issue 3108 - Inject our about: module into all processes  (Closed)
    
  
    Issue 29329246:
  Issue 3108 - Inject our about: module into all processes  (Closed) 
  | Index: lib/child/bootstrap.js | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/lib/child/bootstrap.js | 
| @@ -0,0 +1,92 @@ | 
| +/* | 
| + * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| + * Copyright (C) 2006-2015 Eyeo GmbH | 
| + * | 
| + * Adblock Plus is free software: you can redistribute it and/or modify | 
| + * it under the terms of the GNU General Public License version 3 as | 
| + * published by the Free Software Foundation. | 
| + * | 
| + * Adblock Plus is distributed in the hope that it will be useful, | 
| + * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| + * 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/>. | 
| + */ | 
| + | 
| +(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 loader = null; | 
| + | 
| + let shutdownHandlers = []; | 
| + let onShutdown = | 
| + { | 
| + done: false, | 
| + add: function(handler) | 
| + { | 
| + if (shutdownHandlers.indexOf(handler) < 0) | 
| + shutdownHandlers.push(handler); | 
| + }, | 
| + remove: function(handler) | 
| + { | 
| + let index = shutdownHandlers.indexOf(handler); | 
| + if (index >= 0) | 
| + shutdownHandlers.splice(index, 1); | 
| + } | 
| + }; | 
| + | 
| + addMessageListener("AdblockPlus:Info", init); | 
| + addMessageListener("AdblockPlus:Shutdown", shutdown); | 
| + | 
| + function init(message) | 
| + { | 
| + removeMessageListener("AdblockPlus:Info", init); | 
| + | 
| + let info = message.data; | 
| + loader = Loader({ | 
| + paths: { | 
| + "": info.addonRoot + "lib/" | 
| + }, | 
| + globals: { | 
| + Components, Cc, Ci, Cu, Cr, atob, btoa, onShutdown, | 
| 
Wladimir Palant
2015/10/16 12:15:10
bootstrap.js from buildtools also exposes File and
 
Thomas Greiner
2015/10/16 15:40:25
I couldn't find a better one either. We could impl
 
Wladimir Palant
2015/10/16 17:52:03
The alternative is exposing this property as compo
 | 
| + addMessageListener, removeMessageListener, sendAsyncMessage, sendSyncMessage | 
| + }, | 
| + modules: {"info": info}, | 
| + id: info.addonID | 
| + }); | 
| + onShutdown.add(() => unload(loader, "disable")) | 
| + | 
| + main(loader, "child/main"); | 
| + } | 
| + | 
| + function shutdown(message) | 
| + { | 
| + if (message.data == Components.stack.filename) | 
| + { | 
| + removeMessageListener("AdblockPlus:Shutdown", shutdown); | 
| + | 
| + onShutdown.done = true; | 
| + for (let i = shutdownHandlers.length - 1; i >= 0; i --) | 
| + { | 
| + try | 
| + { | 
| + shutdownHandlers[i](); | 
| + } | 
| + catch (e) | 
| + { | 
| + Cu.reportError(e); | 
| + } | 
| + } | 
| + shutdownHandlers = null; | 
| + } | 
| + } | 
| +})(); | 
| + |