Bug 1298716 - Serialize extension in ExtensionTestUtils.loadExtension draft
authorRob Wu <rob@robwu.nl>
Sun, 28 Aug 2016 16:35:00 -0700
changeset 408212 eade6c84f33d58db8b017736b1d0b148521bcd24
parent 408083 b3ec8a3373e8faca26c39e9ff577a2d4f8b6927a
child 408213 c41659cc360bef9a44fc5f17478965068f1941f6
push id28174
push userbmo:rob@robwu.nl
push dateWed, 31 Aug 2016 22:00:24 +0000
bugs1298716
milestone51.0a1
Bug 1298716 - Serialize extension in ExtensionTestUtils.loadExtension MozReview-Commit-ID: BUK2QnMmXp7
testing/mochitest/tests/SimpleTest/ExtensionTestUtils.js
--- 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")