From 6056f97a1b84d51d0eba647d30821c42c714068e Mon Sep 17 00:00:00 2001 From: Test User Date: Tue, 4 Aug 2026 13:56:11 +0530 Subject: [PATCH] fix: detect aliases on titled registration forms --- apps/extension/src/autofill.test.ts | 27 +++++++++++++++++++++++++++ apps/extension/src/autofill.ts | 11 ++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/apps/extension/src/autofill.test.ts b/apps/extension/src/autofill.test.ts index 79e006f..89b8dc5 100644 --- a/apps/extension/src/autofill.test.ts +++ b/apps/extension/src/autofill.test.ts @@ -880,6 +880,33 @@ describe("extension automatic autofill", () => { expect(isProfileOrRegistrationEmailField(email)).toBe(true); }); + it("uses a registration page title for generic legacy forms without overriding exclusions", () => { + const previousTitle = document.title; + document.title = "Demo Site – Registration Form – Vinoth Tech Solutions"; + document.body.innerHTML = ` +
+
Registration Form
+ + + +
+
+ + +
+
+ + +
+ `; + + expect(isRegistrationEmailField(document.querySelector("#vfb-14"))).toBe(true); + expect(isProfileOrRegistrationEmailField(document.querySelector("#vfb-14"))).toBe(true); + expect(isRegistrationEmailField(document.querySelector("#newsletter-email"))).toBe(false); + expect(isRegistrationEmailField(document.querySelector("#contact-email"))).toBe(false); + document.title = previousTitle; + }); + it("supports passwordless multi-step signup but rejects ambiguous standalone email fields", () => { document.body.innerHTML = `
diff --git a/apps/extension/src/autofill.ts b/apps/extension/src/autofill.ts index dedde8b..9ef3e81 100644 --- a/apps/extension/src/autofill.ts +++ b/apps/extension/src/autofill.ts @@ -752,6 +752,15 @@ function registrationFormEvidence(input: HTMLInputElement): { .join(" "); const structural = `${form.id} ${form.className} ${form.getAttribute("name") ?? ""} ${form.getAttribute("aria-label") ?? ""} ${form.getAttribute("action") ?? ""}`; const hint = `${structural} ${controls}`.toLocaleLowerCase(); + // Some older form builders expose a completely generic and "Submit" button while + // putting the only registration signal in the document title. Keep this signal deliberately + // narrow and subordinate to form-specific negative evidence so a newsletter or contact form + // embedded on a registration-themed page never receives an alias suggestion. + const pageTitle = input.ownerDocument.title.toLocaleLowerCase(); + const pageTitleHasRegistrationIntent = + /(?:^|[^a-z])(?:create[-_\s]*(?:an?[-_\s]*)?account|register|registration|sign[-_\s]*up|signup)(?:[^a-z]|$)/u.test( + pageTitle, + ); return { negative: /(?:^|[^a-z])(?:contact|forgot|log[-_\s]*in|newsletter|recover(?:y)?|reset[-_\s]*password|search|sign[-_\s]*in|subscribe)(?:[^a-z]|$)/u.test( @@ -760,7 +769,7 @@ function registrationFormEvidence(input: HTMLInputElement): { positive: /(?:^|[^a-z])(?:create[-_\s]*(?:an?[-_\s]*)?account|get[-_\s]*started|join|register|registration|sign[-_\s]*up|signup)(?:[^a-z]|$)/u.test( hint, - ), + ) || pageTitleHasRegistrationIntent, }; }