diff --git a/apps/browser/src/autofill/content/abstractions/autofill-init.ts b/apps/browser/src/autofill/content/abstractions/autofill-init.ts index 706c6da4ee1..24a04d16707 100644 --- a/apps/browser/src/autofill/content/abstractions/autofill-init.ts +++ b/apps/browser/src/autofill/content/abstractions/autofill-init.ts @@ -5,6 +5,8 @@ type AutofillExtensionMessage = { tab?: chrome.tabs.Tab; sender?: string; fillScript?: AutofillScript; + url?: string; + pageDetailsUrl?: string; }; type AutofillExtensionMessageHandlers = { diff --git a/apps/browser/src/autofill/content/autofill-init.spec.ts b/apps/browser/src/autofill/content/autofill-init.spec.ts index 447fe31a8a3..d808984be68 100644 --- a/apps/browser/src/autofill/content/autofill-init.spec.ts +++ b/apps/browser/src/autofill/content/autofill-init.spec.ts @@ -73,13 +73,36 @@ describe("AutofillInit", () => { }); describe("fillForm", () => { - it("will call the InsertAutofillContentService to fill the form", () => { - const fillScript = mock(); + beforeEach(() => { jest .spyOn(bitwardenAutofillInit.insertAutofillContentService, "fillForm") .mockImplementation(); + }); + + it("skips calling the InsertAutofillContentService and does not fill the form if the url to fill is not equal to the current tab url", () => { + const fillScript = mock(); + const message = { + command: "fillForm", + fillScript, + pageDetailsUrl: "https://a-different-url.com", + }; + + bitwardenAutofillInit.fillForm(message); + + expect(bitwardenAutofillInit.insertAutofillContentService.fillForm).not.toHaveBeenCalledWith( + fillScript + ); + }); + + it("will call the InsertAutofillContentService to fill the form", () => { + const fillScript = mock(); + const message = { + command: "fillForm", + fillScript, + pageDetailsUrl: window.location.href, + }; - bitwardenAutofillInit.fillForm(fillScript); + bitwardenAutofillInit.fillForm(message); expect(bitwardenAutofillInit.insertAutofillContentService.fillForm).toHaveBeenCalledWith( fillScript diff --git a/apps/browser/src/autofill/content/autofill-init.ts b/apps/browser/src/autofill/content/autofill-init.ts index 8b441ae0e20..99c64b3779b 100644 --- a/apps/browser/src/autofill/content/autofill-init.ts +++ b/apps/browser/src/autofill/content/autofill-init.ts @@ -1,5 +1,4 @@ import AutofillPageDetails from "../models/autofill-page-details"; -import AutofillScript from "../models/autofill-script"; import CollectAutofillContentService from "../services/collect-autofill-content.service"; import DomElementVisibilityService from "../services/dom-element-visibility.service"; import InsertAutofillContentService from "../services/insert-autofill-content.service"; @@ -17,7 +16,7 @@ class AutofillInit implements AutofillInitInterface { private readonly extensionMessageHandlers: AutofillExtensionMessageHandlers = { collectPageDetails: ({ message }) => this.collectPageDetails(message), collectPageDetailsImmediately: ({ message }) => this.collectPageDetails(message, true), - fillForm: ({ message }) => this.fillForm(message.fillScript), + fillForm: ({ message }) => this.fillForm(message), }; /** @@ -76,10 +75,14 @@ class AutofillInit implements AutofillInitInterface { /** * Fills the form with the given fill script. - * @param {AutofillScript} fillScript - * @private + * + * @param {AutofillExtensionMessage} message */ - private fillForm(fillScript: AutofillScript) { + private fillForm({ fillScript, pageDetailsUrl }: AutofillExtensionMessage) { + if ((document.defaultView || window).location.href !== pageDetailsUrl) { + return; + } + this.insertAutofillContentService.fillForm(fillScript); } diff --git a/apps/browser/src/autofill/services/autofill.service.spec.ts b/apps/browser/src/autofill/services/autofill.service.spec.ts index 446aae6420d..968f7a0d834 100644 --- a/apps/browser/src/autofill/services/autofill.service.spec.ts +++ b/apps/browser/src/autofill/services/autofill.service.spec.ts @@ -398,6 +398,7 @@ describe("AutofillService", () => { untrustedIframe: false, }, url: currentAutofillPageDetails.tab.url, + pageDetailsUrl: "url", }, { frameId: currentAutofillPageDetails.frameId, diff --git a/apps/browser/src/autofill/services/autofill.service.ts b/apps/browser/src/autofill/services/autofill.service.ts index a506425bc39..ea8dcb6c10f 100644 --- a/apps/browser/src/autofill/services/autofill.service.ts +++ b/apps/browser/src/autofill/services/autofill.service.ts @@ -208,6 +208,7 @@ export default class AutofillService implements AutofillServiceInterface { command: "fillForm", fillScript: fillScript, url: tab.url, + pageDetailsUrl: pd.details.url, }, { frameId: pd.frameId } );