Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
/**
* Wait for all content tabs to finish loading, then return the important
* properties of each open tab in the current window.
*/
/* globals arguments */
const [resolve] = arguments;
const tabmail = document.getElementById("tabmail");
const loadPromises = [];
for (const tab of tabmail.tabInfo) {
if (tab.mode.name != "contentTab") {
continue;
}
if (tab.browser.isLoadingDocument) {
const promise = Promise.withResolvers();
loadPromises.push(promise.promise);
function listener(event) {
if (event.target.location != "about:blank") {
tab.browser.removeEventListener("load", listener, { capture: true });
promise.resolve();
}
}
tab.browser.addEventListener("load", listener, { capture: true });
}
}
Promise.all(loadPromises).then(() => {
resolve(
tabmail.tabInfo.map(tab => {
const data = { mode: tab.mode.name };
if (tab.browser) {
data.url = tab.browser.currentURI?.spec;
}
if (tab.mode.name == "contentTab") {
// How we handle clicks on links in this tab.
data.linkHandler = tab.browser.getAttribute("messagemanagergroup");
// The user context (container in Firefox terms) of this tab.
if (tab.browser.hasAttribute("usercontextid")) {
data.userContextId = tab.browser.getAttribute("usercontextid");
}
}
return data;
})
);
});