summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js b/devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js
new file mode 100644
index 0000000000..93123187e1
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-es-module-worker.js
@@ -0,0 +1,75 @@
+/* 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 we can debug workers using ES Modules.
+
+"use strict";
+
+const httpServer = createTestHTTPServer();
+httpServer.registerContentType("html", "text/html");
+httpServer.registerContentType("js", "application/javascript");
+
+httpServer.registerPathHandler(`/`, function (request, response) {
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ response.write(`
+ <html>
+ <script>window.worker = new Worker("worker.js", { type: "module" })</script>
+ </html>`);
+});
+
+httpServer.registerPathHandler("/worker.js", function (request, response) {
+ response.setHeader("Content-Type", "application/javascript");
+ response.write(`
+ onmessage = () => {
+ console.log("breakpoint line");
+ postMessage("resume");
+ }
+ `);
+});
+const port = httpServer.identity.primaryPort;
+const TEST_URL = `http://localhost:${port}/`;
+const WORKER_URL = TEST_URL + "worker.js";
+
+add_task(async function () {
+ const dbg = await initDebuggerWithAbsoluteURL(TEST_URL);
+
+ // Note that the following APIs only returns the additional threads
+ await waitForThreadCount(dbg, 1);
+ const threads = dbg.selectors.getThreads();
+ is(threads.length, 1, "Got the page and the worker threads");
+ is(threads[0].name, WORKER_URL, "Thread name is correct");
+
+ const source = findSource(dbg, "worker.js");
+ await selectSource(dbg, source);
+ await addBreakpoint(dbg, source, 3);
+
+ info("Call worker code to trigger the breakpoint");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
+ content.wrappedJSObject.worker.postMessage("foo");
+ });
+
+ await waitForPaused(dbg);
+ assertPausedAtSourceAndLine(dbg, source.id, 3);
+ assertTextContentOnLine(dbg, 3, `console.log("breakpoint line");`);
+
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
+ // Create a Promise which will resolve once the worker resumes and send a message
+ // Hold the promise on window, so that a following task can use it.
+ content.onWorkerResumed = new Promise(
+ resolve => (content.wrappedJSObject.worker.onmessage = resolve)
+ );
+ });
+
+ await resume(dbg);
+
+ info("Wait for the worker to resume its execution and send a message");
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async () => {
+ ok(
+ content.onWorkerResumed,
+ "The promise created by the previous task exists"
+ );
+ await content.onWorkerResumed;
+ ok(true, "The worker resumed its execution");
+ });
+});