@@ -20,9 +20,11 @@ import { helper } from './server/helper';
2020import { serverSideCallMetadata } from './server/instrumentation' ;
2121import { createPlaywright } from './server/playwright' ;
2222import { createGuid } from './server/utils/crypto' ;
23+ import { isUnderTest } from './server/utils/debug' ;
2324import { rewriteErrorMessage } from './utils/isomorphic/stackTrace' ;
2425import { DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT } from './utils/isomorphic/time' ;
2526import { ws } from './utilsBundle' ;
27+ import * as validatorPrimitives from './protocol/validatorPrimitives' ;
2628
2729import type { BrowserServer , BrowserServerLauncher } from './client/browserType' ;
2830import type { LaunchServerOptions , Logger , Env } from './client/types' ;
@@ -45,19 +47,31 @@ export class BrowserServerLauncherImpl implements BrowserServerLauncher {
4547
4648 // 1. Pre-launch the browser
4749 const metadata = serverSideCallMetadata ( ) ;
48- const launchOptions = {
50+ const validatorContext = {
51+ tChannelImpl : ( names : '*' | string [ ] , arg : any , path : string ) => {
52+ throw new validatorPrimitives . ValidationError ( `${ path } : channels are not expected in launchServer` ) ;
53+ } ,
54+ binary : 'buffer' ,
55+ isUnderTest,
56+ } satisfies validatorPrimitives . ValidatorContext ;
57+ let launchOptions = {
4958 ...options ,
5059 ignoreDefaultArgs : Array . isArray ( options . ignoreDefaultArgs ) ? options . ignoreDefaultArgs : undefined ,
5160 ignoreAllDefaultArgs : ! ! options . ignoreDefaultArgs && ! Array . isArray ( options . ignoreDefaultArgs ) ,
5261 env : options . env ? envObjectToArray ( options . env ) : undefined ,
5362 timeout : options . timeout ?? DEFAULT_PLAYWRIGHT_LAUNCH_TIMEOUT ,
5463 } ;
64+
5565 let browser : Browser ;
5666 try {
5767 if ( options . _userDataDir !== undefined ) {
68+ const validator = validatorPrimitives . scheme [ 'BrowserTypeLaunchPersistentContextParams' ] ;
69+ launchOptions = validator ( { ...launchOptions , userDataDir : options . _userDataDir } , '' , validatorContext ) ;
5870 const context = await playwright [ this . _browserName ] . launchPersistentContext ( metadata , options . _userDataDir , launchOptions ) ;
5971 browser = context . _browser ;
6072 } else {
73+ const validator = validatorPrimitives . scheme [ 'BrowserTypeLaunchParams' ] ;
74+ launchOptions = validator ( launchOptions , '' , validatorContext ) ;
6175 browser = await playwright [ this . _browserName ] . launch ( metadata , launchOptions , toProtocolLogger ( options . logger ) ) ;
6276 }
6377 } catch ( e ) {
0 commit comments