/* * This file is part of Adblock Plus , * Copyright (C) 2006-2017 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 . */ (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", {}); Cu.importGlobalProperties(["atob", "btoa", "File", "URL", "URLSearchParams", "TextDecoder", "TextEncoder"]); 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); } }; function init() { let url = new URL(Components.stack.filename); let params = new URLSearchParams(url.search.substr(1)); let info = JSON.parse(params.get("info")); let loader = Loader({ paths: { "": info.addonRoot + "lib/" }, globals: { Components, Cc, Ci, Cu, Cr, atob, btoa, File, URL, URLSearchParams, TextDecoder, TextEncoder, onShutdown }, modules: {"info": info, "messageManager": this}, id: info.addonID }); onShutdown.add(() => unload(loader, "disable")) main(loader, "child/main"); } function shutdown(message) { if (message.data == Components.stack.filename) { onShutdown.done = true; for (let i = shutdownHandlers.length - 1; i >= 0; i --) { try { shutdownHandlers[i](); } catch (e) { Cu.reportError(e); } } shutdownHandlers = null; } } addMessageListener("AdblockPlus:Shutdown", shutdown); onShutdown.add(() => { removeMessageListener("AdblockPlus:Shutdown", shutdown); }); init(); })();