mirror of
https://github.com/bitwarden/browser
synced 2025-12-14 07:13:32 +00:00
[PM-5189] Reworking how we handle updating ciphers within nested sub frames
This commit is contained in:
@@ -120,7 +120,7 @@ export type OverlayBackgroundExtensionMessageHandlers = {
|
|||||||
checkShouldRepositionInlineMenu: ({ sender }: BackgroundSenderParam) => boolean;
|
checkShouldRepositionInlineMenu: ({ sender }: BackgroundSenderParam) => boolean;
|
||||||
getCurrentTabFrameId: ({ sender }: BackgroundSenderParam) => number;
|
getCurrentTabFrameId: ({ sender }: BackgroundSenderParam) => number;
|
||||||
updateSubFrameData: ({ message, sender }: BackgroundOnMessageHandlerParams) => void;
|
updateSubFrameData: ({ message, sender }: BackgroundOnMessageHandlerParams) => void;
|
||||||
updateSubFrameOffsetsForReflowEvent: ({ sender }: BackgroundSenderParam) => void;
|
rebuildSubFrameOffsets: ({ sender }: BackgroundSenderParam) => void;
|
||||||
repositionAutofillInlineMenuForSubFrame: ({ sender }: BackgroundSenderParam) => void;
|
repositionAutofillInlineMenuForSubFrame: ({ sender }: BackgroundSenderParam) => void;
|
||||||
destroyAutofillInlineMenuListeners: ({
|
destroyAutofillInlineMenuListeners: ({
|
||||||
message,
|
message,
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
|||||||
checkShouldRepositionInlineMenu: ({ sender }) => this.checkShouldRepositionInlineMenu(sender),
|
checkShouldRepositionInlineMenu: ({ sender }) => this.checkShouldRepositionInlineMenu(sender),
|
||||||
getCurrentTabFrameId: ({ sender }) => this.getSenderFrameId(sender),
|
getCurrentTabFrameId: ({ sender }) => this.getSenderFrameId(sender),
|
||||||
updateSubFrameData: ({ message, sender }) => this.updateSubFrameData(message, sender),
|
updateSubFrameData: ({ message, sender }) => this.updateSubFrameData(message, sender),
|
||||||
updateSubFrameOffsetsForReflowEvent: ({ sender }) => this.rebuildSubFrameOffsets(sender),
|
rebuildSubFrameOffsets: ({ sender }) => this.rebuildSubFrameOffsets(sender),
|
||||||
repositionAutofillInlineMenuForSubFrame: ({ sender }) =>
|
repositionAutofillInlineMenuForSubFrame: ({ sender }) =>
|
||||||
this.repositionInlineMenuForSubFrame(sender),
|
this.repositionInlineMenuForSubFrame(sender),
|
||||||
destroyAutofillInlineMenuListeners: ({ message, sender }) =>
|
destroyAutofillInlineMenuListeners: ({ message, sender }) =>
|
||||||
@@ -628,7 +628,7 @@ export class OverlayBackground implements OverlayBackgroundInterface {
|
|||||||
{ overlayElement }: { overlayElement?: string },
|
{ overlayElement }: { overlayElement?: string },
|
||||||
sender: chrome.runtime.MessageSender,
|
sender: chrome.runtime.MessageSender,
|
||||||
) {
|
) {
|
||||||
if (this.delayedUpdateInlineMenuPositionTimeout && this.isFieldCurrentlyFocused) {
|
if (this.isFieldCurrentlyFocused && this.delayedUpdateInlineMenuPositionTimeout) {
|
||||||
this.closeInlineMenu(sender, { forceCloseInlineMenu: true });
|
this.closeInlineMenu(sender, { forceCloseInlineMenu: true });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,8 +45,6 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
|
|||||||
private focusedFieldData: FocusedFieldData;
|
private focusedFieldData: FocusedFieldData;
|
||||||
private userInteractionEventTimeout: number | NodeJS.Timeout;
|
private userInteractionEventTimeout: number | NodeJS.Timeout;
|
||||||
private recalculateSubFrameOffsetsTimeout: number | NodeJS.Timeout;
|
private recalculateSubFrameOffsetsTimeout: number | NodeJS.Timeout;
|
||||||
private reflowPerformanceObserver: PerformanceObserver;
|
|
||||||
private reflowMutationObserver: MutationObserver;
|
|
||||||
private eventHandlersMemo: { [key: string]: EventListener } = {};
|
private eventHandlersMemo: { [key: string]: EventListener } = {};
|
||||||
private readonly extensionMessageHandlers: AutofillOverlayContentExtensionMessageHandlers = {
|
private readonly extensionMessageHandlers: AutofillOverlayContentExtensionMessageHandlers = {
|
||||||
openAutofillInlineMenu: ({ message }) => this.openInlineMenu(message),
|
openAutofillInlineMenu: ({ message }) => this.openInlineMenu(message),
|
||||||
@@ -1118,7 +1116,7 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
|
|||||||
};
|
};
|
||||||
|
|
||||||
private handleSubFrameFocusInEvent = () => {
|
private handleSubFrameFocusInEvent = () => {
|
||||||
this.updateSubFrameForReflow();
|
this.rebuildSubFrameOffsets();
|
||||||
|
|
||||||
globalThis.removeEventListener(EVENTS.FOCUS, this.handleSubFrameFocusInEvent);
|
globalThis.removeEventListener(EVENTS.FOCUS, this.handleSubFrameFocusInEvent);
|
||||||
globalThis.document.body.removeEventListener(
|
globalThis.document.body.removeEventListener(
|
||||||
@@ -1132,10 +1130,10 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
private updateSubFrameForReflow = () => {
|
private rebuildSubFrameOffsets = () => {
|
||||||
this.clearUserInteractionEventTimeout();
|
this.clearUserInteractionEventTimeout();
|
||||||
this.clearRecalculateSubFrameOffsetsTimeout();
|
this.clearRecalculateSubFrameOffsetsTimeout();
|
||||||
void this.sendExtensionMessage("updateSubFrameOffsetsForReflowEvent");
|
void this.sendExtensionMessage("rebuildSubFrameOffsets");
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1169,8 +1167,6 @@ export class AutofillOverlayContentService implements AutofillOverlayContentServ
|
|||||||
this.handleVisibilityChangeEvent,
|
this.handleVisibilityChangeEvent,
|
||||||
);
|
);
|
||||||
globalThis.removeEventListener(EVENTS.FOCUSOUT, this.handleFormFieldBlurEvent);
|
globalThis.removeEventListener(EVENTS.FOCUSOUT, this.handleFormFieldBlurEvent);
|
||||||
this.reflowPerformanceObserver?.disconnect();
|
|
||||||
this.reflowMutationObserver?.disconnect();
|
|
||||||
this.removeOverlayRepositionEventListeners();
|
this.removeOverlayRepositionEventListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user