1717import fs from 'fs' ;
1818import path from 'path' ;
1919
20- import { isUnderTest } from '../utils' ;
20+ import { isUnderTest , rewriteErrorMessage , wrapInASCIIBox } from '../utils' ;
2121import { serverSideCallMetadata } from './instrumentation' ;
22- import { findChromiumChannel } from './registry' ;
22+ import { buildPlaywrightCLICommand , findChromiumChannelBestEffort } from './registry' ;
2323import { registryDirectory } from './registry' ;
2424import { ProgressController } from './progress' ;
2525
@@ -46,19 +46,32 @@ export async function launchApp(browserType: BrowserType, options: {
4646 '--test-type=' ,
4747 ) ;
4848 if ( ! channel && ! options . persistentContextOptions ?. executablePath )
49- channel = findChromiumChannel ( options . sdkLanguage ) ;
49+ channel = findChromiumChannelBestEffort ( options . sdkLanguage ) ;
5050 }
5151
5252 const controller = new ProgressController ( serverSideCallMetadata ( ) , browserType ) ;
53- const context = await controller . run ( progress => browserType . launchPersistentContext ( progress , '' , {
54- ignoreDefaultArgs : [ '--enable-automation' ] ,
55- ...options ?. persistentContextOptions ,
56- channel,
57- noDefaultViewport : options . persistentContextOptions ?. noDefaultViewport ?? true ,
58- acceptDownloads : options ?. persistentContextOptions ?. acceptDownloads ?? ( isUnderTest ( ) ? 'accept' : 'internal-browser-default' ) ,
59- colorScheme : options ?. persistentContextOptions ?. colorScheme ?? 'no-override' ,
60- args,
61- } ) , 0 ) ; // Deliberately no timeout for our apps.
53+ let context ;
54+ try {
55+ context = await controller . run ( progress => browserType . launchPersistentContext ( progress , '' , {
56+ ignoreDefaultArgs : [ '--enable-automation' ] ,
57+ ...options ?. persistentContextOptions ,
58+ channel,
59+ noDefaultViewport : options . persistentContextOptions ?. noDefaultViewport ?? true ,
60+ acceptDownloads : options ?. persistentContextOptions ?. acceptDownloads ?? ( isUnderTest ( ) ? 'accept' : 'internal-browser-default' ) ,
61+ colorScheme : options ?. persistentContextOptions ?. colorScheme ?? 'no-override' ,
62+ args,
63+ } ) , 0 ) ; // Deliberately no timeout for our apps.
64+ } catch ( error ) {
65+ if ( channel ) {
66+ error = rewriteErrorMessage ( error , [
67+ `Failed to launch "${ channel } " channel.` ,
68+ 'Using custom channels could lead to unexpected behavior due to Enterprise policies (chrome://policy).' ,
69+ 'Install the default browser instead:' ,
70+ wrapInASCIIBox ( `${ buildPlaywrightCLICommand ( options . sdkLanguage , 'install' ) } ` , 2 ) ,
71+ ] . join ( '\n' ) ) ;
72+ }
73+ throw error ;
74+ }
6275 const [ page ] = context . pages ( ) ;
6376 // Chromium on macOS opens a new tab when clicking on the dock icon.
6477 // See https://github.com/microsoft/playwright/issues/9434
0 commit comments