Skip to content

Commit e7753a2

Browse files
committed
Simplify configure path completion
1 parent 147da27 commit e7753a2

1 file changed

Lines changed: 46 additions & 41 deletions

File tree

server/cmd/api/api/chromium_configure.go

Lines changed: 46 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -81,30 +81,18 @@ func (s *ApiService) ChromiumConfigure(ctx context.Context, request oapi.Chromiu
8181
defer s.chromiumConfigMu.Unlock()
8282

8383
var configureResp oapi.ChromiumConfigureResponseObject
84-
var stoppedRecordings []stoppedRecordingInfo
8584
switch chromiumConfigureModeFor(st) {
8685
case chromiumConfigureModeLive:
87-
configureResp = s.chromiumConfigureLive(ctx, st)
86+
configureResp = s.chromiumConfigureLive(ctx, st, spec)
8887
case chromiumConfigureModeRestart:
89-
configureResp, stoppedRecordings = s.chromiumConfigureRestart(ctx, st, spec)
88+
configureResp = s.chromiumConfigureRestart(ctx, st, spec)
9089
default:
9190
return cfg500Configure("unhandled configure mode"), nil
9291
}
93-
if len(stoppedRecordings) > 0 {
94-
defer func() {
95-
go s.startNewRecordingSegments(context.WithoutCancel(ctx), stoppedRecordings)
96-
}()
97-
}
9892
if configureResp != nil {
9993
return configureResp, nil
10094
}
10195

102-
if spec.needsNav {
103-
if err := chromiumDoNavigate(ctx, s, spec); err != nil {
104-
logger.FromContext(ctx).Warn("start_url dispatch failed", "error", err)
105-
}
106-
}
107-
10896
logger.FromContext(ctx).Info("chromium configure finished", "elapsed", time.Since(start).String())
10997
return oapi.ChromiumConfigure200JSONResponse{Ok: true}, nil
11098
}
@@ -126,22 +114,34 @@ func chromiumConfigureModeFor(st *chromiumConfigureState) chromiumConfigureMode
126114
return chromiumConfigureModeLive
127115
}
128116

129-
func (s *ApiService) chromiumConfigureLive(ctx context.Context, st *chromiumConfigureState) oapi.ChromiumConfigureResponseObject {
130-
if st.displayJSON == nil || strings.TrimSpace(*st.displayJSON) == "" {
131-
return nil
117+
func (s *ApiService) chromiumConfigureLive(ctx context.Context, st *chromiumConfigureState, spec startURLParsed) oapi.ChromiumConfigureResponseObject {
118+
if st.displayJSON != nil && strings.TrimSpace(*st.displayJSON) != "" {
119+
displayPlan, displayResp := chromiumPrepareDisplay(ctx, s, st.displayJSON)
120+
if displayResp != nil {
121+
return displayResp
122+
}
123+
if displayPlan != nil {
124+
if resp := chromiumRunPatchDisplay(ctx, s, displayPlan.body); resp != nil {
125+
return resp
126+
}
127+
}
132128
}
133129

134-
displayPlan, displayResp := chromiumPrepareDisplay(ctx, s, st.displayJSON)
135-
if displayResp != nil {
136-
return displayResp
130+
chromiumConfigureNavigate(ctx, s, spec)
131+
return nil
132+
}
133+
134+
func chromiumConfigureNavigate(ctx context.Context, s *ApiService, spec startURLParsed) {
135+
if !spec.needsNav {
136+
return
137137
}
138-
if displayPlan == nil {
139-
return nil
138+
if err := chromiumDoNavigate(ctx, s, spec); err != nil {
139+
logger.FromContext(ctx).Warn("start_url dispatch failed", "error", err)
140140
}
141-
return chromiumRunPatchDisplay(ctx, s, displayPlan.body)
142141
}
143142

144-
func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumConfigureState, spec startURLParsed) (resp oapi.ChromiumConfigureResponseObject, stoppedRecordings []stoppedRecordingInfo) {
143+
func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumConfigureState, spec startURLParsed) (resp oapi.ChromiumConfigureResponseObject) {
144+
var stoppedRecordings []stoppedRecordingInfo
145145
chromiumStopped := false
146146
restartAfterStop := func() error {
147147
if !chromiumStopped {
@@ -154,8 +154,8 @@ func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumC
154154
return nil
155155
}
156156
defer func() {
157-
// Error paths restart recordings before Chromium recovery. Successful paths
158-
// return them so the caller waits until after navigation.
157+
// Error paths restart recordings before Chromium recovery. chromiumStopped
158+
// also covers a panic before the explicit restart below.
159159
if (resp != nil || chromiumStopped) && len(stoppedRecordings) > 0 {
160160
go s.startNewRecordingSegments(context.WithoutCancel(ctx), stoppedRecordings)
161161
stoppedRecordings = nil
@@ -171,47 +171,47 @@ func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumC
171171

172172
logger.FromContext(ctx).Info("chromium configure (stop/start path)")
173173
if err := s.stopChromium(ctx); err != nil {
174-
return cfg500ConfigureStep(chromiumConfigureStepStop, err.Error()), stoppedRecordings
174+
return cfg500ConfigureStep(chromiumConfigureStepStop, err.Error())
175175
}
176176
chromiumStopped = true
177177

178178
policyOverrides, err := chromiumValidatePolicies(st.chromePoliciesJSON)
179179
if err != nil {
180-
return cfgResponseFromStepError(chromiumConfigureStepPolicies, err), stoppedRecordings
180+
return cfgResponseFromStepError(chromiumConfigureStepPolicies, err)
181181
}
182182
if err := chromiumApplyPolicies(ctx, s, policyOverrides); err != nil {
183-
return cfgResponseFromStepError(chromiumConfigureStepPolicies, err), stoppedRecordings
183+
return cfgResponseFromStepError(chromiumConfigureStepPolicies, err)
184184
}
185185

186186
if reqMsgs, ierr := chromiumApplyExtensions(ctx, s, st.extItems); reqMsgs != "" {
187-
return cfg400(fmt.Sprintf("%s: %s", chromiumConfigureStepExtensions, reqMsgs)), stoppedRecordings
187+
return cfg400(fmt.Sprintf("%s: %s", chromiumConfigureStepExtensions, reqMsgs))
188188
} else if ierr != nil {
189-
return cfg500ConfigureStep(chromiumConfigureStepExtensions, ierr.Error()), stoppedRecordings
189+
return cfg500ConfigureStep(chromiumConfigureStepExtensions, ierr.Error())
190190
}
191191

192192
if st.displayJSON != nil && strings.TrimSpace(*st.displayJSON) != "" {
193193
displayPlan, displayResp := chromiumPrepareDisplay(ctx, s, st.displayJSON)
194194
if displayResp != nil {
195-
return displayResp, stoppedRecordings
195+
return displayResp
196196
}
197197
if displayPlan != nil {
198198
stopped, stopErr := s.stopActiveRecordings(ctx)
199199
if stopErr != nil {
200-
return cfg500ConfigureStep(chromiumConfigureStepDisplay, fmt.Sprintf("failed to stop recordings: %v", stopErr)), stoppedRecordings
200+
return cfg500ConfigureStep(chromiumConfigureStepDisplay, fmt.Sprintf("failed to stop recordings: %v", stopErr))
201201
}
202202
stoppedRecordings = stopped
203203
if rr := chromiumDisplayApplyWhileStopped(ctx, s, displayPlan); rr != nil {
204-
return rr, stoppedRecordings
204+
return rr
205205
}
206206
}
207207
}
208208

209209
flagsPlan, err := chromiumValidateFlags(st.chromiumFlagsJSON)
210210
if err != nil {
211-
return cfgResponseFromStepError(chromiumConfigureStepFlags, err), stoppedRecordings
211+
return cfgResponseFromStepError(chromiumConfigureStepFlags, err)
212212
}
213213
if err := chromiumMergeFlags(ctx, s, flagsPlan); err != nil {
214-
return cfgResponseFromStepError(chromiumConfigureStepFlags, err), stoppedRecordings
214+
return cfgResponseFromStepError(chromiumConfigureStepFlags, err)
215215
}
216216

217217
if st.hasProfile {
@@ -220,22 +220,27 @@ func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumC
220220
defer cleanupProfile()
221221
}
222222
if err != nil {
223-
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error()), stoppedRecordings
223+
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error())
224224
}
225225
if spec.needsNav {
226226
if err := stripProfileSessionRestore(preparedProfile); err != nil {
227-
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error()), stoppedRecordings
227+
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error())
228228
}
229229
}
230230
if err := chromiumInstallPreparedProfile(preparedProfile); err != nil {
231-
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error()), stoppedRecordings
231+
return cfg500ConfigureStep(chromiumConfigureStepProfile, err.Error())
232232
}
233233
}
234234

235235
if err := restartAfterStop(); err != nil {
236-
return cfg500ConfigureStep(chromiumConfigureStepStart, err.Error()), stoppedRecordings
236+
return cfg500ConfigureStep(chromiumConfigureStepStart, err.Error())
237237
}
238-
return nil, stoppedRecordings
238+
chromiumConfigureNavigate(ctx, s, spec)
239+
if len(stoppedRecordings) > 0 {
240+
go s.startNewRecordingSegments(context.WithoutCancel(ctx), stoppedRecordings)
241+
stoppedRecordings = nil
242+
}
243+
return nil
239244
}
240245

241246
type startURLParsed struct {

0 commit comments

Comments
 (0)