patchright-core 1.52.5 → 1.55.0

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 (218) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/bin/reinstall_chrome_beta_mac.sh +1 -1
  3. package/bin/reinstall_chrome_stable_mac.sh +1 -1
  4. package/bin/reinstall_msedge_beta_mac.sh +1 -1
  5. package/bin/reinstall_msedge_dev_mac.sh +1 -1
  6. package/bin/reinstall_msedge_stable_mac.sh +1 -1
  7. package/browsers.json +14 -14
  8. package/index.js +1 -1
  9. package/lib/androidServerImpl.js +4 -2
  10. package/lib/browserServerImpl.js +47 -12
  11. package/lib/cli/program.js +116 -50
  12. package/lib/cli/programWithTestStub.js +1 -1
  13. package/lib/client/android.js +30 -34
  14. package/lib/client/browser.js +54 -17
  15. package/lib/client/browserContext.js +67 -71
  16. package/lib/client/browserType.js +25 -34
  17. package/lib/client/channelOwner.js +20 -24
  18. package/lib/client/connection.js +6 -10
  19. package/lib/client/electron.js +8 -3
  20. package/lib/client/elementHandle.js +18 -21
  21. package/lib/client/fetch.js +5 -3
  22. package/lib/client/frame.js +54 -32
  23. package/lib/client/input.js +3 -1
  24. package/lib/client/jsHandle.js +4 -0
  25. package/lib/client/localUtils.js +0 -1
  26. package/lib/client/locator.js +30 -26
  27. package/lib/client/network.js +5 -12
  28. package/lib/client/page.js +32 -32
  29. package/lib/client/playwright.js +6 -16
  30. package/lib/client/selectors.js +18 -38
  31. package/lib/client/timeoutSettings.js +12 -8
  32. package/lib/client/tracing.js +24 -20
  33. package/lib/client/waiter.js +2 -2
  34. package/lib/client/webSocket.js +4 -22
  35. package/lib/generated/bindingsControllerSource.js +28 -0
  36. package/lib/generated/clockSource.js +1 -1
  37. package/lib/generated/injectedScriptSource.js +1 -1
  38. package/lib/generated/pollingRecorderSource.js +1 -1
  39. package/lib/generated/storageScriptSource.js +28 -0
  40. package/lib/generated/utilityScriptSource.js +1 -1
  41. package/lib/generated/webSocketMockSource.js +12 -50
  42. package/lib/inProcessFactory.js +9 -6
  43. package/lib/outofprocess.js +0 -2
  44. package/lib/protocol/validator.js +421 -345
  45. package/lib/protocol/validatorPrimitives.js +18 -4
  46. package/lib/remote/playwrightConnection.js +29 -166
  47. package/lib/remote/playwrightServer.js +233 -35
  48. package/lib/server/android/android.js +97 -83
  49. package/lib/server/android/backendAdb.js +0 -2
  50. package/lib/server/bidi/bidiBrowser.js +139 -73
  51. package/lib/server/bidi/bidiChromium.js +23 -22
  52. package/lib/server/bidi/bidiExecutionContext.js +2 -1
  53. package/lib/server/bidi/bidiFirefox.js +17 -14
  54. package/lib/server/bidi/bidiInput.js +22 -22
  55. package/lib/server/bidi/bidiNetworkManager.js +8 -11
  56. package/lib/server/bidi/bidiPage.js +42 -86
  57. package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
  58. package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  59. package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
  60. package/lib/server/browser.js +30 -21
  61. package/lib/server/browserContext.js +203 -165
  62. package/lib/server/browserType.js +109 -107
  63. package/lib/server/chromium/chromium.js +84 -69
  64. package/lib/server/chromium/chromiumSwitches.js +13 -20
  65. package/lib/server/chromium/crBrowser.js +74 -40
  66. package/lib/server/chromium/crConnection.js +8 -9
  67. package/lib/server/chromium/crCoverage.js +11 -8
  68. package/lib/server/chromium/crDragDrop.js +25 -20
  69. package/lib/server/chromium/crExecutionContext.js +2 -1
  70. package/lib/server/chromium/crInput.js +32 -29
  71. package/lib/server/chromium/crNetworkManager.js +43 -31
  72. package/lib/server/chromium/crPage.js +98 -72
  73. package/lib/server/chromium/crServiceWorker.js +13 -18
  74. package/lib/server/chromium/videoRecorder.js +10 -18
  75. package/lib/server/clock.js +51 -39
  76. package/lib/server/codegen/csharp.js +10 -5
  77. package/lib/server/codegen/java.js +1 -1
  78. package/lib/server/codegen/javascript.js +1 -1
  79. package/lib/server/codegen/jsonl.js +2 -1
  80. package/lib/server/codegen/language.js +22 -1
  81. package/lib/server/codegen/languages.js +4 -4
  82. package/lib/server/codegen/python.js +1 -1
  83. package/lib/server/cookieStore.js +3 -1
  84. package/lib/server/debugController.js +105 -71
  85. package/lib/server/debugger.js +6 -23
  86. package/lib/server/deviceDescriptorsSource.json +237 -127
  87. package/lib/server/dialog.js +50 -6
  88. package/lib/server/dispatchers/androidDispatcher.js +77 -62
  89. package/lib/server/dispatchers/artifactDispatcher.js +18 -18
  90. package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
  91. package/lib/server/dispatchers/browserDispatcher.js +55 -88
  92. package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
  93. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
  94. package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
  95. package/lib/server/dispatchers/dialogDispatcher.js +4 -4
  96. package/lib/server/dispatchers/dispatcher.js +78 -53
  97. package/lib/server/dispatchers/electronDispatcher.js +19 -20
  98. package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
  99. package/lib/server/dispatchers/frameDispatcher.js +98 -101
  100. package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
  101. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
  102. package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
  103. package/lib/server/dispatchers/networkDispatchers.js +41 -35
  104. package/lib/server/dispatchers/pageDispatcher.js +156 -107
  105. package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
  106. package/lib/server/dispatchers/streamDispatcher.js +15 -8
  107. package/lib/server/dispatchers/tracingDispatcher.js +22 -13
  108. package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
  109. package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
  110. package/lib/server/dom.js +198 -266
  111. package/lib/server/download.js +3 -3
  112. package/lib/server/electron/electron.js +96 -103
  113. package/lib/server/electron/loader.js +1 -1
  114. package/lib/server/fetch.js +22 -41
  115. package/lib/server/fileUploadUtils.js +1 -1
  116. package/lib/server/firefox/ffBrowser.js +79 -55
  117. package/lib/server/firefox/ffExecutionContext.js +2 -1
  118. package/lib/server/firefox/ffInput.js +23 -23
  119. package/lib/server/firefox/ffNetworkManager.js +8 -6
  120. package/lib/server/firefox/ffPage.js +39 -36
  121. package/lib/server/firefox/firefox.js +9 -10
  122. package/lib/server/frameSelectors.js +63 -20
  123. package/lib/server/frames.js +495 -555
  124. package/lib/server/har/harRecorder.js +1 -1
  125. package/lib/server/har/harTracer.js +4 -2
  126. package/lib/server/helper.js +3 -7
  127. package/lib/server/index.js +0 -3
  128. package/lib/server/input.js +47 -54
  129. package/lib/server/instrumentation.js +8 -14
  130. package/lib/server/javascript.js +8 -16
  131. package/lib/server/launchApp.js +48 -30
  132. package/lib/server/localUtils.js +45 -38
  133. package/lib/server/network.js +44 -10
  134. package/lib/server/page.js +232 -177
  135. package/lib/server/pageBinding.js +6 -7
  136. package/lib/server/playwright.js +4 -14
  137. package/lib/server/progress.js +57 -49
  138. package/lib/server/recorder/recorderApp.js +298 -95
  139. package/lib/server/recorder/recorderRunner.js +23 -24
  140. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  141. package/lib/server/recorder/recorderUtils.js +67 -10
  142. package/lib/server/recorder.js +284 -146
  143. package/lib/server/registry/index.js +83 -48
  144. package/lib/server/registry/nativeDeps.js +175 -0
  145. package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
  146. package/lib/server/screenshotter.js +84 -83
  147. package/lib/server/selectors.js +12 -12
  148. package/lib/server/socksClientCertificatesInterceptor.js +198 -136
  149. package/lib/server/trace/recorder/snapshotter.js +12 -19
  150. package/lib/server/trace/recorder/tracing.js +36 -27
  151. package/lib/server/trace/viewer/traceViewer.js +11 -20
  152. package/lib/server/transport.js +20 -22
  153. package/lib/server/utils/comparators.js +2 -2
  154. package/lib/server/utils/debug.js +3 -8
  155. package/lib/server/utils/debugLogger.js +8 -0
  156. package/lib/server/utils/hostPlatform.js +3 -1
  157. package/lib/server/utils/network.js +35 -25
  158. package/lib/server/utils/nodePlatform.js +1 -1
  159. package/lib/server/utils/processLauncher.js +4 -1
  160. package/lib/server/utils/wsServer.js +11 -17
  161. package/lib/server/webkit/webkit.js +5 -2
  162. package/lib/server/webkit/wkBrowser.js +51 -28
  163. package/lib/server/webkit/wkExecutionContext.js +2 -1
  164. package/lib/server/webkit/wkInput.js +25 -25
  165. package/lib/server/webkit/wkInterceptableRequest.js +1 -1
  166. package/lib/server/webkit/wkPage.js +80 -59
  167. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  168. package/lib/server/webkit/wkWorkers.js +7 -7
  169. package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
  170. package/lib/utils/isomorphic/cssParser.js +1 -2
  171. package/lib/utils/isomorphic/locatorGenerators.js +18 -0
  172. package/lib/utils/isomorphic/manualPromise.js +1 -2
  173. package/lib/utils/isomorphic/mimeType.js +1 -2
  174. package/lib/utils/isomorphic/multimap.js +1 -2
  175. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
  176. package/lib/utils/isomorphic/protocolFormatter.js +78 -0
  177. package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
  178. package/lib/utils/isomorphic/selectorParser.js +3 -4
  179. package/lib/utils/isomorphic/stringUtils.js +3 -24
  180. package/lib/utils/isomorphic/time.js +9 -4
  181. package/lib/utils/isomorphic/timeoutRunner.js +3 -4
  182. package/lib/utils/isomorphic/traceUtils.js +2 -3
  183. package/lib/utils/isomorphic/urlMatch.js +21 -7
  184. package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
  185. package/lib/utils.js +8 -2
  186. package/lib/utilsBundleImpl/index.js +160 -150
  187. package/lib/vite/htmlReport/index.html +17 -17
  188. package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
  189. package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
  190. package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
  191. package/lib/vite/recorder/index.html +3 -3
  192. package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
  193. package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
  194. package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
  195. package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
  196. package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
  197. package/lib/vite/traceViewer/index.html +6 -6
  198. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  199. package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
  200. package/lib/vite/traceViewer/uiMode.html +4 -4
  201. package/lib/zipBundleImpl.js +4 -4
  202. package/package.json +1 -1
  203. package/types/protocol.d.ts +712 -107
  204. package/types/types.d.ts +128 -17
  205. package/lib/generated/consoleApiSource.js +0 -28
  206. package/lib/protocol/debug.js +0 -211
  207. package/lib/server/recorder/contextRecorder.js +0 -286
  208. package/lib/server/recorder/recorderCollection.js +0 -116
  209. package/lib/server/recorder/recorderFrontend.js +0 -16
  210. package/lib/server/storageScript.js +0 -154
  211. package/lib/server/timeoutSettings.js +0 -89
  212. package/lib/utils/isomorphic/builtins.js +0 -86
  213. package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
  214. package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
  215. package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
  216. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  217. package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
  218. package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
@@ -31,7 +31,7 @@ __export(registry_exports, {
31
31
  Registry: () => Registry,
32
32
  browserDirectoryToMarkerFilePath: () => browserDirectoryToMarkerFilePath,
33
33
  buildPlaywrightCLICommand: () => buildPlaywrightCLICommand,
34
- findChromiumChannel: () => findChromiumChannel,
34
+ findChromiumChannelBestEffort: () => findChromiumChannelBestEffort,
35
35
  installBrowsersForNpmInstall: () => installBrowsersForNpmInstall,
36
36
  registry: () => registry,
37
37
  registryDirectory: () => registryDirectory,
@@ -122,6 +122,8 @@ const DOWNLOAD_PATHS = {
122
122
  "debian11-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
123
123
  "debian12-x64": "builds/chromium/%s/chromium-linux.zip",
124
124
  "debian12-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
125
+ "debian13-x64": "builds/chromium/%s/chromium-linux.zip",
126
+ "debian13-arm64": "builds/chromium/%s/chromium-linux-arm64.zip",
125
127
  "mac10.13": "builds/chromium/%s/chromium-mac.zip",
126
128
  "mac10.14": "builds/chromium/%s/chromium-mac.zip",
127
129
  "mac10.15": "builds/chromium/%s/chromium-mac.zip",
@@ -151,6 +153,8 @@ const DOWNLOAD_PATHS = {
151
153
  "debian11-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
152
154
  "debian12-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
153
155
  "debian12-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
156
+ "debian13-x64": "builds/chromium/%s/chromium-headless-shell-linux.zip",
157
+ "debian13-arm64": "builds/chromium/%s/chromium-headless-shell-linux-arm64.zip",
154
158
  "mac10.13": void 0,
155
159
  "mac10.14": void 0,
156
160
  "mac10.15": void 0,
@@ -180,6 +184,8 @@ const DOWNLOAD_PATHS = {
180
184
  "debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
181
185
  "debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
182
186
  "debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
187
+ "debian13-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip",
188
+ "debian13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip",
183
189
  "mac10.13": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
184
190
  "mac10.14": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
185
191
  "mac10.15": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip",
@@ -209,6 +215,8 @@ const DOWNLOAD_PATHS = {
209
215
  "debian11-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
210
216
  "debian12-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
211
217
  "debian12-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
218
+ "debian13-x64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip",
219
+ "debian13-arm64": "builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip",
212
220
  "mac10.13": void 0,
213
221
  "mac10.14": void 0,
214
222
  "mac10.15": void 0,
@@ -238,6 +246,8 @@ const DOWNLOAD_PATHS = {
238
246
  "debian11-arm64": "builds/firefox/%s/firefox-debian-11-arm64.zip",
239
247
  "debian12-x64": "builds/firefox/%s/firefox-debian-12.zip",
240
248
  "debian12-arm64": "builds/firefox/%s/firefox-debian-12-arm64.zip",
249
+ "debian13-x64": "builds/firefox/%s/firefox-debian-13.zip",
250
+ "debian13-arm64": "builds/firefox/%s/firefox-debian-13-arm64.zip",
241
251
  "mac10.13": "builds/firefox/%s/firefox-mac.zip",
242
252
  "mac10.14": "builds/firefox/%s/firefox-mac.zip",
243
253
  "mac10.15": "builds/firefox/%s/firefox-mac.zip",
@@ -267,6 +277,8 @@ const DOWNLOAD_PATHS = {
267
277
  "debian11-arm64": "builds/firefox-beta/%s/firefox-beta-debian-11-arm64.zip",
268
278
  "debian12-x64": "builds/firefox-beta/%s/firefox-beta-debian-12.zip",
269
279
  "debian12-arm64": "builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip",
280
+ "debian13-x64": "builds/firefox-beta/%s/firefox-beta-debian-12.zip",
281
+ "debian13-arm64": "builds/firefox-beta/%s/firefox-beta-debian-12-arm64.zip",
270
282
  "mac10.13": "builds/firefox-beta/%s/firefox-beta-mac.zip",
271
283
  "mac10.14": "builds/firefox-beta/%s/firefox-beta-mac.zip",
272
284
  "mac10.15": "builds/firefox-beta/%s/firefox-beta-mac.zip",
@@ -296,6 +308,8 @@ const DOWNLOAD_PATHS = {
296
308
  "debian11-arm64": "builds/webkit/%s/webkit-debian-11-arm64.zip",
297
309
  "debian12-x64": "builds/webkit/%s/webkit-debian-12.zip",
298
310
  "debian12-arm64": "builds/webkit/%s/webkit-debian-12-arm64.zip",
311
+ "debian13-x64": "builds/webkit/%s/webkit-debian-13.zip",
312
+ "debian13-arm64": "builds/webkit/%s/webkit-debian-13-arm64.zip",
299
313
  "mac10.13": void 0,
300
314
  "mac10.14": "builds/deprecated-webkit-mac-10.14/%s/deprecated-webkit-mac-10.14.zip",
301
315
  "mac10.15": "builds/deprecated-webkit-mac-10.15/%s/deprecated-webkit-mac-10.15.zip",
@@ -325,6 +339,8 @@ const DOWNLOAD_PATHS = {
325
339
  "debian11-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
326
340
  "debian12-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
327
341
  "debian12-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
342
+ "debian13-x64": "builds/ffmpeg/%s/ffmpeg-linux.zip",
343
+ "debian13-arm64": "builds/ffmpeg/%s/ffmpeg-linux-arm64.zip",
328
344
  "mac10.13": "builds/ffmpeg/%s/ffmpeg-mac.zip",
329
345
  "mac10.14": "builds/ffmpeg/%s/ffmpeg-mac.zip",
330
346
  "mac10.15": "builds/ffmpeg/%s/ffmpeg-mac.zip",
@@ -354,6 +370,8 @@ const DOWNLOAD_PATHS = {
354
370
  "debian11-arm64": void 0,
355
371
  "debian12-x64": void 0,
356
372
  "debian12-arm64": void 0,
373
+ "debian13-x64": void 0,
374
+ "debian13-arm64": void 0,
357
375
  "mac10.13": void 0,
358
376
  "mac10.14": void 0,
359
377
  "mac10.15": void 0,
@@ -383,6 +401,8 @@ const DOWNLOAD_PATHS = {
383
401
  "debian11-arm64": "builds/android/%s/android.zip",
384
402
  "debian12-x64": "builds/android/%s/android.zip",
385
403
  "debian12-arm64": "builds/android/%s/android.zip",
404
+ "debian13-x64": "builds/android/%s/android.zip",
405
+ "debian13-arm64": "builds/android/%s/android.zip",
386
406
  "mac10.13": "builds/android/%s/android.zip",
387
407
  "mac10.14": "builds/android/%s/android.zip",
388
408
  "mac10.15": "builds/android/%s/android.zip",
@@ -399,7 +419,8 @@ const DOWNLOAD_PATHS = {
399
419
  "win64": "builds/android/%s/android.zip"
400
420
  },
401
421
  // TODO(bidi): implement downloads.
402
- "bidi": {}
422
+ "_bidiFirefox": {},
423
+ "_bidiChromium": {}
403
424
  };
404
425
  const registryDirectory = (() => {
405
426
  let result;
@@ -591,7 +612,7 @@ ${(0, import_ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
591
612
  "win32": `\\Google\\Chrome Dev\\Application\\chrome.exe`
592
613
  }));
593
614
  this._executables.push(this._createChromiumChannel("chrome-canary", {
594
- "linux": "",
615
+ "linux": "/opt/google/chrome-canary/chrome",
595
616
  "darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
596
617
  "win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
597
618
  }));
@@ -648,14 +669,14 @@ ${(0, import_ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
648
669
  "win32": `\\Google\\Chrome\\Application\\chrome.exe`
649
670
  }));
650
671
  this._executables.push(this._createBidiChromiumChannel("bidi-chrome-canary", {
651
- "linux": "",
672
+ "linux": "/opt/google/chrome-canary/chrome",
652
673
  "darwin": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
653
674
  "win32": `\\Google\\Chrome SxS\\Application\\chrome.exe`
654
675
  }));
655
676
  this._executables.push({
656
677
  type: "browser",
657
- name: "bidi-chromium",
658
- browserName: "bidi",
678
+ name: "_bidiChromium",
679
+ browserName: "_bidiChromium",
659
680
  directory: chromium.dir,
660
681
  executablePath: () => chromiumExecutable,
661
682
  executablePathOrDie: (sdkLanguage) => executablePathOrDie("chromium", chromiumExecutable, chromium.installByDefault, sdkLanguage),
@@ -775,20 +796,6 @@ ${(0, import_ascii.wrapInASCIIBox)(prettyMessage, 1)}`);
775
796
  _dependencyGroup: "tools",
776
797
  _isHermeticInstallation: true
777
798
  });
778
- this._executables.push({
779
- type: "browser",
780
- name: "bidi",
781
- browserName: "bidi",
782
- directory: void 0,
783
- executablePath: () => void 0,
784
- executablePathOrDie: () => "",
785
- installType: "none",
786
- _validateHostRequirements: () => Promise.resolve(),
787
- downloadURLs: [],
788
- _install: () => Promise.resolve(),
789
- _dependencyGroup: "tools",
790
- _isHermeticInstallation: true
791
- });
792
799
  }
793
800
  _createChromiumChannel(name, lookAt, install) {
794
801
  const executablePath = (sdkLanguage, shouldThrow) => {
@@ -859,7 +866,7 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
859
866
  return {
860
867
  type: "channel",
861
868
  name,
862
- browserName: "bidi",
869
+ browserName: "_bidiFirefox",
863
870
  directory: void 0,
864
871
  executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
865
872
  executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
@@ -874,7 +881,7 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
874
881
  const suffix = lookAt[process.platform];
875
882
  if (!suffix) {
876
883
  if (shouldThrow)
877
- throw new Error(`Firefox distribution '${name}' is not supported on ${process.platform}`);
884
+ throw new Error(`Chromium distribution '${name}' is not supported on ${process.platform}`);
878
885
  return void 0;
879
886
  }
880
887
  const prefixes = process.platform === "win32" ? [
@@ -900,7 +907,7 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
900
907
  return {
901
908
  type: "channel",
902
909
  name,
903
- browserName: "bidi",
910
+ browserName: "_bidiChromium",
904
911
  directory: void 0,
905
912
  executablePath: (sdkLanguage) => executablePath(sdkLanguage, false),
906
913
  executablePathOrDie: (sdkLanguage) => executablePath(sdkLanguage, true),
@@ -963,14 +970,15 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
963
970
  });
964
971
  await import_fs.default.promises.mkdir(linksDir, { recursive: true });
965
972
  await import_fs.default.promises.writeFile(import_path.default.join(linksDir, (0, import_utils.calculateSha1)(PACKAGE_PATH)), PACKAGE_PATH);
966
- await this._validateInstallationCache(linksDir);
973
+ if (!(0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_GC"))
974
+ await this._validateInstallationCache(linksDir);
967
975
  for (const executable of executables) {
968
976
  if (!executable._install)
969
977
  throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);
970
978
  const { embedderName } = (0, import_userAgent.getEmbedderName)();
971
979
  if (!(0, import_utils.getAsBooleanFromENV)("CI") && !executable._isHermeticInstallation && !forceReinstall && executable.executablePath(embedderName)) {
972
980
  const command = buildPlaywrightCLICommand(embedderName, "install --force " + executable.name);
973
- throw new Error("\n" + (0, import_ascii.wrapInASCIIBox)([
981
+ process.stderr.write("\n" + (0, import_ascii.wrapInASCIIBox)([
974
982
  `ATTENTION: "${executable.name}" is already installed on the system!`,
975
983
  ``,
976
984
  `"${executable.name}" installation is not hermetic; installing newer version`,
@@ -984,7 +992,8 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
984
992
  ` ${command}`,
985
993
  ``,
986
994
  `<3 Playwright Team`
987
- ].join("\n"), 1));
995
+ ].join("\n"), 1) + "\n\n");
996
+ return;
988
997
  }
989
998
  await executable._install();
990
999
  }
@@ -1091,7 +1100,7 @@ Run "${buildPlaywrightCLICommand(sdkLanguage, "install " + name)}"` : "";
1091
1100
  const title = descriptor.browserVersion ? `${displayName} ${descriptor.browserVersion} (playwright build v${descriptor.revision})` : `${displayName} playwright build v${descriptor.revision}`;
1092
1101
  const downloadFileName = `playwright-download-${descriptor.name}-${import_hostPlatform.hostPlatform}-${descriptor.revision}.zip`;
1093
1102
  const downloadSocketTimeoutEnv = (0, import_utils.getFromENV)("PLAYWRIGHT_DOWNLOAD_CONNECTION_TIMEOUT");
1094
- const downloadSocketTimeout = +(downloadSocketTimeoutEnv || "0") || 3e4;
1103
+ const downloadSocketTimeout = +(downloadSocketTimeoutEnv || "0") || import_network.NET_DEFAULT_TIMEOUT;
1095
1104
  await (0, import_browserFetcher.downloadBrowserWithProgressBar)(title, descriptor.dir, executablePath, downloadURLs, downloadFileName, downloadSocketTimeout).catch((e) => {
1096
1105
  throw new Error(`Failed to download ${title}, caused by
1097
1106
  ${e.stack}`);
@@ -1100,7 +1109,7 @@ ${e.stack}`);
1100
1109
  async _installMSEdgeChannel(channel, scripts) {
1101
1110
  const scriptArgs = [];
1102
1111
  if (process.platform !== "linux") {
1103
- const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)({ url: "https://edgeupdates.microsoft.com/api/products" })));
1112
+ const products = lowercaseAllKeys(JSON.parse(await (0, import_network.fetchData)(void 0, { url: "https://edgeupdates.microsoft.com/api/products" })));
1104
1113
  const productName = {
1105
1114
  "msedge": "Stable",
1106
1115
  "msedge-beta": "Beta",
@@ -1149,8 +1158,19 @@ ${e.stack}`);
1149
1158
  throw new Error(`Failed to install ${channel}`);
1150
1159
  }
1151
1160
  }
1161
+ async listInstalledBrowsers() {
1162
+ const linksDir = import_path.default.join(registryDirectory, ".links");
1163
+ const { browsers } = await this._traverseBrowserInstallations(linksDir);
1164
+ return browsers.filter((browser) => import_fs.default.existsSync(browser.browserPath));
1165
+ }
1152
1166
  async _validateInstallationCache(linksDir) {
1153
- const usedBrowserPaths = /* @__PURE__ */ new Set();
1167
+ const { browsers, brokenLinks } = await this._traverseBrowserInstallations(linksDir);
1168
+ await this._deleteStaleBrowsers(browsers);
1169
+ await this._deleteBrokenInstallations(brokenLinks);
1170
+ }
1171
+ async _traverseBrowserInstallations(linksDir) {
1172
+ const browserList = [];
1173
+ const brokenLinks = [];
1154
1174
  for (const fileName of await import_fs.default.promises.readdir(linksDir)) {
1155
1175
  const linkPath = import_path.default.join(linksDir, fileName);
1156
1176
  let linkTarget = "";
@@ -1162,28 +1182,43 @@ ${e.stack}`);
1162
1182
  const descriptor = descriptors.find((d) => d.name === browserName);
1163
1183
  if (!descriptor)
1164
1184
  continue;
1165
- const usedBrowserPath = descriptor.dir;
1166
- const browserRevision = parseInt(descriptor.revision, 10);
1167
- const shouldHaveMarkerFile = browserName === "chromium" && (browserRevision >= 786218 || browserRevision < 3e5) || browserName === "firefox" && browserRevision >= 1128 || browserName === "webkit" && browserRevision >= 1307 || // All new applications have a marker file right away.
1168
- browserName !== "firefox" && browserName !== "chromium" && browserName !== "webkit";
1169
- if (!shouldHaveMarkerFile || await (0, import_fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(usedBrowserPath)))
1170
- usedBrowserPaths.add(usedBrowserPath);
1185
+ const browserPath = descriptor.dir;
1186
+ const browserVersion = parseInt(descriptor.revision, 10);
1187
+ browserList.push({
1188
+ browserName,
1189
+ browserVersion,
1190
+ browserPath,
1191
+ referenceDir: linkTarget
1192
+ });
1171
1193
  }
1172
1194
  } catch (e) {
1173
- await import_fs.default.promises.unlink(linkPath).catch((e2) => {
1174
- });
1195
+ brokenLinks.push(linkPath);
1175
1196
  }
1176
1197
  }
1177
- if (!(0, import_utils.getAsBooleanFromENV)("PLAYWRIGHT_SKIP_BROWSER_GC")) {
1178
- let downloadedBrowsers = (await import_fs.default.promises.readdir(registryDirectory)).map((file) => import_path.default.join(registryDirectory, file));
1179
- downloadedBrowsers = downloadedBrowsers.filter((file) => isBrowserDirectory(file));
1180
- const directories = new Set(downloadedBrowsers);
1181
- for (const browserDirectory of usedBrowserPaths)
1182
- directories.delete(browserDirectory);
1183
- for (const directory of directories)
1184
- (0, import_browserFetcher.logPolitely)("Removing unused browser at " + directory);
1185
- await (0, import_fileUtils.removeFolders)([...directories]);
1198
+ return { browsers: browserList, brokenLinks };
1199
+ }
1200
+ async _deleteStaleBrowsers(browserList) {
1201
+ const usedBrowserPaths = /* @__PURE__ */ new Set();
1202
+ for (const browser of browserList) {
1203
+ const { browserName, browserVersion, browserPath } = browser;
1204
+ const shouldHaveMarkerFile = browserName === "chromium" && (browserVersion >= 786218 || browserVersion < 3e5) || browserName === "firefox" && browserVersion >= 1128 || browserName === "webkit" && browserVersion >= 1307 || // All new applications have a marker file right away.
1205
+ browserName !== "firefox" && browserName !== "chromium" && browserName !== "webkit";
1206
+ if (!shouldHaveMarkerFile || await (0, import_fileUtils.existsAsync)(browserDirectoryToMarkerFilePath(browserPath)))
1207
+ usedBrowserPaths.add(browserPath);
1186
1208
  }
1209
+ let downloadedBrowsers = (await import_fs.default.promises.readdir(registryDirectory)).map((file) => import_path.default.join(registryDirectory, file));
1210
+ downloadedBrowsers = downloadedBrowsers.filter((file) => isBrowserDirectory(file));
1211
+ const directories = new Set(downloadedBrowsers);
1212
+ for (const browserDirectory of usedBrowserPaths)
1213
+ directories.delete(browserDirectory);
1214
+ for (const directory of directories)
1215
+ (0, import_browserFetcher.logPolitely)("Removing unused browser at " + directory);
1216
+ await (0, import_fileUtils.removeFolders)([...directories]);
1217
+ }
1218
+ async _deleteBrokenInstallations(brokenLinks) {
1219
+ for (const linkPath of brokenLinks)
1220
+ await import_fs.default.promises.unlink(linkPath).catch((e) => {
1221
+ });
1187
1222
  }
1188
1223
  }
1189
1224
  function browserDirectoryToMarkerFilePath(browserDirectory) {
@@ -1223,7 +1258,7 @@ async function installBrowsersForNpmInstall(browsers) {
1223
1258
  /* forceReinstall */
1224
1259
  );
1225
1260
  }
1226
- function findChromiumChannel(sdkLanguage) {
1261
+ function findChromiumChannelBestEffort(sdkLanguage) {
1227
1262
  let channel = null;
1228
1263
  for (const name of ["chromium", "chrome", "msedge"]) {
1229
1264
  try {
@@ -1263,7 +1298,7 @@ const registry = new Registry(require("../../../browsers.json"));
1263
1298
  Registry,
1264
1299
  browserDirectoryToMarkerFilePath,
1265
1300
  buildPlaywrightCLICommand,
1266
- findChromiumChannel,
1301
+ findChromiumChannelBestEffort,
1267
1302
  installBrowsersForNpmInstall,
1268
1303
  registry,
1269
1304
  registryDirectory,
@@ -1032,6 +1032,168 @@ const deps = {
1032
1032
  "libXrandr.so.2": "libxrandr2",
1033
1033
  "libgtk-4.so.1": "libgtk-4-1"
1034
1034
  }
1035
+ },
1036
+ "debian13-x64": {
1037
+ tools: [
1038
+ "xvfb",
1039
+ "fonts-noto-color-emoji",
1040
+ "fonts-unifont",
1041
+ "libfontconfig1",
1042
+ "libfreetype6",
1043
+ "xfonts-scalable",
1044
+ "fonts-liberation",
1045
+ "fonts-ipafont-gothic",
1046
+ "fonts-wqy-zenhei",
1047
+ "fonts-tlwg-loma-otf",
1048
+ "fonts-freefont-ttf"
1049
+ ],
1050
+ chromium: [
1051
+ "libasound2t64",
1052
+ "libatk-bridge2.0-0t64",
1053
+ "libatk1.0-0t64",
1054
+ "libatspi2.0-0t64",
1055
+ "libcairo2",
1056
+ "libcups2t64",
1057
+ "libdbus-1-3",
1058
+ "libdrm2",
1059
+ "libgbm1",
1060
+ "libglib2.0-0t64",
1061
+ "libnspr4",
1062
+ "libnss3",
1063
+ "libpango-1.0-0",
1064
+ "libx11-6",
1065
+ "libxcb1",
1066
+ "libxcomposite1",
1067
+ "libxdamage1",
1068
+ "libxext6",
1069
+ "libxfixes3",
1070
+ "libxkbcommon0",
1071
+ "libxrandr2"
1072
+ ],
1073
+ firefox: [
1074
+ "libasound2",
1075
+ "libatk1.0-0t64",
1076
+ "libcairo-gobject2",
1077
+ "libcairo2",
1078
+ "libdbus-1-3",
1079
+ "libdbus-glib-1-2",
1080
+ "libfontconfig1",
1081
+ "libfreetype6",
1082
+ "libgdk-pixbuf-2.0-0",
1083
+ "libglib2.0-0t64",
1084
+ "libgtk-3-0t64",
1085
+ "libharfbuzz0b",
1086
+ "libpango-1.0-0",
1087
+ "libpangocairo-1.0-0",
1088
+ "libx11-6",
1089
+ "libx11-xcb1",
1090
+ "libxcb-shm0",
1091
+ "libxcb1",
1092
+ "libxcomposite1",
1093
+ "libxcursor1",
1094
+ "libxdamage1",
1095
+ "libxext6",
1096
+ "libxfixes3",
1097
+ "libxi6",
1098
+ "libxrandr2",
1099
+ "libxrender1",
1100
+ "libxtst6"
1101
+ ],
1102
+ webkit: [
1103
+ "libsoup-3.0-0",
1104
+ "gstreamer1.0-libav",
1105
+ "gstreamer1.0-plugins-bad",
1106
+ "gstreamer1.0-plugins-base",
1107
+ "gstreamer1.0-plugins-good",
1108
+ "libatk-bridge2.0-0t64",
1109
+ "libatk1.0-0t64",
1110
+ "libcairo2",
1111
+ "libdbus-1-3",
1112
+ "libdrm2",
1113
+ "libegl1",
1114
+ "libenchant-2-2",
1115
+ "libepoxy0",
1116
+ "libevdev2",
1117
+ "libfontconfig1",
1118
+ "libfreetype6",
1119
+ "libgbm1",
1120
+ "libgdk-pixbuf-2.0-0",
1121
+ "libgles2",
1122
+ "libglib2.0-0t64",
1123
+ "libglx0",
1124
+ "libgstreamer-gl1.0-0",
1125
+ "libgstreamer-plugins-base1.0-0",
1126
+ "libgstreamer1.0-0",
1127
+ "libgtk-4-1",
1128
+ "libgudev-1.0-0",
1129
+ "libharfbuzz-icu0",
1130
+ "libharfbuzz0b",
1131
+ "libhyphen0",
1132
+ "libicu76",
1133
+ "libjpeg62-turbo",
1134
+ "liblcms2-2",
1135
+ "libmanette-0.2-0",
1136
+ "libnotify4",
1137
+ "libopengl0",
1138
+ "libopenjp2-7",
1139
+ "libopus0",
1140
+ "libpango-1.0-0",
1141
+ "libpng16-16t64",
1142
+ "libproxy1v5",
1143
+ "libsecret-1-0",
1144
+ "libwayland-client0",
1145
+ "libwayland-egl1",
1146
+ "libwayland-server0",
1147
+ "libwebp7",
1148
+ "libwebpdemux2",
1149
+ "libwoff1",
1150
+ "libx11-6",
1151
+ "libxcomposite1",
1152
+ "libxdamage1",
1153
+ "libxkbcommon0",
1154
+ "libxml2",
1155
+ "libxslt1.1",
1156
+ "libatomic1",
1157
+ "libevent-2.1-7t64",
1158
+ "libavif16"
1159
+ ],
1160
+ lib2package: {
1161
+ "libicudata.so.74": "libicu76",
1162
+ "libicui18n.so.74": "libicu76",
1163
+ "libicuuc.so.74": "libicu76",
1164
+ "libevent-2.1.so.7": "libevent-2.1-7t64",
1165
+ "libpng16.so.16": "libpng16-16t64",
1166
+ "libgdk-3.so.0": "libgtk-3-0t64",
1167
+ "libgtk-3.so.0": "libgtk-3-0t64",
1168
+ "libavif.so.16": "libavif16",
1169
+ "libsoup-3.0.so.0": "libsoup-3.0-0",
1170
+ "libasound.so.2": "libasound2t64",
1171
+ "libatk-1.0.so.0": "libatk1.0-0t64",
1172
+ "libatk-bridge-2.0.so.0": "libatk-bridge2.0-0t64",
1173
+ "libatspi.so.0": "libatspi2.0-0t64",
1174
+ "libcairo.so.2": "libcairo2",
1175
+ "libcups.so.2": "libcups2t64",
1176
+ "libdbus-1.so.3": "libdbus-1-3",
1177
+ "libdrm.so.2": "libdrm2",
1178
+ "libgbm.so.1": "libgbm1",
1179
+ "libgio-2.0.so.0": "libglib2.0-0t64",
1180
+ "libglib-2.0.so.0": "libglib2.0-0t64",
1181
+ "libgobject-2.0.so.0": "libglib2.0-0t64",
1182
+ "libnspr4.so": "libnspr4",
1183
+ "libnss3.so": "libnss3",
1184
+ "libnssutil3.so": "libnss3",
1185
+ "libpango-1.0.so.0": "libpango-1.0-0",
1186
+ "libsmime3.so": "libnss3",
1187
+ "libX11.so.6": "libx11-6",
1188
+ "libxcb.so.1": "libxcb1",
1189
+ "libXcomposite.so.1": "libxcomposite1",
1190
+ "libXdamage.so.1": "libxdamage1",
1191
+ "libXext.so.6": "libxext6",
1192
+ "libXfixes.so.3": "libxfixes3",
1193
+ "libxkbcommon.so.0": "libxkbcommon0",
1194
+ "libXrandr.so.2": "libxrandr2",
1195
+ "libgtk-4.so.1": "libgtk-4-1"
1196
+ }
1035
1197
  }
1036
1198
  };
1037
1199
  deps["ubuntu20.04-arm64"] = {
@@ -1099,6 +1261,19 @@ deps["debian12-arm64"] = {
1099
1261
  ...deps["debian12-x64"].lib2package
1100
1262
  }
1101
1263
  };
1264
+ deps["debian13-arm64"] = {
1265
+ tools: [...deps["debian13-x64"].tools],
1266
+ chromium: [...deps["debian13-x64"].chromium],
1267
+ firefox: [
1268
+ ...deps["debian13-x64"].firefox
1269
+ ],
1270
+ webkit: [
1271
+ ...deps["debian13-x64"].webkit
1272
+ ],
1273
+ lib2package: {
1274
+ ...deps["debian13-x64"].lib2package
1275
+ }
1276
+ };
1102
1277
  // Annotate the CommonJS export names for ESM import in node:
1103
1278
  0 && (module.exports = {
1104
1279
  deps
@@ -47,7 +47,7 @@ function downloadFile(options) {
47
47
  headers: {
48
48
  "User-Agent": options.userAgent
49
49
  },
50
- timeout: options.socketTimeout
50
+ socketTimeout: options.socketTimeout
51
51
  }, (response) => {
52
52
  log(`-- response status code: ${response.statusCode}`);
53
53
  if (response.statusCode !== 200) {