mirror of
https://github.com/bitwarden/browser
synced 2025-12-18 17:23:37 +00:00
[PM-5189] Fixing dynamic injection of autofill content scripts based on setting selection
This commit is contained in:
@@ -105,11 +105,7 @@ export class AutofillComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async updateAutoFillOverlayVisibility() {
|
async updateAutoFillOverlayVisibility() {
|
||||||
const previousAutoFillOverlayVisibility = await firstValueFrom(
|
|
||||||
this.autofillSettingsService.inlineMenuVisibility$,
|
|
||||||
);
|
|
||||||
await this.autofillSettingsService.setInlineMenuVisibility(this.autoFillOverlayVisibility);
|
await this.autofillSettingsService.setInlineMenuVisibility(this.autoFillOverlayVisibility);
|
||||||
await this.handleUpdatingAutofillOverlayContentScripts(previousAutoFillOverlayVisibility);
|
|
||||||
await this.requestPrivacyPermission();
|
await this.requestPrivacyPermission();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,27 +177,6 @@ export class AutofillComponent implements OnInit {
|
|||||||
BrowserApi.createNewTab(this.disablePasswordManagerLink);
|
BrowserApi.createNewTab(this.disablePasswordManagerLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handleUpdatingAutofillOverlayContentScripts(
|
|
||||||
previousAutoFillOverlayVisibility: number,
|
|
||||||
) {
|
|
||||||
const autofillOverlayPreviouslyDisabled =
|
|
||||||
previousAutoFillOverlayVisibility === AutofillOverlayVisibility.Off;
|
|
||||||
const autofillOverlayCurrentlyDisabled =
|
|
||||||
this.autoFillOverlayVisibility === AutofillOverlayVisibility.Off;
|
|
||||||
|
|
||||||
if (!autofillOverlayPreviouslyDisabled && !autofillOverlayCurrentlyDisabled) {
|
|
||||||
const tabs = await BrowserApi.tabsQuery({});
|
|
||||||
tabs.forEach((tab) =>
|
|
||||||
BrowserApi.tabSendMessageData(tab, "updateAutofillOverlayVisibility", {
|
|
||||||
autofillOverlayVisibility: this.autoFillOverlayVisibility,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.autofillService.reloadAutofillScripts();
|
|
||||||
}
|
|
||||||
|
|
||||||
async requestPrivacyPermission() {
|
async requestPrivacyPermission() {
|
||||||
if (
|
if (
|
||||||
this.autoFillOverlayVisibility === AutofillOverlayVisibility.Off ||
|
this.autoFillOverlayVisibility === AutofillOverlayVisibility.Off ||
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export type AutofillOverlayContentExtensionMessageHandlers = {
|
|||||||
bgUnlockPopoutOpened: () => void;
|
bgUnlockPopoutOpened: () => void;
|
||||||
bgVaultItemRepromptPopoutOpened: () => void;
|
bgVaultItemRepromptPopoutOpened: () => void;
|
||||||
redirectOverlayFocusOut: ({ message }: AutofillExtensionMessageParam) => void;
|
redirectOverlayFocusOut: ({ message }: AutofillExtensionMessageParam) => void;
|
||||||
updateAutofillOverlayVisibility: ({ message }: AutofillExtensionMessageParam) => void;
|
updateInlineMenuVisibility: ({ message }: AutofillExtensionMessageParam) => void;
|
||||||
getSubFrameOffsets: ({ message }: AutofillExtensionMessageParam) => Promise<SubFrameOffsetData>;
|
getSubFrameOffsets: ({ message }: AutofillExtensionMessageParam) => Promise<SubFrameOffsetData>;
|
||||||
getSubFrameOffsetsFromWindowMessage: ({ message }: AutofillExtensionMessageParam) => void;
|
getSubFrameOffsetsFromWindowMessage: ({ message }: AutofillExtensionMessageParam) => void;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||||||
bgVaultItemRepromptPopoutOpened: () => this.blurMostRecentOverlayField(true),
|
bgVaultItemRepromptPopoutOpened: () => this.blurMostRecentOverlayField(true),
|
||||||
redirectOverlayFocusOut: ({ message }) =>
|
redirectOverlayFocusOut: ({ message }) =>
|
||||||
this.redirectOverlayFocusOut(message?.data?.direction),
|
this.redirectOverlayFocusOut(message?.data?.direction),
|
||||||
updateAutofillOverlayVisibility: ({ message }) => this.updateAutofillOverlayVisibility(message),
|
updateInlineMenuVisibility: ({ message }) => this.updateInlineMenuVisibility(message),
|
||||||
getSubFrameOffsets: ({ message }) => this.getSubFrameOffsets(message),
|
getSubFrameOffsets: ({ message }) => this.getSubFrameOffsets(message),
|
||||||
getSubFrameOffsetsFromWindowMessage: ({ message }) =>
|
getSubFrameOffsetsFromWindowMessage: ({ message }) =>
|
||||||
this.getSubFrameOffsetsFromWindowMessage(message),
|
this.getSubFrameOffsetsFromWindowMessage(message),
|
||||||
@@ -981,7 +981,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
private updateAutofillOverlayVisibility({ data }: AutofillExtensionMessage) {
|
private updateInlineMenuVisibility({ data }: AutofillExtensionMessage) {
|
||||||
if (isNaN(data?.autofillOverlayVisibility)) {
|
if (isNaN(data?.autofillOverlayVisibility)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import { firstValueFrom } from "rxjs";
|
import { firstValueFrom, startWith } from "rxjs";
|
||||||
|
import { pairwise } from "rxjs/operators";
|
||||||
|
|
||||||
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service";
|
||||||
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
|
import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction";
|
||||||
|
import { AutofillOverlayVisibility } from "@bitwarden/common/autofill/constants";
|
||||||
import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service";
|
import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service";
|
||||||
import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service";
|
import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service";
|
||||||
import { InlineMenuVisibilitySetting } from "@bitwarden/common/autofill/types";
|
import { InlineMenuVisibilitySetting } from "@bitwarden/common/autofill/types";
|
||||||
@@ -66,6 +68,11 @@ export default class AutofillService implements AutofillServiceInterface {
|
|||||||
async loadAutofillScriptsOnInstall() {
|
async loadAutofillScriptsOnInstall() {
|
||||||
BrowserApi.addListener(chrome.runtime.onConnect, this.handleInjectedScriptPortConnection);
|
BrowserApi.addListener(chrome.runtime.onConnect, this.handleInjectedScriptPortConnection);
|
||||||
void this.injectAutofillScriptsInAllTabs();
|
void this.injectAutofillScriptsInAllTabs();
|
||||||
|
this.autofillSettingsService.inlineMenuVisibility$
|
||||||
|
.pipe(startWith(undefined), pairwise())
|
||||||
|
.subscribe(([previousSetting, currentSetting]) =>
|
||||||
|
this.handleInlineMenuVisibilityChange(previousSetting, currentSetting),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2066,4 +2073,27 @@ export default class AutofillService implements AutofillServiceInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async handleInlineMenuVisibilityChange(
|
||||||
|
previousSetting: InlineMenuVisibilitySetting,
|
||||||
|
currentSetting: InlineMenuVisibilitySetting,
|
||||||
|
) {
|
||||||
|
if (previousSetting === undefined || previousSetting === currentSetting) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const inlineMenuPreviouslyDisabled = previousSetting === AutofillOverlayVisibility.Off;
|
||||||
|
const inlineMenuCurrentlyDisabled = currentSetting === AutofillOverlayVisibility.Off;
|
||||||
|
if (!inlineMenuPreviouslyDisabled && !inlineMenuCurrentlyDisabled) {
|
||||||
|
const tabs = await BrowserApi.tabsQuery({});
|
||||||
|
tabs.forEach((tab) =>
|
||||||
|
BrowserApi.tabSendMessageData(tab, "updateInlineMenuVisibility", {
|
||||||
|
autofillOverlayVisibility: currentSetting,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.reloadAutofillScripts();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user