From e6335edf99608e1886e61160f26b0179b1ce634c Mon Sep 17 00:00:00 2001 From: varjolintu Date: Fri, 3 Jan 2025 19:53:11 +0200 Subject: [PATCH] Add exceptions for Shadow DOM input query --- keepassxc-browser/common/sites.js | 10 ++++++++++ keepassxc-browser/content/observer-helper.js | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/keepassxc-browser/common/sites.js b/keepassxc-browser/common/sites.js index 472228d..147904a 100644 --- a/keepassxc-browser/common/sites.js +++ b/keepassxc-browser/common/sites.js @@ -101,6 +101,16 @@ kpxcSites.exceptionFound = function(identifier, field) { return false; }; +// Forbids using Shadow DOM query with some sites unless a login dialog has been identified +kpxcSites.isShadowDomQueryAllowed = function(nodeName) { + if (document.location.href?.startsWith('https://www.reddit.com') + && nodeName !== 'BODY' + && !document.querySelector('auth-flow-manager[step-name=login]')) { + return false; + } + return true; +}; + /** * Handles a few exceptions for certain sites where 2FA field is not regognized properly. * @param {object} field Input field Element diff --git a/keepassxc-browser/content/observer-helper.js b/keepassxc-browser/content/observer-helper.js index f0fa988..558197d 100644 --- a/keepassxc-browser/content/observer-helper.js +++ b/keepassxc-browser/content/observer-helper.js @@ -170,7 +170,7 @@ kpxcObserverHelper.getInputs = function(target, ignoreVisibility = false) { inputFields.push(target); } - if (kpxc.improvedFieldDetectionEnabledForPage) { + if (kpxc.improvedFieldDetectionEnabledForPage && kpxcSites.isShadowDomQueryAllowed(target?.nodeName)) { const inputFieldsFromShadowDOM = kpxcObserverHelper.findInputsFromShadowDOM(target); if (inputFieldsFromShadowDOM.length > 0) { logDebug('Input fields from Shadow DOM found:', inputFieldsFromShadowDOM);