mirror of
https://github.com/bitwarden/browser.git
synced 2025-03-22 15:19:15 +01:00
[PM-5189] Refactoring implementation
This commit is contained in:
parent
9bffe6f22c
commit
a5824584ae
apps/browser/src/autofill
content/abstractions
services
@ -21,7 +21,7 @@ export type AutofillExtensionMessage = {
|
||||
isOverlayCiphersPopulated?: boolean;
|
||||
direction?: "previous" | "next" | "current";
|
||||
forceCloseOverlay?: boolean;
|
||||
autofillOverlayVisibility?: number;
|
||||
inlineMenuVisibility?: number;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -223,7 +223,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
describe("identifies the overlay visibility setting", () => {
|
||||
it("defaults the overlay visibility setting to `OnFieldFocus` if a value is not set", async () => {
|
||||
sendExtensionMessageSpy.mockResolvedValueOnce(undefined);
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] = undefined;
|
||||
autofillOverlayContentService["inlineMenuVisibility"] = undefined;
|
||||
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
@ -231,21 +231,21 @@ describe("AutofillOverlayContentService", () => {
|
||||
);
|
||||
|
||||
expect(sendExtensionMessageSpy).toHaveBeenCalledWith("getInlineMenuVisibilitySetting");
|
||||
expect(autofillOverlayContentService["autofillOverlayVisibility"]).toEqual(
|
||||
expect(autofillOverlayContentService["inlineMenuVisibility"]).toEqual(
|
||||
AutofillOverlayVisibility.OnFieldFocus,
|
||||
);
|
||||
});
|
||||
|
||||
it("sets the overlay visibility setting to the value returned from the background script", async () => {
|
||||
sendExtensionMessageSpy.mockResolvedValueOnce(AutofillOverlayVisibility.OnFieldFocus);
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] = undefined;
|
||||
autofillOverlayContentService["inlineMenuVisibility"] = undefined;
|
||||
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
autofillFieldData,
|
||||
);
|
||||
|
||||
expect(autofillOverlayContentService["autofillOverlayVisibility"]).toEqual(
|
||||
expect(autofillOverlayContentService["inlineMenuVisibility"]).toEqual(
|
||||
AutofillOverlayVisibility.OnFieldFocus,
|
||||
);
|
||||
});
|
||||
@ -594,7 +594,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
it("skips triggering the handler logic if autofill is currently filling", async () => {
|
||||
isFieldCurrentlyFillingSpy.mockResolvedValue(true);
|
||||
autofillOverlayContentService["mostRecentlyFocusedField"] = autofillFieldElement;
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnFieldFocus;
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
@ -623,7 +623,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
});
|
||||
|
||||
it("removes the overlay list if the autofill visibility is set to onClick", async () => {
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnButtonClick;
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
@ -660,7 +660,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
|
||||
it("opens the autofill overlay if the form element has no value", async () => {
|
||||
(autofillFieldElement as HTMLInputElement).value = "";
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnFieldFocus;
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
autofillFieldElement,
|
||||
@ -675,7 +675,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
|
||||
it("opens the autofill overlay if the overlay ciphers are not populated and the user is authed", async () => {
|
||||
(autofillFieldElement as HTMLInputElement).value = "";
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnFieldFocus;
|
||||
jest.spyOn(autofillOverlayContentService as any, "isUserAuthed").mockReturnValue(true);
|
||||
await autofillOverlayContentService.setupAutofillOverlayListenerOnField(
|
||||
@ -690,7 +690,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
});
|
||||
|
||||
it("updates the overlay button position if the focus event is not opening the overlay", async () => {
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnFieldFocus;
|
||||
(autofillFieldElement as HTMLInputElement).value = "test";
|
||||
jest
|
||||
@ -828,7 +828,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
});
|
||||
|
||||
it("opens the autofill overlay button only if overlay visibility is set for onButtonClick", () => {
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnButtonClick;
|
||||
|
||||
autofillOverlayContentService["openAutofillOverlayMenu"]({ isOpeningFullOverlay: false });
|
||||
@ -845,7 +845,7 @@ describe("AutofillOverlayContentService", () => {
|
||||
});
|
||||
|
||||
it("overrides the onButtonClick visibility setting to open both overlay elements", () => {
|
||||
autofillOverlayContentService["autofillOverlayVisibility"] =
|
||||
autofillOverlayContentService["inlineMenuVisibility"] =
|
||||
AutofillOverlayVisibility.OnButtonClick;
|
||||
|
||||
autofillOverlayContentService["openAutofillOverlayMenu"]({ isOpeningFullOverlay: true });
|
||||
|
@ -24,7 +24,7 @@ import { AutoFillConstants } from "./autofill-constants";
|
||||
|
||||
class AutofillOverlayContentService implements AutofillOverlayContentServiceInterface {
|
||||
pageDetailsUpdateRequired = false;
|
||||
autofillOverlayVisibility: number;
|
||||
inlineMenuVisibility: number;
|
||||
private readonly findTabs = tabbable;
|
||||
private readonly sendExtensionMessage = sendExtensionMessage;
|
||||
private formFieldElements: Set<ElementWithOpId<FormFieldElement>> = new Set([]);
|
||||
@ -92,7 +92,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
||||
await this.updateMostRecentlyFocusedField(formFieldElement);
|
||||
}
|
||||
|
||||
if (!this.autofillOverlayVisibility) {
|
||||
if (!this.inlineMenuVisibility) {
|
||||
await this.getInlineMenuVisibilitySetting();
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
||||
}
|
||||
|
||||
if (
|
||||
this.autofillOverlayVisibility === AutofillOverlayVisibility.OnButtonClick &&
|
||||
this.inlineMenuVisibility === AutofillOverlayVisibility.OnButtonClick &&
|
||||
!isOpeningFullOverlay
|
||||
) {
|
||||
this.updateOverlayButtonPosition();
|
||||
@ -456,7 +456,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
||||
const formElementHasValue = Boolean((formFieldElement as HTMLInputElement).value);
|
||||
|
||||
if (
|
||||
this.autofillOverlayVisibility === AutofillOverlayVisibility.OnButtonClick ||
|
||||
this.inlineMenuVisibility === AutofillOverlayVisibility.OnButtonClick ||
|
||||
(formElementHasValue && initiallyFocusedField !== this.mostRecentlyFocusedField)
|
||||
) {
|
||||
await this.sendExtensionMessage("closeAutofillOverlayMenu", {
|
||||
@ -724,7 +724,7 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
||||
*/
|
||||
private async getInlineMenuVisibilitySetting() {
|
||||
const overlayVisibility = await this.sendExtensionMessage("getInlineMenuVisibilitySetting");
|
||||
this.autofillOverlayVisibility = overlayVisibility || AutofillOverlayVisibility.OnFieldFocus;
|
||||
this.inlineMenuVisibility = overlayVisibility || AutofillOverlayVisibility.OnFieldFocus;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -982,11 +982,11 @@ class AutofillOverlayContentService implements AutofillOverlayContentServiceInte
|
||||
};
|
||||
|
||||
private updateInlineMenuVisibility({ data }: AutofillExtensionMessage) {
|
||||
if (isNaN(data?.autofillOverlayVisibility)) {
|
||||
if (isNaN(data?.inlineMenuVisibility)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.autofillOverlayVisibility = data.autofillOverlayVisibility;
|
||||
this.inlineMenuVisibility = data.inlineMenuVisibility;
|
||||
}
|
||||
|
||||
private async isFieldCurrentlyFilling() {
|
||||
|
@ -2088,7 +2088,7 @@ export default class AutofillService implements AutofillServiceInterface {
|
||||
const tabs = await BrowserApi.tabsQuery({});
|
||||
tabs.forEach((tab) =>
|
||||
BrowserApi.tabSendMessageData(tab, "updateInlineMenuVisibility", {
|
||||
autofillOverlayVisibility: currentSetting,
|
||||
inlineMenuVisibility: currentSetting,
|
||||
}),
|
||||
);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user