diff options
Diffstat (limited to 'devtools/client/performance/test/helpers/tab-utils.js')
-rw-r--r-- | devtools/client/performance/test/helpers/tab-utils.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/devtools/client/performance/test/helpers/tab-utils.js b/devtools/client/performance/test/helpers/tab-utils.js new file mode 100644 index 000000000..3247faabf --- /dev/null +++ b/devtools/client/performance/test/helpers/tab-utils.js @@ -0,0 +1,85 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +/* globals dump */ + +const Services = require("Services"); +const tabs = require("sdk/tabs"); +const tabUtils = require("sdk/tabs/utils"); +const { viewFor } = require("sdk/view/core"); +const { waitForDelayedStartupFinished } = require("devtools/client/performance/test/helpers/wait-utils"); +const { gDevTools } = require("devtools/client/framework/devtools"); + +/** + * Gets a random integer in between an interval. Used to uniquely identify + * added tabs by augmenting the URL. + */ +function getRandomInt(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +/** + * Adds a browser tab with the given url in the specified window and waits + * for it to load. + */ +exports.addTab = function ({ url, win }, options = {}) { + let id = getRandomInt(0, Number.MAX_SAFE_INTEGER - 1); + url += `#${id}`; + + dump(`Adding tab with url: ${url}.\n`); + + return new Promise(resolve => { + let tab; + + tabs.on("ready", function onOpen(model) { + if (tab != viewFor(model)) { + return; + } + dump(`Tab added and finished loading: ${model.url}.\n`); + tabs.off("ready", onOpen); + resolve(tab); + }); + + win.focus(); + tab = tabUtils.openTab(win, url); + + if (options.dontWaitForTabReady) { + resolve(tab); + } + }); +}; + +/** + * Removes a browser tab from the specified window and waits for it to close. + */ +exports.removeTab = function (tab, options = {}) { + dump(`Removing tab: ${tabUtils.getURI(tab)}.\n`); + + return new Promise(resolve => { + tabs.on("close", function onClose(model) { + if (tab != viewFor(model)) { + return; + } + dump(`Tab removed and finished closing: ${model.url}.\n`); + tabs.off("close", onClose); + resolve(tab); + }); + + tabUtils.closeTab(tab); + + if (options.dontWaitForTabClose) { + resolve(tab); + } + }); +}; + +/** + * Adds a browser window with the provided options. + */ +exports.addWindow = function* (options) { + let { OpenBrowserWindow } = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType); + let win = OpenBrowserWindow(options); + yield waitForDelayedStartupFinished(win); + return win; +}; |