From d35b6babcacf9f3b45f441a61dd64afac0d29c19 Mon Sep 17 00:00:00 2001 From: Miles Blackwood Date: Tue, 3 Feb 2026 16:16:09 -0500 Subject: [PATCH] Fix shadow DOM detection and mutation handling for nested SPAs - Use recursive shadow root query to find nested shadow DOMs - Fix requirePageDetailsUpdate to actually schedule collection - Ensures password fields in slow SPAs (like HBO Max) are detected --- .../autofill/services/collect-autofill-content.service.ts | 1 + apps/browser/src/autofill/services/dom-query.service.ts | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/browser/src/autofill/services/collect-autofill-content.service.ts b/apps/browser/src/autofill/services/collect-autofill-content.service.ts index 90c698c5990..788f3ad823e 100644 --- a/apps/browser/src/autofill/services/collect-autofill-content.service.ts +++ b/apps/browser/src/autofill/services/collect-autofill-content.service.ts @@ -1100,6 +1100,7 @@ export class CollectAutofillContentService implements CollectAutofillContentServ this.autofillOverlayContentService.pageDetailsUpdateRequired = true; } this.noFieldsFound = false; + this.updateAutofillElementsAfterMutation(); }; /** diff --git a/apps/browser/src/autofill/services/dom-query.service.ts b/apps/browser/src/autofill/services/dom-query.service.ts index b20f33f02f8..177a0122edf 100644 --- a/apps/browser/src/autofill/services/dom-query.service.ts +++ b/apps/browser/src/autofill/services/dom-query.service.ts @@ -104,7 +104,12 @@ export class DomQueryService implements DomQueryServiceInterface { * @returns True if any new shadow roots are found that aren't being observed */ checkForNewShadowRoots = (): boolean => { - const currentRoots = this.queryShadowRoots(globalThis.document.body); + let currentRoots: ShadowRoot[]; + try { + currentRoots = this.recursivelyQueryShadowRoots(globalThis.document.body); + } catch { + currentRoots = this.queryShadowRoots(globalThis.document.body); + } for (const root of currentRoots) { if (!this.observedShadowRoots.has(root)) {