Bug 1384527 - remove Promise.jsm from Loader.jsm. r=jryans
MozReview-Commit-ID: JTeQCR31vIj
--- 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);
}