@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
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RawTouchscreenImpl = exports.RawMouseImpl = exports.RawKeyboardImpl = void 0;
7
+ var _utils = require("../../utils");
7
8
  var input = _interopRequireWildcard(require("../input"));
8
9
  var _macEditingCommands = require("../macEditingCommands");
9
- var _utils = require("../../utils");
10
10
  var _crProtocolHelper = require("./crProtocolHelper");
11
11
  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); }
12
- 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; }
12
+ 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; }
13
13
  /**
14
14
  * Copyright 2017 Google Inc. All rights reserved.
15
15
  * Modifications copyright (c) Microsoft Corporation.
@@ -48,13 +48,19 @@ class RawKeyboardImpl {
48
48
  // remove the trailing : to match the Chromium command names.
49
49
  return commands.map(c => c.substring(0, c.length - 1));
50
50
  }
51
- async keydown(modifiers, code, keyCode, keyCodeWithoutLocation, key, location, autoRepeat, text) {
51
+ async keydown(modifiers, keyName, description, autoRepeat) {
52
+ const {
53
+ code,
54
+ key,
55
+ location,
56
+ text
57
+ } = description;
52
58
  if (code === 'Escape' && (await this._dragManger.cancelDrag())) return;
53
59
  const commands = this._commandsForCode(code, modifiers);
54
60
  await this._client.send('Input.dispatchKeyEvent', {
55
61
  type: text ? 'keyDown' : 'rawKeyDown',
56
62
  modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers),
57
- windowsVirtualKeyCode: keyCodeWithoutLocation,
63
+ windowsVirtualKeyCode: description.keyCodeWithoutLocation,
58
64
  code,
59
65
  commands,
60
66
  key,
@@ -65,12 +71,17 @@ class RawKeyboardImpl {
65
71
  isKeypad: location === input.keypadLocation
66
72
  });
67
73
  }
68
- async keyup(modifiers, code, keyCode, keyCodeWithoutLocation, key, location) {
74
+ async keyup(modifiers, keyName, description) {
75
+ const {
76
+ code,
77
+ key,
78
+ location
79
+ } = description;
69
80
  await this._client.send('Input.dispatchKeyEvent', {
70
81
  type: 'keyUp',
71
82
  modifiers: (0, _crProtocolHelper.toModifiersMask)(modifiers),
72
83
  key,
73
- windowsVirtualKeyCode: keyCodeWithoutLocation,
84
+ windowsVirtualKeyCode: description.keyCodeWithoutLocation,
74
85
  code,
75
86
  location
76
87
  });
@@ -4,13 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CRNetworkManager = void 0;
7
+ var _utils = require("../../utils");
8
+ var _eventsHelper = require("../utils/eventsHelper");
7
9
  var _helper = require("../helper");
8
- var _eventsHelper = require("../../utils/eventsHelper");
9
10
  var network = _interopRequireWildcard(require("../network"));
10
- var _utils = require("../../utils");
11
11
  var _protocolError = require("../protocolError");
12
12
  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); }
13
- 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; }
13
+ 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; }
14
14
  /**
15
15
  * Copyright 2017 Google Inc. All rights reserved.
16
16
  * Modifications copyright (c) Microsoft Corporation.
@@ -5,16 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.CRPage = void 0;
7
7
  var _path = _interopRequireDefault(require("path"));
8
- var _eventsHelper = require("../../utils/eventsHelper");
9
- var _registry = require("../registry");
10
- var _stackTrace = require("../../utils/stackTrace");
11
- var _utils = require("../../utils");
8
+ var _assert = require("../../utils/isomorphic/assert");
9
+ var _crypto = require("../utils/crypto");
10
+ var _eventsHelper = require("../utils/eventsHelper");
11
+ var _stackTrace = require("../../utils/isomorphic/stackTrace");
12
12
  var dialog = _interopRequireWildcard(require("../dialog"));
13
13
  var dom = _interopRequireWildcard(require("../dom"));
14
14
  var frames = _interopRequireWildcard(require("../frames"));
15
15
  var _helper = require("../helper");
16
16
  var network = _interopRequireWildcard(require("../network"));
17
17
  var _page = require("../page");
18
+ var _registry = require("../registry");
18
19
  var _crAccessibility = require("./crAccessibility");
19
20
  var _crBrowser = require("./crBrowser");
20
21
  var _crCoverage = require("./crCoverage");
@@ -30,8 +31,8 @@ var _browserContext = require("../browserContext");
30
31
  var _errors = require("../errors");
31
32
  var _protocolError = require("../protocolError");
32
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); }
33
- 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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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 }; }
35
36
  /**
36
37
  * Copyright 2017 Google Inc. All rights reserved.
37
38
  * Modifications copyright (c) Microsoft Corporation.
@@ -68,8 +69,6 @@ class CRPage {
68
69
  this._pdf = void 0;
69
70
  this._coverage = void 0;
70
71
  this._browserContext = void 0;
71
- this._pagePromise = void 0;
72
- this._initializedPage = null;
73
72
  this._isBackgroundPage = void 0;
74
73
  // Holds window features for the next popup being opened via window.open,
75
74
  // until the popup target arrives. This could be racy if two oopifs
@@ -105,29 +104,15 @@ class CRPage {
105
104
  screen: viewportSize
106
105
  };
107
106
  }
108
- // Note: it is important to call |reportAsNew| before resolving pageOrError promise,
109
- // so that anyone who awaits pageOrError got a ready and reported page.
110
- this._pagePromise = this._mainFrameSession._initialize(bits.hasUIWindow).then(async r => {
111
- await this._page.initOpener(this._opener);
112
- return r;
113
- }).catch(async e => {
114
- await this._page.initOpener(this._opener);
115
- throw e;
116
- }).then(() => {
117
- this._initializedPage = this._page;
118
- this._reportAsNew();
119
- return this._page;
120
- }).catch(e => {
121
- this._reportAsNew(e);
122
- return e;
107
+ const createdEvent = this._isBackgroundPage ? _crBrowser.CRBrowserContext.CREvents.BackgroundPage : _browserContext.BrowserContext.Events.Page;
108
+ this._mainFrameSession._initialize(bits.hasUIWindow).then(() => {
109
+ var _this$_opener;
110
+ return this._page.reportAsNew((_this$_opener = this._opener) === null || _this$_opener === void 0 ? void 0 : _this$_opener._page, undefined, createdEvent);
111
+ }, error => {
112
+ var _this$_opener2;
113
+ return this._page.reportAsNew((_this$_opener2 = this._opener) === null || _this$_opener2 === void 0 ? void 0 : _this$_opener2._page, error, createdEvent);
123
114
  });
124
115
  }
125
- potentiallyUninitializedPage() {
126
- return this._page;
127
- }
128
- _reportAsNew(error) {
129
- this._page.reportAsNew(error, this._isBackgroundPage ? _crBrowser.CRBrowserContext.CREvents.BackgroundPage : _browserContext.BrowserContext.Events.Page);
130
- }
131
116
  async _forAllFrameSessions(cb) {
132
117
  const frameSessions = Array.from(this._sessions.values());
133
118
  await Promise.all(frameSessions.map(frameSession => {
@@ -155,9 +140,6 @@ class CRPage {
155
140
  willBeginDownload() {
156
141
  this._mainFrameSession._willBeginDownload();
157
142
  }
158
- async pageOrError() {
159
- return this._pagePromise;
160
- }
161
143
  didClose() {
162
144
  for (const session of this._sessions.values()) session.dispose();
163
145
  this._page._didClose();
@@ -270,9 +252,6 @@ class CRPage {
270
252
  async getOwnerFrame(handle) {
271
253
  return this._sessionForHandle(handle)._getOwnerFrame(handle);
272
254
  }
273
- isElementHandle(remoteObject) {
274
- return remoteObject.subtype === 'node';
275
- }
276
255
  async getBoundingBox(handle) {
277
256
  return this._sessionForHandle(handle)._getBoundingBox(handle);
278
257
  }
@@ -297,9 +276,6 @@ class CRPage {
297
276
  async getContentQuads(handle) {
298
277
  return this._sessionForHandle(handle)._getContentQuads(handle);
299
278
  }
300
- async setInputFiles(handle, files) {
301
- await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files);
302
- }
303
279
  async setInputFilePaths(handle, files) {
304
280
  const frame = await handle.ownerFrame();
305
281
  if (!frame) throw new Error('Cannot set input files to detached input element');
@@ -318,7 +294,10 @@ class CRPage {
318
294
  async inputActionEpilogue() {
319
295
  await this._mainFrameSession._client.send('Page.enable').catch(e => {});
320
296
  }
321
- async resetForReuse() {}
297
+ async resetForReuse() {
298
+ // See https://github.com/microsoft/playwright/issues/22432.
299
+ await this.rawMouse.move(-1, -1, 'none', new Set(), new Set(), true);
300
+ }
322
301
  async pdf(options) {
323
302
  return this._pdf.generate(options);
324
303
  }
@@ -379,6 +358,9 @@ class FrameSession {
379
358
  this._firstNonInitialNavigationCommittedFulfill = f;
380
359
  this._firstNonInitialNavigationCommittedReject = r;
381
360
  });
361
+ // The Promise is not always awaited (e.g. FrameSession._initialize can throw)
362
+ // so we catch errors here to prevent unhandled promise rejection.
363
+ this._firstNonInitialNavigationCommittedPromise.catch(() => {});
382
364
  }
383
365
  _isMainFrame() {
384
366
  return this._targetId === this._crPage._targetId;
@@ -399,7 +381,7 @@ class FrameSession {
399
381
  }
400
382
  let screencastOptions;
401
383
  if (!isSettingStorageState && this._isMainFrame() && this._crPage._browserContext._options.recordVideo && hasUIWindow) {
402
- const screencastId = (0, _utils.createGuid)();
384
+ const screencastId = (0, _crypto.createGuid)();
403
385
  const outputFile = _path.default.join(this._crPage._browserContext._options.recordVideo.dir, screencastId + '.webm');
404
386
  screencastOptions = {
405
387
  // validateBrowserContextOptions ensures correct video size.
@@ -410,7 +392,7 @@ class FrameSession {
410
392
  // Note: it is important to start video recorder before sending Page.startScreencast,
411
393
  // and it is equally important to send Page.startScreencast before sending Runtime.runIfWaitingForDebugger.
412
394
  await this._createVideoRecorder(screencastId, screencastOptions);
413
- this._crPage.pageOrError().then(p => {
395
+ this._crPage._page.waitForInitializedOrError().then(p => {
414
396
  if (p instanceof Error) this._stopVideoRecording().catch(() => {});
415
397
  });
416
398
  }
@@ -589,8 +571,7 @@ class FrameSession {
589
571
  let worldName;
590
572
  if (contextPayload.auxData && !!contextPayload.auxData.isDefault) worldName = 'main';else if (contextPayload.name === UTILITY_WORLD_NAME) worldName = 'utility';else return;
591
573
  const context = new dom.FrameExecutionContext(delegate, frame, worldName);
592
- context[contextDelegateSymbol] = delegate;
593
- frame._contextCreated(worldName, context);
574
+ if (worldName) frame._contextCreated(worldName, context);
594
575
  this._contextIdToContext.set(contextPayload.id, context);
595
576
  }
596
577
  _onExecutionContextDestroyed(executionContextId) {
@@ -611,6 +592,9 @@ class FrameSession {
611
592
  const frame = this._page._frameManager.frame(targetId);
612
593
  if (!frame) return; // Subtree may be already gone due to renderer/browser race.
613
594
  this._page._frameManager.removeChildFramesRecursively(frame);
595
+ for (const [contextId, context] of this._contextIdToContext) {
596
+ if (context.frame === frame) this._onExecutionContextDestroyed(contextId);
597
+ }
614
598
  const frameSession = new FrameSession(this._crPage, session, targetId, this);
615
599
  this._crPage._sessions.set(targetId, frameSession);
616
600
  frameSession._initialize(false).catch(e => e);
@@ -640,7 +624,7 @@ class FrameSession {
640
624
  session.on('Target.attachedToTarget', event => this._onAttachedToTarget(event));
641
625
  session.on('Target.detachedFromTarget', event => this._onDetachedFromTarget(event));
642
626
  session.on('Runtime.consoleAPICalled', event => {
643
- const args = event.args.map(o => worker._existingExecutionContext.createHandle(o));
627
+ const args = event.args.map(o => (0, _crExecutionContext.createHandle)(worker._existingExecutionContext, o));
644
628
  this._page._addConsoleMessage(event.type, args, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
645
629
  });
646
630
  session.on('Runtime.exceptionThrown', exception => this._page.emitOnContextOnceInitialized(_browserContext.BrowserContext.Events.PageError, (0, _crProtocolHelper.exceptionToError)(exception.exceptionDetails), this._page));
@@ -697,11 +681,11 @@ class FrameSession {
697
681
  }
698
682
  const context = this._contextIdToContext.get(event.executionContextId);
699
683
  if (!context) return;
700
- const values = event.args.map(arg => context.createHandle(arg));
684
+ const values = event.args.map(arg => (0, _crExecutionContext.createHandle)(context, arg));
701
685
  this._page._addConsoleMessage(event.type, values, (0, _crProtocolHelper.toConsoleMessageLocation)(event.stackTrace));
702
686
  }
703
687
  async _onBindingCalled(event) {
704
- const pageOrError = await this._crPage.pageOrError();
688
+ const pageOrError = await this._crPage._page.waitForInitializedOrError();
705
689
  if (!(pageOrError instanceof Error)) {
706
690
  const context = this._contextIdToContext.get(event.executionContextId);
707
691
  if (context) await this._page._onBindingCalled(event.payload, context);
@@ -710,6 +694,8 @@ class FrameSession {
710
694
  _onDialog(event) {
711
695
  if (!this._page._frameManager.frame(this._targetId)) return; // Our frame/subtree may be gone already.
712
696
  this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, event.type, event.message, async (accept, promptText) => {
697
+ // TODO: this should actually be a CDP event that notifies about a cancelled navigation attempt.
698
+ if (this._isMainFrame() && event.type === 'beforeunload' && !accept) this._page._frameManager.frameAbortedNavigation(this._page.mainFrame()._id, 'navigation cancelled by beforeunload dialog');
713
699
  await this._client.send('Page.handleJavaScriptDialog', {
714
700
  accept,
715
701
  promptText
@@ -757,8 +743,7 @@ class FrameSession {
757
743
  await this._page._onFileChooserOpened(handle);
758
744
  }
759
745
  _willBeginDownload() {
760
- const originPage = this._crPage._initializedPage;
761
- if (!originPage) {
746
+ if (!this._crPage._page.initializedOrUndefined()) {
762
747
  // Resume the page creation with an error. The page will automatically close right
763
748
  // after the download begins.
764
749
  this._firstNonInitialNavigationCommittedReject(new Error('Starting new page download'));
@@ -779,14 +764,14 @@ class FrameSession {
779
764
  });
780
765
  }
781
766
  async _createVideoRecorder(screencastId, options) {
782
- (0, _utils.assert)(!this._screencastId);
767
+ (0, _assert.assert)(!this._screencastId);
783
768
  const ffmpegPath = _registry.registry.findExecutable('ffmpeg').executablePathOrDie(this._page.attribution.playwright.options.sdkLanguage);
784
769
  this._videoRecorder = await _videoRecorder.VideoRecorder.launch(this._crPage._page, ffmpegPath, options);
785
770
  this._screencastId = screencastId;
786
771
  }
787
772
  async _startVideoRecording(options) {
788
773
  const screencastId = this._screencastId;
789
- (0, _utils.assert)(screencastId);
774
+ (0, _assert.assert)(screencastId);
790
775
  this._page.once(_page.Page.Events.Close, () => this._stopVideoRecording().catch(() => {}));
791
776
  const gotFirstFrame = new Promise(f => this._client.once('Page.screencastFrame', f));
792
777
  await this._startScreencast(this._videoRecorder, {
@@ -797,7 +782,7 @@ class FrameSession {
797
782
  });
798
783
  // Wait for the first frame before reporting video to the client.
799
784
  gotFirstFrame.then(() => {
800
- this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage.pageOrError());
785
+ this._crPage._browserContext._browser._videoStarted(this._crPage._browserContext, screencastId, options.outputFile, this._crPage._page.waitForInitializedOrError());
801
786
  });
802
787
  }
803
788
  async _stopVideoRecording() {
@@ -827,7 +812,7 @@ class FrameSession {
827
812
  }
828
813
  async _updateViewport(preserveWindowBoundaries) {
829
814
  if (this._crPage._browserContext._browser.isClank()) return;
830
- (0, _utils.assert)(this._isMainFrame());
815
+ (0, _assert.assert)(this._isMainFrame());
831
816
  const options = this._crPage._browserContext._options;
832
817
  const emulatedSize = this._page.emulatedSize();
833
818
  if (emulatedSize === null) return;
@@ -912,6 +897,7 @@ class FrameSession {
912
897
  const colorScheme = emulatedMedia.colorScheme === 'no-override' ? '' : emulatedMedia.colorScheme;
913
898
  const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? '' : emulatedMedia.reducedMotion;
914
899
  const forcedColors = emulatedMedia.forcedColors === 'no-override' ? '' : emulatedMedia.forcedColors;
900
+ const contrast = emulatedMedia.contrast === 'no-override' ? '' : emulatedMedia.contrast;
915
901
  const features = [{
916
902
  name: 'prefers-color-scheme',
917
903
  value: colorScheme
@@ -921,6 +907,9 @@ class FrameSession {
921
907
  }, {
922
908
  name: 'forced-colors',
923
909
  value: forcedColors
910
+ }, {
911
+ name: 'prefers-contrast',
912
+ value: contrast
924
913
  }];
925
914
  await this._client.send('Emulation.setEmulatedMedia', {
926
915
  media,
@@ -1056,10 +1045,10 @@ class FrameSession {
1056
1045
  async _adoptBackendNodeId(backendNodeId, to) {
1057
1046
  const result = await this._client._sendMayFail('DOM.resolveNode', {
1058
1047
  backendNodeId,
1059
- executionContextId: to[contextDelegateSymbol]._contextId
1048
+ executionContextId: to.delegate._contextId
1060
1049
  });
1061
1050
  if (!result || result.object.subtype === 'null') throw new Error(dom.kUnableToAdoptErrorMessage);
1062
- return to.createHandle(result.object).asElement();
1051
+ return (0, _crExecutionContext.createHandle)(to, result.object).asElement();
1063
1052
  }
1064
1053
  }
1065
1054
  async function emulateLocale(session, locale) {
@@ -1086,7 +1075,6 @@ async function emulateTimezone(session, timezoneId) {
1086
1075
  throw exception;
1087
1076
  }
1088
1077
  }
1089
- const contextDelegateSymbol = Symbol('delegate');
1090
1078
 
1091
1079
  // Chromium reference: https://source.chromium.org/chromium/chromium/src/+/main:components/embedder_support/user_agent_utils.cc;l=434;drc=70a6711e08e9f9e0d8e4c48e9ba5cab62eb010c2
1092
1080
  function calculateUserAgentMetadata(options) {
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CRPDF = void 0;
7
- var _utils = require("../../utils");
8
7
  var _crProtocolHelper = require("./crProtocolHelper");
8
+ var _utils = require("../../utils");
9
9
  /**
10
10
  * Copyright 2017 Google Inc. All rights reserved.
11
11
  * Modifications copyright (c) Microsoft Corporation.
@@ -12,9 +12,9 @@ exports.toButtonsMask = toButtonsMask;
12
12
  exports.toConsoleMessageLocation = toConsoleMessageLocation;
13
13
  exports.toModifiersMask = toModifiersMask;
14
14
  var _fs = _interopRequireDefault(require("fs"));
15
- var _fileUtils = require("../../utils/fileUtils");
16
- var _stackTrace = require("../../utils/stackTrace");
17
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ var _stackTrace = require("../../utils/isomorphic/stackTrace");
16
+ var _fileUtils = require("../utils/fileUtils");
17
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
18
  /**
19
19
  * Copyright 2017 Google Inc. All rights reserved.
20
20
  * Modifications copyright (c) Microsoft Corporation.
@@ -7,10 +7,10 @@ exports.CRServiceWorker = void 0;
7
7
  var _page = require("../page");
8
8
  var _crExecutionContext = require("./crExecutionContext");
9
9
  var _crNetworkManager = require("./crNetworkManager");
10
- var network = _interopRequireWildcard(require("../network"));
11
10
  var _browserContext = require("../browserContext");
11
+ var network = _interopRequireWildcard(require("../network"));
12
12
  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); }
13
- 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; }
13
+ 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; }
14
14
  /**
15
15
  * Copyright (c) Microsoft Corporation.
16
16
  *
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.VideoRecorder = void 0;
7
7
  var _utils = require("../../utils");
8
+ var _instrumentation = require("../instrumentation");
8
9
  var _page = require("../page");
9
- var _processLauncher = require("../../utils/processLauncher");
10
+ var _processLauncher = require("../utils/processLauncher");
10
11
  var _progress = require("../progress");
11
- var _instrumentation = require("../instrumentation");
12
12
  /**
13
13
  * Copyright (c) Microsoft Corporation.
14
14
  *
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Clock = void 0;
7
7
  var clockSource = _interopRequireWildcard(require("../generated/clockSource"));
8
8
  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); }
9
- 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; }
9
+ 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; }
10
10
  /**
11
11
  * Copyright (c) Microsoft Corporation.
12
12
  *
@@ -130,6 +130,8 @@ class CSharpLanguageGenerator {
130
130
  const assertion = action.value ? `ToHaveValueAsync(${quote(action.value)})` : `ToBeEmptyAsync()`;
131
131
  return `await Expect(${subject}.${this._asLocator(action.selector)}).${assertion};`;
132
132
  }
133
+ case 'assertSnapshot':
134
+ return `await Expect(${subject}.${this._asLocator(action.selector)}).ToMatchAriaSnapshotAsync(${quote(action.snapshot)});`;
133
135
  }
134
136
  }
135
137
  _asLocator(selector) {
@@ -149,6 +151,12 @@ class CSharpLanguageGenerator {
149
151
  using var playwright = await Playwright.CreateAsync();
150
152
  await using var browser = await playwright.${toPascal(options.browserName)}.LaunchAsync(${formatObject(options.launchOptions, ' ', 'BrowserTypeLaunchOptions')});
151
153
  var context = await browser.NewContextAsync(${formatContextOptions(options.contextOptions, options.deviceName)});`);
154
+ if (options.contextOptions.recordHar) {
155
+ const url = options.contextOptions.recordHar.urlFilter;
156
+ formatter.add(` await context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({
157
+ url
158
+ }, ' ', 'BrowserContextRouteFromHAROptions')}` : ''});`);
159
+ }
152
160
  formatter.newLine();
153
161
  return formatter.format();
154
162
  }
@@ -173,6 +181,12 @@ class CSharpLanguageGenerator {
173
181
  formatter.add(` [${this._mode === 'nunit' ? 'Test' : 'TestMethod'}]
174
182
  public async Task MyTest()
175
183
  {`);
184
+ if (options.contextOptions.recordHar) {
185
+ const url = options.contextOptions.recordHar.urlFilter;
186
+ formatter.add(` await Context.RouteFromHARAsync(${quote(options.contextOptions.recordHar.path)}${url ? `, ${formatObject({
187
+ url
188
+ }, ' ', 'BrowserContextRouteFromHAROptions')}` : ''});`);
189
+ }
176
190
  return formatter.format();
177
191
  }
178
192
  generateFooter(saveStorage) {
@@ -238,29 +252,20 @@ function getPropertyName(key) {
238
252
  function toPascal(value) {
239
253
  return value[0].toUpperCase() + value.slice(1);
240
254
  }
241
- function convertContextOptions(options) {
242
- const result = {
243
- ...options
255
+ function formatContextOptions(contextOptions, deviceName) {
256
+ let options = {
257
+ ...contextOptions
244
258
  };
245
- if (options.recordHar) {
246
- result['recordHarPath'] = options.recordHar.path;
247
- result['recordHarContent'] = options.recordHar.content;
248
- result['recordHarMode'] = options.recordHar.mode;
249
- result['recordHarOmitContent'] = options.recordHar.omitContent;
250
- result['recordHarUrlFilter'] = options.recordHar.urlFilter;
251
- delete result.recordHar;
252
- }
253
- return result;
254
- }
255
- function formatContextOptions(options, deviceName) {
259
+ // recordHAR is replaced with routeFromHAR in the generated code.
260
+ delete options.recordHar;
256
261
  const device = deviceName && _deviceDescriptors.deviceDescriptors[deviceName];
257
262
  if (!device) {
258
263
  if (!Object.entries(options).length) return '';
259
- return formatObject(convertContextOptions(options), ' ', 'BrowserNewContextOptions');
264
+ return formatObject(options, ' ', 'BrowserNewContextOptions');
260
265
  }
261
266
  options = (0, _language.sanitizeDeviceOptions)(device, options);
262
267
  if (!Object.entries(options).length) return `playwright.Devices[${quote(deviceName)}]`;
263
- return formatObject(convertContextOptions(options), ' ', `BrowserNewContextOptions(playwright.Devices[${quote(deviceName)}])`);
268
+ return formatObject(options, ' ', `BrowserNewContextOptions(playwright.Devices[${quote(deviceName)}])`);
264
269
  }
265
270
  class CSharpFormatter {
266
271
  constructor(offset = 0) {
@@ -108,7 +108,7 @@ class JavaLanguageGenerator {
108
108
  case 'navigate':
109
109
  return `${subject}.navigate(${quote(action.url)});`;
110
110
  case 'select':
111
- return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length > 1 ? action.options : action.options[0])});`;
111
+ return `${subject}.${this._asLocator(action.selector, inFrameLocator)}.selectOption(${formatSelectOption(action.options.length === 1 ? action.options[0] : action.options)});`;
112
112
  case 'assertText':
113
113
  return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${action.substring ? 'containsText' : 'hasText'}(${quote(action.text)});`;
114
114
  case 'assertChecked':
@@ -120,6 +120,8 @@ class JavaLanguageGenerator {
120
120
  const assertion = action.value ? `hasValue(${quote(action.value)})` : `isEmpty()`;
121
121
  return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).${assertion};`;
122
122
  }
123
+ case 'assertSnapshot':
124
+ return `assertThat(${subject}.${this._asLocator(action.selector, inFrameLocator)}).matchesAriaSnapshot(${quote(action.snapshot)});`;
123
125
  }
124
126
  }
125
127
  _asLocator(selector, inFrameLocator) {
@@ -133,26 +135,38 @@ class JavaLanguageGenerator {
133
135
  import com.microsoft.playwright.Page;
134
136
  import com.microsoft.playwright.options.*;
135
137
 
136
- import org.junit.jupiter.api.*;
138
+ ${options.contextOptions.recordHar ? `import java.nio.file.Paths;\n` : ''}import org.junit.jupiter.api.*;
137
139
  import static com.microsoft.playwright.assertions.PlaywrightAssertions.*;
138
140
 
139
141
  @UsePlaywright
140
142
  public class TestExample {
141
143
  @Test
142
144
  void test(Page page) {`);
145
+ if (options.contextOptions.recordHar) {
146
+ const url = options.contextOptions.recordHar.urlFilter;
147
+ const recordHarOptions = typeof url === 'string' ? `, new Page.RouteFromHAROptions()
148
+ .setUrl(${quote(url)})` : '';
149
+ formatter.add(` page.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);
150
+ }
143
151
  return formatter.format();
144
152
  }
145
153
  formatter.add(`
146
154
  import com.microsoft.playwright.*;
147
155
  import com.microsoft.playwright.options.*;
148
156
  import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
149
- import java.util.*;
157
+ ${options.contextOptions.recordHar ? `import java.nio.file.Paths;\n` : ''}import java.util.*;
150
158
 
151
159
  public class Example {
152
160
  public static void main(String[] args) {
153
161
  try (Playwright playwright = Playwright.create()) {
154
162
  Browser browser = playwright.${options.browserName}().launch(${formatLaunchOptions(options.launchOptions)});
155
163
  BrowserContext context = browser.newContext(${formatContextOptions(options.contextOptions, options.deviceName)});`);
164
+ if (options.contextOptions.recordHar) {
165
+ const url = options.contextOptions.recordHar.urlFilter;
166
+ const recordHarOptions = typeof url === 'string' ? `, new BrowserContext.RouteFromHAROptions()
167
+ .setUrl(${quote(url)})` : '';
168
+ formatter.add(` context.routeFromHAR(Paths.get(${quote(options.contextOptions.recordHar.path)})${recordHarOptions});`);
169
+ }
156
170
  return formatter.format();
157
171
  }
158
172
  generateFooter(saveStorage) {
@@ -190,7 +204,6 @@ function formatLaunchOptions(options) {
190
204
  return lines.join('\n');
191
205
  }
192
206
  function formatContextOptions(contextOptions, deviceName) {
193
- var _options$recordHar, _options$recordHar2, _options$recordHar3, _options$recordHar4, _options$recordHar5, _options$recordHar6, _options$recordHar7;
194
207
  const lines = [];
195
208
  if (!Object.keys(contextOptions).length && !deviceName) return '';
196
209
  const device = deviceName ? _deviceDescriptors.deviceDescriptors[deviceName] : {};
@@ -208,11 +221,6 @@ function formatContextOptions(contextOptions, deviceName) {
208
221
  if (options.isMobile) lines.push(` .setIsMobile(${options.isMobile})`);
209
222
  if (options.locale) lines.push(` .setLocale(${quote(options.locale)})`);
210
223
  if (options.proxy) lines.push(` .setProxy(new Proxy(${quote(options.proxy.server)}))`);
211
- if ((_options$recordHar = options.recordHar) !== null && _options$recordHar !== void 0 && _options$recordHar.content) lines.push(` .setRecordHarContent(HarContentPolicy.${(_options$recordHar2 = options.recordHar) === null || _options$recordHar2 === void 0 ? void 0 : _options$recordHar2.content.toUpperCase()})`);
212
- if ((_options$recordHar3 = options.recordHar) !== null && _options$recordHar3 !== void 0 && _options$recordHar3.mode) lines.push(` .setRecordHarMode(HarMode.${(_options$recordHar4 = options.recordHar) === null || _options$recordHar4 === void 0 ? void 0 : _options$recordHar4.mode.toUpperCase()})`);
213
- if ((_options$recordHar5 = options.recordHar) !== null && _options$recordHar5 !== void 0 && _options$recordHar5.omitContent) lines.push(` .setRecordHarOmitContent(true)`);
214
- if ((_options$recordHar6 = options.recordHar) !== null && _options$recordHar6 !== void 0 && _options$recordHar6.path) lines.push(` .setRecordHarPath(Paths.get(${quote(options.recordHar.path)}))`);
215
- if ((_options$recordHar7 = options.recordHar) !== null && _options$recordHar7 !== void 0 && _options$recordHar7.urlFilter) lines.push(` .setRecordHarUrlFilter(${quote(options.recordHar.urlFilter)})`);
216
224
  if (options.serviceWorkers) lines.push(` .setServiceWorkers(ServiceWorkerPolicy.${options.serviceWorkers.toUpperCase()})`);
217
225
  if (options.storageState) lines.push(` .setStorageStatePath(Paths.get(${quote(options.storageState)}))`);
218
226
  if (options.timezoneId) lines.push(` .setTimezoneId(${quote(options.timezoneId)})`);