| 347 | } |
| 348 | |
| 349 | static async cleanState() { |
| 350 | await TabManager.stateManager.loadState(); |
| 351 | |
| 352 | const actualTabs = await queryTabs({}); |
| 353 | const tabIds = Object.keys(TabManager.tabs).map((id) => Number(id)); |
| 354 | const staleTabs = new Set(tabIds); |
| 355 | actualTabs.forEach((actualTab) => { |
| 356 | const tabId = actualTab.id; |
| 357 | if (tabId) { |
| 358 | staleTabs.delete(tabId); |
| 359 | } |
| 360 | }); |
| 361 | staleTabs.forEach((staleTabId) => { |
| 362 | if (TabManager.tabs[staleTabId]) { |
| 363 | delete TabManager.tabs[staleTabId]; |
| 364 | } |
| 365 | }); |
| 366 | |
| 367 | TabManager.stateManager.saveState(); |
| 368 | } |
| 369 | |
| 370 | static async getTabURL(tab: chrome.tabs.Tab | null): Promise<string> { |
| 371 | if (__CHROMIUM_MV3__) { |