fix(browser): detect Comet in its Windows vendor directory (#25983)

Co-authored-by: Masaki Yamamoto <nnasakick@gmail.com>
This commit is contained in:
Neil
2026-10-06 15:44:38 -07:00
committed by GitHub
co-authored by Masaki Yamamoto
parent fa42e57659
commit add534475d
2 changed files with 61 additions and 1 deletions
@@ -69,7 +69,7 @@ export const CHROMIUM_BROWSERS: ChromiumBrowserDef[] = [
keychainService: 'Comet Safe Storage',
keychainAccount: 'Comet',
macRoot: 'Comet',
winRoot: 'Comet/User Data'
winRoot: 'Perplexity/Comet/User Data'
// linuxRoot intentionally omitted — Comet does not ship a Linux build as of 2026-05-15
},
{
@@ -222,6 +222,66 @@ describe('detectInstalledBrowsers — Comet', () => {
})
})
describe('detectInstalledBrowsers — Comet on Windows', () => {
const originalPlatform = process.platform
const originalLocalAppData = process.env.LOCALAPPDATA
const localAppData = 'C:\\Users\\test\\AppData\\Local'
const cometRoot = `${slashPath(localAppData)}/Perplexity/Comet/User Data`
beforeEach(() => {
vi.resetModules()
Object.defineProperty(process, 'platform', { value: 'win32' })
process.env.LOCALAPPDATA = localAppData
})
afterEach(() => {
Object.defineProperty(process, 'platform', { value: originalPlatform })
if (originalLocalAppData === undefined) {
delete process.env.LOCALAPPDATA
} else {
process.env.LOCALAPPDATA = originalLocalAppData
}
vi.restoreAllMocks()
})
function mockCometInstallAt(rootPath: string): void {
vi.doMock('node:fs', async () => {
const actual = await vi.importActual<typeof fsModule>('node:fs')
return {
...actual,
existsSync: (p: string) =>
slashPath(p) === `${rootPath}/Local State` ||
slashPath(p) === `${rootPath}/Default/Network/Cookies`,
readFileSync: (p: string) => {
if (typeof p === 'string' && slashPath(p) === `${rootPath}/Local State`) {
return JSON.stringify({ profile: { info_cache: { Default: { name: 'Default' } } } })
}
throw new Error(`Unexpected fixture read: ${p}`)
}
}
})
}
it('detects Comet under the Perplexity vendor directory', async () => {
mockCometInstallAt(cometRoot)
const { detectInstalledBrowsers } = await import('./browser-cookie-import')
const comet = detectInstalledBrowsers().find((b) => b.family === 'comet')
expect(comet).toBeDefined()
expect(slashPath(comet?.cookiesPath ?? '')).toBe(`${cometRoot}/Default/Network/Cookies`)
})
it('does not detect a Comet data directory sitting directly under LOCALAPPDATA', async () => {
mockCometInstallAt(`${slashPath(localAppData)}/Comet/User Data`)
const { detectInstalledBrowsers } = await import('./browser-cookie-import')
expect(detectInstalledBrowsers().find((b) => b.family === 'comet')).toBeUndefined()
})
})
describe('BROWSER_FAMILY_LABELS — Comet', () => {
it('maps the comet family key to the user-facing label "Comet"', () => {
expect(BROWSER_FAMILY_LABELS.comet).toBe('Comet')