17
17
import fs from 'fs' ;
18
18
import path from 'path' ;
19
19
20
- import { isUnderTest } from '../utils' ;
20
+ import { isUnderTest , rewriteErrorMessage , wrapInASCIIBox } from '../utils' ;
21
21
import { serverSideCallMetadata } from './instrumentation' ;
22
- import { findChromiumChannel } from './registry' ;
22
+ import { buildPlaywrightCLICommand , findChromiumChannelBestEffort } from './registry' ;
23
23
import { registryDirectory } from './registry' ;
24
24
import { ProgressController } from './progress' ;
25
25
@@ -46,19 +46,32 @@ export async function launchApp(browserType: BrowserType, options: {
46
46
'--test-type=' ,
47
47
) ;
48
48
if ( ! channel && ! options . persistentContextOptions ?. executablePath )
49
- channel = findChromiumChannel ( options . sdkLanguage ) ;
49
+ channel = findChromiumChannelBestEffort ( options . sdkLanguage ) ;
50
50
}
51
51
52
52
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
+ }
62
75
const [ page ] = context . pages ( ) ;
63
76
// Chromium on macOS opens a new tab when clicking on the dock icon.
64
77
// See https://github.com/microsoft/playwright/issues/9434
0 commit comments