mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 22:28:36 +00:00
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
"use strict";
|
|
|
|
const { utils: Cu, classes: Cc, interfaces: Ci } = Components;
|
|
const { Loader } = Cu.import('resource://gre/modules/commonjs/toolkit/loader.js', {});
|
|
const cpmm = Cc['@mozilla.org/childprocessmessagemanager;1'].getService(Ci.nsISyncMessageSender);
|
|
|
|
// one Loader instance per addon (per @loader/options to be precise)
|
|
let addons = new Map();
|
|
|
|
cpmm.addMessageListener('sdk/loader/unload', ({ data: options }) => {
|
|
let key = JSON.stringify(options);
|
|
let addon = addons.get(key);
|
|
if (addon)
|
|
addon.loader.unload();
|
|
addons.delete(key);
|
|
})
|
|
|
|
// create a Loader instance from @loader/options
|
|
function loader(options) {
|
|
let key = JSON.stringify(options);
|
|
let addon = addons.get(key) || {};
|
|
if (!addon.loader) {
|
|
addon.loader = Loader.Loader(options);
|
|
addon.require = Loader.Require(addon.loader, { id: 'LoaderHelper' });
|
|
addons.set(key, addon);
|
|
}
|
|
return addon;
|
|
}
|
|
|
|
const EXPORTED_SYMBOLS = ['loader'];
|