1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-14 15:23:33 +00:00

[PM-5189] Reworking how we handle updating ciphers within nested sub frames

This commit is contained in:
Cesar Gonzalez
2024-06-17 07:55:52 -05:00
parent aaa585c992
commit c06c4e9528
3 changed files with 6 additions and 10 deletions

View File

@@ -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,

View File

@@ -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;
} }

View File

@@ -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();
} }
} }