keepassxc-browser icon indicating copy to clipboard operation
keepassxc-browser copied to clipboard

NixOS/LibreWolf - Credential Entry Selection immediately disappears after DB-Unlock

Open becknik opened this issue 6 months ago • 10 comments

Have you searched for an existing issue?

  • [x] Yes, I tried searching and reviewed the pinned issues

Brief Summary

When clicking on the grey icon next to a login field detected by keepassxc-browser and entering my password in the follow-up pop-up, the pop-up for the selection of the right credential entry appears and then immediately disappears after around 500ms. Then, an error appears with the message: "Current database is not connected".

Here's a video (I didn't click on any element, it just disappeared)

https://github.com/user-attachments/assets/6aeeb182-4df4-4098-85d3-b993cd1cb635

This is the log for the attempted credential selection on my computer:

[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - Error: Cannot find menu item with id fill_attribute global.js:168:13
KeePassXC-Browser: Connecting to native messaging host org.keepassxc.keepassxc_browser client.js:383:13
KeePassXC-Browser: Server public key: W8wMjhSpQeeTRri66Nb8V+atVdtMTHjqqsw7WUp7PBo= keepass.js:426:17
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 3 global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Error client.js:241] KeePassXC-Browser - 15: No logins found global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened 2 global.js:168:13
[Debug ] KeePassXC-Browser - Error: No credentials found. global.js:160:13
[Debug ] KeePassXC-Browser - Error: Credential list is empty for: https://account.proton.me global.js:160:13
[Debug fill.js:360] KeePassXC-Browser - Current database is not connected. global.js:160:13

The issue only occurs when the DB is locked before clicking on the icon on the login fields. Here's the log when running with a successful selection of a entry when the DB is already open:

[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - Error: Cannot find menu item with id fill_attribute global.js:168:13
KeePassXC-Browser: Connecting to native messaging host org.keepassxc.keepassxc_browser client.js:383:13
KeePassXC-Browser: Server public key: OdMkDov7tZdPvR+QLFRGSoiq9tqFCwH2eMGtOvnvF1Q= keepass.js:426:17
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Error client.js:241] KeePassXC-Browser - 15: No logins found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
[Debug ] KeePassXC-Browser - Found 5 entries for url https://account.proton.me/login global.js:160:13
[Debug ] KeePassXC-Browser - Error: No credentials selected for TOTP. global.js:160:13
[Debug observer-helper.js:271] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
[Debug fields.js:34] KeePassXC-Browser - Error: TOTP field found but it is not valid: global.js:160:13
[Debug fields.js:34] KeePassXC-Browser - Error: TOTP field found but it is not valid: global.js:160:13
[Debug fields.js:34] KeePassXC-Browser - Error: TOTP field found but it is not valid: global.js:160:13
[Debug fields.js:34] KeePassXC-Browser - Error: TOTP field found but it is not valid: global.js:160:13
[Debug fields.js:34] KeePassXC-Browser - Error: TOTP field found but it is not valid: global.js:160:13
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Related config files

~/.librewolf/native-messaging-hosts/org.keepassxc.keepassxc_browser.json:

{
    "name": "org.keepassxc.keepassxc_browser",
    "description": "KeePassXC integration with native messaging support",
    "path": "/nix/store/pirmbbjwx6zmk4gls5ddsp3cczbl54ah-keepassxc-2.7.10/bin/keepassxc-proxy",
    "type": "stdio",
    "allowed_extensions": [
        "[email protected]"
    ]
}

The binary path is the same as the one keepassxc version I'm running on my system.

~/.config/keepassxc/keepassxc.ini:

[General]
ConfigVersion=2

[Browser]
CustomProxyLocation=
Enabled=true

[GUI]
ColorPasswords=true
HideUsernames=true
MinimizeOnClose=true
MinimizeOnStartup=false
MinimizeToTray=false
MonospaceNotes=true
MovableToolbar=false
ShowExpiredEntriesOnDatabaseUnlock=false
ShowTrayIcon=true
TrayIconAppearance=colorful

[KeeShare]
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
Own="<...>"
QuietSuccess=true

[PasswordGenerator]
AdditionalChars=
AdvancedMode=true
Braces=true
Dashes=true
EASCII=false
ExcludedChars=
Length=128
Logograms=true
Math=true
Punctuation=true
Quotes=true
SpecialChars=true

[Security]
EnableCopyOnDoubleClick=true
IconDownloadFallback=true
LockDatabaseIdle=true
LockDatabaseMinimize=true

This is a follow-up on #2373 I closed before really resolving the issue, since I got annoyed by it again...

Expected Versus Actual Behavior

The entry pop-up doesn't closes itself after DB unlocking

Steps to Reproduce

Have the DB locked

  1. Lauch LibreWolf in my NixOS home-manager closure
  2. Open a website with credentials
  3. Click on KeePassXC logo symboling the
  4. Enter credentials

KeePassXC-Browser Debug Information

KeePassXC - 2.7.10
KeePassXC-Browser - 1.9.9
Operating system: Linux x86_64
Browser: Mozilla Firefox 139.0

becknik avatar Jun 30 '25 21:06 becknik

There's nothing in the logs that tells why it happens. There's nothing after the "Current database is not connected" message? Does the same happen with normal Firefox? This could be something that's specific to LibreWolf.

varjolintu avatar Jul 01 '25 04:07 varjolintu

Okay, I accidentally filtered out some debugging messages from the browser console because I filtered it for "keepass". I'm sorry, I've attached the unfitered log for the error process. I've also modified the log so that is only contains the parts related to KeePassXC and copy-pasted some of the Array object content into it (untampered log also attached).

I also could reproduce the issue with a clean home-manager FireFox installation (this is as clean as it gets):

  programs = {
    firefox.enable = true;
    firefox.nativeMessagingHosts = with pkgs; [
      keepassxc
    ];
  }

Hopefully, the log contains a bit more intel to you. If not, what could I do to investigate further? Thanks in advance!

LibreWolf log modified
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Init sentry login:166:13
init Analytics bundle.min.js:2:12178
app.simplelogin.io background.js:1:1118
try 0: simplelogin.io background.js:1:1348
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#email.form-control, input#password.form-control ]
global.js:163:17
[Debug keepassxc-browser.js:232] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#email.form-control, input#password.form-control ]
global.js:163:17
[Debug fields.js:230] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
account.proton.me background.js:1:1118
try 0: proton.me background.js:1:1348
exact match! background.js:1:1444
account.proton.me background.js:1:1118
try 0: proton.me background.js:1:1348
exact match! background.js:1:1444
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
​
0: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​
1: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​
length: 2
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug observer-helper.js:250] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
​
0: Object { username: input#username.input-element.w-full, password: input#password.input-element.w-full, passwordInputs: (1) […], … }
​​
form: <form name="loginForm" data-testid="login-form" method="post">
​​
password: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​​
passwordInputs: Array [ input#password.input-element.w-full ]
​​
username: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​​
<prototype>: Object { shadowSelector: shadowSelector(), shadowSelectorAll: shadowSelectorAll(), … }
​
length: 1
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
​
0: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​
1: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​
length: 2
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug keepassxc-browser.js:363] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
​
0: Object { username: input#username.input-element.w-full, password: input#password.input-element.w-full, passwordInputs: (1) […], … }
​​
form: <form name="loginForm" data-testid="login-form" method="post">
​​
password: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​​
passwordInputs: Array [ input#password.input-element.w-full ]
​​
username: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​​
<prototype>: Object { shadowSelector: shadowSelector(), shadowSelectorAll: shadowSelectorAll(), … }
​
length: 1
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
​
0: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​
1: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​
length: 2
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug keepassxc-browser.js:363] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
​
0: Object { username: input#username.input-element.w-full, password: input#password.input-element.w-full, passwordInputs: (1) […], … }
​​
form: <form name="loginForm" data-testid="login-form" method="post">
​​
password: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​​
passwordInputs: Array [ input#password.input-element.w-full ]
​​
username: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​​
<prototype>: Object { shadowSelector: shadowSelector(), shadowSelectorAll: shadowSelectorAll(), … }
​
length: 1
​
<prototype>: Array []
global.js:163:17
global.js:163:17
Setting NAT type: restricted snowflake.js:1346:15
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
​
0: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​
1: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​
length: 2
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
​
0: Object { username: input#username.input-element.w-full, password: input#password.input-element.w-full, passwordInputs: (1) […], … }
​​
form: <form name="loginForm" data-testid="login-form" method="post">
​​
password: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​​
passwordInputs: Array [ input#password.input-element.w-full ]
​​
username: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​​
<prototype>: Object { shadowSelector: shadowSelector(), shadowSelectorAll: shadowSelectorAll(), … }
​
length: 1
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
​
0: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​
1: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​
length: 2
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
​
0: Object { username: input#username.input-element.w-full, password: input#password.input-element.w-full, passwordInputs: (1) […], … }
​​
form: <form name="loginForm" data-testid="login-form" method="post">
​​
password: <input id="password" class="input-element w-full" autocomplete="current-password" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-5" type="password" value="">
​​
passwordInputs: Array [ input#password.input-element.w-full ]
​​
username: <input id="username" class="input-element w-full" autocomplete="username" autocapitalize="none" autocorrect="off" spellcheck="false" aria-invalid="false" data-testid="input-input-element" aria-describedby="id-4" value="">
​​
<prototype>: Object { shadowSelector: shadowSelector(), shadowSelectorAll: shadowSelectorAll(), … }
​
length: 1
​
<prototype>: Array []
global.js:163:17
global.js:163:17
[Error client.js:241] KeePassXC-Browser - 15: No logins found global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Debug ] KeePassXC-Browser - Error: No credentials found. global.js:160:13
[Debug ] KeePassXC-Browser - Error: Credential list is empty for: https://account.proton.me global.js:160:13
[Debug fill.js:360] KeePassXC-Browser - Current database is not connected. global.js:160:13
FireFox log full
1751373650248	addons.xpi	WARN	Checking /nix/store/hbzwdgl01im182ncff6c99p8k21w5niv-firefox-139.0.4/lib/firefox/distribution/extensions for addons
NS_ERROR_ILLEGAL_VALUE: Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsICommandLine.handleFlagWithParam]
    bch_handle resource:///modules/BrowserContentHandler.sys.mjs:479
BrowserContentHandler.sys.mjs:488:15
Warning: unrecognized command line flag -new-window BrowserContentHandler.sys.mjs:1579:17
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Registered still-not-active content scripts for ib.absa.co.za 
Array [ {…} ]
interventions.js:402:15
[Error ] KeePassXC-Browser - Error: Cannot find menu item with id fill_attribute global.js:168:13
Registered still-not-active content scripts for histography.io 
Array [ {…} ]
interventions.js:402:15
KeePassXC-Browser: Connecting to native messaging host org.keepassxc.keepassxc_browser client.js:383:13
Registered still-not-active content scripts for bankofamerica.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for steamcommunity.com interventions.js:350:13
Registered still-not-active content scripts for apply.lloydsbank.co.uk 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for directv.com interventions.js:350:13
Enabled UA override for watch.sling.com interventions.js:350:13
Enabled UA override for www.mobilesuica.com interventions.js:350:13
Registered still-not-active content scripts for directv.com.co 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for usps.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for santanderbank.com interventions.js:350:13
Registered still-not-active content scripts for Office Excel spreadsheets 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for news.yahoo.co.jp 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for patient.alphalabs.ca 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for Sites with issues with Firefox versions over 99 interventions.js:350:13
Registered still-not-active content scripts for tiktok.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for coldwellbankerhomes.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for www.edencast.fr interventions.js:350:13
Enabled UA override for watch.antennaplus.gr 2 interventions.js:350:13
KeePassXC-Browser: Server public key: 6j8zf9IgxleHsYcVbVzTdQIffNHhsnU8WIzqJ1NIgws= keepass.js:426:17
Registered still-not-active content scripts for play.google.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for Sites based on Entrata Platform 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for www.samsung.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for healow.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for Office 365 Outlook locations 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for axisbank.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for elearning.dmv.ca.gov interventions.js:350:13
Registered still-not-active content scripts for afisha.ru 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for All international Nintendo domains 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for autostar-novoross.ru 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for cnn.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for watch.tonton.com.my interventions.js:350:13
Enabled UA override for gts-pro.sdimedia.com interventions.js:350:13
Enabled UA override for atracker.pro interventions.js:350:13
Registered still-not-active content scripts for docs.google.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for www.youtube.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for Google Slides 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for microsoft.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for cleanrider.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for theaa.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for hrmis2.eghrmis.gov.my interventions.js:350:13
Registered still-not-active content scripts for Sites relying on there being no window.InstallTrigger 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for bmo.com interventions.js:350:13
Registered still-not-active content scripts for tvmovie.de, www.goodcarbadcar.net 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for allstate.com interventions.js:350:13
Registered still-not-active content scripts for Future PLC websites 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for quezoncity.gov.ph 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for www.six-group.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for Office 365 email handling prompt 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for bankmandiri.co.id interventions.js:350:13
Registered still-not-active content scripts for bankmandiri.co.id 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for investopedia.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for dingtalk.com interventions.js:350:13
Registered still-not-active content scripts for www.zhihu.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for vivaldi.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for my.rhinoshield.fr interventions.js:350:13
Registered still-not-active content scripts for gracobaby.ca 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for Flipbook 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for app.homewyse.com interventions.js:350:13
Enabled UA override for cwb.digital interventions.js:350:13
Enabled UA override for remotasks.com interventions.js:350:13
Enabled UA override for trade-in.vodafone.com interventions.js:350:13
Enabled UA override for account.gov.il interventions.js:350:13
Enabled UA override for conference.amwell.com interventions.js:350:13
Enabled UA override for events.webinar.ru interventions.js:350:13
Registered still-not-active content scripts for transcrib.io 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for digits.t-mobile.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for prudential.com.hk 2 interventions.js:350:13
Enabled UA override for eportal.uestc.edu.cn interventions.js:350:13
Enabled UA override for wbte.drcedirect.com interventions.js:350:13
Enabled UA override for bookcreator.com interventions.js:350:13
Enabled UA override for game.granbluefantasy.jp interventions.js:350:13
Enabled UA override for passpoint.boingo.com 2 interventions.js:350:13
Enabled UA override for selecionases.saude.pe.gov.br interventions.js:350:13
Registered still-not-active content scripts for plus.nhk.jp 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for plus.nhk.jp interventions.js:350:13
Enabled UA override for tv.partner.co.il interventions.js:350:13
Registered still-not-active content scripts for vanbreda-health.be 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for flash.puffin.com interventions.js:350:13
Enabled UA override for e-src.net interventions.js:350:13
Enabled UA override for musicstore.auone.jp interventions.js:350:13
Enabled UA override for pss.perodua.com.my interventions.js:350:13
Registered still-not-active content scripts for sp.hi.co.kr 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for agent.foundi.info interventions.js:350:13
Enabled UA override for coupangplay.com interventions.js:350:13
Enabled UA override for mp3cut.net interventions.js:350:13
Registered still-not-active content scripts for one.geekie.com.br 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for watch.foxtel.com.au interventions.js:350:13
Enabled UA override for fire.honeywell.com interventions.js:350:13
Registered still-not-active content scripts for qq.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for class.com interventions.js:350:13
Enabled UA override for playblackdesert.com interventions.js:350:13
Enabled UA override for anecdotes.ai interventions.js:350:13
Enabled UA override for beta.maps.apple.com interventions.js:350:13
Registered still-not-active content scripts for bing.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for ipmph.com interventions.js:350:13
Registered still-not-active content scripts for www.tiktok.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for gazetasp.com.br 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for modules.sms-timing.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for modules.sms-timing.com interventions.js:350:13
Registered still-not-active content scripts for voice.google.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for oasis.decart.ai 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for oasis.decart.ai interventions.js:350:13
Registered still-not-active content scripts for online.singaporepools.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for support.hp.com interventions.js:350:13
Registered still-not-active content scripts for buzzfeed.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for next.goalplan.com interventions.js:350:13
Enabled UA override for indices.circana.com interventions.js:350:13
Registered still-not-active content scripts for rosasthai.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for climate.rutgers.edu 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for beterbed.nl 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for arenti.net interventions.js:350:13
Registered still-not-active content scripts for order.mealkeyway.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for aliexpress.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for pexels.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for y.qq.com interventions.js:350:13
Registered still-not-active content scripts for www.shazam.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for lovers.cacaushow.com.br 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for omegleapp.me 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for aylak.com interventions.js:350:13
Enabled UA override for f1tv.formula1.com interventions.js:350:13
Registered still-not-active content scripts for f1tv.formula1.com 
Array [ {…} ]
interventions.js:402:15
Registered still-not-active content scripts for shamir.com 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for onvue.com interventions.js:350:13
Enabled UA override for avizia.com interventions.js:350:13
Enabled UA override for watch.indee.tv interventions.js:350:13
Enabled UA override for viewer-ebook.books.com.tw interventions.js:350:13
Enabled UA override for jelly.jd.com interventions.js:350:13
Enabled UA override for kt.com interventions.js:350:13
Registered still-not-active content scripts for nppes.cms.hhs.gov 
Array [ {…} ]
interventions.js:402:15
Enabled UA override for oirsa.org interventions.js:350:13
Enabled UA override for onp.cloud.waterloo.ca interventions.js:350:13
Skipping 64 un-needed interventions 
Array(64) [ "10play.com.au", "Casino sites", "FastClick breakage", "FastClick breakage (legacy)", "Sites relying on window.InstallTrigger", "Sites using draft.js", "add.org", "admissions.nid.edu", "animalplanet.com", "app.powerbi.com", … ]
interventions.js:164:15
[Error ] KeePassXC-Browser - 1: Database not opened 2 global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - No content script available for this tab. global.js:168:13
Key event not available on some keyboard layouts: key=“z” modifiers=“control,alt” id=“toggleSidebarKb” browser.xhtml
Key event not available on some keyboard layouts: key=“x” modifiers=“accel,alt” id=“viewGenaiChatSidebarKb” browser.xhtml
Key event not available on some keyboard layouts: key=“r” modifiers=“accel,alt” id=“key_toggleReaderMode” browser.xhtml
Key event not available on some keyboard layouts: key=“i” modifiers=“accel,alt,shift” id=“key_browserToolbox” browser.xhtml
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 4 global.js:168:13
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
Content-Security-Policy warnings 2
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Successfully compiled asm.js code (total compilation time 0ms) html
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Content-Security-Policy warnings 2
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Successfully compiled asm.js code (total compilation time 0ms) html
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
WEBGL_debug_renderer_info is deprecated in Firefox and will be removed. Please use RENDERER. html:32:38213
WebGL context was lost. html:32:90330
WEBGL_debug_renderer_info is deprecated in Firefox and will be removed. Please use RENDERER. html:32:91569
WebGL context was lost. html:32:90330
WEBGL_debug_renderer_info is deprecated in Firefox and will be removed. Please use RENDERER. html:32:38213
WebGL context was lost. html:32:87464
WEBGL_debug_renderer_info is deprecated in Firefox and will be removed. Please use RENDERER. html:32:87922
WebGL context was lost. html:32:87464
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 3 global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Error client.js:241] KeePassXC-Browser - 15: No logins found global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened 2 global.js:168:13
[Debug ] KeePassXC-Browser - Error: No credentials found. global.js:160:13
[Debug ] KeePassXC-Browser - Error: Credential list is empty for: https://account.proton.me global.js:160:13
[Debug fill.js:360] KeePassXC-Browser - Current database is not connected. global.js:160:13
LibreWolf log full
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Init sentry login:166:13
init Analytics bundle.min.js:2:12178
app.simplelogin.io background.js:1:1118
try 0: simplelogin.io background.js:1:1348
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#email.form-control, input#password.form-control ]
global.js:163:17
[Debug keepassxc-browser.js:232] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#email.form-control, input#password.form-control ]
global.js:163:17
[Debug fields.js:230] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
NS_ERROR_NOT_AVAILABLE:
Setting NAT type: restricted snowflake.js:1346:15
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Content-Security-Policy: The page’s settings blocked an inline script (script-src-elem) from being executed because it violates the following directive: “script-src 'self' 'wasm-unsafe-eval' blob: 'sha256-eAhF1Kdccp0BTXM6nMW7SYBdV0c3fZwzcC177TQ692g='” utils.js:42:10
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
account.proton.me background.js:1:1118
try 0: proton.me background.js:1:1348
exact match! background.js:1:1444
account.proton.me background.js:1:1118
try 0: proton.me background.js:1:1348
exact match! background.js:1:1444
[Debug observer-helper.js:245] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug observer-helper.js:250] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
NS_ERROR_NOT_AVAILABLE:
NS_ERROR_NOT_AVAILABLE:
Content-Security-Policy warnings 2
Content-Security-Policy warnings 2
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Successfully compiled asm.js code (total compilation time 0ms) html
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found 2 global.js:168:13
Successfully compiled asm.js code (total compilation time 3ms) html
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
Failed to create WebGL context: WebGL is currently disabled. html:32:38109
Failed to create WebGL context: WebGL is currently disabled. html:32:38146
InvalidStateError: JSWindowActorChild.sendQuery: JSWindowActorChild cannot send at the moment ConduitsChild.sys.mjs:62:20
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
Promise rejected after context unloaded: Actor 'Conduits' destroyed before query 'RuntimeMessage' was resolved
index.js:9044
Error: An unexpected error occurred undefined
Failed to create WebGL context: WebGL is currently disabled. html:32:92182
Failed to create WebGL context: WebGL is currently disabled. html:32:92211
InvalidStateError: JSWindowActorChild.sendQuery: JSWindowActorChild cannot send at the moment ConduitsChild.sys.mjs:62:20
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
Promise rejected after context unloaded: Actor 'Conduits' destroyed before query 'RuntimeMessage' was resolved
index.js:9044
Error: An unexpected error occurred undefined
Promise resolved after context unloaded
settings.js:442
Promise resolved after context unloaded
settings.js:442
Failed to create WebGL context: WebGL is currently disabled. html:32:38109
Failed to create WebGL context: WebGL is currently disabled. html:32:38146
AbortError: Actor 'Conduits' destroyed before query 'RuntimeMessage' was resolved ConduitsParent.sys.mjs:383
Unchecked lastError value: Error: Could not establish connection. Receiving end does not exist. index.js:4963
InvalidStateError: JSWindowActorChild.sendAsyncMessage: JSWindowActorChild cannot send at the moment ConduitsChild.sys.mjs:64
InvalidStateError: JSWindowActorChild.sendQuery: JSWindowActorChild cannot send at the moment ConduitsChild.sys.mjs:62:20
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
Promise rejected after context unloaded: Actor 'Conduits' destroyed before query 'RuntimeMessage' was resolved
index.js:9044
InvalidStateError: An exception was thrown vapi-client.js:214
Error: An unexpected error occurred undefined
Failed to create WebGL context: WebGL is currently disabled. html:32:93760
Failed to create WebGL context: WebGL is currently disabled. html:32:93786
InvalidStateError: JSWindowActorChild.sendQuery: JSWindowActorChild cannot send at the moment ConduitsChild.sys.mjs:62:20
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
Promise rejected after context unloaded: Actor 'Conduits' destroyed before query 'RuntimeMessage' was resolved
index.js:9044
Error: An unexpected error occurred undefined
Promise resolved after context unloaded
2 settings.js:442
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug keepassxc-browser.js:363] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug keepassxc-browser.js:363] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Error ] KeePassXC-Browser - page.initSettings: Error: Managed storage manifest not found global.js:168:13
[Debug keepassxc-browser.js:226] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Debug fields.js:206] KeePassXC-Browser - Input fields found: global.js:160:13
Array [ input#username.input-element.w-full, input#password.input-element.w-full ]
global.js:163:17
[Debug ] KeePassXC-Browser - Login field combinations identified: global.js:160:13
Array [ {…} ]
global.js:163:17
[Error client.js:241] KeePassXC-Browser - 15: No logins found global.js:168:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[ClearURLs]: Save on disk. storage.js:84:13
sendRemoveListener on closed conduit {04188724-64d3-497b-a4fd-7caffe6eab29}.549755813919 2 ConduitsChild.sys.mjs:122:13
sendRemoveListener on closed conduit {04188724-64d3-497b-a4fd-7caffe6eab29}.549755813919 2 ConduitsChild.sys.mjs:122:13
[Error ] KeePassXC-Browser - 1: Database not opened global.js:168:13
[Debug ] KeePassXC-Browser - Error: No credentials found. global.js:160:13
[Debug ] KeePassXC-Browser - Error: Credential list is empty for: https://account.proton.me global.js:160:13
[Debug fill.js:360] KeePassXC-Browser - Current database is not connected. global.js:160:13
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13
sendRemoveListener on closed conduit [email protected] ConduitsChild.sys.mjs:122:13

becknik avatar Jul 01 '25 12:07 becknik

The only way to make sure why this happens is to debug the background scripts and set a breakpoint here and check the variables: https://github.com/keepassxreboot/keepassxc-browser/blob/develop/keepassxc-browser/background/event.js#L125

It could be that the browser doesn't recieve the database unlocked message and this is why it looks like there are no credentials in the logs. But you still get the Autocomplete Menu, so it doesn't make any sense. Maybe I need to setup a browser in a similar way, and try to get this reproduced.

varjolintu avatar Jul 02 '25 04:07 varjolintu

Thanks, I'll try it out

Maybe I need to setup a browser in a similar way, and try to get this reproduced.

Knowing Nix for a while now, I think this is some weird edge case triggered by my system. I don't think that is worth it

becknik avatar Jul 02 '25 08:07 becknik

I tried to get the browser debugging to work (as described in the wiki), but even after resolving some errors during the process, I'm just getting the following errors:

Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
    <anonymous> moz-extension://69aa4c3d-318c-4cb4-9e06-5440ecab2a78/popups/popup_functions.js:63
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
    initColorTheme moz-extension://69aa4c3d-318c-4cb4-9e06-5440ecab2a78/popups/popup_functions.js:33

which relates to the await browser.runtime.sendMessage({ action: 'update_available_keepassxc' }) and await browser.runtime.sendMessage({ action: 'get_color_theme' }); calls.

There's definitely something wrong with the setup for firefox, since I encountered some errors I had to solve with the following adjustments due to warnings/ errors on temporary loading (Librewolf 139.0.4-1):

diff --git a/keepassxc-browser/background/background_service.js b/keepassxc-browser/background/background_service.js
index e38e1db..60c6d4a 100644
--- a/keepassxc-browser/background/background_service.js
+++ b/keepassxc-browser/background/background_service.js
@@ -1,21 +1,23 @@
 'use strict';
 
-try {
-    importScripts(
-        '../common/browser-polyfill.min.js',
-        '../common/global.js',
-        '../common/sites.js',
-        'nacl.min.js',
-        'nacl-util.min.js',
-        'client.js',
-        'keepass.js',
-        'httpauth.js',
-        'offscreen.js',
-        'browserAction.js',
-        'page.js',
-        'event.js',
-        'init.js'
-    );
-} catch (e) {
-    console.log('Cannot import background scripts: ', e);
+if('function' === typeof importScripts) {
+    try {
+        importScripts(
+            '../common/browser-polyfill.min.js',
+            '../common/global.js',
+            '../common/sites.js',
+            'nacl.min.js',
+            'nacl-util.min.js',
+            'client.js',
+            'keepass.js',
+            'httpauth.js',
+            'offscreen.js',
+            'browserAction.js',
+            'page.js',
+            'event.js',
+            'init.js'
+        );
+    } catch (e) {
+        console.log('Cannot import background scripts: ', e);
+    }
 }
diff --git a/keepassxc-browser/manifest.json b/keepassxc-browser/manifest.json
index 937e7e0..becd018 100755
--- a/keepassxc-browser/manifest.json
+++ b/keepassxc-browser/manifest.json
@@ -1,11 +1,9 @@
 {
     "manifest_version": 3,
     "name": "KeePassXC-Browser",
     "version": "1.9.9.1",
-    "version_name": "1.9.9.1",
-    "minimum_chrome_version": "93",
     "description": "__MSG_extensionDescription__",
     "author": "KeePassXC Team",
     "icons": {
         "16": "icons/keepassxc_16x16.png",
         "48": "icons/keepassxc_48x48.png",
@@ -29,11 +27,12 @@
     "options_ui": {
         "page": "options/options.html",
         "open_in_tab": true
     },
     "background": {
-        "service_worker": "background/background_service.js"
+        "service_worker": "background/background_service.js",
+        "scripts": [ "background/background_service.js" ]
     },
     "content_scripts": [
         {
             "matches": [
                 "<all_urls>"
@@ -159,11 +158,10 @@
         "clipboardWrite",
         "contextMenus",
         "cookies",
         "nativeMessaging",
         "notifications",
-        "offscreen",
         "storage",
         "tabs",
         "webNavigation",
         "webRequest",
         "webRequestAuthProvider",
@@ -178,10 +176,7 @@
     "host_permissions": [
         "<all_urls>",
         "https://*/*",
         "http://*/*"
     ],
-    "storage": {
-        "managed_schema": "managed_storage.json"
-    },
     "default_locale": "en"
 }

becknik avatar Jul 05 '25 11:07 becknik

Just realized that the debugging should work without the temporary loading...

So, having created a breakpoint on l.125, I could inspect the following things. https://github.com/keepassxreboot/keepassxc-browser/blob/bfbb317445d85955fdc951734f4d102177c44b79/keepassxc-browser/background/event.js#L124-L129

  • keepass.associated.hash is null
  • The method is called after the credential entry pop-up is displayed initially, disappeared again and the new db unlock pop-up appears (the calling method has the request.action set to "get_connected_database" - so it doesn't really matter when I understand correctly?

Here's the keepass variable content from the breakpoint:

addCredentials: async addCredentials(tab, args)​
associate: async associate(tab)​
associated: {…}
​​
hash: null
​​
value: false
​​
<prototype>: {…}
​
cacheTimeout: 30000
​
changePublicKeys: async changePublicKeys(tab, enableTimeout, connectionTimeout)​
checkDatabaseHash: async checkDatabaseHash(tab)​
checkForNewKeePassXCVersion: async checkForNewKeePassXCVersion()​
clearErrorMessage: clearErrorMessage(tab)
​
clientID: "3yKXHmhMiH8PadrarmQuNJ7pg+QPn7EB"
​
compareMultipleVersions: compareMultipleVersions(versions, current, canBeEqual)​
createNewGroup: async createNewGroup(tab, args)
​
currentKeePassXC: "2.7.10"
​
databaseHash: ""
​
deleteKey: deleteKey(hash)​
disableAutomaticReconnect: disableAutomaticReconnect()​
enableAutomaticReconnect: async enableAutomaticReconnect()​
generateNewKeyPair: generateNewKeyPair()​
generatePassword: async generatePassword(tab)​
getCryptoKey: getCryptoKey()​
getCryptoKeys: getCryptoKeys()​
getDatabaseGroups: async getDatabaseGroups(tab)​
getDatabaseHash: async getDatabaseHash(tab, args)​
getErrorMessage: async getErrorMessage(tab, errorCode)​
getTotp: async getTotp(tab, args)​
handleError: handleError(tab, errorCode, errorMessage)​
isAssociated: isAssociated()​
isConfigured: async isConfigured()
​
isConnected: true
​
isDatabaseClosed: true
​
isEncryptionKeyUnrecognized: false
​
isKeePassXCAvailable: true
​
keePassXCUpdateAvailable: async keePassXCUpdateAvailable()​
keyPair: {…}
​​
publicKey: Uint8Array(32)
​​
secretKey: Uint8Array(32)
​​
<prototype>: {…}
​
keyRing: {…}
​​
28846382b904779ac41120079de4a1a2dd92c4aa48080ed68a19ff6cb20da048: {…}
​​
<prototype>: {…}
​
latestKeePassXC: {…}
​​
lastChecked: 1751714808846
​​
version: "2.7.10"
​​
<prototype>: {…}
​
latestVersionUrl: "https://api.github.com/repos/keepassxreboot/keepassxc/releases/latest"
​
lockDatabase: async lockDatabase(tab)​
migrateKeyRing: migrateKeyRing()​
passkeysGet: async passkeysGet(tab, args)​
passkeysRegister: async passkeysRegister(tab, args)
​
previousDatabaseHash: ""
​
reconnect: async reconnect(tab, connectionTimeout)
​
reconnectLoop: null
​
requestAutotype: async requestAutotype(tab, args)
​
requiredKeePassXC: "2.3.1"
​
retrieveCredentials: async retrieveCredentials(tab, args)​
saveKey: saveKey(hash, id, key)​
serverPublicKey: Uint8Array(32)
​
setCryptoKey: setCryptoKey(id, key)​
setcurrentKeePassXCVersion: setcurrentKeePassXCVersion(version)​
testAssociation: async testAssociation(tab, args)​
updateCredentials: async updateCredentials(tab, args)​
updateDatabase: async updateDatabase()​
updateDatabaseHash: updateDatabaseHash(oldHash, newHash)​
updateDatabaseHashToContent: async updateDatabaseHashToContent()​
updateLastUsed: updateLastUsed(hash)​
updatePopup: updatePopup()

becknik avatar Jul 05 '25 11:07 becknik

For me the hash value is never null when running a normal Firefox build.

  1. If I click the Username Icon and open a database that has not been connected to the extension, I get the error "Current database is not connected".
  2. If it's connected but no credentials are found, I get the error "No logins found".
  3. If it's connected and credentials are found, everything is working normally.

It's still unclear to me why your setup of Librewolf behaves different.

varjolintu avatar Jul 05 '25 12:07 varjolintu

Does this still happen?

varjolintu avatar Dec 04 '25 19:12 varjolintu

Yes, it still does. I just did further debugging since a break point on the previously mentioned line doesn't yield any break and think I narrowed the issue down to the native connector not working as expected:

https://github.com/keepassxreboot/keepassxc-browser/blob/fdbd077852386781cee95e19af501b3daeac4e9e/keepassxc-browser/background/client.js#L170

The get-databasehash action seems to always "Database not opened". Might be a rare NixOS/ home-manager related issue? Do you have any idea why that might be caused?

becknik avatar Dec 07 '25 23:12 becknik

The get-databasehash action seems to always "Database not opened". Might be a rare NixOS/ home-manager related issue? Do you have any idea why that might be caused?

No, not really. It's the first time I've seen something like this. strace could give some more details about the transferred messages: sudo strace -f -p $(pgrep librewolf) 2>&1 | grep keepass

varjolintu avatar Dec 08 '25 04:12 varjolintu