Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* 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`
);
}