Skip to content

Commit

Permalink
fix(monetizationLinkManager): detect links on parent node add/remove (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
sidvishnoi authored Jan 31, 2025
1 parent 4f1208d commit bcc6efa
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions src/content/services/monetizationLinkManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -159,14 +159,18 @@ export class MonetizationLinkManager extends EventEmitter {
}
};

private getMonetizationLinkTags(): HTMLLinkElement[] {
private getMonetizationLinkTags(root?: HTMLElement): HTMLLinkElement[] {
if (this.isTopFrame) {
const parentNode = root ?? this.document;
return Array.from(
this.document.querySelectorAll<HTMLLinkElement>(
parentNode.querySelectorAll<HTMLLinkElement>(
'link[rel="monetization"]',
),
);
} else {
if (root && !root.closest('head')) {
return [];
}
const monetizationTag = this.document.querySelector<HTMLLinkElement>(
'head link[rel="monetization"]',
);
Expand Down Expand Up @@ -496,14 +500,25 @@ export class MonetizationLinkManager extends EventEmitter {
if (node instanceof HTMLLinkElement) {
const payloadEntry = await this.onAddedLink(node);
return payloadEntry ? [payloadEntry] : null;
} else if (node instanceof HTMLElement) {
const linkElements = this.getMonetizationLinkTags(node);
return await Promise.all(
linkElements.map((linkElem) => this.onAddedLink(linkElem)),
).then((res) => res.filter(isNotNull));
}
return null;
}

private onRemovedNode(node: Node): StopMonetizationPayload | null {
if (node instanceof HTMLLinkElement) {
return [this.onRemovedLink(node)];
} else if (node instanceof HTMLElement) {
const linkElements = this.getMonetizationLinkTags(node).filter((el) =>
this.monetizationLinks.has(el),
);
return linkElements.map((linkElem) => this.onRemovedLink(linkElem));
}

return null;
}

Expand Down

0 comments on commit bcc6efa

Please sign in to comment.