/* 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 . */ // Test that web extensions' inspectedWindow.eval() doesn't break debugger/console "use strict"; // Test debugger statement in page, with devtools opened to debugger panel add_task(async function () { const extension = await installAndStartExtension(); const dbg = await initDebugger("doc-scripts.html"); await extension.awaitMessage("loaded"); info("Evaluating debugger statement in page"); const evalFinished = invokeInTab("nestedC"); await waitForPaused(dbg); info("resuming once"); await resume(dbg); // bug 1728290: WebExtension target used to trigger the thread actor and also pause a second time on the debugger statement. // This would prevent the evaluation from completing. info("waiting for invoked function to complete"); await evalFinished; await closeTabAndToolbox(); await extension.unload(); }); // Test debugger statement in webconsole add_task(async function () { const extension = await installAndStartExtension(); // Test again with debugger panel closed const toolbox = await openNewTabAndToolbox( EXAMPLE_URL + "doc-scripts.html", "webconsole" ); await extension.awaitMessage("loaded"); info("Evaluating debugger statement in console"); const onSelected = toolbox.once("jsdebugger-selected"); const evalFinished = invokeInTab("nestedC"); await onSelected; const dbg = createDebuggerContext(toolbox); await waitForPaused(dbg); info("resuming once"); await resume(dbg); await evalFinished; await closeTabAndToolbox(); await extension.unload(); }); async function installAndStartExtension() { async function devtools_page() { await globalThis.browser.devtools.inspectedWindow.eval(""); globalThis.browser.test.sendMessage("loaded"); } const extension = ExtensionTestUtils.loadExtension({ manifest: { devtools_page: "devtools_page.html", }, files: { "devtools_page.html": ` `, "devtools_page.js": devtools_page, }, }); await extension.startup(); return extension; }