refactor(cef): fail fast on missing config builders
- commit
- 51da5d55481e8c65764baa836175443fedeeff1f
- author
- brice · · 2026-04-11 13:10 UTC
- parent
- d24a1f0
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
3 files · +29 -3
M internal/infrastructure/cef/engine_init.go +5 -1
| @@ -207,13 +207,17 @@ func wireEngine( | |||
| 207 | 207 | eng.transcoderState = transcoderState | |
| 208 | 208 | ||
| 209 | 209 | messageRouter := NewMessageRouter(ctx) | |
| 210 | - | schemeHandler := newDumbSchemeHandler( | |
| 210 | + | schemeHandler, err := newDumbSchemeHandler( | |
| 211 | 211 | ctx, | |
| 212 | 212 | messageRouter, | |
| 213 | 213 | mediaTranscoder, | |
| 214 | 214 | currentConfigPayload, | |
| 215 | 215 | defaultConfigPayload, | |
| 216 | 216 | ) | |
| 217 | + | if err != nil { | |
| 218 | + | purecef.Shutdown() | |
| 219 | + | return nil, err | |
| 220 | + | } | |
| 217 | 221 | schemeHandler.setAssets(assets.WebUIAssets) | |
| 218 | 222 | ||
| 219 | 223 | // Bridge clipboard writes from CEF JS → GDK system clipboard. | |
| @@ -207,13 +207,17 @@ func wireEngine( | |||||
| 207 | eng.transcoderState = transcoderState | 207 | eng.transcoderState = transcoderState | ||
| 208 | 208 | ||||
| 209 | messageRouter := NewMessageRouter(ctx) | 209 | messageRouter := NewMessageRouter(ctx) | ||
| 210 | - | schemeHandler := newDumbSchemeHandler( | 210 | + | schemeHandler, err := newDumbSchemeHandler( |
| 211 | ctx, | 211 | ctx, | ||
| 212 | messageRouter, | 212 | messageRouter, | ||
| 213 | mediaTranscoder, | 213 | mediaTranscoder, | ||
| 214 | currentConfigPayload, | 214 | currentConfigPayload, | ||
| 215 | defaultConfigPayload, | 215 | defaultConfigPayload, | ||
| 216 | ) | 216 | ) | ||
| 217 | + | if err != nil { | |||
| 218 | + | purecef.Shutdown() | |||
| 219 | + | return nil, err | |||
| 220 | + | } | |||
| 217 | schemeHandler.setAssets(assets.WebUIAssets) | 221 | schemeHandler.setAssets(assets.WebUIAssets) | ||
| 218 | 222 | ||||
| 219 | // Bridge clipboard writes from CEF JS → GDK system clipboard. | 223 | // Bridge clipboard writes from CEF JS → GDK system clipboard. | ||
M internal/infrastructure/cef/scheme_handler.go +9 -2
| @@ -68,7 +68,14 @@ func newDumbSchemeHandler( | |||
| 68 | 68 | transcoder port.MediaTranscoder, | |
| 69 | 69 | currentConfigPayload func() ([]byte, error), | |
| 70 | 70 | defaultConfigPayload func() ([]byte, error), | |
| 71 | - | ) *dumbSchemeHandler { | |
| 71 | + | ) (*dumbSchemeHandler, error) { | |
| 72 | + | if currentConfigPayload == nil { | |
| 73 | + | return nil, fmt.Errorf("current config payload builder not configured") | |
| 74 | + | } | |
| 75 | + | if defaultConfigPayload == nil { | |
| 76 | + | return nil, fmt.Errorf("default config payload builder not configured") | |
| 77 | + | } | |
| 78 | + | ||
| 72 | 79 | log := logging.FromContext(ctx) | |
| 73 | 80 | return &dumbSchemeHandler{ | |
| 74 | 81 | ctx: ctx, | |
| @@ -78,7 +85,7 @@ func newDumbSchemeHandler( | |||
| 78 | 85 | logger: log.With().Str("component", "scheme-handler").Logger(), | |
| 79 | 86 | currentConfigPayload: currentConfigPayload, | |
| 80 | 87 | defaultConfigPayload: defaultConfigPayload, | |
| 81 | - | } | |
| 88 | + | }, nil | |
| 82 | 89 | } | |
| 83 | 90 | ||
| 84 | 91 | // setAssets sets the embedded filesystem containing webui assets. | |
| @@ -68,7 +68,14 @@ func newDumbSchemeHandler( | |||||
| 68 | transcoder port.MediaTranscoder, | 68 | transcoder port.MediaTranscoder, | ||
| 69 | currentConfigPayload func() ([]byte, error), | 69 | currentConfigPayload func() ([]byte, error), | ||
| 70 | defaultConfigPayload func() ([]byte, error), | 70 | defaultConfigPayload func() ([]byte, error), | ||
| 71 | - | ) *dumbSchemeHandler { | 71 | + | ) (*dumbSchemeHandler, error) { |
| 72 | + | if currentConfigPayload == nil { | |||
| 73 | + | return nil, fmt.Errorf("current config payload builder not configured") | |||
| 74 | + | } | |||
| 75 | + | if defaultConfigPayload == nil { | |||
| 76 | + | return nil, fmt.Errorf("default config payload builder not configured") | |||
| 77 | + | } | |||
| 78 | + | ||||
| 72 | log := logging.FromContext(ctx) | 79 | log := logging.FromContext(ctx) | ||
| 73 | return &dumbSchemeHandler{ | 80 | return &dumbSchemeHandler{ | ||
| 74 | ctx: ctx, | 81 | ctx: ctx, | ||
| @@ -78,7 +85,7 @@ func newDumbSchemeHandler( | |||||
| 78 | logger: log.With().Str("component", "scheme-handler").Logger(), | 85 | logger: log.With().Str("component", "scheme-handler").Logger(), | ||
| 79 | currentConfigPayload: currentConfigPayload, | 86 | currentConfigPayload: currentConfigPayload, | ||
| 80 | defaultConfigPayload: defaultConfigPayload, | 87 | defaultConfigPayload: defaultConfigPayload, | ||
| 81 | - | } | 88 | + | }, nil |
| 82 | } | 89 | } | ||
| 83 | 90 | ||||
| 84 | // setAssets sets the embedded filesystem containing webui assets. | 91 | // setAssets sets the embedded filesystem containing webui assets. | ||
M internal/infrastructure/cef/scheme_handler_test.go +15 -0
| @@ -1,6 +1,7 @@ | |||
| 1 | 1 | package cef | |
| 2 | 2 | ||
| 3 | 3 | import ( | |
| 4 | + | "context" | |
| 4 | 5 | "errors" | |
| 5 | 6 | "testing" | |
| 6 | 7 | ||
| @@ -28,3 +29,17 @@ func TestResolveConfigPayload_NilBuilderFails(t *testing.T) { | |||
| 28 | 29 | require.Error(t, err) | |
| 29 | 30 | require.Contains(t, err.Error(), "config payload builder") | |
| 30 | 31 | } | |
| 32 | + | ||
| 33 | + | func TestNewDumbSchemeHandler_NilCurrentConfigPayloadFails(t *testing.T) { | |
| 34 | + | h, err := newDumbSchemeHandler(context.Background(), nil, nil, nil, func() ([]byte, error) { return nil, nil }) | |
| 35 | + | require.Error(t, err) | |
| 36 | + | require.Nil(t, h) | |
| 37 | + | require.Contains(t, err.Error(), "current config payload builder") | |
| 38 | + | } | |
| 39 | + | ||
| 40 | + | func TestNewDumbSchemeHandler_NilDefaultConfigPayloadFails(t *testing.T) { | |
| 41 | + | h, err := newDumbSchemeHandler(context.Background(), nil, nil, func() ([]byte, error) { return nil, nil }, nil) | |
| 42 | + | require.Error(t, err) | |
| 43 | + | require.Nil(t, h) | |
| 44 | + | require.Contains(t, err.Error(), "default config payload builder") | |
| 45 | + | } | |
| @@ -1,6 +1,7 @@ | |||||
| 1 | package cef | 1 | package cef | ||
| 2 | 2 | ||||
| 3 | import ( | 3 | import ( | ||
| 4 | + | "context" | |||
| 4 | "errors" | 5 | "errors" | ||
| 5 | "testing" | 6 | "testing" | ||
| 6 | 7 | ||||
| @@ -28,3 +29,17 @@ func TestResolveConfigPayload_NilBuilderFails(t *testing.T) { | |||||
| 28 | require.Error(t, err) | 29 | require.Error(t, err) | ||
| 29 | require.Contains(t, err.Error(), "config payload builder") | 30 | require.Contains(t, err.Error(), "config payload builder") | ||
| 30 | } | 31 | } | ||
| 32 | + | ||||
| 33 | + | func TestNewDumbSchemeHandler_NilCurrentConfigPayloadFails(t *testing.T) { | |||
| 34 | + | h, err := newDumbSchemeHandler(context.Background(), nil, nil, nil, func() ([]byte, error) { return nil, nil }) | |||
| 35 | + | require.Error(t, err) | |||
| 36 | + | require.Nil(t, h) | |||
| 37 | + | require.Contains(t, err.Error(), "current config payload builder") | |||
| 38 | + | } | |||
| 39 | + | ||||
| 40 | + | func TestNewDumbSchemeHandler_NilDefaultConfigPayloadFails(t *testing.T) { | |||
| 41 | + | h, err := newDumbSchemeHandler(context.Background(), nil, nil, func() ([]byte, error) { return nil, nil }, nil) | |||
| 42 | + | require.Error(t, err) | |||
| 43 | + | require.Nil(t, h) | |||
| 44 | + | require.Contains(t, err.Error(), "default config payload builder") | |||
| 45 | + | } | |||