summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js b/devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js
new file mode 100644
index 0000000000..790b0366b9
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-extension-inspectedWindow-debugger-statement.js
@@ -0,0 +1,88 @@
+/* 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/>. */
+
+// 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": `<!DOCTYPE html>
+ <html>
+ <head>
+ <meta charset="utf-8">
+ </head>
+ <body>
+ <script src="devtools_page.js"></script>
+ </body>
+ </html>`,
+ "devtools_page.js": devtools_page,
+ },
+ });
+
+ await extension.startup();
+
+ return extension;
+}