Bug 1298716 - Serialize extension in ExtensionTestUtils.loadExtension
MozReview-Commit-ID: BUK2QnMmXp7
--- a/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js
+++ b/testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js
@@ -78,16 +78,33 @@ ExtensionTestUtils.loadExtension = funct
} else {
messageQueue.add([msg, ...args]);
checkMessages();
}
},
};
+ // Mimic serialization of functions as done in `Extension.generateXPI` and
+ // `Extension.generateZipFile` because functions are dropped when `ext` object
+ // is sent to the main process via the message manager.
+ ext = Object.assign({}, ext);
+ if (ext.files) {
+ ext.files = Object.assign({}, ext.files);
+ for (let filename of Object.keys(ext.files)) {
+ let file = ext.files[filename];
+ if (typeof file == "function") {
+ ext.files[filename] = `(${file})();`
+ }
+ }
+ }
+ if (typeof ext.background == "function") {
+ ext.background = `(${ext.background})();`
+ }
+
var extension = SpecialPowers.loadExtension(ext, handler);
registerCleanup(() => {
if (extension.state == "pending" || extension.state == "running") {
SimpleTest.ok(false, "Extension left running at test shutdown")
return extension.unload();
} else if (extension.state == "unloading") {
SimpleTest.ok(false, "Extension not fully unloaded at test shutdown")