From b4a695c2c0d34c937c955b87eada9ba21b9480fb Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Mon, 27 May 2024 09:53:54 +0000 Subject: [PATCH] Bug 1651518 - [devtools] Ensure spawning DistinctSystemPrincipalLoader.sys.mjs only once. r=devtools-reviewers,nchevobbe This is important to spawn this ESM only once between regular and browser toolbox, and especially between various callsites used by the browser toolbox. Otherwise we may start loading modules in two distinct system loaders and may have inconsistancies when using `instanceof`. Differential Revision: https://phabricator.services.mozilla.com/D207432 --- .../client/framework/browser-toolbox/Launcher.sys.mjs | 11 +++++++---- devtools/client/framework/browser-toolbox/window.js | 3 ++- devtools/client/framework/test/allocations/head.js | 3 ++- devtools/client/shared/test/shared-head.js | 6 ++++-- .../ContentProcessWatcherRegistry.sys.mjs | 11 +++++++++-- devtools/server/startup/content-process.sys.mjs | 3 ++- devtools/server/startup/frame.js | 6 ++++-- devtools/server/tests/xpcshell/head_dbg.js | 3 ++- .../tests/xpcshell/test_devtools_socket_status.js | 3 ++- .../shared/tests/xpcshell/test_invisible_loader.js | 3 ++- devtools/shared/tests/xpcshell/test_loader.js | 3 ++- devtools/startup/DevToolsStartup.sys.mjs | 3 ++- 12 files changed, 40 insertions(+), 18 deletions(-) diff --git a/devtools/client/framework/browser-toolbox/Launcher.sys.mjs b/devtools/client/framework/browser-toolbox/Launcher.sys.mjs index a619fbdff20f..6e6c0b211e36 100644 --- a/devtools/client/framework/browser-toolbox/Launcher.sys.mjs +++ b/devtools/client/framework/browser-toolbox/Launcher.sys.mjs @@ -12,13 +12,16 @@ const CHROME_DEBUGGER_PROFILE_NAME = "chrome_debugger_profile"; import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs"; import { require } from "resource://devtools/shared/loader/Loader.sys.mjs"; -import { - useDistinctSystemPrincipalLoader, - releaseDistinctSystemPrincipalLoader, -} from "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs"; import { Subprocess } from "resource://gre/modules/Subprocess.sys.mjs"; import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; +const { + useDistinctSystemPrincipalLoader, + releaseDistinctSystemPrincipalLoader, +} = ChromeUtils.importESModule( + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } +); const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { BackgroundTasksUtils: "resource://gre/modules/BackgroundTasksUtils.sys.mjs", diff --git a/devtools/client/framework/browser-toolbox/window.js b/devtools/client/framework/browser-toolbox/window.js index d4d65af78d46..98dc8a5717f0 100644 --- a/devtools/client/framework/browser-toolbox/window.js +++ b/devtools/client/framework/browser-toolbox/window.js @@ -10,7 +10,8 @@ var { loader, require } = ChromeUtils.importESModule( var { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); // Require this module to setup core modules diff --git a/devtools/client/framework/test/allocations/head.js b/devtools/client/framework/test/allocations/head.js index a7e7f56a36fe..122d46048a04 100644 --- a/devtools/client/framework/test/allocations/head.js +++ b/devtools/client/framework/test/allocations/head.js @@ -16,7 +16,8 @@ let tracker, releaseTrackerLoader; useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const requester = {}; diff --git a/devtools/client/shared/test/shared-head.js b/devtools/client/shared/test/shared-head.js index 0657ede75e0b..7241a6675310 100644 --- a/devtools/client/shared/test/shared-head.js +++ b/devtools/client/shared/test/shared-head.js @@ -32,7 +32,8 @@ if (DEBUG_ALLOCATIONS) { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const requester = {}; const loader = useDistinctSystemPrincipalLoader(requester); @@ -78,7 +79,8 @@ if (DEBUG_STEP) { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const requester = {}; const loader = useDistinctSystemPrincipalLoader(requester); diff --git a/devtools/server/connectors/js-process-actor/ContentProcessWatcherRegistry.sys.mjs b/devtools/server/connectors/js-process-actor/ContentProcessWatcherRegistry.sys.mjs index 41ce80c9fd6d..59bac1331279 100644 --- a/devtools/server/connectors/js-process-actor/ContentProcessWatcherRegistry.sys.mjs +++ b/devtools/server/connectors/js-process-actor/ContentProcessWatcherRegistry.sys.mjs @@ -3,6 +3,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ const lazy = {}; +ChromeUtils.defineESModuleGetters( + lazy, + { + loader: "resource://devtools/shared/loader/Loader.sys.mjs", + }, + { global: "contextual" } +); + ChromeUtils.defineESModuleGetters( lazy, { @@ -10,9 +18,8 @@ ChromeUtils.defineESModuleGetters( "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", useDistinctSystemPrincipalLoader: "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", - loader: "resource://devtools/shared/loader/Loader.sys.mjs", }, - { global: "contextual" } + { global: "shared" } ); // Name of the attribute into which we save data in `sharedData` object. diff --git a/devtools/server/startup/content-process.sys.mjs b/devtools/server/startup/content-process.sys.mjs index fd974e8c4aa6..e740f42f0d16 100644 --- a/devtools/server/startup/content-process.sys.mjs +++ b/devtools/server/startup/content-process.sys.mjs @@ -21,7 +21,8 @@ export function initContentProcessTarget(msg) { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); // Use a unique object to identify this one usage of the loader diff --git a/devtools/server/startup/frame.js b/devtools/server/startup/frame.js index db14f03c1546..3924ed013ab2 100644 --- a/devtools/server/startup/frame.js +++ b/devtools/server/startup/frame.js @@ -28,7 +28,8 @@ try { customLoader = false; if (content.document.nodePrincipal.isSystemPrincipal) { const { useDistinctSystemPrincipalLoader } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); loader = useDistinctSystemPrincipalLoader(chromeGlobal); customLoader = true; @@ -181,7 +182,8 @@ try { if (customLoader) { const { releaseDistinctSystemPrincipalLoader } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); releaseDistinctSystemPrincipalLoader(chromeGlobal); } diff --git a/devtools/server/tests/xpcshell/head_dbg.js b/devtools/server/tests/xpcshell/head_dbg.js index e8547f15b8da..eb3440bb13b4 100644 --- a/devtools/server/tests/xpcshell/head_dbg.js +++ b/devtools/server/tests/xpcshell/head_dbg.js @@ -89,7 +89,8 @@ function getDistinctDevToolsServer() { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const requester = {}; const distinctLoader = useDistinctSystemPrincipalLoader(requester); diff --git a/devtools/shared/security/tests/xpcshell/test_devtools_socket_status.js b/devtools/shared/security/tests/xpcshell/test_devtools_socket_status.js index 2e41583b0512..fdd6feea8661 100644 --- a/devtools/shared/security/tests/xpcshell/test_devtools_socket_status.js +++ b/devtools/shared/security/tests/xpcshell/test_devtools_socket_status.js @@ -7,7 +7,8 @@ const { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const { DevToolsSocketStatus } = ChromeUtils.importESModule( diff --git a/devtools/shared/tests/xpcshell/test_invisible_loader.js b/devtools/shared/tests/xpcshell/test_invisible_loader.js index d83efd9c2a83..260042bd7d47 100644 --- a/devtools/shared/tests/xpcshell/test_invisible_loader.js +++ b/devtools/shared/tests/xpcshell/test_invisible_loader.js @@ -60,7 +60,8 @@ function distinct_system_principal_loader() { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); const requester = {}; diff --git a/devtools/shared/tests/xpcshell/test_loader.js b/devtools/shared/tests/xpcshell/test_loader.js index f2d3b912ca5c..e812e46264f5 100644 --- a/devtools/shared/tests/xpcshell/test_loader.js +++ b/devtools/shared/tests/xpcshell/test_loader.js @@ -7,7 +7,8 @@ const { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); function run_test() { diff --git a/devtools/startup/DevToolsStartup.sys.mjs b/devtools/startup/DevToolsStartup.sys.mjs index e9e24af41e89..cf9539b6ff58 100644 --- a/devtools/startup/DevToolsStartup.sys.mjs +++ b/devtools/startup/DevToolsStartup.sys.mjs @@ -1091,7 +1091,8 @@ DevToolsStartup.prototype = { useDistinctSystemPrincipalLoader, releaseDistinctSystemPrincipalLoader, } = ChromeUtils.importESModule( - "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs", + { global: "shared" } ); try {