summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_hosts.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_toolbox_hosts.js')
-rw-r--r--devtools/client/framework/test/browser_toolbox_hosts.js226
1 files changed, 226 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_toolbox_hosts.js b/devtools/client/framework/test/browser_toolbox_hosts.js
new file mode 100644
index 0000000000..37738865a9
--- /dev/null
+++ b/devtools/client/framework/test/browser_toolbox_hosts.js
@@ -0,0 +1,226 @@
+/* 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");
+}