tabswitcher/background.js
2024-01-23 21:56:38 +01:00

51 lines
1.3 KiB
JavaScript

/* State */
let registeredTabs = {}
const addRegisteredTab = (tab) =>
registeredTabs[tab.id] = tab
const removeRegisteredTab = (tabId) =>
delete registeredTabs[tabId]
/* Utils */
const wait = (timeout) =>
new Promise((resolve) => setTimeout(resolve, timeout))
/* Handlers */
browser.action.onClicked.addListener((() =>
browser.tabs.create({
url: '/pages/search/search.html'
})))
browser.runtime.onMessage.addListener((message, sender) => {
switch (message.action) {
case 'closeSender':
browser.tabs.remove(sender.tab.id)
break
case 'registerSender':
addRegisteredTab(sender.tab)
break
}
})
browser.tabs.onRemoved.addListener((tabId) => {
if (Object.keys(registeredTabs).includes(String(tabId))) {
const closedTab = registeredTabs[tabId]
wait(300) // Tabs and sessions cannot be synchronised in any other way
.then(browser.sessions.getRecentlyClosed)
.then((sessions) => sessions ?? [])
.then((sessions) => sessions
.filter((session) => session.tab))
.then((sessions) => sessions
.filter(({tab}) => tab.url === closedTab.url))
.then((sessions) => sessions.forEach(({tab}) => {
console.log(tab)
browser.sessions.forgetClosedTab(tab.windowId, tab.sessionId)
.then(() => removeRegisteredTab(tabId))
}))
}
})