diff options
Diffstat (limited to 'devtools/client/webconsole/test/browser/browser_console_eager_eval.js')
-rw-r--r-- | devtools/client/webconsole/test/browser/browser_console_eager_eval.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/browser/browser_console_eager_eval.js b/devtools/client/webconsole/test/browser/browser_console_eager_eval.js new file mode 100644 index 0000000000..74e8c5661b --- /dev/null +++ b/devtools/client/webconsole/test/browser/browser_console_eager_eval.js @@ -0,0 +1,49 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +// Check evaluating eager-evaluation values. +const TEST_URI = "data:text/html;charset=utf8,<!DOCTYPE html>"; + +add_task(async function () { + await addTab(TEST_URI); + + await pushPref("devtools.chrome.enabled", true); + + info("Open the Browser Console"); + const hud = await BrowserConsoleManager.toggleBrowserConsole(); + + await executeNonDebuggeeSideeffect(hud); +}); + +// Test that code is still terminated, even if it is calling into realms +// that aren't the normal debuggee realms (bug 1620087). +async function executeNonDebuggeeSideeffect(hud) { + await executeAndWaitForResultMessage( + hud, + `globalThis.eagerLoader = ChromeUtils.importESModule("resource://devtools/shared/loader/Loader.sys.mjs");`, + `DevToolsLoader` + ); + + // "require" should terminate execution because it will try to create a new + // module record for the given URL, as long as the loader's debuggee + // has been properly added to the debugger. The termination should + // happen before it starts processing the path, so we don't need to provide + // a real path here. + setInputValue(hud, `globalThis.eagerLoader.require("fake://path");`); + + // Wait a bit to make sure that the command has time to fail before we + // validate the eager-eval result. + await wait(500); + await waitForEagerEvaluationResult(hud, ""); + + setInputValue(hud, ""); + + await executeAndWaitForResultMessage( + hud, + `delete globalThis.eagerLoader;`, + `true` + ); +} |