@checkly/playwright-core 1.48.22 → 1.51.11-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/ThirdPartyNotices.txt +60 -48
  2. package/bin/reinstall_chrome_beta_linux.sh +10 -8
  3. package/bin/reinstall_chrome_stable_linux.sh +10 -8
  4. package/bin/reinstall_msedge_beta_linux.sh +17 -9
  5. package/bin/reinstall_msedge_dev_linux.sh +17 -9
  6. package/bin/reinstall_msedge_stable_linux.sh +17 -9
  7. package/browsers.json +33 -12
  8. package/index.js +0 -1
  9. package/lib/androidServerImpl.js +5 -5
  10. package/lib/browserServerImpl.js +18 -9
  11. package/lib/checkly/secretsFilter.js +1 -1
  12. package/lib/cli/driver.js +6 -6
  13. package/lib/cli/program.js +38 -43
  14. package/lib/cli/programWithTestStub.js +2 -1
  15. package/lib/client/android.js +37 -58
  16. package/lib/client/artifact.js +4 -7
  17. package/lib/client/browser.js +10 -15
  18. package/lib/client/browserContext.js +69 -62
  19. package/lib/client/browserType.js +30 -64
  20. package/lib/client/channelOwner.js +53 -68
  21. package/lib/client/clientHelper.js +4 -6
  22. package/lib/client/clientInstrumentation.js +2 -0
  23. package/lib/client/clientStackTrace.js +65 -0
  24. package/lib/client/connection.js +48 -41
  25. package/lib/client/consoleMessage.js +4 -7
  26. package/lib/client/electron.js +10 -10
  27. package/lib/client/elementHandle.js +32 -33
  28. package/lib/client/errors.js +2 -2
  29. package/lib/client/eventEmitter.js +5 -8
  30. package/lib/client/fetch.js +61 -62
  31. package/lib/client/fileUtils.js +31 -0
  32. package/lib/client/frame.js +22 -23
  33. package/lib/client/harRouter.js +7 -9
  34. package/lib/client/jsHandle.js +3 -4
  35. package/lib/client/localUtils.js +24 -0
  36. package/lib/client/locator.js +27 -13
  37. package/lib/client/network.js +44 -37
  38. package/lib/client/page.js +50 -41
  39. package/lib/client/platform.js +71 -0
  40. package/lib/client/playwright.js +21 -1
  41. package/lib/client/selectors.js +8 -2
  42. package/lib/client/stream.js +2 -21
  43. package/lib/client/timeoutSettings.js +65 -0
  44. package/lib/client/tracing.js +29 -7
  45. package/lib/client/video.js +2 -2
  46. package/lib/client/waiter.js +19 -16
  47. package/lib/client/webSocket.js +106 -0
  48. package/lib/client/worker.js +4 -4
  49. package/lib/client/writableStream.js +2 -21
  50. package/lib/generated/consoleApiSource.js +1 -1
  51. package/lib/generated/injectedScriptSource.js +1 -1
  52. package/lib/generated/pollingRecorderSource.js +1 -1
  53. package/lib/generated/recorderSource.js +7 -0
  54. package/lib/generated/webSocketMockSource.js +1 -1
  55. package/lib/inProcessFactory.js +8 -3
  56. package/lib/outofprocess.js +12 -8
  57. package/lib/protocol/debug.js +1 -1
  58. package/lib/protocol/validator.js +77 -11
  59. package/lib/protocol/validatorPrimitives.js +1 -2
  60. package/lib/remote/playwrightConnection.js +21 -12
  61. package/lib/remote/playwrightServer.js +22 -8
  62. package/lib/server/android/android.js +17 -14
  63. package/lib/server/android/backendAdb.js +14 -14
  64. package/lib/server/artifact.js +3 -3
  65. package/lib/server/bidi/bidiBrowser.js +11 -8
  66. package/lib/server/bidi/bidiChromium.js +5 -4
  67. package/lib/server/bidi/bidiConnection.js +1 -3
  68. package/lib/server/bidi/bidiExecutionContext.js +71 -25
  69. package/lib/server/bidi/bidiFirefox.js +4 -3
  70. package/lib/server/bidi/bidiInput.js +11 -12
  71. package/lib/server/bidi/bidiNetworkManager.js +11 -12
  72. package/lib/server/bidi/bidiOverCdp.js +2 -2
  73. package/lib/server/bidi/bidiPage.js +39 -66
  74. package/lib/server/bidi/third_party/bidiKeyboard.js +9 -7
  75. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  76. package/lib/server/browser.js +2 -2
  77. package/lib/server/browserContext.js +60 -55
  78. package/lib/server/browserType.js +22 -18
  79. package/lib/server/callLog.js +79 -0
  80. package/lib/server/chromium/chromium.js +20 -16
  81. package/lib/server/chromium/chromiumSwitches.js +32 -9
  82. package/lib/server/chromium/crBrowser.js +25 -24
  83. package/lib/server/chromium/crConnection.js +2 -2
  84. package/lib/server/chromium/crCoverage.js +1 -1
  85. package/lib/server/chromium/crDevTools.js +1 -1
  86. package/lib/server/chromium/crDragDrop.js +1 -1
  87. package/lib/server/chromium/crExecutionContext.js +26 -35
  88. package/lib/server/chromium/crInput.js +17 -6
  89. package/lib/server/chromium/crNetworkManager.js +3 -3
  90. package/lib/server/chromium/crPage.js +43 -55
  91. package/lib/server/chromium/crPdf.js +1 -1
  92. package/lib/server/chromium/crProtocolHelper.js +3 -3
  93. package/lib/server/chromium/crServiceWorker.js +2 -2
  94. package/lib/server/chromium/videoRecorder.js +2 -2
  95. package/lib/server/clock.js +1 -1
  96. package/lib/server/codegen/csharp.js +21 -16
  97. package/lib/server/codegen/java.js +17 -9
  98. package/lib/server/codegen/javascript.js +37 -7
  99. package/lib/server/codegen/jsonl.js +1 -1
  100. package/lib/server/codegen/languages.js +2 -2
  101. package/lib/server/codegen/python.js +14 -17
  102. package/lib/server/debugController.js +23 -45
  103. package/lib/server/debugger.js +1 -1
  104. package/lib/server/deviceDescriptors.js +1 -1
  105. package/lib/server/deviceDescriptorsSource.json +131 -131
  106. package/lib/server/dispatchers/androidDispatcher.js +14 -3
  107. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  108. package/lib/server/dispatchers/browserContextDispatcher.js +21 -32
  109. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  110. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  111. package/lib/server/dispatchers/debugControllerDispatcher.js +5 -3
  112. package/lib/server/dispatchers/dispatcher.js +27 -25
  113. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  114. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  115. package/lib/server/dispatchers/frameDispatcher.js +9 -3
  116. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  117. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -291
  118. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  119. package/lib/server/dispatchers/pageDispatcher.js +10 -8
  120. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  121. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  122. package/lib/server/dispatchers/tracingDispatcher.js +10 -0
  123. package/lib/server/dispatchers/webSocketRouteDispatcher.js +18 -18
  124. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  125. package/lib/server/dom.js +102 -48
  126. package/lib/server/download.js +1 -1
  127. package/lib/server/electron/electron.js +17 -16
  128. package/lib/server/errors.js +1 -1
  129. package/lib/server/fetch.js +49 -33
  130. package/lib/server/fileUploadUtils.js +7 -4
  131. package/lib/server/firefox/ffBrowser.js +17 -9
  132. package/lib/server/firefox/ffConnection.js +1 -1
  133. package/lib/server/firefox/ffExecutionContext.js +25 -29
  134. package/lib/server/firefox/ffInput.js +15 -4
  135. package/lib/server/firefox/ffNetworkManager.js +3 -3
  136. package/lib/server/firefox/ffPage.js +29 -50
  137. package/lib/server/firefox/firefox.js +7 -9
  138. package/lib/server/frameSelectors.js +1 -1
  139. package/lib/server/frames.js +65 -55
  140. package/lib/server/har/harRecorder.js +4 -4
  141. package/lib/server/har/harTracer.js +8 -9
  142. package/lib/server/harBackend.js +157 -0
  143. package/lib/server/helper.js +2 -2
  144. package/lib/server/index.js +1 -14
  145. package/lib/server/input.js +3 -4
  146. package/lib/server/instrumentation.js +2 -2
  147. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  148. package/lib/server/javascript.js +26 -33
  149. package/lib/server/launchApp.js +7 -7
  150. package/lib/server/localUtils.js +203 -0
  151. package/lib/server/network.js +5 -5
  152. package/lib/server/page.js +76 -37
  153. package/lib/server/pipeTransport.js +1 -1
  154. package/lib/server/playwright.js +5 -5
  155. package/lib/server/progress.js +1 -4
  156. package/lib/server/protocolError.js +1 -1
  157. package/lib/server/recorder/chat.js +177 -0
  158. package/lib/server/recorder/codeGenerator.js +154 -0
  159. package/lib/server/recorder/contextRecorder.js +9 -18
  160. package/lib/server/recorder/csharp.js +311 -0
  161. package/lib/server/recorder/java.js +249 -0
  162. package/lib/server/recorder/javascript.js +230 -0
  163. package/lib/server/recorder/jsonl.js +48 -0
  164. package/lib/server/recorder/language.js +45 -0
  165. package/lib/server/recorder/python.js +276 -0
  166. package/lib/server/recorder/recorderActions.js +6 -0
  167. package/lib/server/recorder/recorderApp.js +25 -28
  168. package/lib/server/recorder/recorderCollection.js +9 -21
  169. package/lib/server/recorder/recorderInTraceViewer.js +1 -1
  170. package/lib/server/recorder/recorderRunner.js +7 -3
  171. package/lib/server/recorder/recorderUtils.js +5 -28
  172. package/lib/server/recorder/throttledFile.js +3 -4
  173. package/lib/server/recorder/utils.js +46 -0
  174. package/lib/server/recorder.js +83 -43
  175. package/lib/server/registry/browserFetcher.js +10 -8
  176. package/lib/server/registry/dependencies.js +20 -20
  177. package/lib/server/registry/index.js +215 -61
  178. package/lib/server/registry/nativeDeps.js +10 -4
  179. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  180. package/lib/server/screenshotter.js +1 -1
  181. package/lib/server/selectors.js +3 -3
  182. package/lib/server/socksClientCertificatesInterceptor.js +8 -8
  183. package/lib/server/socksInterceptor.js +8 -5
  184. package/lib/server/storageScript.js +160 -0
  185. package/lib/server/timeoutSettings.js +74 -0
  186. package/lib/server/trace/recorder/snapshotter.js +10 -20
  187. package/lib/server/trace/recorder/snapshotterInjected.js +26 -1
  188. package/lib/server/trace/recorder/tracing.js +108 -45
  189. package/lib/server/trace/test/inMemorySnapshotter.js +6 -6
  190. package/lib/server/trace/viewer/traceViewer.js +21 -7
  191. package/lib/server/transport.js +3 -2
  192. package/lib/server/utils/ascii.js +31 -0
  193. package/lib/server/utils/comparators.js +159 -0
  194. package/lib/server/utils/crypto.js +171 -0
  195. package/lib/server/utils/debug.js +38 -0
  196. package/lib/server/utils/debugLogger.js +93 -0
  197. package/lib/server/utils/env.js +53 -0
  198. package/lib/server/utils/eventsHelper.js +38 -0
  199. package/lib/server/utils/expectUtils.js +33 -0
  200. package/lib/server/utils/fileUtils.js +204 -0
  201. package/lib/server/utils/happyEyeballs.js +207 -0
  202. package/lib/server/utils/hostPlatform.js +145 -0
  203. package/lib/server/utils/httpServer.js +233 -0
  204. package/lib/server/utils/image_tools/colorUtils.js +98 -0
  205. package/lib/server/utils/image_tools/compare.js +108 -0
  206. package/lib/server/utils/image_tools/imageChannel.js +70 -0
  207. package/lib/server/utils/image_tools/stats.js +102 -0
  208. package/lib/server/utils/linuxUtils.js +58 -0
  209. package/lib/server/utils/network.js +160 -0
  210. package/lib/server/utils/nodePlatform.js +140 -0
  211. package/lib/server/utils/pipeTransport.js +82 -0
  212. package/lib/server/utils/processLauncher.js +248 -0
  213. package/lib/server/utils/profiler.js +52 -0
  214. package/lib/server/utils/socksProxy.js +570 -0
  215. package/lib/server/utils/spawnAsync.js +45 -0
  216. package/lib/server/utils/task.js +58 -0
  217. package/lib/server/utils/userAgent.js +91 -0
  218. package/lib/server/utils/wsServer.js +128 -0
  219. package/lib/server/utils/zipFile.js +75 -0
  220. package/lib/server/utils/zones.js +54 -0
  221. package/lib/server/webkit/webkit.js +4 -4
  222. package/lib/server/webkit/wkBrowser.js +10 -10
  223. package/lib/server/webkit/wkConnection.js +1 -1
  224. package/lib/server/webkit/wkExecutionContext.js +26 -30
  225. package/lib/server/webkit/wkInput.js +17 -7
  226. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  227. package/lib/server/webkit/wkPage.js +80 -66
  228. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  229. package/lib/server/webkit/wkWorkers.js +2 -2
  230. package/lib/utils/fileUtils.js +1 -1
  231. package/lib/utils/glob.js +84 -0
  232. package/lib/utils/isomorphic/ariaSnapshot.js +392 -0
  233. package/lib/utils/isomorphic/assert.js +25 -0
  234. package/lib/utils/isomorphic/colors.js +65 -0
  235. package/lib/utils/isomorphic/cssParser.js +5 -5
  236. package/lib/utils/isomorphic/headers.js +52 -0
  237. package/lib/utils/isomorphic/locatorGenerators.js +38 -8
  238. package/lib/utils/isomorphic/locatorParser.js +19 -13
  239. package/lib/utils/isomorphic/manualPromise.js +107 -0
  240. package/lib/utils/isomorphic/mimeType.js +11 -3
  241. package/lib/utils/isomorphic/multimap.js +73 -0
  242. package/lib/utils/isomorphic/rtti.js +41 -0
  243. package/lib/utils/isomorphic/semaphore.js +51 -0
  244. package/lib/utils/isomorphic/stackTrace.js +169 -0
  245. package/lib/utils/isomorphic/stringUtils.js +31 -1
  246. package/lib/utils/isomorphic/time.js +25 -0
  247. package/lib/utils/isomorphic/timeoutRunner.js +66 -0
  248. package/lib/utils/isomorphic/traceUtils.js +23 -0
  249. package/lib/utils/isomorphic/types.js +5 -0
  250. package/lib/utils/isomorphic/urlMatch.js +7 -5
  251. package/lib/utils/mimeType.js +30 -0
  252. package/lib/utils/stackTrace.js +1 -1
  253. package/lib/utils.js +447 -0
  254. package/lib/utilsBundle.js +4 -29
  255. package/lib/utilsBundleImpl/index.js +188 -33
  256. package/lib/vite/htmlReport/index.html +20 -17
  257. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  258. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  259. package/lib/vite/recorder/assets/{index-BW-aOBcL.css → index-eHBmevrY.css} +1 -1
  260. package/lib/vite/recorder/index.html +2 -2
  261. package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +24 -0
  262. package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +1 -0
  263. package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +235 -0
  264. package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +25 -0
  265. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  266. package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +1 -0
  267. package/lib/vite/traceViewer/{embedded.BkvOrz5Z.js → embedded.DpNPH6mk.js} +2 -2
  268. package/lib/vite/traceViewer/embedded.html +6 -6
  269. package/lib/vite/traceViewer/index.CuE3SYGw.js +2 -0
  270. package/lib/vite/traceViewer/index.html +27 -9
  271. package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +1 -0
  272. package/lib/vite/traceViewer/{recorder.DNMfnSiu.js → recorder.BD-uZJs7.js} +2 -2
  273. package/lib/vite/traceViewer/recorder.html +4 -4
  274. package/lib/vite/traceViewer/sw.bundle.js +7888 -3
  275. package/lib/vite/traceViewer/{uiMode.CAYqod-m.css → uiMode.BatfzHMG.css} +1 -1
  276. package/lib/vite/traceViewer/uiMode.DHrNgddz.js +5 -0
  277. package/lib/vite/traceViewer/uiMode.html +8 -7
  278. package/lib/vite/traceViewer/workbench.B9vIAzH9.css +1 -0
  279. package/lib/zipBundleImpl.js +4 -4
  280. package/package.json +7 -7
  281. package/types/protocol.d.ts +820 -153
  282. package/types/types.d.ts +285 -82
  283. package/bin/PrintDeps.exe +0 -0
  284. package/bin/README.md +0 -2
  285. package/lib/vite/recorder/assets/codeMirrorModule-d0KhC1qL.js +0 -24
  286. package/lib/vite/recorder/assets/index-Bxxcmxlu.js +0 -42
  287. package/lib/vite/traceViewer/assets/codeMirrorModule-pBPtArIT.js +0 -24
  288. package/lib/vite/traceViewer/assets/codeMirrorModule-tzBrK1V4.js +0 -24
  289. package/lib/vite/traceViewer/assets/inspectorTab-BuJ3wAX_.js +0 -64
  290. package/lib/vite/traceViewer/assets/inspectorTab-Soeeuvzv.js +0 -64
  291. package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
  292. package/lib/vite/traceViewer/assets/workbench-DdmJ9AJV.js +0 -9
  293. package/lib/vite/traceViewer/assets/workbench-lypYlf00.js +0 -9
  294. package/lib/vite/traceViewer/embedded.DInvAijy.js +0 -2
  295. package/lib/vite/traceViewer/index.Dha3cgqs.js +0 -2
  296. package/lib/vite/traceViewer/index._Iolt-uE.js +0 -2
  297. package/lib/vite/traceViewer/inspectorTab.DLjBDrQR.css +0 -1
  298. package/lib/vite/traceViewer/recorder.DTSaNaly.js +0 -2
  299. package/lib/vite/traceViewer/uiMode.BM7yhjzl.js +0 -5
  300. package/lib/vite/traceViewer/uiMode.Cr1tvTWS.js +0 -5
  301. package/lib/vite/traceViewer/workbench.DlsCx8k5.css +0 -1
  302. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  303. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  304. /package/lib/vite/traceViewer/{embedded.w7WN2u1R.css → embedded.mLhjB5IF.css} +0 -0
  305. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  306. /package/lib/vite/traceViewer/{recorder.B_SY1GJM.css → recorder.tn0RQdqM.css} +0 -0
  307. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -8,7 +8,6 @@ exports.browserDirectoryToMarkerFilePath = browserDirectoryToMarkerFilePath;
8
8
  exports.buildPlaywrightCLICommand = buildPlaywrightCLICommand;
9
9
  exports.findChromiumChannel = findChromiumChannel;
10
10
  exports.installBrowsersForNpmInstall = installBrowsersForNpmInstall;
11
- exports.installDefaultBrowsersForNpmInstall = installDefaultBrowsersForNpmInstall;
12
11
  exports.registryDirectory = exports.registry = void 0;
13
12
  Object.defineProperty(exports, "writeDockerVersion", {
14
13
  enumerable: true,
@@ -16,23 +15,24 @@ Object.defineProperty(exports, "writeDockerVersion", {
16
15
  return _dependencies.writeDockerVersion;
17
16
  }
18
17
  });
19
- var os = _interopRequireWildcard(require("os"));
18
+ var _fs = _interopRequireDefault(require("fs"));
19
+ var _os = _interopRequireDefault(require("os"));
20
20
  var _path = _interopRequireDefault(require("path"));
21
21
  var util = _interopRequireWildcard(require("util"));
22
- var fs = _interopRequireWildcard(require("fs"));
23
- var _utilsBundle = require("../../utilsBundle");
24
- var _network = require("../../utils/network");
25
- var _userAgent = require("../../utils/userAgent");
26
- var _utils = require("../../utils");
27
- var _fileUtils = require("../../utils/fileUtils");
28
- var _hostPlatform = require("../../utils/hostPlatform");
29
- var _spawnAsync = require("../../utils/spawnAsync");
30
- var _dependencies = require("./dependencies");
31
22
  var _browserFetcher = require("./browserFetcher");
32
- var _debugLogger = require("../../utils/debugLogger");
33
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
+ var _dependencies = require("./dependencies");
24
+ var _utils = require("../../utils");
25
+ var _ascii = require("../utils/ascii");
26
+ var _debugLogger = require("../utils/debugLogger");
27
+ var _hostPlatform = require("../utils/hostPlatform");
28
+ var _network = require("../utils/network");
29
+ var _spawnAsync = require("../utils/spawnAsync");
30
+ var _userAgent = require("../utils/userAgent");
31
+ var _utilsBundle = require("../../utilsBundle");
32
+ var _fileUtils = require("../utils/fileUtils");
34
33
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
35
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
34
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
35
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
36
36
  /**
37
37
  * Copyright 2017 Google Inc. All rights reserved.
38
38
  * Modifications copyright (c) Microsoft Corporation.
@@ -52,11 +52,20 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
52
52
 
53
53
  const PACKAGE_PATH = _path.default.join(__dirname, '..', '..', '..');
54
54
  const BIN_PATH = _path.default.join(__dirname, '..', '..', '..', 'bin');
55
- const PLAYWRIGHT_CDN_MIRRORS = ['https://playwright.azureedge.net', 'https://playwright-akamai.azureedge.net', 'https://playwright-verizon.azureedge.net'];
55
+ const PLAYWRIGHT_CDN_MIRRORS = ['https://cdn.playwright.dev/dbazure/download/playwright',
56
+ // ESRP CDN
57
+ 'https://playwright.download.prss.microsoft.com/dbazure/download/playwright',
58
+ // Directly hit ESRP CDN
59
+ 'https://cdn.playwright.dev' // Hit the Storage Bucket directly
60
+ ];
56
61
  if (process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
57
62
  for (let i = 0; i < PLAYWRIGHT_CDN_MIRRORS.length; i++) {
58
63
  const cdn = PLAYWRIGHT_CDN_MIRRORS[i];
59
- if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) PLAYWRIGHT_CDN_MIRRORS[i] = cdn + '.does-not-resolve.playwright.dev';
64
+ if (cdn !== process.env.PW_TEST_CDN_THAT_SHOULD_WORK) {
65
+ const parsedCDN = new URL(cdn);
66
+ parsedCDN.hostname = parsedCDN.hostname + '.does-not-resolve.playwright.dev';
67
+ PLAYWRIGHT_CDN_MIRRORS[i] = parsedCDN.toString();
68
+ }
60
69
  }
61
70
  }
62
71
  const EXECUTABLE_PATHS = {
@@ -65,6 +74,11 @@ const EXECUTABLE_PATHS = {
65
74
  'mac': ['chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium'],
66
75
  'win': ['chrome-win', 'chrome.exe']
67
76
  },
77
+ 'chromium-headless-shell': {
78
+ 'linux': ['chrome-linux', 'headless_shell'],
79
+ 'mac': ['chrome-mac', 'headless_shell'],
80
+ 'win': ['chrome-win', 'headless_shell.exe']
81
+ },
68
82
  'firefox': {
69
83
  'linux': ['firefox', 'firefox'],
70
84
  'mac': ['firefox', 'Nightly.app', 'Contents', 'MacOS', 'firefox'],
@@ -79,6 +93,11 @@ const EXECUTABLE_PATHS = {
79
93
  'linux': ['ffmpeg-linux'],
80
94
  'mac': ['ffmpeg-mac'],
81
95
  'win': ['ffmpeg-win64.exe']
96
+ },
97
+ 'winldd': {
98
+ 'linux': undefined,
99
+ 'mac': undefined,
100
+ 'win': ['PrintDeps.exe']
82
101
  }
83
102
  };
84
103
  const DOWNLOAD_PATHS = {
@@ -111,6 +130,35 @@ const DOWNLOAD_PATHS = {
111
130
  'mac15-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
112
131
  'win64': 'builds/chromium/%s/chromium-win64.zip'
113
132
  },
133
+ 'chromium-headless-shell': {
134
+ '<unknown>': undefined,
135
+ 'ubuntu18.04-x64': undefined,
136
+ 'ubuntu20.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
137
+ 'ubuntu22.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
138
+ 'ubuntu24.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
139
+ 'ubuntu18.04-arm64': undefined,
140
+ 'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
141
+ 'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
142
+ 'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
143
+ 'debian11-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
144
+ 'debian11-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
145
+ 'debian12-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
146
+ 'debian12-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
147
+ 'mac10.13': undefined,
148
+ 'mac10.14': undefined,
149
+ 'mac10.15': undefined,
150
+ 'mac11': 'builds/chromium/%s/chromium-headless-shell-mac.zip',
151
+ 'mac11-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
152
+ 'mac12': 'builds/chromium/%s/chromium-headless-shell-mac.zip',
153
+ 'mac12-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
154
+ 'mac13': 'builds/chromium/%s/chromium-headless-shell-mac.zip',
155
+ 'mac13-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
156
+ 'mac14': 'builds/chromium/%s/chromium-headless-shell-mac.zip',
157
+ 'mac14-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
158
+ 'mac15': 'builds/chromium/%s/chromium-headless-shell-mac.zip',
159
+ 'mac15-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
160
+ 'win64': 'builds/chromium/%s/chromium-headless-shell-win64.zip'
161
+ },
114
162
  'chromium-tip-of-tree': {
115
163
  '<unknown>': undefined,
116
164
  'ubuntu18.04-x64': undefined,
@@ -140,6 +188,35 @@ const DOWNLOAD_PATHS = {
140
188
  'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
141
189
  'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip'
142
190
  },
191
+ 'chromium-tip-of-tree-headless-shell': {
192
+ '<unknown>': undefined,
193
+ 'ubuntu18.04-x64': undefined,
194
+ 'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
195
+ 'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
196
+ 'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
197
+ 'ubuntu18.04-arm64': undefined,
198
+ 'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
199
+ 'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
200
+ 'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
201
+ 'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
202
+ 'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
203
+ 'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
204
+ 'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
205
+ 'mac10.13': undefined,
206
+ 'mac10.14': undefined,
207
+ 'mac10.15': undefined,
208
+ 'mac11': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
209
+ 'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
210
+ 'mac12': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
211
+ 'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
212
+ 'mac13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
213
+ 'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
214
+ 'mac14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
215
+ 'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
216
+ 'mac15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
217
+ 'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
218
+ 'win64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-win64.zip'
219
+ },
143
220
  'firefox': {
144
221
  '<unknown>': undefined,
145
222
  'ubuntu18.04-x64': undefined,
@@ -256,6 +333,35 @@ const DOWNLOAD_PATHS = {
256
333
  'mac15-arm64': 'builds/ffmpeg/%s/ffmpeg-mac-arm64.zip',
257
334
  'win64': 'builds/ffmpeg/%s/ffmpeg-win64.zip'
258
335
  },
336
+ 'winldd': {
337
+ '<unknown>': undefined,
338
+ 'ubuntu18.04-x64': undefined,
339
+ 'ubuntu20.04-x64': undefined,
340
+ 'ubuntu22.04-x64': undefined,
341
+ 'ubuntu24.04-x64': undefined,
342
+ 'ubuntu18.04-arm64': undefined,
343
+ 'ubuntu20.04-arm64': undefined,
344
+ 'ubuntu22.04-arm64': undefined,
345
+ 'ubuntu24.04-arm64': undefined,
346
+ 'debian11-x64': undefined,
347
+ 'debian11-arm64': undefined,
348
+ 'debian12-x64': undefined,
349
+ 'debian12-arm64': undefined,
350
+ 'mac10.13': undefined,
351
+ 'mac10.14': undefined,
352
+ 'mac10.15': undefined,
353
+ 'mac11': undefined,
354
+ 'mac11-arm64': undefined,
355
+ 'mac12': undefined,
356
+ 'mac12-arm64': undefined,
357
+ 'mac13': undefined,
358
+ 'mac13-arm64': undefined,
359
+ 'mac14': undefined,
360
+ 'mac14-arm64': undefined,
361
+ 'mac15': undefined,
362
+ 'mac15-arm64': undefined,
363
+ 'win64': 'builds/winldd/%s/winldd-win64.zip'
364
+ },
259
365
  'android': {
260
366
  '<unknown>': 'builds/android/%s/android.zip',
261
367
  'ubuntu18.04-x64': undefined,
@@ -297,7 +403,7 @@ const registryDirectory = exports.registryDirectory = (() => {
297
403
  result = envDefined;
298
404
  } else {
299
405
  let cacheDirectory;
300
- if (process.platform === 'linux') cacheDirectory = process.env.XDG_CACHE_HOME || _path.default.join(os.homedir(), '.cache');else if (process.platform === 'darwin') cacheDirectory = _path.default.join(os.homedir(), 'Library', 'Caches');else if (process.platform === 'win32') cacheDirectory = process.env.LOCALAPPDATA || _path.default.join(os.homedir(), 'AppData', 'Local');else throw new Error('Unsupported platform: ' + process.platform);
406
+ if (process.platform === 'linux') cacheDirectory = process.env.XDG_CACHE_HOME || _path.default.join(_os.default.homedir(), '.cache');else if (process.platform === 'darwin') cacheDirectory = _path.default.join(_os.default.homedir(), 'Library', 'Caches');else if (process.platform === 'win32') cacheDirectory = process.env.LOCALAPPDATA || _path.default.join(_os.default.homedir(), 'AppData', 'Local');else throw new Error('Unsupported platform: ' + process.platform);
301
407
  result = _path.default.join(cacheDirectory, 'ms-playwright');
302
408
  }
303
409
  if (!_path.default.isAbsolute(result)) {
@@ -313,7 +419,7 @@ const registryDirectory = exports.registryDirectory = (() => {
313
419
  function isBrowserDirectory(browserDirectory) {
314
420
  const baseName = _path.default.basename(browserDirectory);
315
421
  for (const browserName of allDownloadable) {
316
- if (baseName.startsWith(browserName + '-')) return true;
422
+ if (baseName.startsWith(browserName.replace(/-/g, '_') + '-')) return true;
317
423
  }
318
424
  return false;
319
425
  }
@@ -326,6 +432,7 @@ function readDescriptors(browsersJSON) {
326
432
  const descriptor = {
327
433
  name,
328
434
  revision,
435
+ hasRevisionOverride: !!revisionOverride,
329
436
  // We only put browser version for the supported operating systems.
330
437
  browserVersion: revisionOverride ? undefined : obj.browserVersion,
331
438
  installByDefault: !!obj.installByDefault,
@@ -339,7 +446,7 @@ function readDescriptors(browsersJSON) {
339
446
  return descriptor;
340
447
  });
341
448
  }
342
- const allDownloadable = ['chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree'];
449
+ const allDownloadable = ['android', 'chromium', 'firefox', 'webkit', 'ffmpeg', 'firefox-beta', 'chromium-tip-of-tree', 'chromium-headless-shell', 'chromium-tip-of-tree-headless-shell'];
343
450
  class Registry {
344
451
  constructor(browsersJSON) {
345
452
  this._executables = void 0;
@@ -357,7 +464,7 @@ class Registry {
357
464
  const preferredDockerVersion = currentDockerVersion ? (0, _dependencies.dockerVersion)(currentDockerVersion.dockerImageNameTemplate) : null;
358
465
  const isOutdatedDockerImage = currentDockerVersion && preferredDockerVersion && currentDockerVersion.dockerImageName !== preferredDockerVersion.dockerImageName;
359
466
  const prettyMessage = isOutdatedDockerImage ? [`Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just updated to ${preferredDockerVersion.driverVersion}.`, `Please update docker image as well.`, `- current: ${currentDockerVersion.dockerImageName}`, `- required: ${preferredDockerVersion.dockerImageName}`, ``, `<3 Playwright Team`].join('\n') : [`Looks like ${sdkLanguage === 'javascript' ? 'Playwright Test or ' : ''}Playwright was just installed or updated.`, `Please run the following command to download new browser${installByDefault ? 's' : ''}:`, ``, ` ${installCommand}`, ``, `<3 Playwright Team`].join('\n');
360
- throw new Error(`Executable doesn't exist at ${e}\n${(0, _utils.wrapInASCIIBox)(prettyMessage, 1)}`);
467
+ throw new Error(`Executable doesn't exist at ${e}\n${(0, _ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
361
468
  }
362
469
  return e;
363
470
  };
@@ -372,13 +479,47 @@ class Registry {
372
479
  executablePath: () => chromiumExecutable,
373
480
  executablePathOrDie: sdkLanguage => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage),
374
481
  installType: chromium.installByDefault ? 'download-by-default' : 'download-on-demand',
375
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'chromium', chromium.dir, ['chrome-linux'], [], ['chrome-win']),
482
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromium.dir, ['chrome-linux'], [], ['chrome-win']),
376
483
  downloadURLs: this._downloadURLs(chromium),
377
484
  browserVersion: chromium.browserVersion,
378
485
  _install: () => this._downloadExecutable(chromium, chromiumExecutable),
379
486
  _dependencyGroup: 'chromium',
380
487
  _isHermeticInstallation: true
381
488
  });
489
+ const chromiumHeadlessShell = descriptors.find(d => d.name === 'chromium-headless-shell');
490
+ const chromiumHeadlessShellExecutable = findExecutablePath(chromiumHeadlessShell.dir, 'chromium-headless-shell');
491
+ this._executables.push({
492
+ type: 'channel',
493
+ name: 'chromium-headless-shell',
494
+ browserName: 'chromium',
495
+ directory: chromiumHeadlessShell.dir,
496
+ executablePath: () => chromiumHeadlessShellExecutable,
497
+ executablePathOrDie: sdkLanguage => executablePathOrDie('chromium', chromiumHeadlessShellExecutable, chromiumHeadlessShell.installByDefault, sdkLanguage),
498
+ installType: chromiumHeadlessShell.installByDefault ? 'download-by-default' : 'download-on-demand',
499
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumHeadlessShell.dir, ['chrome-linux'], [], ['chrome-win']),
500
+ downloadURLs: this._downloadURLs(chromiumHeadlessShell),
501
+ browserVersion: chromium.browserVersion,
502
+ _install: () => this._downloadExecutable(chromiumHeadlessShell, chromiumHeadlessShellExecutable),
503
+ _dependencyGroup: 'chromium',
504
+ _isHermeticInstallation: true
505
+ });
506
+ const chromiumTipOfTreeHeadlessShell = descriptors.find(d => d.name === 'chromium-tip-of-tree-headless-shell');
507
+ const chromiumTipOfTreeHeadlessShellExecutable = findExecutablePath(chromiumTipOfTreeHeadlessShell.dir, 'chromium-headless-shell');
508
+ this._executables.push({
509
+ type: 'channel',
510
+ name: 'chromium-tip-of-tree-headless-shell',
511
+ browserName: 'chromium',
512
+ directory: chromiumTipOfTreeHeadlessShell.dir,
513
+ executablePath: () => chromiumTipOfTreeHeadlessShellExecutable,
514
+ executablePathOrDie: sdkLanguage => executablePathOrDie('chromium', chromiumTipOfTreeHeadlessShellExecutable, chromiumTipOfTreeHeadlessShell.installByDefault, sdkLanguage),
515
+ installType: chromiumTipOfTreeHeadlessShell.installByDefault ? 'download-by-default' : 'download-on-demand',
516
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumTipOfTreeHeadlessShell.dir, ['chrome-linux'], [], ['chrome-win']),
517
+ downloadURLs: this._downloadURLs(chromiumTipOfTreeHeadlessShell),
518
+ browserVersion: chromium.browserVersion,
519
+ _install: () => this._downloadExecutable(chromiumTipOfTreeHeadlessShell, chromiumTipOfTreeHeadlessShellExecutable),
520
+ _dependencyGroup: 'chromium',
521
+ _isHermeticInstallation: true
522
+ });
382
523
  const chromiumTipOfTree = descriptors.find(d => d.name === 'chromium-tip-of-tree');
383
524
  const chromiumTipOfTreeExecutable = findExecutablePath(chromiumTipOfTree.dir, 'chromium');
384
525
  this._executables.push({
@@ -389,7 +530,7 @@ class Registry {
389
530
  executablePath: () => chromiumTipOfTreeExecutable,
390
531
  executablePathOrDie: sdkLanguage => executablePathOrDie('chromium-tip-of-tree', chromiumTipOfTreeExecutable, chromiumTipOfTree.installByDefault, sdkLanguage),
391
532
  installType: chromiumTipOfTree.installByDefault ? 'download-by-default' : 'download-on-demand',
392
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'chromium', chromiumTipOfTree.dir, ['chrome-linux'], [], ['chrome-win']),
533
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromiumTipOfTree.dir, ['chrome-linux'], [], ['chrome-win']),
393
534
  downloadURLs: this._downloadURLs(chromiumTipOfTree),
394
535
  browserVersion: chromiumTipOfTree.browserVersion,
395
536
  _install: () => this._downloadExecutable(chromiumTipOfTree, chromiumTipOfTreeExecutable),
@@ -489,7 +630,7 @@ class Registry {
489
630
  executablePath: () => chromiumExecutable,
490
631
  executablePathOrDie: sdkLanguage => executablePathOrDie('chromium', chromiumExecutable, chromium.installByDefault, sdkLanguage),
491
632
  installType: 'download-on-demand',
492
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'chromium', chromium.dir, ['chrome-linux'], [], ['chrome-win']),
633
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, chromium.dir, ['chrome-linux'], [], ['chrome-win']),
493
634
  downloadURLs: this._downloadURLs(chromium),
494
635
  browserVersion: chromium.browserVersion,
495
636
  _install: () => this._downloadExecutable(chromium, chromiumExecutable),
@@ -506,7 +647,7 @@ class Registry {
506
647
  executablePath: () => firefoxExecutable,
507
648
  executablePathOrDie: sdkLanguage => executablePathOrDie('firefox', firefoxExecutable, firefox.installByDefault, sdkLanguage),
508
649
  installType: firefox.installByDefault ? 'download-by-default' : 'download-on-demand',
509
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'firefox', firefox.dir, ['firefox'], [], ['firefox']),
650
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, firefox.dir, ['firefox'], [], ['firefox']),
510
651
  downloadURLs: this._downloadURLs(firefox),
511
652
  browserVersion: firefox.browserVersion,
512
653
  _install: () => this._downloadExecutable(firefox, firefoxExecutable),
@@ -523,7 +664,7 @@ class Registry {
523
664
  executablePath: () => firefoxBetaExecutable,
524
665
  executablePathOrDie: sdkLanguage => executablePathOrDie('firefox-beta', firefoxBetaExecutable, firefoxBeta.installByDefault, sdkLanguage),
525
666
  installType: firefoxBeta.installByDefault ? 'download-by-default' : 'download-on-demand',
526
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'firefox', firefoxBeta.dir, ['firefox'], [], ['firefox']),
667
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, firefoxBeta.dir, ['firefox'], [], ['firefox']),
527
668
  downloadURLs: this._downloadURLs(firefoxBeta),
528
669
  browserVersion: firefoxBeta.browserVersion,
529
670
  _install: () => this._downloadExecutable(firefoxBeta, firefoxBetaExecutable),
@@ -541,7 +682,7 @@ class Registry {
541
682
  executablePath: () => webkitExecutable,
542
683
  executablePathOrDie: sdkLanguage => executablePathOrDie('webkit', webkitExecutable, webkit.installByDefault, sdkLanguage),
543
684
  installType: webkit.installByDefault ? 'download-by-default' : 'download-on-demand',
544
- _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, 'webkit', webkit.dir, webkitLinuxLddDirectories, ['libGLESv2.so.2', 'libx264.so'], ['']),
685
+ _validateHostRequirements: sdkLanguage => this._validateHostRequirements(sdkLanguage, webkit.dir, webkitLinuxLddDirectories, ['libGLESv2.so.2', 'libx264.so'], ['']),
545
686
  downloadURLs: this._downloadURLs(webkit),
546
687
  browserVersion: webkit.browserVersion,
547
688
  _install: () => this._downloadExecutable(webkit, webkitExecutable),
@@ -564,6 +705,22 @@ class Registry {
564
705
  _dependencyGroup: 'tools',
565
706
  _isHermeticInstallation: true
566
707
  });
708
+ const winldd = descriptors.find(d => d.name === 'winldd');
709
+ const winlddExecutable = findExecutablePath(winldd.dir, 'winldd');
710
+ this._executables.push({
711
+ type: 'tool',
712
+ name: 'winldd',
713
+ browserName: undefined,
714
+ directory: winldd.dir,
715
+ executablePath: () => winlddExecutable,
716
+ executablePathOrDie: sdkLanguage => executablePathOrDie('winldd', winlddExecutable, winldd.installByDefault, sdkLanguage),
717
+ installType: process.platform === 'win32' ? 'download-by-default' : 'none',
718
+ _validateHostRequirements: () => Promise.resolve(),
719
+ downloadURLs: this._downloadURLs(winldd),
720
+ _install: () => this._downloadExecutable(winldd, winlddExecutable),
721
+ _dependencyGroup: 'tools',
722
+ _isHermeticInstallation: true
723
+ });
567
724
  const android = descriptors.find(d => d.name === 'android');
568
725
  this._executables.push({
569
726
  type: 'tool',
@@ -634,7 +791,7 @@ class Registry {
634
791
  const folder = _path.default.resolve('firefox');
635
792
  let channelName = 'stable';
636
793
  if (name.includes('beta')) channelName = 'beta';else if (name.includes('nightly')) channelName = 'nightly';
637
- const installedVersions = fs.readdirSync(folder);
794
+ const installedVersions = _fs.default.readdirSync(folder);
638
795
  const found = installedVersions.filter(e => e.includes(channelName));
639
796
  if (found.length === 1) return _path.default.join(folder, found[0], suffix);
640
797
  if (found.length > 1) {
@@ -695,31 +852,26 @@ class Registry {
695
852
  defaultExecutables() {
696
853
  return this._executables.filter(e => e.installType === 'download-by-default');
697
854
  }
698
- _addRequirementsAndDedupe(executables) {
699
- const set = new Set();
700
- for (const executable of executables) {
701
- set.add(executable);
702
- if (executable.browserName === 'chromium') set.add(this.findExecutable('ffmpeg'));
703
- }
704
- return Array.from(set);
855
+ _dedupe(executables) {
856
+ return Array.from(new Set(executables));
705
857
  }
706
- async _validateHostRequirements(sdkLanguage, browserName, browserDirectory, linuxLddDirectories, dlOpenLibraries, windowsExeAndDllDirectories) {
707
- if (os.platform() === 'linux') return await (0, _dependencies.validateDependenciesLinux)(sdkLanguage, linuxLddDirectories.map(d => _path.default.join(browserDirectory, d)), dlOpenLibraries);
708
- if (os.platform() === 'win32' && os.arch() === 'x64') return await (0, _dependencies.validateDependenciesWindows)(windowsExeAndDllDirectories.map(d => _path.default.join(browserDirectory, d)));
858
+ async _validateHostRequirements(sdkLanguage, browserDirectory, linuxLddDirectories, dlOpenLibraries, windowsExeAndDllDirectories) {
859
+ if (_os.default.platform() === 'linux') return await (0, _dependencies.validateDependenciesLinux)(sdkLanguage, linuxLddDirectories.map(d => _path.default.join(browserDirectory, d)), dlOpenLibraries);
860
+ if (_os.default.platform() === 'win32' && _os.default.arch() === 'x64') return await (0, _dependencies.validateDependenciesWindows)(sdkLanguage, windowsExeAndDllDirectories.map(d => _path.default.join(browserDirectory, d)));
709
861
  }
710
862
  async installDeps(executablesToInstallDeps, dryRun) {
711
- const executables = this._addRequirementsAndDedupe(executablesToInstallDeps);
863
+ const executables = this._dedupe(executablesToInstallDeps);
712
864
  const targets = new Set();
713
865
  for (const executable of executables) {
714
866
  if (executable._dependencyGroup) targets.add(executable._dependencyGroup);
715
867
  }
716
868
  targets.add('tools');
717
- if (os.platform() === 'win32') return await (0, _dependencies.installDependenciesWindows)(targets, dryRun);
718
- if (os.platform() === 'linux') return await (0, _dependencies.installDependenciesLinux)(targets, dryRun);
869
+ if (_os.default.platform() === 'win32') return await (0, _dependencies.installDependenciesWindows)(targets, dryRun);
870
+ if (_os.default.platform() === 'linux') return await (0, _dependencies.installDependenciesLinux)(targets, dryRun);
719
871
  }
720
872
  async install(executablesToInstall, forceReinstall) {
721
- const executables = this._addRequirementsAndDedupe(executablesToInstall);
722
- await fs.promises.mkdir(registryDirectory, {
873
+ const executables = this._dedupe(executablesToInstall);
874
+ await _fs.default.promises.mkdir(registryDirectory, {
723
875
  recursive: true
724
876
  });
725
877
  const lockfilePath = _path.default.join(registryDirectory, '__dirlock');
@@ -740,10 +892,10 @@ class Registry {
740
892
  lockfilePath
741
893
  });
742
894
  // Create a link first, so that cache validation does not remove our own browsers.
743
- await fs.promises.mkdir(linksDir, {
895
+ await _fs.default.promises.mkdir(linksDir, {
744
896
  recursive: true
745
897
  });
746
- await fs.promises.writeFile(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
898
+ await _fs.default.promises.writeFile(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
747
899
 
748
900
  // Remove stale browsers.
749
901
  await this._validateInstallationCache(linksDir);
@@ -756,14 +908,14 @@ class Registry {
756
908
  } = (0, _userAgent.getEmbedderName)();
757
909
  if (!(0, _utils.getAsBooleanFromENV)('CI') && !executable._isHermeticInstallation && !forceReinstall && executable.executablePath(embedderName)) {
758
910
  const command = buildPlaywrightCLICommand(embedderName, 'install --force ' + executable.name);
759
- throw new Error('\n' + (0, _utils.wrapInASCIIBox)([`ATTENTION: "${executable.name}" is already installed on the system!`, ``, `"${executable.name}" installation is not hermetic; installing newer version`, `requires *removal* of a current installation first.`, ``, `To *uninstall* current version and re-install latest "${executable.name}":`, ``, `- Close all running instances of "${executable.name}", if any`, `- Use "--force" to install browser:`, ``, ` ${command}`, ``, `<3 Playwright Team`].join('\n'), 1));
911
+ throw new Error('\n' + (0, _ascii.wrapInASCIIBox)([`ATTENTION: "${executable.name}" is already installed on the system!`, ``, `"${executable.name}" installation is not hermetic; installing newer version`, `requires *removal* of a current installation first.`, ``, `To *uninstall* current version and re-install latest "${executable.name}":`, ``, `- Close all running instances of "${executable.name}", if any`, `- Use "--force" to install browser:`, ``, ` ${command}`, ``, `<3 Playwright Team`].join('\n'), 1));
760
912
  }
761
913
  await executable._install();
762
914
  }
763
915
  } catch (e) {
764
916
  if (e.code === 'ELOCKED') {
765
917
  const rmCommand = process.platform === 'win32' ? 'rm -R' : 'rm -rf';
766
- throw new Error('\n' + (0, _utils.wrapInASCIIBox)([`An active lockfile is found at:`, ``, ` ${lockfilePath}`, ``, `Either:`, `- wait a few minutes if other Playwright is installing browsers in parallel`, `- remove lock manually with:`, ``, ` ${rmCommand} ${lockfilePath}`, ``, `<3 Playwright Team`].join('\n'), 1));
918
+ throw new Error('\n' + (0, _ascii.wrapInASCIIBox)([`An active lockfile is found at:`, ``, ` ${lockfilePath}`, ``, `Either:`, `- wait a few minutes if other Playwright is installing browsers in parallel`, `- remove lock manually with:`, ``, ` ${rmCommand} ${lockfilePath}`, ``, `<3 Playwright Team`].join('\n'), 1));
767
919
  } else {
768
920
  throw e;
769
921
  }
@@ -774,16 +926,16 @@ class Registry {
774
926
  async uninstall(all) {
775
927
  const linksDir = _path.default.join(registryDirectory, '.links');
776
928
  if (all) {
777
- const links = await fs.promises.readdir(linksDir).catch(() => []);
778
- for (const link of links) await fs.promises.unlink(_path.default.join(linksDir, link));
929
+ const links = await _fs.default.promises.readdir(linksDir).catch(() => []);
930
+ for (const link of links) await _fs.default.promises.unlink(_path.default.join(linksDir, link));
779
931
  } else {
780
- await fs.promises.unlink(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH))).catch(() => {});
932
+ await _fs.default.promises.unlink(_path.default.join(linksDir, (0, _utils.calculateSha1)(PACKAGE_PATH))).catch(() => {});
781
933
  }
782
934
 
783
935
  // Remove stale browsers.
784
936
  await this._validateInstallationCache(linksDir);
785
937
  return {
786
- numberOfBrowsersLeft: (await fs.promises.readdir(registryDirectory).catch(() => [])).filter(browserDirectory => isBrowserDirectory(browserDirectory)).length
938
+ numberOfBrowsersLeft: (await _fs.default.promises.readdir(registryDirectory).catch(() => [])).filter(browserDirectory => isBrowserDirectory(browserDirectory)).length
787
939
  };
788
940
  }
789
941
  async validateHostRequirementsForExecutablesIfNeeded(executables, sdkLanguage) {
@@ -799,7 +951,7 @@ class Registry {
799
951
  if (!executable.directory) return;
800
952
  const markerFile = _path.default.join(executable.directory, 'DEPENDENCIES_VALIDATED');
801
953
  // Executable is already validated.
802
- if (await fs.promises.stat(markerFile).then(stat => Date.now() - stat.mtime.getTime() < kMaximumReValidationPeriod).catch(() => false)) return;
954
+ if (await _fs.default.promises.stat(markerFile).then(stat => Date.now() - stat.mtime.getTime() < kMaximumReValidationPeriod).catch(() => false)) return;
803
955
  _debugLogger.debugLogger.log('install', `validating host requirements for "${executable.name}"`);
804
956
  try {
805
957
  await executable._validateHostRequirements(sdkLanguage);
@@ -808,7 +960,7 @@ class Registry {
808
960
  _debugLogger.debugLogger.log('install', `validation failed for ${executable.name}`);
809
961
  throw error;
810
962
  }
811
- await fs.promises.writeFile(markerFile, '').catch(() => {});
963
+ await _fs.default.promises.writeFile(markerFile, '').catch(() => {});
812
964
  }
813
965
  _downloadURLs(descriptor) {
814
966
  const paths = DOWNLOAD_PATHS[descriptor.name];
@@ -826,6 +978,11 @@ class Registry {
826
978
  const downloadURLs = this._downloadURLs(descriptor);
827
979
  if (!downloadURLs.length) throw new Error(`ERROR: Playwright does not support ${descriptor.name} on ${_hostPlatform.hostPlatform}`);
828
980
  if (!_hostPlatform.isOfficiallySupportedPlatform) (0, _browserFetcher.logPolitely)(`BEWARE: your OS is not officially supported by Playwright; downloading fallback build for ${_hostPlatform.hostPlatform}.`);
981
+ if (descriptor.hasRevisionOverride) {
982
+ const message = `You are using a frozen ${descriptor.name} browser which does not receive updates anymore on ${_hostPlatform.hostPlatform}. Please update to the latest version of your operating system to test up-to-date browsers.`;
983
+ if (process.env.GITHUB_ACTIONS) console.log(`::warning title=Playwright::${message}`); // eslint-disable-line no-console
984
+ else (0, _browserFetcher.logPolitely)(message);
985
+ }
829
986
  const displayName = descriptor.name.split('-').map(word => {
830
987
  return word === 'ffmpeg' ? 'FFMPEG' : word.charAt(0).toUpperCase() + word.slice(1);
831
988
  }).join(' ');
@@ -900,11 +1057,11 @@ class Registry {
900
1057
  async _validateInstallationCache(linksDir) {
901
1058
  // 1. Collect used downloads and package descriptors.
902
1059
  const usedBrowserPaths = new Set();
903
- for (const fileName of await fs.promises.readdir(linksDir)) {
1060
+ for (const fileName of await _fs.default.promises.readdir(linksDir)) {
904
1061
  const linkPath = _path.default.join(linksDir, fileName);
905
1062
  let linkTarget = '';
906
1063
  try {
907
- linkTarget = (await fs.promises.readFile(linkPath)).toString();
1064
+ linkTarget = (await _fs.default.promises.readFile(linkPath)).toString();
908
1065
  const browsersJSON = require(_path.default.join(linkTarget, 'browsers.json'));
909
1066
  const descriptors = readDescriptors(browsersJSON);
910
1067
  for (const browserName of allDownloadable) {
@@ -925,13 +1082,13 @@ class Registry {
925
1082
  if (!shouldHaveMarkerFile || (await (0, _fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(usedBrowserPath)))) usedBrowserPaths.add(usedBrowserPath);
926
1083
  }
927
1084
  } catch (e) {
928
- await fs.promises.unlink(linkPath).catch(e => {});
1085
+ await _fs.default.promises.unlink(linkPath).catch(e => {});
929
1086
  }
930
1087
  }
931
1088
 
932
1089
  // 2. Delete all unused browsers.
933
1090
  if (!(0, _utils.getAsBooleanFromENV)('PLAYWRIGHT_SKIP_BROWSER_GC')) {
934
- let downloadedBrowsers = (await fs.promises.readdir(registryDirectory)).map(file => _path.default.join(registryDirectory, file));
1091
+ let downloadedBrowsers = (await _fs.default.promises.readdir(registryDirectory)).map(file => _path.default.join(registryDirectory, file));
935
1092
  downloadedBrowsers = downloadedBrowsers.filter(file => isBrowserDirectory(file));
936
1093
  const directories = new Set(downloadedBrowsers);
937
1094
  for (const browserDirectory of usedBrowserPaths) directories.delete(browserDirectory);
@@ -959,10 +1116,6 @@ function buildPlaywrightCLICommand(sdkLanguage, parameters) {
959
1116
  }
960
1117
  }
961
1118
  }
962
- async function installDefaultBrowsersForNpmInstall() {
963
- const defaultBrowserNames = registry.defaultExecutables().map(e => e.name);
964
- return installBrowsersForNpmInstall(defaultBrowserNames);
965
- }
966
1119
  async function installBrowsersForNpmInstall(browsers) {
967
1120
  // PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD should have a value of 0 or 1
968
1121
  if ((0, _utils.getAsBooleanFromENV)('PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD')) {
@@ -970,6 +1123,7 @@ async function installBrowsersForNpmInstall(browsers) {
970
1123
  return false;
971
1124
  }
972
1125
  const executables = [];
1126
+ if (process.platform === 'win32') executables.push(registry.findExecutable('winldd'));
973
1127
  for (const browserName of browsers) {
974
1128
  const executable = registry.findExecutable(browserName);
975
1129
  if (!executable || executable.installType === 'none') throw new Error(`Cannot install ${browserName}`);
@@ -991,7 +1145,7 @@ function findChromiumChannel(sdkLanguage) {
991
1145
  if (channel === null) {
992
1146
  const installCommand = buildPlaywrightCLICommand(sdkLanguage, `install chromium`);
993
1147
  const prettyMessage = [`No chromium-based browser found on the system.`, `Please run the following command to download one:`, ``, ` ${installCommand}`, ``, `<3 Playwright Team`].join('\n');
994
- throw new Error('\n' + (0, _utils.wrapInASCIIBox)(prettyMessage, 1));
1148
+ throw new Error('\n' + (0, _ascii.wrapInASCIIBox)(prettyMessage, 1));
995
1149
  }
996
1150
  return channel;
997
1151
  }
@@ -129,8 +129,9 @@ const deps = exports.deps = {
129
129
  tools: ['xvfb', 'fonts-noto-color-emoji', 'fonts-unifont', 'libfontconfig1', 'libfreetype6', 'xfonts-cyrillic', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'fonts-freefont-ttf'],
130
130
  chromium: ['libasound2', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libatspi2.0-0', 'libcairo2', 'libcups2', 'libdbus-1-3', 'libdrm2', 'libgbm1', 'libglib2.0-0', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libwayland-client0', 'libx11-6', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxkbcommon0', 'libxrandr2'],
131
131
  firefox: ['ffmpeg', 'libasound2', 'libatk1.0-0', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdbus-glib-1-2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf-2.0-0', 'libglib2.0-0', 'libgtk-3-0', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrandr2', 'libxrender1', 'libxtst6'],
132
- webkit: ['libsoup-3.0-0', 'libenchant-2-2', 'gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libicu70', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libepoxy0', 'libevdev2', 'libffi7', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0', 'libglx0', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0', 'libgudev-1.0-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libjpeg-turbo8', 'liblcms2-2', 'libmanette-0.2-0', 'libnotify4', 'libopengl0', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libproxy1v5', 'libsecret-1-0', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libx264-163', 'libatomic1', 'libevent-2.1-7'],
132
+ webkit: ['libsoup-3.0-0', 'libenchant-2-2', 'gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libicu70', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libepoxy0', 'libevdev2', 'libffi7', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0', 'libglx0', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-4-1', 'libgudev-1.0-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libjpeg-turbo8', 'liblcms2-2', 'libmanette-0.2-0', 'libnotify4', 'libopengl0', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libproxy1v5', 'libsecret-1-0', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libx264-163', 'libatomic1', 'libevent-2.1-7', 'libavif13'],
133
133
  lib2package: {
134
+ 'libavif.so.13': 'libavif13',
134
135
  'libsoup-3.0.so.0': 'libsoup-3.0-0',
135
136
  'libasound.so.2': 'libasound2',
136
137
  'libatk-1.0.so.0': 'libatk1.0-0',
@@ -168,6 +169,7 @@ const deps = exports.deps = {
168
169
  'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
169
170
  'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
170
171
  'libgtk-3.so.0': 'libgtk-3-0',
172
+ 'libgtk-4.so.1': 'libgtk-4-1',
171
173
  'libgudev-1.0.so.0': 'libgudev-1.0-0',
172
174
  'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',
173
175
  'libharfbuzz.so.0': 'libharfbuzz0b',
@@ -224,8 +226,9 @@ const deps = exports.deps = {
224
226
  tools: ['xvfb', 'fonts-noto-color-emoji', 'fonts-unifont', 'libfontconfig1', 'libfreetype6', 'xfonts-cyrillic', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'fonts-freefont-ttf'],
225
227
  chromium: ['libasound2t64', 'libatk-bridge2.0-0t64', 'libatk1.0-0t64', 'libatspi2.0-0t64', 'libcairo2', 'libcups2t64', 'libdbus-1-3', 'libdrm2', 'libgbm1', 'libglib2.0-0t64', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libx11-6', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxkbcommon0', 'libxrandr2'],
226
228
  firefox: ['libasound2t64', 'libatk1.0-0t64', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf-2.0-0', 'libglib2.0-0t64', 'libgtk-3-0t64', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrandr2', 'libxrender1'],
227
- webkit: ['gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libicu74', 'libatomic1', 'libatk-bridge2.0-0t64', 'libatk1.0-0t64', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libenchant-2-2', 'libepoxy0', 'libevent-2.1-7t64', 'libflite1', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0t64', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-bad1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0t64', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu74', 'libjpeg-turbo8', 'liblcms2-2', 'libmanette-0.2-0', 'libopus0', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libpng16-16t64', 'libsecret-1-0', 'libvpx9', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp7', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libx264-164'],
229
+ webkit: ['gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libicu74', 'libatomic1', 'libatk-bridge2.0-0t64', 'libatk1.0-0t64', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libenchant-2-2', 'libepoxy0', 'libevent-2.1-7t64', 'libflite1', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0t64', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-bad1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-4-1', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu74', 'libjpeg-turbo8', 'liblcms2-2', 'libmanette-0.2-0', 'libopus0', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libpng16-16t64', 'libsecret-1-0', 'libvpx9', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp7', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libx264-164', 'libavif16'],
228
230
  lib2package: {
231
+ 'libavif.so.16': 'libavif16',
229
232
  'libasound.so.2': 'libasound2t64',
230
233
  'libatk-1.0.so.0': 'libatk1.0-0t64',
231
234
  'libatk-bridge-2.0.so.0': 'libatk-bridge2.0-0t64',
@@ -274,6 +277,7 @@ const deps = exports.deps = {
274
277
  'libgsttag-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
275
278
  'libgstvideo-1.0.so.0': 'libgstreamer-plugins-base1.0-0',
276
279
  'libgtk-3.so.0': 'libgtk-3-0t64',
280
+ 'libgtk-4.so.1': 'libgtk-4-1',
277
281
  'libharfbuzz-icu.so.0': 'libharfbuzz-icu0',
278
282
  'libharfbuzz.so.0': 'libharfbuzz0b',
279
283
  'libhyphen.so.0': 'libhyphen0',
@@ -412,8 +416,9 @@ const deps = exports.deps = {
412
416
  tools: ['xvfb', 'fonts-noto-color-emoji', 'fonts-unifont', 'libfontconfig1', 'libfreetype6', 'xfonts-scalable', 'fonts-liberation', 'fonts-ipafont-gothic', 'fonts-wqy-zenhei', 'fonts-tlwg-loma-otf', 'fonts-freefont-ttf'],
413
417
  chromium: ['libasound2', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libatspi2.0-0', 'libcairo2', 'libcups2', 'libdbus-1-3', 'libdrm2', 'libgbm1', 'libglib2.0-0', 'libnspr4', 'libnss3', 'libpango-1.0-0', 'libx11-6', 'libxcb1', 'libxcomposite1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxkbcommon0', 'libxrandr2'],
414
418
  firefox: ['libasound2', 'libatk1.0-0', 'libcairo-gobject2', 'libcairo2', 'libdbus-1-3', 'libdbus-glib-1-2', 'libfontconfig1', 'libfreetype6', 'libgdk-pixbuf-2.0-0', 'libglib2.0-0', 'libgtk-3-0', 'libharfbuzz0b', 'libpango-1.0-0', 'libpangocairo-1.0-0', 'libx11-6', 'libx11-xcb1', 'libxcb-shm0', 'libxcb1', 'libxcomposite1', 'libxcursor1', 'libxdamage1', 'libxext6', 'libxfixes3', 'libxi6', 'libxrandr2', 'libxrender1', 'libxtst6'],
415
- webkit: ['libsoup-3.0-0', 'gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libenchant-2-2', 'libepoxy0', 'libevdev2', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0', 'libglx0', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-3-0', 'libgudev-1.0-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu72', 'libjpeg62-turbo', 'liblcms2-2', 'libmanette-0.2-0', 'libnotify4', 'libopengl0', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libproxy1v5', 'libsecret-1-0', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp7', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libatomic1', 'libevent-2.1-7'],
419
+ webkit: ['libsoup-3.0-0', 'gstreamer1.0-libav', 'gstreamer1.0-plugins-bad', 'gstreamer1.0-plugins-base', 'gstreamer1.0-plugins-good', 'libatk-bridge2.0-0', 'libatk1.0-0', 'libcairo2', 'libdbus-1-3', 'libdrm2', 'libegl1', 'libenchant-2-2', 'libepoxy0', 'libevdev2', 'libfontconfig1', 'libfreetype6', 'libgbm1', 'libgdk-pixbuf-2.0-0', 'libgles2', 'libglib2.0-0', 'libglx0', 'libgstreamer-gl1.0-0', 'libgstreamer-plugins-base1.0-0', 'libgstreamer1.0-0', 'libgtk-4-1', 'libgudev-1.0-0', 'libharfbuzz-icu0', 'libharfbuzz0b', 'libhyphen0', 'libicu72', 'libjpeg62-turbo', 'liblcms2-2', 'libmanette-0.2-0', 'libnotify4', 'libopengl0', 'libopenjp2-7', 'libopus0', 'libpango-1.0-0', 'libpng16-16', 'libproxy1v5', 'libsecret-1-0', 'libwayland-client0', 'libwayland-egl1', 'libwayland-server0', 'libwebp7', 'libwebpdemux2', 'libwoff1', 'libx11-6', 'libxcomposite1', 'libxdamage1', 'libxkbcommon0', 'libxml2', 'libxslt1.1', 'libatomic1', 'libevent-2.1-7', 'libavif15'],
416
420
  lib2package: {
421
+ 'libavif.so.15': 'libavif15',
417
422
  'libsoup-3.0.so.0': 'libsoup-3.0-0',
418
423
  'libasound.so.2': 'libasound2',
419
424
  'libatk-1.0.so.0': 'libatk1.0-0',
@@ -439,7 +444,8 @@ const deps = exports.deps = {
439
444
  'libXext.so.6': 'libxext6',
440
445
  'libXfixes.so.3': 'libxfixes3',
441
446
  'libxkbcommon.so.0': 'libxkbcommon0',
442
- 'libXrandr.so.2': 'libxrandr2'
447
+ 'libXrandr.so.2': 'libxrandr2',
448
+ 'libgtk-4.so.1': 'libgtk-4-1'
443
449
  }
444
450
  }
445
451
  };