in src/background.js [431:470]
async function maybeReopenAlreadyOpenTabs () {
const tabsOnUpdated = (tabId, changeInfo, tab) => {
if (changeInfo.url && tabsWaitingToLoad[tabId]) {
// Tab we're waiting for switched it's url, maybe we reopen
delete tabsWaitingToLoad[tabId];
maybeReopenTab(tab.url, tab);
}
if (tab.status === "complete" && tabsWaitingToLoad[tabId]) {
// Tab we're waiting for completed loading
delete tabsWaitingToLoad[tabId];
}
if (!Object.keys(tabsWaitingToLoad).length) {
// We're done waiting for tabs to load, remove event listener
browser.tabs.onUpdated.removeListener(tabsOnUpdated);
}
};
// Query for already open Tabs
const tabs = await browser.tabs.query({});
tabs.map(async tab => {
if (tab.url === "about:blank") {
if (tab.status !== "loading") {
return;
}
// about:blank Tab is still loading, so we indicate that we wait for it to load
// and register the event listener if we haven't yet.
//
// This is a workaround until platform support is implemented:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1447551
// https://github.com/mozilla/multi-account-containers/issues/474
tabsWaitingToLoad[tab.id] = true;
if (!browser.tabs.onUpdated.hasListener(tabsOnUpdated)) {
browser.tabs.onUpdated.addListener(tabsOnUpdated);
}
} else {
// Tab already has an url, maybe we reopen
maybeReopenTab(tab.url, tab);
}
});
}