detached d7aff0c

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

commit
d7aff0cc26bf482030f7e1875956334fce1a1182
author
brice · · 2026-04-14 08:41 UTC
parent
371af32
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
2 files · +11 -9
M internal/infrastructure/cef/engine_init.go +7 -7
@@ -144,16 +144,16 @@ func prepareCEFSettings(opts port.EngineOptions, cfg RuntimeConfig, logger *zero
144144 }
145145
146146 func defaultCEFUserDataDir() string {
147- // Use Dumber's XDG helpers to get the config directory
147+ // Keep CEF state under Dumber's XDG data directory like the rest of runtime data.
148148 dirs, err := config.GetXDGDirs()
149149 if err != nil {
150- // Fallback to HOME-based path if XDG resolution fails
151- return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))
152- }
153- if os.Getenv("ENV") == "dev" {
154- return filepath.Join(dirs.ConfigHome, "cef_user_data")
150+ dataHome := os.Getenv("XDG_DATA_HOME")
151+ if dataHome == "" {
152+ dataHome = filepath.Join(os.Getenv("HOME"), ".local", "share")
153+ }
154+ return filepath.Clean(filepath.Join(dataHome, "dumber", "cef_user_data"))
155155 }
156- return filepath.Join(filepath.Dir(dirs.ConfigHome), "cef_user_data")
156+ return filepath.Join(dirs.DataHome, "cef_user_data")
157157 }
158158
159159 // initializeCEF calls cef_initialize with the App to register custom schemes
@@ -144,16 +144,16 @@ func prepareCEFSettings(opts port.EngineOptions, cfg RuntimeConfig, logger *zero
144 }144 }
145 145
146 func defaultCEFUserDataDir() string {146 func defaultCEFUserDataDir() string {
147- // Use Dumber's XDG helpers to get the config directory147+ // Keep CEF state under Dumber's XDG data directory like the rest of runtime data.
148 dirs, err := config.GetXDGDirs()148 dirs, err := config.GetXDGDirs()
149 if err != nil {149 if err != nil {
150- // Fallback to HOME-based path if XDG resolution fails150+ dataHome := os.Getenv("XDG_DATA_HOME")
151- return filepath.Clean(filepath.Join(os.Getenv("HOME"), ".config", "cef_user_data"))151+ if dataHome == "" {
152- }152+ dataHome = filepath.Join(os.Getenv("HOME"), ".local", "share")
153- if os.Getenv("ENV") == "dev" {153+ }
154- return filepath.Join(dirs.ConfigHome, "cef_user_data")154+ return filepath.Clean(filepath.Join(dataHome, "dumber", "cef_user_data"))
155 }155 }
156- return filepath.Join(filepath.Dir(dirs.ConfigHome), "cef_user_data")156+ return filepath.Join(dirs.DataHome, "cef_user_data")
157 }157 }
158 158
159 // initializeCEF calls cef_initialize with the App to register custom schemes159 // initializeCEF calls cef_initialize with the App to register custom schemes
M internal/infrastructure/cef/engine_init_test.go +4 -2
@@ -61,16 +61,18 @@ func TestPrepareCEFInitTraceFile_EnabledViaEnv(t *testing.T) {
6161 require.FileExists(t, path)
6262 }
6363
64-func TestPrepareCEFSettings_RootCachePath_UsesLegacyCEFUserDataDir(t *testing.T) {
64+func TestPrepareCEFSettings_RootCachePath_UsesXDGDataDir(t *testing.T) {
6565 homeDir := filepath.Join(t.TempDir(), "home")
66+ dataHome := filepath.Join(homeDir, ".local", "share")
6667 t.Setenv("HOME", homeDir)
6768 t.Setenv("ENV", "")
69+ t.Setenv("XDG_DATA_HOME", dataHome)
6870
6971 logger := zerolog.Nop()
7072 settings, err := prepareCEFSettings(port.EngineOptions{}, RuntimeConfig{}, &logger)
7173 require.NoError(t, err)
7274
73- require.Equal(t, filepath.Join(homeDir, ".config", "cef_user_data"), settings.RootCachePath)
75+ require.Equal(t, filepath.Join(dataHome, "dumber", "cef_user_data"), settings.RootCachePath)
7476 }
7577
7678 func TestPrepareCEFSettings_RootCachePath_DevMode(t *testing.T) {
@@ -61,16 +61,18 @@ func TestPrepareCEFInitTraceFile_EnabledViaEnv(t *testing.T) {
61 require.FileExists(t, path)61 require.FileExists(t, path)
62 }62 }
63 63
64-func TestPrepareCEFSettings_RootCachePath_UsesLegacyCEFUserDataDir(t *testing.T) {64+func TestPrepareCEFSettings_RootCachePath_UsesXDGDataDir(t *testing.T) {
65 homeDir := filepath.Join(t.TempDir(), "home")65 homeDir := filepath.Join(t.TempDir(), "home")
66+ dataHome := filepath.Join(homeDir, ".local", "share")
66 t.Setenv("HOME", homeDir)67 t.Setenv("HOME", homeDir)
67 t.Setenv("ENV", "")68 t.Setenv("ENV", "")
69+ t.Setenv("XDG_DATA_HOME", dataHome)
68 70
69 logger := zerolog.Nop()71 logger := zerolog.Nop()
70 settings, err := prepareCEFSettings(port.EngineOptions{}, RuntimeConfig{}, &logger)72 settings, err := prepareCEFSettings(port.EngineOptions{}, RuntimeConfig{}, &logger)
71 require.NoError(t, err)73 require.NoError(t, err)
72 74
73- require.Equal(t, filepath.Join(homeDir, ".config", "cef_user_data"), settings.RootCachePath)75+ require.Equal(t, filepath.Join(dataHome, "dumber", "cef_user_data"), settings.RootCachePath)
74 }76 }
75 77
76 func TestPrepareCEFSettings_RootCachePath_DevMode(t *testing.T) {78 func TestPrepareCEFSettings_RootCachePath_DevMode(t *testing.T) {

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