@@ -23,19 +23,21 @@ import * as util from 'util';
2323import { getUbuntuVersionSync } from './ubuntuVersion' ;
2424import { assert , getFromENV } from './utils' ;
2525
26- export type BrowserName = 'chromium' | 'webkit' | 'firefox' | 'ffmpeg' ;
27- export const allBrowserNames : BrowserName [ ] = [ 'chromium' , 'webkit' , 'firefox' , 'ffmpeg' ] ;
26+ export type InstallationSource = 'default' | 'cli' ;
27+ export type BrowserName = 'chromium' | 'webkit' | 'webkit-technology-preview' | 'firefox' | 'ffmpeg' ;
28+ export const allBrowserNames : BrowserName [ ] = [ 'chromium' , 'webkit' , 'webkit-technology-preview' , 'firefox' , 'ffmpeg' ] ;
2829
2930type BrowserPlatform = 'win32' | 'win64' | 'mac10.13' | 'mac10.14' | 'mac10.15' | 'mac11' | 'mac11-arm64' | 'ubuntu18.04' | 'ubuntu20.04' ;
3031type BrowserDescriptor = {
3132 name : BrowserName ,
3233 revision : string ,
3334 download : boolean ,
3435 browserDirectory : string ,
36+ installationSources : Set < InstallationSource > ,
3537} ;
3638
3739const EXECUTABLE_PATHS = {
38- chromium : {
40+ ' chromium' : {
3941 'ubuntu18.04' : [ 'chrome-linux' , 'chrome' ] ,
4042 'ubuntu20.04' : [ 'chrome-linux' , 'chrome' ] ,
4143 'mac10.13' : [ 'chrome-mac' , 'Chromium.app' , 'Contents' , 'MacOS' , 'Chromium' ] ,
@@ -46,7 +48,7 @@ const EXECUTABLE_PATHS = {
4648 'win32' : [ 'chrome-win' , 'chrome.exe' ] ,
4749 'win64' : [ 'chrome-win' , 'chrome.exe' ] ,
4850 } ,
49- firefox : {
51+ ' firefox' : {
5052 'ubuntu18.04' : [ 'firefox' , 'firefox' ] ,
5153 'ubuntu20.04' : [ 'firefox' , 'firefox' ] ,
5254 'mac10.13' : [ 'firefox' , 'Nightly.app' , 'Contents' , 'MacOS' , 'firefox' ] ,
@@ -57,7 +59,7 @@ const EXECUTABLE_PATHS = {
5759 'win32' : [ 'firefox' , 'firefox.exe' ] ,
5860 'win64' : [ 'firefox' , 'firefox.exe' ] ,
5961 } ,
60- webkit : {
62+ ' webkit' : {
6163 'ubuntu18.04' : [ 'pw_run.sh' ] ,
6264 'ubuntu20.04' : [ 'pw_run.sh' ] ,
6365 'mac10.13' : undefined ,
@@ -68,7 +70,18 @@ const EXECUTABLE_PATHS = {
6870 'win32' : [ 'Playwright.exe' ] ,
6971 'win64' : [ 'Playwright.exe' ] ,
7072 } ,
71- ffmpeg : {
73+ 'webkit-technology-preview' : {
74+ 'ubuntu18.04' : [ 'pw_run.sh' ] ,
75+ 'ubuntu20.04' : [ 'pw_run.sh' ] ,
76+ 'mac10.13' : undefined ,
77+ 'mac10.14' : [ 'pw_run.sh' ] ,
78+ 'mac10.15' : [ 'pw_run.sh' ] ,
79+ 'mac11' : [ 'pw_run.sh' ] ,
80+ 'mac11-arm64' : [ 'pw_run.sh' ] ,
81+ 'win32' : [ 'Playwright.exe' ] ,
82+ 'win64' : [ 'Playwright.exe' ] ,
83+ } ,
84+ 'ffmpeg' : {
7285 'ubuntu18.04' : [ 'ffmpeg-linux' ] ,
7386 'ubuntu20.04' : [ 'ffmpeg-linux' ] ,
7487 'mac10.13' : [ 'ffmpeg-mac' ] ,
@@ -82,7 +95,7 @@ const EXECUTABLE_PATHS = {
8295} ;
8396
8497const DOWNLOAD_URLS = {
85- chromium : {
98+ ' chromium' : {
8699 'ubuntu18.04' : '%s/builds/chromium/%s/chromium-linux.zip' ,
87100 'ubuntu20.04' : '%s/builds/chromium/%s/chromium-linux.zip' ,
88101 'mac10.13' : '%s/builds/chromium/%s/chromium-mac.zip' ,
@@ -93,7 +106,7 @@ const DOWNLOAD_URLS = {
93106 'win32' : '%s/builds/chromium/%s/chromium-win32.zip' ,
94107 'win64' : '%s/builds/chromium/%s/chromium-win64.zip' ,
95108 } ,
96- firefox : {
109+ ' firefox' : {
97110 'ubuntu18.04' : '%s/builds/firefox/%s/firefox-ubuntu-18.04.zip' ,
98111 'ubuntu20.04' : '%s/builds/firefox/%s/firefox-ubuntu-18.04.zip' ,
99112 'mac10.13' : '%s/builds/firefox/%s/firefox-mac-10.14.zip' ,
@@ -104,7 +117,7 @@ const DOWNLOAD_URLS = {
104117 'win32' : '%s/builds/firefox/%s/firefox-win32.zip' ,
105118 'win64' : '%s/builds/firefox/%s/firefox-win64.zip' ,
106119 } ,
107- webkit : {
120+ ' webkit' : {
108121 'ubuntu18.04' : '%s/builds/webkit/%s/webkit-ubuntu-18.04.zip' ,
109122 'ubuntu20.04' : '%s/builds/webkit/%s/webkit-ubuntu-20.04.zip' ,
110123 'mac10.13' : undefined ,
@@ -115,7 +128,18 @@ const DOWNLOAD_URLS = {
115128 'win32' : '%s/builds/webkit/%s/webkit-win64.zip' ,
116129 'win64' : '%s/builds/webkit/%s/webkit-win64.zip' ,
117130 } ,
118- ffmpeg : {
131+ 'webkit-technology-preview' : {
132+ 'ubuntu18.04' : '%s/builds/webkit/%s/webkit-ubuntu-18.04.zip' ,
133+ 'ubuntu20.04' : '%s/builds/webkit/%s/webkit-ubuntu-20.04.zip' ,
134+ 'mac10.13' : undefined ,
135+ 'mac10.14' : undefined ,
136+ 'mac10.15' : '%s/builds/webkit/%s/webkit-mac-10.15.zip' ,
137+ 'mac11' : '%s/builds/webkit/%s/webkit-mac-10.15.zip' ,
138+ 'mac11-arm64' : '%s/builds/webkit/%s/webkit-mac-11.0-arm64.zip' ,
139+ 'win32' : '%s/builds/webkit/%s/webkit-win64.zip' ,
140+ 'win64' : '%s/builds/webkit/%s/webkit-win64.zip' ,
141+ } ,
142+ 'ffmpeg' : {
119143 'ubuntu18.04' : '%s/builds/ffmpeg/%s/ffmpeg-linux.zip' ,
120144 'ubuntu20.04' : '%s/builds/ffmpeg/%s/ffmpeg-linux.zip' ,
121145 'mac10.13' : '%s/builds/ffmpeg/%s/ffmpeg-mac.zip' ,
@@ -209,11 +233,13 @@ export class Registry {
209233 const revisionOverride = ( obj . revisionOverrides || { } ) [ hostPlatform ] ;
210234 const revision = revisionOverride || obj . revision ;
211235 const browserDirectory = revisionOverride ? `${ name } -${ hostPlatform } -special-${ revision } ` : `${ name } -${ revision } ` ;
236+ const installationSources = new Set ( obj . installationSources || [ 'default' ] ) ;
212237 return {
213238 name,
214239 revision,
215240 download : obj . download ,
216241 browserDirectory,
242+ installationSources,
217243 } ;
218244 } ) ;
219245 }
@@ -270,10 +296,11 @@ export class Registry {
270296 const browser = this . _descriptors . find ( browser => browser . name === browserName ) ;
271297 assert ( browser , `ERROR: Playwright does not support ${ browserName } ` ) ;
272298 const envDownloadHost : { [ key : string ] : string } = {
273- chromium : 'PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST' ,
274- firefox : 'PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST' ,
275- webkit : 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST' ,
276- ffmpeg : 'PLAYWRIGHT_FFMPEG_DOWNLOAD_HOST' ,
299+ 'chromium' : 'PLAYWRIGHT_CHROMIUM_DOWNLOAD_HOST' ,
300+ 'firefox' : 'PLAYWRIGHT_FIREFOX_DOWNLOAD_HOST' ,
301+ 'webkit' : 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST' ,
302+ 'webkit-technology-preview' : 'PLAYWRIGHT_WEBKIT_DOWNLOAD_HOST' ,
303+ 'ffmpeg' : 'PLAYWRIGHT_FFMPEG_DOWNLOAD_HOST' ,
277304 } ;
278305 const downloadHost = getFromENV ( envDownloadHost [ browserName ] ) ||
279306 getFromENV ( 'PLAYWRIGHT_DOWNLOAD_HOST' ) ||
@@ -283,7 +310,16 @@ export class Registry {
283310 return util . format ( urlTemplate , downloadHost , browser . revision ) ;
284311 }
285312
286- shouldDownload ( browserName : BrowserName ) : boolean {
313+ shouldDownload ( browserName : BrowserName , installationSource : InstallationSource ) : boolean {
314+ // Older versions do not have "download" field. We assume they need all browsers
315+ // from the list. So we want to skip all browsers that are explicitly marked as "download: false".
316+ const browser = this . _descriptors . find ( browser => browser . name === browserName ) ;
317+ if ( ! browser || browser . download === false )
318+ return false ;
319+ return browser . installationSources . has ( installationSource ) ;
320+ }
321+
322+ shouldRetain ( browserName : BrowserName ) : boolean {
287323 // Older versions do not have "download" field. We assume they need all browsers
288324 // from the list. So we want to skip all browsers that are explicitly marked as "download: false".
289325 const browser = this . _descriptors . find ( browser => browser . name === browserName ) ;
0 commit comments