diff options
Diffstat (limited to 'devtools/shared/tests/xpcshell/test_invisible_loader.js')
-rw-r--r-- | devtools/shared/tests/xpcshell/test_invisible_loader.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/devtools/shared/tests/xpcshell/test_invisible_loader.js b/devtools/shared/tests/xpcshell/test_invisible_loader.js new file mode 100644 index 0000000000..d83efd9c2a --- /dev/null +++ b/devtools/shared/tests/xpcshell/test_invisible_loader.js @@ -0,0 +1,80 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const { addDebuggerToGlobal } = ChromeUtils.importESModule( + "resource://gre/modules/jsdebugger.sys.mjs" +); +addDebuggerToGlobal(globalThis); + +/** + * Ensure that sandboxes created via the Dev Tools loader respect the + * invisibleToDebugger flag. + */ +function run_test() { + visible_loader(); + invisible_loader(); + // TODO: invisibleToDebugger should be deprecated in favor of + // useDistinctSystemPrincipalLoader, but we might move out from the loader + // to using only standard imports instead. + distinct_system_principal_loader(); +} + +function visible_loader() { + const loader = new DevToolsLoader({ + invisibleToDebugger: false, + }); + loader.require("resource://devtools/shared/indentation.js"); + + const dbg = new Debugger(); + const sandbox = loader.loader.sharedGlobal; + + try { + dbg.addDebuggee(sandbox); + Assert.ok(true); + } catch (e) { + do_throw("debugger could not add visible value"); + } +} + +function invisible_loader() { + const loader = new DevToolsLoader({ + invisibleToDebugger: true, + }); + loader.require("resource://devtools/shared/indentation.js"); + + const dbg = new Debugger(); + const sandbox = loader.loader.sharedGlobal; + + try { + dbg.addDebuggee(sandbox); + do_throw("debugger added invisible value"); + } catch (e) { + Assert.ok(true); + } +} + +function distinct_system_principal_loader() { + const { + useDistinctSystemPrincipalLoader, + releaseDistinctSystemPrincipalLoader, + } = ChromeUtils.importESModule( + "resource://devtools/shared/loader/DistinctSystemPrincipalLoader.sys.mjs" + ); + + const requester = {}; + const loader = useDistinctSystemPrincipalLoader(requester); + loader.require("resource://devtools/shared/indentation.js"); + + const dbg = new Debugger(); + const sandbox = loader.loader.sharedGlobal; + + try { + dbg.addDebuggee(sandbox); + do_throw("debugger added invisible value"); + } catch (e) { + Assert.ok(true); + } + releaseDistinctSystemPrincipalLoader(requester); +} |