Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: tsan OR http3 OR http2
- Manifest: devtools/client/performance-new/test/browser/browser.toml
/* 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
"use strict";
/* eslint-disable max-nested-callbacks */
const ASSET_BASE_URL =
const TEST_PAGE_URL = ASSET_BASE_URL + "test-page.html";
const TEST_SCRIPT_URL = ASSET_BASE_URL + "test-script.js";
const FRONTEND_URL = ASSET_BASE_URL + "webchannel.html";
const {
gDevTools,
} = require("resource://devtools/client/framework/devtools.js");
add_task(async function test() {
info(
"Test the WebChannel mechanism works for opening the devtools debugger with the script"
);
// First open the test page so it can load a simple script.
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: TEST_PAGE_URL,
},
async browser => {
const testPageTabId = browser.browsingContext.browserId;
const request = {
tabId: testPageTabId,
scriptUrl: TEST_SCRIPT_URL,
line: 1,
column: 1,
};
// Make sure that the current active tab is the test page for a sanity check.
Assert.strictEqual(
gBrowser.selectedBrowser.browsingContext.browserId,
testPageTabId,
"Current selected tab is the test page."
);
const onToolboxReady = gDevTools.once("toolbox-ready");
// Now open the second tab that will send the webchannel request.
// After the request it must switch to the first tab, and then
await BrowserTestUtils.withNewTab(
{
gBrowser,
url:
FRONTEND_URL +
"?request=" +
encodeURIComponent(JSON.stringify(request)),
},
async () => {
// Note that we could do a sanity check here for the selected tab, but
// it will be racy in case the code inside the html page gets executed
// quickly. So it's better to not do it.
await onToolboxReady;
ok(true, "Toolbox is successfully loaded");
// Check that the active tab is back to the first tab again.
Assert.strictEqual(
gBrowser.selectedBrowser.browsingContext.browserId,
testPageTabId,
"Selected tab should be switched back to the test page again."
);
// Now check if the debugger successfully loaded the source.
const toolbox = gDevTools.getToolboxForTab(gBrowser.selectedTab);
ok(!!toolbox, "Toolbox is opened successfully");
const dbg = toolbox.getPanel("jsdebugger");
await waitUntil(() => {
const source = dbg._selectors.getSelectedSource(dbg._getState());
return source && source.url === TEST_SCRIPT_URL;
});
ok(true, "Source is successfully loaded.");
}
);
}
);
});