[PS-102] BEEEP: Tab-change performance improvements (#2447)
* Remove passing in main to notification as it's unused * Remove messages nothing reacts to * Shorten re-draw of badge and menu on logout * Remove windows.background and only listen to changes of tabs on focused window * Only rreact to tab changes of current active tab * Comments and console-logs * Removed comments and console.logs * Updated package-lock.json * Check if chrome.windows is available * Simplify check for active tab
This commit is contained in:
parent
f614ed877c
commit
29402f3109
|
@ -86,7 +86,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"jslib/angular": {
|
"jslib/angular": {
|
||||||
"name": "@bitwarden/jslib-common",
|
"name": "@bitwarden/jslib-angular",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -95,7 +95,6 @@ import NotificationBackground from "./notification.background";
|
||||||
import RuntimeBackground from "./runtime.background";
|
import RuntimeBackground from "./runtime.background";
|
||||||
import TabsBackground from "./tabs.background";
|
import TabsBackground from "./tabs.background";
|
||||||
import WebRequestBackground from "./webRequest.background";
|
import WebRequestBackground from "./webRequest.background";
|
||||||
import WindowsBackground from "./windows.background";
|
|
||||||
|
|
||||||
export default class MainBackground {
|
export default class MainBackground {
|
||||||
messagingService: MessagingServiceAbstraction;
|
messagingService: MessagingServiceAbstraction;
|
||||||
|
@ -151,7 +150,6 @@ export default class MainBackground {
|
||||||
private runtimeBackground: RuntimeBackground;
|
private runtimeBackground: RuntimeBackground;
|
||||||
private tabsBackground: TabsBackground;
|
private tabsBackground: TabsBackground;
|
||||||
private webRequestBackground: WebRequestBackground;
|
private webRequestBackground: WebRequestBackground;
|
||||||
private windowsBackground: WindowsBackground;
|
|
||||||
|
|
||||||
private sidebarAction: any;
|
private sidebarAction: any;
|
||||||
private buildingContextMenu: boolean;
|
private buildingContextMenu: boolean;
|
||||||
|
@ -422,7 +420,6 @@ export default class MainBackground {
|
||||||
this.vaultTimeoutService
|
this.vaultTimeoutService
|
||||||
);
|
);
|
||||||
this.notificationBackground = new NotificationBackground(
|
this.notificationBackground = new NotificationBackground(
|
||||||
this,
|
|
||||||
this.autofillService,
|
this.autofillService,
|
||||||
this.cipherService,
|
this.cipherService,
|
||||||
this.vaultTimeoutService,
|
this.vaultTimeoutService,
|
||||||
|
@ -451,7 +448,6 @@ export default class MainBackground {
|
||||||
this.cipherService,
|
this.cipherService,
|
||||||
this.vaultTimeoutService
|
this.vaultTimeoutService
|
||||||
);
|
);
|
||||||
this.windowsBackground = new WindowsBackground(this);
|
|
||||||
|
|
||||||
this.twoFactorService = new TwoFactorService(this.i18nService, this.platformUtilsService);
|
this.twoFactorService = new TwoFactorService(this.i18nService, this.platformUtilsService);
|
||||||
|
|
||||||
|
@ -502,7 +498,6 @@ export default class MainBackground {
|
||||||
await this.contextMenusBackground.init();
|
await this.contextMenusBackground.init();
|
||||||
await this.idleBackground.init();
|
await this.idleBackground.init();
|
||||||
await this.webRequestBackground.init();
|
await this.webRequestBackground.init();
|
||||||
await this.windowsBackground.init();
|
|
||||||
|
|
||||||
if (this.platformUtilsService.isFirefox() && !this.isPrivateMode) {
|
if (this.platformUtilsService.isFirefox() && !this.isPrivateMode) {
|
||||||
// Set Private Mode windows to the default icon - they do not share state with the background page
|
// Set Private Mode windows to the default icon - they do not share state with the background page
|
||||||
|
@ -599,7 +594,7 @@ export default class MainBackground {
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.setIcon();
|
await this.setIcon();
|
||||||
await this.refreshBadgeAndMenu();
|
await this.refreshBadgeAndMenu(true);
|
||||||
await this.reseedStorage();
|
await this.reseedStorage();
|
||||||
this.notificationsService.updateConnection(false);
|
this.notificationsService.updateConnection(false);
|
||||||
await this.systemService.clearPendingClipboard();
|
await this.systemService.clearPendingClipboard();
|
||||||
|
|
|
@ -13,7 +13,6 @@ import { BrowserApi } from "../browser/browserApi";
|
||||||
import { AutofillService } from "../services/abstractions/autofill.service";
|
import { AutofillService } from "../services/abstractions/autofill.service";
|
||||||
import { StateService } from "../services/abstractions/state.service";
|
import { StateService } from "../services/abstractions/state.service";
|
||||||
|
|
||||||
import MainBackground from "./main.background";
|
|
||||||
import AddChangePasswordQueueMessage from "./models/addChangePasswordQueueMessage";
|
import AddChangePasswordQueueMessage from "./models/addChangePasswordQueueMessage";
|
||||||
import AddLoginQueueMessage from "./models/addLoginQueueMessage";
|
import AddLoginQueueMessage from "./models/addLoginQueueMessage";
|
||||||
import AddLoginRuntimeMessage from "./models/addLoginRuntimeMessage";
|
import AddLoginRuntimeMessage from "./models/addLoginRuntimeMessage";
|
||||||
|
@ -25,7 +24,6 @@ export default class NotificationBackground {
|
||||||
private notificationQueue: (AddLoginQueueMessage | AddChangePasswordQueueMessage)[] = [];
|
private notificationQueue: (AddLoginQueueMessage | AddChangePasswordQueueMessage)[] = [];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private main: MainBackground,
|
|
||||||
private autofillService: AutofillService,
|
private autofillService: AutofillService,
|
||||||
private cipherService: CipherService,
|
private cipherService: CipherService,
|
||||||
private vaultTimeoutService: VaultTimeoutService,
|
private vaultTimeoutService: VaultTimeoutService,
|
||||||
|
|
|
@ -7,14 +7,24 @@ export default class TabsBackground {
|
||||||
private notificationBackground: NotificationBackground
|
private notificationBackground: NotificationBackground
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
|
private focusedWindowId: number;
|
||||||
|
|
||||||
async init() {
|
async init() {
|
||||||
if (!chrome.tabs) {
|
if (!chrome.tabs || !chrome.windows) {
|
||||||
return;
|
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) => {
|
chrome.tabs.onActivated.addListener(async (activeInfo: chrome.tabs.TabActiveInfo) => {
|
||||||
await this.main.refreshBadgeAndMenu();
|
await this.main.refreshBadgeAndMenu();
|
||||||
this.main.messagingService.send("tabActivated");
|
|
||||||
this.main.messagingService.send("tabChanged");
|
this.main.messagingService.send("tabChanged");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -23,21 +33,29 @@ export default class TabsBackground {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.main.onReplacedRan = true;
|
this.main.onReplacedRan = true;
|
||||||
|
|
||||||
await this.notificationBackground.checkNotificationQueue();
|
await this.notificationBackground.checkNotificationQueue();
|
||||||
await this.main.refreshBadgeAndMenu();
|
await this.main.refreshBadgeAndMenu();
|
||||||
this.main.messagingService.send("tabReplaced");
|
|
||||||
this.main.messagingService.send("tabChanged");
|
this.main.messagingService.send("tabChanged");
|
||||||
});
|
});
|
||||||
|
|
||||||
chrome.tabs.onUpdated.addListener(
|
chrome.tabs.onUpdated.addListener(
|
||||||
async (tabId: number, changeInfo: chrome.tabs.TabChangeInfo, tab: chrome.tabs.Tab) => {
|
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) {
|
if (this.main.onUpdatedRan) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.main.onUpdatedRan = true;
|
this.main.onUpdatedRan = true;
|
||||||
|
|
||||||
await this.notificationBackground.checkNotificationQueue(tab);
|
await this.notificationBackground.checkNotificationQueue(tab);
|
||||||
await this.main.refreshBadgeAndMenu();
|
await this.main.refreshBadgeAndMenu();
|
||||||
this.main.messagingService.send("tabUpdated");
|
|
||||||
this.main.messagingService.send("tabChanged");
|
this.main.messagingService.send("tabChanged");
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
import MainBackground from "./main.background";
|
|
||||||
|
|
||||||
export default class WindowsBackground {
|
|
||||||
private windows: any;
|
|
||||||
|
|
||||||
constructor(private main: MainBackground) {
|
|
||||||
this.windows = chrome.windows;
|
|
||||||
}
|
|
||||||
|
|
||||||
async init() {
|
|
||||||
if (!this.windows) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.windows.onFocusChanged.addListener(async (windowId: any) => {
|
|
||||||
if (windowId === null || windowId < 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.main.refreshBadgeAndMenu();
|
|
||||||
this.main.messagingService.send("windowFocused");
|
|
||||||
this.main.messagingService.send("windowChanged");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue