From bd68fff840253f706e09c32e7e893ae2fa2e2d13 Mon Sep 17 00:00:00 2001 From: Cesar Gonzalez Date: Tue, 19 Mar 2024 16:16:51 -0500 Subject: [PATCH] [PM-5189] Working through implementation scaffolding --- .../autofill/background/overlay.background.ts | 19 ++++++++++++++++--- .../src/autofill/content/autofill-init.ts | 3 +++ .../src/platform/browser/browser-api.ts | 6 ++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/apps/browser/src/autofill/background/overlay.background.ts b/apps/browser/src/autofill/background/overlay.background.ts index 543ce90a451..f525e861e62 100644 --- a/apps/browser/src/autofill/background/overlay.background.ts +++ b/apps/browser/src/autofill/background/overlay.background.ts @@ -25,7 +25,7 @@ import { openViewVaultItemPopout, openAddEditVaultItemPopout, } from "../../vault/popup/utils/vault-popout-window"; -import { AutofillService } from "../services/abstractions/autofill.service"; +import { AutofillService, PageDetail } from "../services/abstractions/autofill.service"; import { AutofillOverlayElement, AutofillOverlayPort } from "../utils/autofill-overlay.enum"; import { LockedVaultPendingNotificationsData } from "./abstractions/notification.background"; @@ -41,6 +41,7 @@ import { OverlayPortMessage, WebsiteIconData, PageDetailsForTab, + SubFrameOffsetsForTab, } from "./abstractions/overlay.background"; class OverlayBackground implements OverlayBackgroundInterface { @@ -49,6 +50,7 @@ class OverlayBackground implements OverlayBackgroundInterface { private readonly openAddEditVaultItemPopout = openAddEditVaultItemPopout; private overlayLoginCiphers: Map = new Map(); private pageDetailsForTab: PageDetailsForTab = {}; + private subFrameOffsetsForTab: SubFrameOffsetsForTab = {}; private userAuthStatus: AuthenticationStatus = AuthenticationStatus.LoggedOut; private overlayButtonPort: chrome.runtime.Port; private overlayListPort: chrome.runtime.Port; @@ -209,6 +211,11 @@ class OverlayBackground implements OverlayBackgroundInterface { details: message.details, }; + if (pageDetails.frameId !== 0 && pageDetails.details.fields.length) { + // NOT SURE I WANT THIS + void this.buildSubFrameOffset(pageDetails); + } + const pageDetailsMap = this.pageDetailsForTab[sender.tab.id]; if (!pageDetailsMap) { this.pageDetailsForTab[sender.tab.id] = new Map([[sender.frameId, pageDetails]]); @@ -218,8 +225,14 @@ class OverlayBackground implements OverlayBackgroundInterface { pageDetailsMap.set(sender.frameId, pageDetails); } - private buildFrameOffset(frameId: number, tabId: number) { - return frameId ? 10 : 0; + private async buildSubFrameOffset({ tab, frameId, details }: PageDetail) { + const frameDetails = await BrowserApi.getFrameDetails({ + tabId: tab.id, + frameId, + }); + + // eslint-disable-next-line + console.log(frameDetails); } /** diff --git a/apps/browser/src/autofill/content/autofill-init.ts b/apps/browser/src/autofill/content/autofill-init.ts index e6f64683178..15904fa79f9 100644 --- a/apps/browser/src/autofill/content/autofill-init.ts +++ b/apps/browser/src/autofill/content/autofill-init.ts @@ -28,6 +28,7 @@ class AutofillInit implements AutofillInitInterface { bgUnlockPopoutOpened: () => this.blurAndRemoveOverlay(), bgVaultItemRepromptPopoutOpened: () => this.blurAndRemoveOverlay(), updateAutofillOverlayVisibility: ({ message }) => this.updateAutofillOverlayVisibility(message), + getSubFrameOffsets: () => this.getSubFrameOffsets(), }; /** @@ -249,6 +250,8 @@ class AutofillInit implements AutofillInitInterface { this.autofillOverlayContentService.autofillOverlayVisibility = data?.autofillOverlayVisibility; } + private getSubFrameOffsets() {} + /** * Sets up the extension message listeners for the content script. */ diff --git a/apps/browser/src/platform/browser/browser-api.ts b/apps/browser/src/platform/browser/browser-api.ts index 362aac1af99..dc834201771 100644 --- a/apps/browser/src/platform/browser/browser-api.ts +++ b/apps/browser/src/platform/browser/browser-api.ts @@ -269,6 +269,12 @@ export class BrowserApi { ); } + static async getFrameDetails( + details: chrome.webNavigation.GetFrameDetails, + ): Promise { + return new Promise((resolve) => chrome.webNavigation.getFrame(details, resolve)); + } + // Keep track of all the events registered in a Safari popup so we can remove // them when the popup gets unloaded, otherwise we cause a memory leak private static trackedChromeEventListeners: [