summaryrefslogtreecommitdiffstats
path: root/devtools/startup/aboutdevtools/test/head.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/startup/aboutdevtools/test/head.js')
-rw-r--r--devtools/startup/aboutdevtools/test/head.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/devtools/startup/aboutdevtools/test/head.js b/devtools/startup/aboutdevtools/test/head.js
new file mode 100644
index 0000000000..d5f85d0aca
--- /dev/null
+++ b/devtools/startup/aboutdevtools/test/head.js
@@ -0,0 +1,113 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+/* eslint no-unused-vars: [2, {"vars": "local"}] */
+
+"use strict";
+
+// All test are asynchronous
+waitForExplicitFinish();
+
+/**
+ * Waits until a predicate returns true.
+ *
+ * @param function predicate
+ * Invoked once in a while until it returns true.
+ * @param number interval [optional]
+ * How often the predicate is invoked, in milliseconds.
+ */
+const waitUntil = function(predicate, interval = 100) {
+ if (predicate()) {
+ return Promise.resolve(true);
+ }
+ return new Promise(resolve => {
+ setTimeout(function() {
+ waitUntil(predicate, interval).then(() => resolve(true));
+ }, interval);
+ });
+};
+
+/**
+ * Open the provided url in a new tab.
+ */
+const addTab = async function(url) {
+ info("Adding a new tab with URL: " + url);
+
+ const { gBrowser } = window;
+
+ const tab = BrowserTestUtils.addTab(gBrowser, url);
+ gBrowser.selectedTab = tab;
+
+ await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+
+ info("Tab added and finished loading");
+
+ return tab;
+};
+
+/**
+ * Remove the given tab.
+ * @param {Object} tab The tab to be removed.
+ * @return Promise<undefined> resolved when the tab is successfully removed.
+ */
+const removeTab = async function(tab) {
+ info("Removing tab.");
+
+ const { gBrowser } = tab.ownerGlobal;
+
+ await new Promise(resolve => {
+ gBrowser.tabContainer.addEventListener("TabClose", resolve, { once: true });
+ gBrowser.removeTab(tab);
+ });
+
+ info("Tab removed and finished closing");
+};
+
+/**
+ * Open a new tab on about:devtools
+ */
+const openAboutDevTools = async function() {
+ info("Open about:devtools programmatically in a new tab");
+ const tab = await addTab("about:devtools");
+
+ const browser = tab.linkedBrowser;
+ const doc = browser.contentDocument;
+ const win = browser.contentWindow;
+
+ return { tab, doc, win };
+};
+
+/**
+ * Copied from devtools shared-head.js.
+ * Set a temporary value for a preference, that will be cleaned up after the test.
+ */
+const pushPref = function(preferenceName, value) {
+ return new Promise(resolve => {
+ const options = { set: [[preferenceName, value]] };
+ SpecialPowers.pushPrefEnv(options, resolve);
+ });
+};
+
+/**
+ * Helper to call the toggle devtools shortcut.
+ */
+function synthesizeToggleToolboxKey() {
+ info("Trigger the toogle toolbox shortcut");
+ if (Services.appinfo.OS == "Darwin") {
+ EventUtils.synthesizeKey("i", { accelKey: true, altKey: true });
+ } else {
+ EventUtils.synthesizeKey("i", { accelKey: true, shiftKey: true });
+ }
+}
+
+/**
+ * Helper to check if a given tab is about:devtools.
+ */
+function isAboutDevtoolsTab(tab) {
+ const browser = tab.linkedBrowser;
+ // browser.documentURI might be unavailable if the tab is loading.
+ if (browser && browser.documentURI) {
+ const location = browser.documentURI.spec;
+ return location.startsWith("about:devtools");
+ }
+ return false;
+}