From 5fef10d5eece553e3812e6b43dcd482c7435c711 Mon Sep 17 00:00:00 2001 From: varjolintu Date: Sat, 7 Feb 2026 09:15:00 +0200 Subject: [PATCH] Fix Epicgames password input detection --- keepassxc-browser/common/sites.js | 7 +++++-- keepassxc-browser/content/form.js | 2 +- keepassxc-browser/content/icon-handler.js | 8 +++++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/keepassxc-browser/common/sites.js b/keepassxc-browser/common/sites.js index c871822..e2e0119 100644 --- a/keepassxc-browser/common/sites.js +++ b/keepassxc-browser/common/sites.js @@ -71,7 +71,7 @@ kpxcSites.detectUsernameFromPage = function() { * @returns {boolean} True if an Element has a match with the identifier and document location */ kpxcSites.exceptionFound = function(identifier, field) { - if (!identifier || identifier.length === 0) { + if ((!identifier || identifier.length === 0) && !field) { return; } @@ -80,7 +80,7 @@ kpxcSites.exceptionFound = function(identifier, field) { || (typeof identifier === 'object' && [ 'password', 'form-row', 'show-password' ].every(c => identifier.contains(c))))) { return true; } else if (document.location.origin.startsWith('https://signin.ebay.') - && (identifier === 'null' || identifier.value === 'null' || identifier === 'pass')) { + && (identifier === 'null' || identifier?.value === 'null' || identifier === 'pass')) { return true; } else if (document.location.origin.startsWith('https://www.fidelity.com')) { if (typeof identifier === 'string') { @@ -108,6 +108,9 @@ kpxcSites.exceptionFound = function(identifier, field) { return true; } else if (document.location.origin === 'https://accounts.google.com' && field?.id === 'password') { return true; + } else if (document.location.origin === 'https://www.epicgames.com' + && ((field?.style?.opacity === '1' && field?.style?.willChange === 'auto') || identifier === 'password')) { + return true; } return false; diff --git a/keepassxc-browser/content/form.js b/keepassxc-browser/content/form.js index d916be0..210bc76 100644 --- a/keepassxc-browser/content/form.js +++ b/keepassxc-browser/content/form.js @@ -27,7 +27,7 @@ kpxcForm.activateCredentialBanner = async function(usernameValue, passwordInputs return; } - if (passwordField) { + if (passwordField && kpxcFields.isVisible(passwordField)) { await kpxc.setPasswordFilled(true); } diff --git a/keepassxc-browser/content/icon-handler.js b/keepassxc-browser/content/icon-handler.js index 7d5a1c0..9406d9c 100644 --- a/keepassxc-browser/content/icon-handler.js +++ b/keepassxc-browser/content/icon-handler.js @@ -45,7 +45,13 @@ kpxcIcons.addIconsFromForm = async function(form) { // Special case where everything else has been hidden, but a single password field is now displayed. // For example PayPal and Amazon is handled like this. if (c.username && !c.password && c.passwordInputs.length === 1) { - kpxcIcons.addIcon(c.passwordInputs[0], kpxcIcons.iconTypes.DEFAULT); + // Use password input directly from form if found (Epicgames) + const passwordField = c.form?.querySelector('input[type=password]'); + if (c.form && passwordField) { + kpxcIcons.addIcon(passwordField, kpxcIcons.iconTypes.DEFAULT); + } else { + kpxcIcons.addIcon(c.passwordInputs[0], kpxcIcons.iconTypes.DEFAULT); + } } if (c.username && !c.username.readOnly) {