a9f8cf99d108
preserve Chrome opt-in while defaulting Firefox interception on (v5.3.9)
- time
- 2026-10-08 17:42 UTC · 2 weeks ago
- machine
- Junes-MacBook-Pro.local
- agent
- gpt-6
- session
- reliable firefox passkey sign-in
- parent
- 52a1b1bfa47f
↓ peach-browser-a9f8cf99.tar.gzatlas at this save
files changed5 files
manifest.firefox.json+1 −1manifest.json+1 −1package.json+1 −1src/background/passkey-chrome-ceremony.test.ts+10 −0src/background/passkey.ts+2 −2manifest.firefox.json+1 −1
@@ -1,7 +1,7 @@11 {22 "manifest_version": 3,33 "name": "Peach Password Manager",4- "version": "5.3.8",4+ "version": "5.3.9",55 "description": "Zero-knowledge password manager",66 "browser_specific_settings": {77 "gecko": {manifest.json+1 −1
@@ -2,7 +2,7 @@22 "manifest_version": 3,33 "minimum_chrome_version": "116",44 "name": "Peach Password Manager",5- "version": "5.3.8",5+ "version": "5.3.9",66 "description": "Zero-knowledge password manager",77 "action": {88 "default_popup": "src/popup/index.html",package.json+1 −1
@@ -1,6 +1,6 @@11 {22 "name": "peach",3- "version": "5.3.8",3+ "version": "5.3.9",44 "description": "Zero-knowledge password manager",55 "license": "GPL-3.0-only",66 "type": "module",src/background/passkey-chrome-ceremony.test.ts+10 −0
@@ -156,6 +156,16 @@156156 vi.unstubAllGlobals();157157 });158158 159+ it("leaves Chrome native passkeys available when interception has no saved preference", async () => {160+ vi.resetModules();161+ storage.peach_settings = { breachMonitoring: false };162+ vi.mocked(chrome.webAuthenticationProxy.attach).mockClear();163+ const passkey = await import("./passkey");164+ await passkey.setupPasskeyProxy();165+ expect(chrome.webAuthenticationProxy.attach).not.toHaveBeenCalled();166+ await expect(passkey.getPasskeyProviderState()).resolves.toMatchObject({ enabled: false, attached: false });167+ });168+159169 function fireCreate(options: object, requestId = 100): void {160170 proxyListeners.create!({161171 requestId,src/background/passkey.ts+2 −2
@@ -295,7 +295,7 @@295295 export async function getPasskeyProviderState(): Promise<PasskeyProviderState> {296296 const settings = await vault.ensureSettingsLoaded();297297 const supported = isPasskeySupported();298- const enabled = settings.passkeyProviderEnabled !== false;298+ const enabled = settings.passkeyProviderEnabled ?? (detectSharedBrowser() === "firefox");299299 return {300300 supported,301301 enabled,@@ -377,7 +377,7 @@377377 378378 async function refreshPasskeyProxy(): Promise<void> {379379 const settings = await vault.ensureSettingsLoaded();380- if (settings.passkeyProviderEnabled !== false) {380+ if (settings.passkeyProviderEnabled ?? (detectSharedBrowser() === "firefox")) {381381 await attachPasskeyProxy();382382 return;383383 }