@@ -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
241246type startURLParsed struct {
0 commit comments