From 048d8a5f7956d80d535c8f9f80c0c5660c8034db Mon Sep 17 00:00:00 2001 From: neuronull <9162534+neuronull@users.noreply.github.com> Date: Tue, 2 Sep 2025 08:46:30 -0600 Subject: [PATCH] Remove `UseTreeWalkerApiForPageDetailsCollection` feature flag (#16130) * remove flag and instances of use * feedback jprusik: additional removals of pageContainsShadowDomElements * feedback jprusik: remove a stray logic branch --- .../abstractions/dom-query.service.ts | 1 - .../collect-autofill-content.service.ts | 15 --------------- .../services/dom-query.service.spec.ts | 4 ---- .../autofill/services/dom-query.service.ts | 19 ++----------------- .../src/background/runtime.background.ts | 7 ------- libs/common/src/enums/feature-flag.enum.ts | 2 -- 6 files changed, 2 insertions(+), 46 deletions(-) diff --git a/apps/browser/src/autofill/services/abstractions/dom-query.service.ts b/apps/browser/src/autofill/services/abstractions/dom-query.service.ts index 3e0242bc74b..da7354403e5 100644 --- a/apps/browser/src/autofill/services/abstractions/dom-query.service.ts +++ b/apps/browser/src/autofill/services/abstractions/dom-query.service.ts @@ -7,5 +7,4 @@ export interface DomQueryService { forceDeepQueryAttempt?: boolean, ): T[]; checkPageContainsShadowDom(): void; - pageContainsShadowDomElements(): boolean; } 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 1e59da17699..570a8010ece 100644 --- a/apps/browser/src/autofill/services/collect-autofill-content.service.ts +++ b/apps/browser/src/autofill/services/collect-autofill-content.service.ts @@ -998,10 +998,6 @@ export class CollectAutofillContentService implements CollectAutofillContentServ private processMutations = () => { const queueLength = this.mutationsQueue.length; - if (!this.domQueryService.pageContainsShadowDomElements()) { - this.checkPageContainsShadowDom(); - } - for (let queueIndex = 0; queueIndex < queueLength; queueIndex++) { const mutations = this.mutationsQueue[queueIndex]; const processMutationRecords = () => { @@ -1018,17 +1014,6 @@ export class CollectAutofillContentService implements CollectAutofillContentServ this.mutationsQueue = []; }; - /** - * Handles checking if the current page contains a ShadowDOM element and - * flags that a re-collection of page details is required if it does. - */ - private checkPageContainsShadowDom() { - this.domQueryService.checkPageContainsShadowDom(); - if (this.domQueryService.pageContainsShadowDomElements()) { - this.flagPageDetailsUpdateIsRequired(); - } - } - /** * Triggers several flags that indicate that a collection of page details should * occur again on a subsequent call after a mutation has been observed in the DOM. diff --git a/apps/browser/src/autofill/services/dom-query.service.spec.ts b/apps/browser/src/autofill/services/dom-query.service.spec.ts index 8071a464f44..53862aef735 100644 --- a/apps/browser/src/autofill/services/dom-query.service.spec.ts +++ b/apps/browser/src/autofill/services/dom-query.service.spec.ts @@ -7,10 +7,6 @@ jest.mock("../utils", () => { return { ...actualUtils, sendExtensionMessage: jest.fn((command, options) => { - if (command === "getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag") { - return Promise.resolve({ result: false }); - } - return chrome.runtime.sendMessage(Object.assign({ command }, options)); }), }; diff --git a/apps/browser/src/autofill/services/dom-query.service.ts b/apps/browser/src/autofill/services/dom-query.service.ts index 16310397a03..d3da86a9e34 100644 --- a/apps/browser/src/autofill/services/dom-query.service.ts +++ b/apps/browser/src/autofill/services/dom-query.service.ts @@ -2,13 +2,12 @@ // @ts-strict-ignore import { EVENTS, MAX_DEEP_QUERY_RECURSION_DEPTH } from "@bitwarden/common/autofill/constants"; -import { nodeIsElement, sendExtensionMessage } from "../utils"; +import { nodeIsElement } from "../utils"; import { DomQueryService as DomQueryServiceInterface } from "./abstractions/dom-query.service"; export class DomQueryService implements DomQueryServiceInterface { private pageContainsShadowDom: boolean; - private useTreeWalkerStrategyFlagSet = true; private ignoredTreeWalkerNodes = new Set([ "svg", "script", @@ -56,7 +55,7 @@ export class DomQueryService implements DomQueryServiceInterface { ): T[] { const ignoredTreeWalkerNodes = ignoredTreeWalkerNodesOverride || this.ignoredTreeWalkerNodes; - if (!forceDeepQueryAttempt && this.pageContainsShadowDomElements()) { + if (!forceDeepQueryAttempt) { return this.queryAllTreeWalkerNodes( root, treeWalkerFilter, @@ -84,24 +83,10 @@ export class DomQueryService implements DomQueryServiceInterface { this.pageContainsShadowDom = this.queryShadowRoots(globalThis.document.body, true).length > 0; }; - /** - * Determines whether to use the treeWalker strategy for querying the DOM. - */ - pageContainsShadowDomElements(): boolean { - return this.useTreeWalkerStrategyFlagSet || this.pageContainsShadowDom; - } - /** * Initializes the DomQueryService, checking for the presence of shadow DOM elements on the page. */ private async init() { - const useTreeWalkerStrategyFlag = await sendExtensionMessage( - "getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag", - ); - if (useTreeWalkerStrategyFlag && typeof useTreeWalkerStrategyFlag.result === "boolean") { - this.useTreeWalkerStrategyFlagSet = useTreeWalkerStrategyFlag.result; - } - if (globalThis.document.readyState === "complete") { this.checkPageContainsShadowDom(); return; diff --git a/apps/browser/src/background/runtime.background.ts b/apps/browser/src/background/runtime.background.ts index 8a154c72bba..d7aef0db375 100644 --- a/apps/browser/src/background/runtime.background.ts +++ b/apps/browser/src/background/runtime.background.ts @@ -7,7 +7,6 @@ import { AccountService } from "@bitwarden/common/auth/abstractions/account.serv import { AutofillOverlayVisibility, ExtensionCommand } from "@bitwarden/common/autofill/constants"; import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-management/abstractions/process-reload.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -80,7 +79,6 @@ export default class RuntimeBackground { BiometricsCommands.UnlockWithBiometricsForUser, BiometricsCommands.GetBiometricsStatusForUser, BiometricsCommands.CanEnableBiometricUnlock, - "getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag", "getUserPremiumStatus", ]; @@ -205,11 +203,6 @@ export default class RuntimeBackground { case BiometricsCommands.CanEnableBiometricUnlock: { return await this.main.biometricsService.canEnableBiometricUnlock(); } - case "getUseTreeWalkerApiForPageDetailsCollectionFeatureFlag": { - return await this.configService.getFeatureFlag( - FeatureFlag.UseTreeWalkerApiForPageDetailsCollection, - ); - } case "getUserPremiumStatus": { const activeUserId = await firstValueFrom( this.accountService.activeAccount$.pipe(map((a) => a?.id)), diff --git a/libs/common/src/enums/feature-flag.enum.ts b/libs/common/src/enums/feature-flag.enum.ts index cd9bbfc54c3..262b31e624f 100644 --- a/libs/common/src/enums/feature-flag.enum.ts +++ b/libs/common/src/enums/feature-flag.enum.ts @@ -18,7 +18,6 @@ export enum FeatureFlag { /* Autofill */ NotificationRefresh = "notification-refresh", - UseTreeWalkerApiForPageDetailsCollection = "use-tree-walker-api-for-page-details-collection", MacOsNativeCredentialSync = "macos-native-credential-sync", WindowsDesktopAutotype = "windows-desktop-autotype", @@ -74,7 +73,6 @@ export const DefaultFeatureFlagValue = { /* Autofill */ [FeatureFlag.NotificationRefresh]: FALSE, - [FeatureFlag.UseTreeWalkerApiForPageDetailsCollection]: FALSE, [FeatureFlag.MacOsNativeCredentialSync]: FALSE, [FeatureFlag.WindowsDesktopAutotype]: FALSE,