mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-05-27 22:28:25 +00:00
86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
/* 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;
|
|
};
|