226 lines
6.9 KiB
JavaScript
226 lines
6.9 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
gDevToolsBrowser,
|
|
} = require("resource://devtools/client/framework/devtools-browser.js");
|
|
|
|
const { Toolbox } = require("resource://devtools/client/framework/toolbox.js");
|
|
const { LEFT, RIGHT, BOTTOM, WINDOW } = Toolbox.HostType;
|
|
let toolbox;
|
|
|
|
// We are opening/close toolboxes many times,
|
|
// which introduces long GC pauses between each sub task
|
|
// and requires some more time to run in DEBUG builds.
|
|
requestLongerTimeout(2);
|
|
|
|
const URL =
|
|
"data:text/html;charset=utf8,test for opening toolbox in different hosts";
|
|
|
|
add_task(async function () {
|
|
const win = await BrowserTestUtils.openNewBrowserWindow();
|
|
win.gBrowser.selectedTab = BrowserTestUtils.addTab(win.gBrowser, URL);
|
|
|
|
const tab = win.gBrowser.selectedTab;
|
|
toolbox = await gDevTools.showToolboxForTab(tab, {
|
|
toolId: "webconsole",
|
|
hostType: Toolbox.HostType.WINDOW,
|
|
});
|
|
const onToolboxClosed = toolbox.once("destroyed");
|
|
ok(
|
|
gDevToolsBrowser.hasToolboxOpened(win),
|
|
"hasToolboxOpened is true before closing the toolbox"
|
|
);
|
|
await BrowserTestUtils.closeWindow(win);
|
|
ok(
|
|
!gDevToolsBrowser.hasToolboxOpened(win),
|
|
"hasToolboxOpened is false after closing the window"
|
|
);
|
|
|
|
info("Wait for toolbox to be destroyed after browser window is closed");
|
|
await onToolboxClosed;
|
|
toolbox = null;
|
|
});
|
|
|
|
add_task(async function runTest() {
|
|
info("Create a test tab and open the toolbox");
|
|
const tab = await addTab(URL);
|
|
toolbox = await gDevTools.showToolboxForTab(tab, { toolId: "webconsole" });
|
|
|
|
await runHostTests(gBrowser);
|
|
await toolbox.destroy();
|
|
|
|
toolbox = null;
|
|
gBrowser.removeCurrentTab();
|
|
});
|
|
|
|
// We run the same host switching tests in a private window.
|
|
// See Bug 1581093 for an example of issue specific to private windows.
|
|
add_task(async function runPrivateWindowTest() {
|
|
info("Create a private window + tab and open the toolbox");
|
|
await runHostTestsFromSeparateWindow({
|
|
private: true,
|
|
});
|
|
});
|
|
|
|
// We run the same host switching tests in a non-fission window.
|
|
// See Bug 1650963 for an example of issue specific to private windows.
|
|
add_task(async function runNonFissionWindowTest() {
|
|
info("Create a non-fission window + tab and open the toolbox");
|
|
await runHostTestsFromSeparateWindow({
|
|
fission: false,
|
|
});
|
|
});
|
|
|
|
async function runHostTestsFromSeparateWindow(options) {
|
|
const win = await BrowserTestUtils.openNewBrowserWindow(options);
|
|
const browser = win.gBrowser;
|
|
browser.selectedTab = BrowserTestUtils.addTab(browser, URL);
|
|
|
|
const tab = browser.selectedTab;
|
|
toolbox = await gDevTools.showToolboxForTab(tab, { toolId: "webconsole" });
|
|
|
|
await runHostTests(browser);
|
|
await toolbox.destroy();
|
|
|
|
toolbox = null;
|
|
await BrowserTestUtils.closeWindow(win);
|
|
}
|
|
|
|
async function runHostTests(browser) {
|
|
await testBottomHost(browser);
|
|
await testLeftHost(browser);
|
|
await testRightHost(browser);
|
|
await testWindowHost(browser);
|
|
await testToolSelect();
|
|
await testDestroy(browser);
|
|
await testRememberHost();
|
|
await testPreviousHost();
|
|
}
|
|
|
|
function testBottomHost(browser) {
|
|
checkHostType(toolbox, BOTTOM);
|
|
|
|
// test UI presence
|
|
const panel = browser.getPanel();
|
|
const iframe = panel.querySelector(".devtools-toolbox-bottom-iframe");
|
|
ok(iframe, "toolbox bottom iframe exists");
|
|
|
|
checkToolboxLoaded(iframe);
|
|
}
|
|
|
|
async function testLeftHost(browser) {
|
|
await toolbox.switchHost(LEFT);
|
|
checkHostType(toolbox, LEFT);
|
|
|
|
// test UI presence
|
|
const panel = browser.getPanel();
|
|
const bottom = panel.querySelector(".devtools-toolbox-bottom-iframe");
|
|
ok(!bottom, "toolbox bottom iframe doesn't exist");
|
|
|
|
const iframe = panel.querySelector(".devtools-toolbox-side-iframe");
|
|
ok(iframe, "toolbox side iframe exists");
|
|
|
|
checkToolboxLoaded(iframe);
|
|
}
|
|
|
|
async function testRightHost(browser) {
|
|
await toolbox.switchHost(RIGHT);
|
|
checkHostType(toolbox, RIGHT);
|
|
|
|
// test UI presence
|
|
const panel = browser.getPanel();
|
|
const bottom = panel.querySelector(".devtools-toolbox-bottom-iframe");
|
|
ok(!bottom, "toolbox bottom iframe doesn't exist");
|
|
|
|
const iframe = panel.querySelector(".devtools-toolbox-side-iframe");
|
|
ok(iframe, "toolbox side iframe exists");
|
|
|
|
checkToolboxLoaded(iframe);
|
|
}
|
|
|
|
async function testWindowHost(browser) {
|
|
await toolbox.switchHost(WINDOW);
|
|
checkHostType(toolbox, WINDOW);
|
|
|
|
const panel = browser.getPanel();
|
|
const sidebar = panel.querySelector(".devtools-toolbox-side-iframe");
|
|
ok(!sidebar, "toolbox sidebar iframe doesn't exist");
|
|
|
|
const win = Services.wm.getMostRecentWindow("devtools:toolbox");
|
|
ok(win, "toolbox separate window exists");
|
|
|
|
const iframe = win.document.querySelector(".devtools-toolbox-window-iframe");
|
|
checkToolboxLoaded(iframe);
|
|
}
|
|
|
|
async function testToolSelect() {
|
|
// make sure we can load a tool after switching hosts
|
|
await toolbox.selectTool("inspector");
|
|
}
|
|
|
|
async function testDestroy(browser) {
|
|
await toolbox.destroy();
|
|
toolbox = await gDevTools.showToolboxForTab(browser.selectedTab);
|
|
}
|
|
|
|
function testRememberHost() {
|
|
// last host was the window - make sure it's the same when re-opening
|
|
is(toolbox.hostType, WINDOW, "host remembered");
|
|
|
|
const win = Services.wm.getMostRecentWindow("devtools:toolbox");
|
|
ok(win, "toolbox separate window exists");
|
|
}
|
|
|
|
async function testPreviousHost() {
|
|
// last host was the window - make sure it's the same when re-opening
|
|
is(toolbox.hostType, WINDOW, "host remembered");
|
|
|
|
info("Switching to left");
|
|
await toolbox.switchHost(LEFT);
|
|
checkHostType(toolbox, LEFT, WINDOW);
|
|
|
|
info("Switching to right");
|
|
await toolbox.switchHost(RIGHT);
|
|
checkHostType(toolbox, RIGHT, LEFT);
|
|
|
|
info("Switching to bottom");
|
|
await toolbox.switchHost(BOTTOM);
|
|
checkHostType(toolbox, BOTTOM, RIGHT);
|
|
|
|
info("Switching from bottom to right");
|
|
await toolbox.switchToPreviousHost();
|
|
checkHostType(toolbox, RIGHT, BOTTOM);
|
|
|
|
info("Switching from right to bottom");
|
|
await toolbox.switchToPreviousHost();
|
|
checkHostType(toolbox, BOTTOM, RIGHT);
|
|
|
|
info("Switching to window");
|
|
await toolbox.switchHost(WINDOW);
|
|
checkHostType(toolbox, WINDOW, BOTTOM);
|
|
|
|
info("Switching from window to bottom");
|
|
await toolbox.switchToPreviousHost();
|
|
checkHostType(toolbox, BOTTOM, WINDOW);
|
|
|
|
info("Forcing the previous host to match the current (bottom)");
|
|
Services.prefs.setCharPref("devtools.toolbox.previousHost", BOTTOM);
|
|
|
|
info("Switching from bottom to right (since previous=current=bottom");
|
|
await toolbox.switchToPreviousHost();
|
|
checkHostType(toolbox, RIGHT, BOTTOM);
|
|
|
|
info("Forcing the previous host to match the current (right)");
|
|
Services.prefs.setCharPref("devtools.toolbox.previousHost", RIGHT);
|
|
info("Switching from right to bottom (since previous=current=side");
|
|
await toolbox.switchToPreviousHost();
|
|
checkHostType(toolbox, BOTTOM, RIGHT);
|
|
}
|
|
|
|
function checkToolboxLoaded(iframe) {
|
|
const tabs = iframe.contentDocument.querySelector(".toolbox-tabs");
|
|
ok(tabs, "toolbox UI has been loaded into iframe");
|
|
}
|