86 lines
2.9 KiB
JavaScript
86 lines
2.9 KiB
JavaScript
/* 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";
|
|
|
|
/* eslint-disable max-nested-callbacks */
|
|
|
|
const ASSET_BASE_URL =
|
|
"https://example.com/browser/devtools/client/performance-new/test/browser/webchannel-open-script-in-debugger_assets/";
|
|
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.");
|
|
}
|
|
);
|
|
}
|
|
);
|
|
});
|