Files
2018-07-25 06:35:22 +08:00

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'];