mirror of
https://github.com/bitwarden/browser.git
synced 2024-11-11 10:10:25 +01:00
b4ac5a8bef
* Add needed factories for AuthService WIP: Allow console logs * Add badge updates * Init by listener * Improve tab identification * Define MV3 background init * Init services in factories. Requires conversion of all factories to promises. We need to initialize in factory since the requester of a service doesn't necessarily know all dependencies for that service. The only alternative is to create an out parameter for a generated init function, which isn't ideal. * Improve badge setting * Use `update-badge` in mv2 and mv3 Separates menu and badge updates * Use update-badge everywhere * Use BrowserApi where possible * Update factories * Merge duplicated methods * Continue using private mode messager for now * Add static platform determination. * Break down methods and extract BrowserApi Concerns * Prefer strict equals * Init two-factor service in factory * Use globalThis types * Prefer `globalThis` * Use Window type definition updated with Opera Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> * Distinguish Opera from Safari Opera includes Gecko, Chrome, Safari, and Opera in its user agent. We need to make sure that we're not in Opera prior to testing Safari. * Update import * Initialize search-service for update badge context * Build all browser MV3 artifacts only uploading Chrome, Edge and Opera artifacts for now, as those support manifest V3 Also corrects build artifact to lower case. * Remove individual dist Co-authored-by: Justin Baur <justindbaur@users.noreply.github.com> Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import MainBackground from "./main.background";
|
|
import NotificationBackground from "./notification.background";
|
|
|
|
export default class TabsBackground {
|
|
constructor(
|
|
private main: MainBackground,
|
|
private notificationBackground: NotificationBackground
|
|
) {}
|
|
|
|
private focusedWindowId: number;
|
|
|
|
async init() {
|
|
if (!chrome.tabs || !chrome.windows) {
|
|
return;
|
|
}
|
|
|
|
chrome.windows.onFocusChanged.addListener(async (windowId: number) => {
|
|
if (windowId === null || windowId < 0) {
|
|
return;
|
|
}
|
|
|
|
this.focusedWindowId = windowId;
|
|
this.main.messagingService.send("windowChanged");
|
|
});
|
|
|
|
chrome.tabs.onActivated.addListener(async (activeInfo: chrome.tabs.TabActiveInfo) => {
|
|
await this.main.refreshBadge();
|
|
await this.main.refreshMenu();
|
|
this.main.messagingService.send("tabChanged");
|
|
});
|
|
|
|
chrome.tabs.onReplaced.addListener(async (addedTabId: number, removedTabId: number) => {
|
|
if (this.main.onReplacedRan) {
|
|
return;
|
|
}
|
|
this.main.onReplacedRan = true;
|
|
|
|
await this.notificationBackground.checkNotificationQueue();
|
|
await this.main.refreshBadge();
|
|
await this.main.refreshMenu();
|
|
this.main.messagingService.send("tabChanged");
|
|
});
|
|
|
|
chrome.tabs.onUpdated.addListener(
|
|
async (tabId: number, changeInfo: chrome.tabs.TabChangeInfo, tab: chrome.tabs.Tab) => {
|
|
if (this.focusedWindowId > 0 && tab.windowId != this.focusedWindowId) {
|
|
return;
|
|
}
|
|
|
|
if (!tab.active) {
|
|
return;
|
|
}
|
|
|
|
if (this.main.onUpdatedRan) {
|
|
return;
|
|
}
|
|
this.main.onUpdatedRan = true;
|
|
|
|
await this.notificationBackground.checkNotificationQueue(tab);
|
|
await this.main.refreshBadge();
|
|
await this.main.refreshMenu();
|
|
this.main.messagingService.send("tabChanged");
|
|
}
|
|
);
|
|
}
|
|
}
|