From a5b8b93f19de439edd9ddb49f52a4eb37d0d3dc4 Mon Sep 17 00:00:00 2001 From: Sid Vishnoi <8426945+sidvishnoi@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:11:54 +0530 Subject: [PATCH] fix: fix regressions caused by `forEach`` to `for..of` migration --- src/background/services/monetization.ts | 4 +- src/content/services/frameManager.ts | 2 +- .../services/monetizationLinkManager.ts | 53 ++++++++++--------- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/background/services/monetization.ts b/src/background/services/monetization.ts index 5e0ae73d..a32462bf 100644 --- a/src/background/services/monetization.ts +++ b/src/background/services/monetization.ts @@ -143,7 +143,7 @@ export class MonetizationService { this.canTryPayment(connected, state) ) { for (const session of sessionsArr) { - if (!sessions.get(session.id)) return; + if (!sessions.get(session.id)) continue; const source = replacedSessions.has(session.id) ? 'request-id-reused' : 'new-link'; @@ -181,7 +181,7 @@ export class MonetizationService { const { requestId } = p; const session = sessions.get(requestId); - if (!session) return; + if (!session) continue; if (p.intent === 'remove') { needsAdjustAmount = true; diff --git a/src/content/services/frameManager.ts b/src/content/services/frameManager.ts index 2bf7d45f..2bb829be 100644 --- a/src/content/services/frameManager.ts +++ b/src/content/services/frameManager.ts @@ -124,7 +124,7 @@ export class FrameManager { private onWholeDocumentObserved(records: MutationRecord[]) { for (const record of records) { if (record.type === 'childList') { - for (const node of record.addedNodes) { + for (const node of record.removedNodes) { this.check('removed', node); } } diff --git a/src/content/services/monetizationLinkManager.ts b/src/content/services/monetizationLinkManager.ts index 403e2b6a..c9e33544 100644 --- a/src/content/services/monetizationLinkManager.ts +++ b/src/content/services/monetizationLinkManager.ts @@ -6,6 +6,7 @@ import type { MonetizationEventPayload, ResumeMonetizationPayload, StartMonetizationPayload, + StartMonetizationPayloadEntry, StopMonetizationPayload, StopMonetizationPayloadEntry, } from '@/shared/messages'; @@ -358,31 +359,24 @@ export class MonetizationLinkManager extends EventEmitter { }; private async onWholeDocumentObserved(records: MutationRecord[]) { - const stopMonetizationPayload: StopMonetizationPayload = []; - - for (const record of records) { - if (record.type === 'childList') { - for (const node of record.removedNodes) { - if (!(node instanceof HTMLLinkElement)) return; - if (!this.monetizationLinks.has(node)) return; - const payloadEntry = this.onRemovedLink(node); - stopMonetizationPayload.push(payloadEntry); - } - } - } - + const childListRecords = records.filter((e) => e.type === 'childList'); + const removedNodes = childListRecords.flatMap((e) => [...e.removedNodes]); + const allRemovedLinkTags = removedNodes.map((node) => + this.onRemovedNode(node), + ); + const stopMonetizationPayload: StopMonetizationPayload = allRemovedLinkTags + .filter(isNotNull) + .flat(); await this.sendStopMonetization(stopMonetizationPayload); if (this.isTopFrame) { - const addedNodes = records - .filter((e) => e.type === 'childList') - .flatMap((e) => [...e.addedNodes]); + const addedNodes = childListRecords.flatMap((e) => [...e.addedNodes]); const allAddedLinkTags = await Promise.all( addedNodes.map((node) => this.onAddedNode(node)), ); const startMonetizationPayload = allAddedLinkTags .filter(isNotNull) - .map(({ details }) => details); + .flat(); void this.sendStartMonetization(startMonetizationPayload); } @@ -492,24 +486,35 @@ export class MonetizationLinkManager extends EventEmitter { void this.sendStartMonetization(startMonetizationPayload); } - private async onAddedNode(node: Node) { + private async onAddedNode( + node: Node, + ): Promise { if (node instanceof HTMLElement) { this.dispatchOnMonetizationAttrChangedEvent(node); } if (node instanceof HTMLLinkElement) { - return await this.onAddedLink(node); + const payloadEntry = await this.onAddedLink(node); + return payloadEntry ? [payloadEntry] : null; } return null; } - private async onAddedLink(link: HTMLLinkElement) { + private onRemovedNode(node: Node): StopMonetizationPayload | null { + if (node instanceof HTMLLinkElement) { + return [this.onRemovedLink(node)]; + } + return null; + } + + private async onAddedLink( + link: HTMLLinkElement, + ): Promise { this.observeLinkAttrs(link); const res = await this.checkLink(link); - if (res) { - this.monetizationLinks.set(link, res.details); - } - return res; + if (!res) return null; + this.monetizationLinks.set(link, res.details); + return res.details; } private onRemovedLink(link: HTMLLinkElement): StopMonetizationPayloadEntry {