From 59bd9e52b173f95e439e7d7fbb97678316e1c9ca Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Tue, 30 Jul 2024 20:00:18 +0530 Subject: [PATCH] fix(background): don't clear overpaying on page refresh Co-authored-by: Radu-Cristian Popa --- src/background/services/background.ts | 4 +++- src/background/services/monetization.ts | 10 ++++++++-- src/background/services/tabEvents.ts | 4 +++- src/background/services/tabState.ts | 5 ++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/background/services/background.ts b/src/background/services/background.ts index 51221d62..33de285b 100644 --- a/src/background/services/background.ts +++ b/src/background/services/background.ts @@ -108,7 +108,9 @@ export class Background { bindTabHandlers() { this.browser.tabs.onRemoved.addListener(this.tabEvents.clearTabSessions) - this.browser.tabs.onUpdated.addListener(this.tabEvents.clearTabSessions) + this.browser.tabs.onUpdated.addListener(this.tabEvents.clearTabSessions, { + properties: ['url', 'discarded', 'status', 'isArticle'] + }) this.browser.tabs.onCreated.addListener(this.tabEvents.onCreatedTab) this.browser.tabs.onActivated.addListener(this.tabEvents.onActivatedTab) } diff --git a/src/background/services/monetization.ts b/src/background/services/monetization.ts index 34129a4e..ef13511f 100644 --- a/src/background/services/monetization.ts +++ b/src/background/services/monetization.ts @@ -215,7 +215,10 @@ export class MonetizationService { emitToggleWM({ enabled: !enabled }) } - clearTabSessions(tabId: number) { + clearTabSessions( + tabId: number, + { clearOverpaying }: { clearOverpaying: boolean } + ) { this.logger.debug(`Attempting to clear sessions for tab ${tabId}.`) const sessions = this.tabState.getSessions(tabId) @@ -228,7 +231,10 @@ export class MonetizationService { session.stop() } - this.tabState.clearByTabId(tabId) + this.tabState.clearSessionsByTabId(tabId) + if (clearOverpaying) { + this.tabState.clearOverpayingByTabId(tabId) + } this.logger.debug(`Cleared ${sessions.size} sessions for tab ${tabId}.`) } diff --git a/src/background/services/tabEvents.ts b/src/background/services/tabEvents.ts index cc4f1e9a..33869d07 100644 --- a/src/background/services/tabEvents.ts +++ b/src/background/services/tabEvents.ts @@ -75,11 +75,13 @@ export class TabEvents { tabId: TabId, changeInfo: Tabs.OnUpdatedChangeInfoType | Tabs.OnRemovedRemoveInfoType ) => { + // console.log('clearTabSessions', changeInfo) if ( ('status' in changeInfo && changeInfo.status === 'loading') || 'isWindowClosing' in changeInfo ) { - this.monetizationService.clearTabSessions(tabId) + const clearOverpaying = !('isWindowClosing' in changeInfo) // TODO: verify this condition + this.monetizationService.clearTabSessions(tabId, { clearOverpaying }) } } diff --git a/src/background/services/tabState.ts b/src/background/services/tabState.ts index 38f4eb2c..fa2acecb 100644 --- a/src/background/services/tabState.ts +++ b/src/background/services/tabState.ts @@ -100,8 +100,11 @@ export class TabState { return [...this.sessions.keys()] } - clearByTabId(tabId: TabId) { + clearOverpayingByTabId(tabId: TabId) { this.state.delete(tabId) + } + + clearSessionsByTabId(tabId: TabId) { this.sessions.delete(tabId) } }