mirror of
https://github.com/bitwarden/browser
synced 2026-02-05 19:23:19 +00:00
fix: refresh clearing badge on chrome
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { concat, defer, filter, map, merge, Observable, shareReplay, switchMap } from "rxjs";
|
||||
import { concat, defer, map, merge, Observable, shareReplay, switchMap } from "rxjs";
|
||||
|
||||
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
|
||||
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
||||
@@ -16,8 +16,7 @@ export interface RawBadgeState {
|
||||
}
|
||||
|
||||
export interface BadgeBrowserApi {
|
||||
activeTab$: Observable<chrome.tabs.TabActiveInfo | undefined>;
|
||||
// activeTabs$: Observable<chrome.tabs.Tab[]>;
|
||||
tabUpdated$: Observable<chrome.tabs.TabActiveInfo | undefined>;
|
||||
|
||||
setState(state: RawBadgeState, tabId?: number): Promise<void>;
|
||||
getTabs(): Promise<number[]>;
|
||||
@@ -33,7 +32,7 @@ export class DefaultBadgeBrowserApi implements BadgeBrowserApi {
|
||||
shareReplay({ bufferSize: 1, refCount: true }),
|
||||
);
|
||||
|
||||
activeTab$ = concat(
|
||||
tabUpdated$ = concat(
|
||||
defer(async () => {
|
||||
const currentTab = await BrowserApi.getTabFromCurrentWindow();
|
||||
if (currentTab == null || currentTab.id === undefined) {
|
||||
@@ -45,11 +44,6 @@ export class DefaultBadgeBrowserApi implements BadgeBrowserApi {
|
||||
merge(
|
||||
this.onTabActivated$,
|
||||
fromChromeEvent(chrome.tabs.onUpdated).pipe(
|
||||
filter(
|
||||
([_, changeInfo]) =>
|
||||
// Only emit if the url was updated
|
||||
changeInfo.url != undefined,
|
||||
),
|
||||
map(([tabId, _changeInfo, tab]) => ({ tabId, windowId: tab.windowId })),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -40,10 +40,10 @@ export class BadgeService {
|
||||
*/
|
||||
startListening(): Subscription {
|
||||
// React to tab changes
|
||||
return this.badgeApi.activeTab$
|
||||
return this.badgeApi.tabUpdated$
|
||||
.pipe(
|
||||
withLatestFrom(this.serviceState.state$),
|
||||
filter(([activeTab]) => activeTab != undefined),
|
||||
filter(([updatedTab]) => updatedTab != undefined),
|
||||
concatMap(async ([activeTab, serviceState]) => {
|
||||
await this.updateBadge(serviceState, activeTab!.tabId);
|
||||
}),
|
||||
|
||||
@@ -3,8 +3,8 @@ import { BehaviorSubject } from "rxjs";
|
||||
import { BadgeBrowserApi, RawBadgeState } from "../badge-browser-api";
|
||||
|
||||
export class MockBadgeBrowserApi implements BadgeBrowserApi {
|
||||
private _activeTab$ = new BehaviorSubject<chrome.tabs.TabActiveInfo | undefined>(undefined);
|
||||
activeTab$ = this._activeTab$.asObservable();
|
||||
private _tabUpdated$ = new BehaviorSubject<chrome.tabs.TabActiveInfo | undefined>(undefined);
|
||||
tabUpdated$ = this._tabUpdated$.asObservable();
|
||||
|
||||
specificStates: Record<number, RawBadgeState> = {};
|
||||
generalState?: RawBadgeState;
|
||||
@@ -29,7 +29,7 @@ export class MockBadgeBrowserApi implements BadgeBrowserApi {
|
||||
}
|
||||
|
||||
setLastActivatedTab(tabId: number) {
|
||||
this._activeTab$.next({
|
||||
this._tabUpdated$.next({
|
||||
tabId,
|
||||
windowId: 1,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user