-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbackground.js
More file actions
51 lines (41 loc) · 1.32 KB
/
background.js
File metadata and controls
51 lines (41 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* 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))
}))
}
})