Skip to content

Commit 8427e13

Browse files
committed
Verify mixed extension restart activation
1 parent 7c7d312 commit 8427e13

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

server/cmd/api/api/chromium_configure.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (s *ApiService) ChromiumConfigure(ctx context.Context, request oapi.Chromiu
109109
case chromiumConfigureModeRestart:
110110
configureResp = s.chromiumConfigureRestart(ctx, st, spec, func() (string, error) {
111111
return s.installExtensionZipItems(ctx, st.extItems)
112-
})
112+
}, nil)
113113
case chromiumConfigureModePreferCDPExtensions:
114114
configureResp = s.chromiumConfigurePreferCDPExtensions(ctx, st, spec, preparedExtensions)
115115
default:
@@ -188,7 +188,12 @@ func (s *ApiService) chromiumConfigurePreferCDPExtensions(ctx context.Context, s
188188
return reqMsg, err
189189
}
190190
if prepared.requiresRestart {
191-
return s.chromiumConfigureRestart(ctx, st, spec, commitExtensions)
191+
return s.chromiumConfigureRestart(ctx, st, spec, commitExtensions, func() oapi.ChromiumConfigureResponseObject {
192+
if err := s.verifyUnpackedExtensions(ctx, prepared.extensions); err != nil {
193+
return cfg500ConfigureStep(chromiumConfigureStepExtensions, err.Error())
194+
}
195+
return nil
196+
})
192197
}
193198

194199
// Configure keeps the default restart path's non-transactional install semantics.
@@ -209,18 +214,18 @@ func (s *ApiService) chromiumConfigurePreferCDPExtensions(ctx context.Context, s
209214

210215
// Extensions are already persisted. The fallback re-launches Chromium with
211216
// the merged flags and still applies any pending display change.
212-
if resp := s.chromiumConfigureRestart(ctx, st, spec, nil); resp != nil {
213-
return resp
214-
}
215-
if err := s.verifyUnpackedExtensions(ctx, prepared.extensions); err != nil {
216-
return cfg500ConfigureStep(chromiumConfigureStepExtensions, errors.Join(loadErr, err).Error())
217-
}
218-
return nil
217+
return s.chromiumConfigureRestart(ctx, st, spec, nil, func() oapi.ChromiumConfigureResponseObject {
218+
if err := s.verifyUnpackedExtensions(ctx, prepared.extensions); err != nil {
219+
return cfg500ConfigureStep(chromiumConfigureStepExtensions, errors.Join(loadErr, err).Error())
220+
}
221+
return nil
222+
})
219223
}
220224

221225
type chromiumConfigureExtensionInstaller func() (string, error)
226+
type chromiumConfigurePostRestartCheck func() oapi.ChromiumConfigureResponseObject
222227

223-
func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumConfigureState, spec startURLParsed, installExtensions chromiumConfigureExtensionInstaller) (resp oapi.ChromiumConfigureResponseObject) {
228+
func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumConfigureState, spec startURLParsed, installExtensions chromiumConfigureExtensionInstaller, postRestartCheck chromiumConfigurePostRestartCheck) (resp oapi.ChromiumConfigureResponseObject) {
224229
var stoppedRecordings []stoppedRecordingInfo
225230
chromiumStopped := false
226231
restartAfterStop := func() error {
@@ -319,6 +324,11 @@ func (s *ApiService) chromiumConfigureRestart(ctx context.Context, st *chromiumC
319324
if err := restartAfterStop(); err != nil {
320325
return cfg500ConfigureStep(chromiumConfigureStepStart, err.Error())
321326
}
327+
if postRestartCheck != nil {
328+
if resp := postRestartCheck(); resp != nil {
329+
return resp
330+
}
331+
}
322332
chromiumConfigureNavigate(ctx, s, spec)
323333
if len(stoppedRecordings) > 0 {
324334
go s.startNewRecordingSegments(context.WithoutCancel(ctx), stoppedRecordings)

server/e2e/e2e_chromium_configure_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,11 @@ func testChromiumConfigureExtensionLoadStrategies(t *testing.T, image string, te
212212
require.NoError(t, err)
213213
starts := chromiumConfigureStartCount(t, ctx, c)
214214
response := chromiumConfigureE2E(t, ctx, client, configureE2ERequest{
215-
params: preferCDPParams,
216-
extensions: []configureExtensionPart{{name: "configure-enterprise", zip: enterpriseZip}},
215+
params: preferCDPParams,
216+
extensions: []configureExtensionPart{
217+
{name: "configure-enterprise", zip: enterpriseZip},
218+
{name: "configure-enterprise-unpacked", zip: ordinaryZip},
219+
},
217220
})
218221
require.Equal(t, http.StatusOK, response.StatusCode(), "%s", response.Body)
219222
after, err := fetchBrowserWebSocketURL(ctx, c)
@@ -222,6 +225,7 @@ func testChromiumConfigureExtensionLoadStrategies(t *testing.T, image string, te
222225
require.Equal(t, starts+1, chromiumConfigureStartCount(t, ctx, c))
223226
_, err = execCombinedOutputWithClient(ctx, c, "grep", []string{"-q", "configure-enterprise", "/etc/chromium/policies/managed/policy.json"})
224227
require.NoError(t, err)
228+
requireConfiguredExtensionActive(t, ctx, c, "configure-enterprise-unpacked")
225229
})
226230

227231
t.Run("CDP failure restart", func(t *testing.T) {

0 commit comments

Comments
 (0)