Bug 1393621: Part 3 - Add test for framework JSMs loaded at startup. r?zombie draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 30 Aug 2017 13:25:28 -0700
changeset 656171 cf868fdf3c7722cb942ad8b14ece5e1ae17beeae
parent 656170 b343aa6b5b404543dcfd74455710eb7bfbac0c2b
child 729042 310350f7476a02c4d1c8eb5f0ad1edb890584309
push id77102
push usermaglione.k@gmail.com
push dateWed, 30 Aug 2017 20:26:34 +0000
reviewerszombie
bugs1393621
milestone57.0a1
Bug 1393621: Part 3 - Add test for framework JSMs loaded at startup. r?zombie MozReview-Commit-ID: DvVO9bzwyXf
toolkit/components/extensions/test/xpcshell/test_ext_startup_perf.js
--- a/toolkit/components/extensions/test/xpcshell/test_ext_startup_perf.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_startup_perf.js
@@ -1,16 +1,33 @@
 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
 /* vim: set sts=2 sw=2 et tw=80: */
 "use strict";
 
 const STARTUP_APIS = [
   "backgroundPage",
 ];
 
+const STARTUP_MODULES = [
+  "resource://gre/modules/Extension.jsm",
+  "resource://gre/modules/ExtensionCommon.jsm",
+  "resource://gre/modules/ExtensionParent.jsm",
+  // FIXME: This is only loaded at startup for new extension installs.
+  // Otherwise the data comes from the startup cache. We should test for
+  // this.
+  "resource://gre/modules/ExtensionPermissions.jsm",
+  "resource://gre/modules/ExtensionUtils.jsm",
+];
+
+if (!Services.prefs.getBoolPref("extensions.webextensions.remote")) {
+  STARTUP_MODULES.push(
+    "resource://gre/modules/ExtensionChild.jsm",
+    "resource://gre/modules/ExtensionPageChild.jsm");
+}
+
 // Tests that only the minimal set of API scripts are loaded at startup
 // for a simple extension.
 add_task(async function test_loaded_api_scripts() {
   let extension = ExtensionTestUtils.loadExtension({
     background() {},
     manifest: {},
   });
 
@@ -20,10 +37,18 @@ add_task(async function test_loaded_api_
 
   const loadedAPIs = Array.from(apiManager.modules.values())
                           .filter(m => m.loaded || m.asyncLoaded)
                           .map(m => m.namespaceName);
 
   deepEqual(loadedAPIs.sort(), STARTUP_APIS,
             "No extra APIs should be loaded at startup for a simple extension");
 
+
+  const loader = Cc["@mozilla.org/moz/jsloader;1"].getService(Ci.xpcIJSModuleLoader);
+  let loadedModules = loader.loadedModules()
+                            .filter(url => url.startsWith("resource://gre/modules/Extension"));
+
+  deepEqual(loadedModules.sort(), STARTUP_MODULES.sort(),
+            "No extra extension modules should be loaded at startup for a simple extension");
+
   await extension.unload();
 });