@@ -134,7 +134,7 @@ export async function runBrowserActionsCommand({
134134 const browser = session ?. browser ?? await launchChromiumBrowser ( )
135135 const topology = browserPreviewTopology ( args , runtimeSpec , server . serverUrl , server . previewProxyDiagnostics ?. targetOrigin )
136136 const { preview, networkPolicy } = topology
137- const routeTracker = createBrowserPreviewRouteTracker ( )
137+ const routeTracker = session ?. routeTracker ?? createBrowserPreviewRouteTracker ( )
138138 let requestedUrl = initialUrl ? topology . resolveUrl ( initialUrl ) : preview . effectiveOrigin
139139 let finalUrl = requestedUrl
140140 let htmlSha256 : string | undefined
@@ -967,6 +967,7 @@ export async function runBrowserScenarioCommand({
967967 let pendingError : Error | undefined
968968 let scenarioSession : PlaywrightBrowserEnvironmentSession | undefined
969969 let scenarioBrowser : Awaited < ReturnType < typeof launchChromiumBrowser > > | undefined
970+ let scenarioRouteTracker : ReturnType < typeof createBrowserPreviewRouteTracker > | undefined
970971
971972 try {
972973 if ( runPlan . probe && runPlan . actions ) {
@@ -980,8 +981,9 @@ export async function runBrowserScenarioCommand({
980981 ...( runPlan . actions . storageStateImport ? { contextOptions : { storageState : runPlan . actions . storageStateImport . storageState } } : { } ) ,
981982 } )
982983 const topology = browserPreviewTopology ( args , runtimeSpec , server . serverUrl )
983- if ( browserPreviewNeedsContextRouting ( topology . networkPolicy ) ) await routeBrowserPreviewContextNetwork ( runtime . context , topology . networkPolicy , topology . preview . effectiveOrigin )
984- scenarioSession = { browser, requested : requestedEnvironment , resolved, runtime }
984+ const routeTracker = scenarioRouteTracker = createBrowserPreviewRouteTracker ( )
985+ if ( browserPreviewNeedsContextRouting ( topology . networkPolicy ) ) await routeBrowserPreviewContextNetwork ( runtime . context , topology . networkPolicy , topology . origins . localProxyOrigin , routeTracker )
986+ scenarioSession = { browser, requested : requestedEnvironment , resolved, routeTracker, runtime }
985987 }
986988
987989 if ( runPlan . probe ) {
@@ -1006,8 +1008,15 @@ export async function runBrowserScenarioCommand({
10061008 }
10071009 }
10081010 } finally {
1009- await scenarioSession ?. runtime . close ( ) . catch ( ( ) => undefined )
1010- await scenarioBrowser ?. close ( ) . catch ( ( ) => undefined )
1011+ if ( scenarioSession && scenarioBrowser && scenarioRouteTracker ) {
1012+ const activeSession = scenarioSession
1013+ const activeBrowser = scenarioBrowser
1014+ const cleanupBrowser = { close : async ( ) => { await activeSession . runtime . close ( ) ; await activeBrowser . close ( ) } }
1015+ const routeErrors = await closeBrowserAndDrainPreviewRoutes ( cleanupBrowser , scenarioRouteTracker )
1016+ pendingError ??= routeErrors [ 0 ]
1017+ } else {
1018+ await scenarioBrowser ?. close ( ) . catch ( ( ) => undefined )
1019+ }
10111020 }
10121021
10131022 const primaryArtifact = actionsResult ?. artifact ?? probeResult ?. artifact
0 commit comments