Bug 1384527 - remove Promise.jsm from Loader.jsm. r=jryans draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Tue, 25 Jul 2017 16:20:19 +0200
changeset 615845 48e1c571c98904f3b3d9e28ceb91e14f56a03418
parent 615844 58c18b66d03e7aa0154f738775c7d89a9eef9043
child 639296 ec54145ded157a2b9c71528b9b1cb1e73f3d3d9b
push id70493
push userbmo:poirot.alex@gmail.com
push dateWed, 26 Jul 2017 11:45:46 +0000
reviewersjryans
bugs1384527
milestone56.0a1
Bug 1384527 - remove Promise.jsm from Loader.jsm. r=jryans MozReview-Commit-ID: JTeQCR31vIj
devtools/shared/Loader.jsm
devtools/shared/tests/unit/test_invisible_loader.js
--- a/devtools/shared/Loader.jsm
+++ b/devtools/shared/Loader.jsm
@@ -11,16 +11,20 @@
 var { utils: Cu } = Components;
 var { Services } = Cu.import("resource://gre/modules/Services.jsm", {});
 var { Loader, descriptor, resolveURI } = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js", {});
 var { requireRawId } = Cu.import("resource://devtools/shared/loader-plugin-raw.jsm", {});
 
 this.EXPORTED_SYMBOLS = ["DevToolsLoader", "devtools", "BuiltinProvider",
                          "require", "loader"];
 
+// Fire an event to notify the DevTools addon bootstrap that DevTools are being
+// initialized. The loader is always the first entry point for all DevTools consumers.
+Services.obs.notifyObservers(null, "devtools-loader-starting");
+
 /**
  * Providers are different strategies for loading the devtools.
  */
 
 var sharedGlobalBlocklist = ["sdk/indexed-db"];
 
 /**
  * Used when the tools should be loaded from the Firefox package itself.
@@ -55,24 +59,16 @@ BuiltinProvider.prototype = {
 
       // ⚠ DISCUSSION ON DEV-DEVELOPER-TOOLS REQUIRED BEFORE MODIFYING ⚠
       // Allow access to locale data using paths closer to what is
       // used in the source tree.
       "devtools/client/locales": "chrome://devtools/locale",
       "devtools/shared/locales": "chrome://devtools-shared/locale",
       "toolkit/locales": "chrome://global/locale",
     };
-    // When creating a Loader invisible to the Debugger, we have to ensure
-    // using only modules and not depend on any JSM. As everything that is
-    // not loaded with Loader isn't going to respect `invisibleToDebugger`.
-    // But we have to keep using Promise.jsm for other loader to prevent
-    // breaking unhandled promise rejection in tests.
-    if (this.invisibleToDebugger) {
-      paths.promise = "resource://gre/modules/Promise-backend.js";
-    }
     this.loader = new Loader.Loader({
       id: "fx-devtools",
       paths,
       invisibleToDebugger: this.invisibleToDebugger,
       sharedGlobal: true,
       sharedGlobalBlocklist,
       sandboxName: "DevTools (Module loader)",
       noSandboxAddonId: true,
@@ -169,23 +165,16 @@ DevToolsLoader.prototype = {
     this._provider.invisibleToDebugger = this.invisibleToDebugger;
 
     this._provider.load();
     this.require = Loader.Require(this._provider.loader, { id: "devtools" });
 
     // Fetch custom pseudo modules and globals
     let { modules, globals } = this.require("devtools/shared/builtin-modules");
 
-    // When creating a Loader for the browser toolbox, we have to use
-    // Promise-backend.js, as a Loader module. Instead of Promise.jsm which
-    // can't be flagged as invisible to debugger.
-    if (this.invisibleToDebugger) {
-      delete modules.promise;
-    }
-
     // Register custom pseudo modules to the current loader instance
     let loader = this._provider.loader;
     for (let id in modules) {
       let uri = resolveURI(id, loader.mapping);
       loader.modules[uri] = {
         get exports() {
           return modules[id];
         }
--- a/devtools/shared/tests/unit/test_invisible_loader.js
+++ b/devtools/shared/tests/unit/test_invisible_loader.js
@@ -45,16 +45,9 @@ function invisible_loader() {
   let sandbox = loader._provider.loader.sharedGlobalSandbox;
 
   try {
     dbg.addDebuggee(sandbox);
     do_throw("debugger added invisible value");
   } catch (e) {
     do_check_true(true);
   }
-
-  // But for browser toolbox loader, promise is loaded as a regular modules out
-  // of Promise-backend.js, that to be invisible to the debugger and not step
-  // into it.
-  const promise = loader.require("promise");
-  const promiseModule = loader._provider.loader.modules["resource://gre/modules/Promise-backend.js"];
-  do_check_eq(promise, promiseModule.exports);
 }