detached dfa0012

fix(cef): use XDG config dir for user data

commit
dfa0012d18960c4dc46531ecbb2fd03850863739
author
brice · · 2026-04-09 04:26 UTC
parent
3b3765d
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +34 -2
M internal/infrastructure/cef/engine_init.go +7 -1
@@ -94,7 +94,13 @@ func prepareCEFSettings(cfg config.CEFEngineConfig, logger *zerolog.Logger) pure
9494 }
9595
9696 func defaultCEFUserDataDir() string {
97- return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))
97+ // Use Dumber's XDG helpers to get the config directory
98+ dirs, err := config.GetXDGDirs()
99+ if err != nil {
100+ // Fallback to HOME-based path if XDG resolution fails
101+ return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))
102+ }
103+ return filepath.Join(dirs.ConfigHome, "cef_user_data")
98104 }
99105
100106 // initializeCEF calls cef_initialize with the App to register custom schemes
@@ -94,7 +94,13 @@ func prepareCEFSettings(cfg config.CEFEngineConfig, logger *zerolog.Logger) pure
94 }94 }
95 95
96 func defaultCEFUserDataDir() string {96 func defaultCEFUserDataDir() string {
97- return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))97+ // Use Dumber's XDG helpers to get the config directory
98+ dirs, err := config.GetXDGDirs()
99+ if err != nil {
100+ // Fallback to HOME-based path if XDG resolution fails
101+ return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))
102+ }
103+ return filepath.Join(dirs.ConfigHome, "cef_user_data")
98 }104 }
99 105
100 // initializeCEF calls cef_initialize with the App to register custom schemes106 // initializeCEF calls cef_initialize with the App to register custom schemes
M internal/infrastructure/cef/engine_init_test.go +27 -1
@@ -1,6 +1,7 @@
11 package cef
22
33 import (
4+ "os"
45 "path/filepath"
56 "testing"
67
@@ -30,11 +31,36 @@ func TestPrepareCEFInitTraceFile_EnabledViaEnv(t *testing.T) {
3031 }
3132
3233 func TestPrepareCEFSettings_SetsRootCachePath(t *testing.T) {
34+ // Test production mode: should use XDG config home
3335 homeDir := filepath.Join(t.TempDir(), "home")
3436 t.Setenv("HOME", homeDir)
37+ t.Setenv("ENV", "")
3538
3639 logger := zerolog.Nop()
3740 settings := prepareCEFSettings(config.CEFEngineConfig{}, &logger)
3841
39- require.Equal(t, filepath.Join(homeDir, ".config", "cef_user_data"), settings.RootCachePath)
42+ // Should use XDG config home (~/.config/dumber/cef_user_data in prod)
43+ require.Equal(t, filepath.Join(homeDir, ".config", "dumber", "cef_user_data"), settings.RootCachePath)
44+}
45+
46+func TestPrepareCEFSettings_RootCachePath_DevMode(t *testing.T) {
47+ // Create a temp directory and change into it for the test
48+ tempDir := t.TempDir()
49+ originalDir, err := os.Getwd()
50+ require.NoError(t, err)
51+ defer func() {
52+ _ = os.Chdir(originalDir)
53+ }()
54+
55+ err = os.Chdir(tempDir)
56+ require.NoError(t, err)
57+
58+ // Set ENV=dev to trigger dev mode
59+ t.Setenv("ENV", "dev")
60+
61+ logger := zerolog.Nop()
62+ settings := prepareCEFSettings(config.CEFEngineConfig{}, &logger)
63+
64+ // In dev mode, should resolve under .dev/dumber/cef_user_data
65+ require.Equal(t, filepath.Join(tempDir, ".dev", "dumber", "cef_user_data"), settings.RootCachePath)
4066 }
@@ -1,6 +1,7 @@
1 package cef1 package cef
2 2
3 import (3 import (
4+ "os"
4 "path/filepath"5 "path/filepath"
5 "testing"6 "testing"
6 7
@@ -30,11 +31,36 @@ func TestPrepareCEFInitTraceFile_EnabledViaEnv(t *testing.T) {
30 }31 }
31 32
32 func TestPrepareCEFSettings_SetsRootCachePath(t *testing.T) {33 func TestPrepareCEFSettings_SetsRootCachePath(t *testing.T) {
34+ // Test production mode: should use XDG config home
33 homeDir := filepath.Join(t.TempDir(), "home")35 homeDir := filepath.Join(t.TempDir(), "home")
34 t.Setenv("HOME", homeDir)36 t.Setenv("HOME", homeDir)
37+ t.Setenv("ENV", "")
35 38
36 logger := zerolog.Nop()39 logger := zerolog.Nop()
37 settings := prepareCEFSettings(config.CEFEngineConfig{}, &logger)40 settings := prepareCEFSettings(config.CEFEngineConfig{}, &logger)
38 41
39- require.Equal(t, filepath.Join(homeDir, ".config", "cef_user_data"), settings.RootCachePath)42+ // Should use XDG config home (~/.config/dumber/cef_user_data in prod)
43+ require.Equal(t, filepath.Join(homeDir, ".config", "dumber", "cef_user_data"), settings.RootCachePath)
44+}
45+
46+func TestPrepareCEFSettings_RootCachePath_DevMode(t *testing.T) {
47+ // Create a temp directory and change into it for the test
48+ tempDir := t.TempDir()
49+ originalDir, err := os.Getwd()
50+ require.NoError(t, err)
51+ defer func() {
52+ _ = os.Chdir(originalDir)
53+ }()
54+
55+ err = os.Chdir(tempDir)
56+ require.NoError(t, err)
57+
58+ // Set ENV=dev to trigger dev mode
59+ t.Setenv("ENV", "dev")
60+
61+ logger := zerolog.Nop()
62+ settings := prepareCEFSettings(config.CEFEngineConfig{}, &logger)
63+
64+ // In dev mode, should resolve under .dev/dumber/cef_user_data
65+ require.Equal(t, filepath.Join(tempDir, ".dev", "dumber", "cef_user_data"), settings.RootCachePath)
40 }66 }

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close