@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,22 +4,21 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.UTILITY_WORLD_NAME = exports.FFPage = void 0;
7
+ var _eventsHelper = require("../utils/eventsHelper");
7
8
  var dialog = _interopRequireWildcard(require("../dialog"));
8
9
  var dom = _interopRequireWildcard(require("../dom"));
9
- var _eventsHelper = require("../../utils/eventsHelper");
10
10
  var _page = require("../page");
11
11
  var _ffAccessibility = require("./ffAccessibility");
12
12
  var _ffConnection = require("./ffConnection");
13
13
  var _ffExecutionContext = require("./ffExecutionContext");
14
14
  var _ffInput = require("./ffInput");
15
15
  var _ffNetworkManager = require("./ffNetworkManager");
16
- var _stackTrace = require("../../utils/stackTrace");
17
- var _debugLogger = require("../../utils/debugLogger");
18
- var _manualPromise = require("../../utils/manualPromise");
16
+ var _debugLogger = require("../utils/debugLogger");
17
+ var _stackTrace = require("../../utils/isomorphic/stackTrace");
19
18
  var _browserContext = require("../browserContext");
20
19
  var _errors = require("../errors");
21
20
  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); }
22
- 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; }
21
+ 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; }
23
22
  /**
24
23
  * Copyright 2019 Google Inc. All rights reserved.
25
24
  * Modifications copyright (c) Microsoft Corporation.
@@ -48,9 +47,7 @@ class FFPage {
48
47
  this._page = void 0;
49
48
  this._networkManager = void 0;
50
49
  this._browserContext = void 0;
51
- this._pagePromise = new _manualPromise.ManualPromise();
52
- this._initializedPage = null;
53
- this._initializationFailed = false;
50
+ this._reportedAsNew = false;
54
51
  this._opener = void 0;
55
52
  this._contextIdToContext = void 0;
56
53
  this._eventListeners = void 0;
@@ -70,34 +67,22 @@ class FFPage {
70
67
  this._page.on(_page.Page.Events.FrameDetached, frame => this._removeContextsForFrame(frame));
71
68
  // TODO: remove Page.willOpenNewWindowAsynchronously from the protocol.
72
69
  this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._session, 'Page.eventFired', this._onEventFired.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameAttached', this._onFrameAttached.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameDetached', this._onFrameDetached.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.navigationAborted', this._onNavigationAborted.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.navigationCommitted', this._onNavigationCommitted.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.navigationStarted', this._onNavigationStarted.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.sameDocumentNavigation', this._onSameDocumentNavigation.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.executionContextCreated', this._onExecutionContextCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.executionContextDestroyed', this._onExecutionContextDestroyed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.executionContextsCleared', this._onExecutionContextsCleared.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.linkClicked', event => this._onLinkClicked(event.phase)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.uncaughtError', this._onUncaughtError.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.console', this._onConsole.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.dialogOpened', this._onDialogOpened.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.bindingCalled', this._onBindingCalled.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.fileChooserOpened', this._onFileChooserOpened.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.workerCreated', this._onWorkerCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.workerDestroyed', this._onWorkerDestroyed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.dispatchMessageFromWorker', this._onDispatchMessageFromWorker.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.crashed', this._onCrashed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.videoRecordingStarted', this._onVideoRecordingStarted.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.webSocketCreated', this._onWebSocketCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.webSocketClosed', this._onWebSocketClosed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.webSocketFrameReceived', this._onWebSocketFrameReceived.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.webSocketFrameSent', this._onWebSocketFrameSent.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.screencastFrame', this._onScreencastFrame.bind(this))];
73
- this._session.once('Page.ready', async () => {
74
- await this._page.initOpener(this._opener);
75
- if (this._initializationFailed) return;
76
- // Note: it is important to call |reportAsNew| before resolving pageOrError promise,
77
- // so that anyone who awaits pageOrError got a ready and reported page.
78
- this._initializedPage = this._page;
79
- this._page.reportAsNew();
80
- this._pagePromise.resolve(this._page);
70
+ this._session.once('Page.ready', () => {
71
+ var _this$_opener;
72
+ if (this._reportedAsNew) return;
73
+ this._reportedAsNew = true;
74
+ this._page.reportAsNew((_this$_opener = this._opener) === null || _this$_opener === void 0 ? void 0 : _this$_opener._page);
81
75
  });
82
76
  // Ideally, we somehow ensure that utility world is created before Page.ready arrives, but currently it is racy.
83
77
  // Therefore, we can end up with an initialized page without utility world, although very unlikely.
84
78
  this.addInitScript(new _page.InitScript('', true), UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
85
79
  }
86
- potentiallyUninitializedPage() {
87
- return this._page;
88
- }
89
80
  async _markAsError(error) {
90
- // Same error may be report twice: channer disconnected and session.send fails.
91
- if (this._initializationFailed) return;
92
- this._initializationFailed = true;
93
- if (!this._initializedPage) {
94
- await this._page.initOpener(this._opener);
95
- this._page.reportAsNew(error);
96
- this._pagePromise.resolve(error);
97
- }
98
- }
99
- async pageOrError() {
100
- return this._pagePromise;
81
+ var _this$_opener2;
82
+ // Same error may be reported twice: channel disconnected and session.send fails.
83
+ if (this._reportedAsNew) return;
84
+ this._reportedAsNew = true;
85
+ this._page.reportAsNew((_this$_opener2 = this._opener) === null || _this$_opener2 === void 0 ? void 0 : _this$_opener2._page, error);
101
86
  }
102
87
  _onWebSocketCreated(event) {
103
88
  this._page._frameManager.onWebSocketCreated(webSocketId(event.frameId, event.wsid), event.requestURL);
@@ -124,8 +109,7 @@ class FFPage {
124
109
  let worldName;
125
110
  if (auxData.name === UTILITY_WORLD_NAME) worldName = 'utility';else if (!auxData.name) worldName = 'main';else return;
126
111
  const context = new dom.FrameExecutionContext(delegate, frame, worldName);
127
- context[contextDelegateSymbol] = delegate;
128
- frame._contextCreated(worldName, context);
112
+ if (worldName) frame._contextCreated(worldName, context);
129
113
  this._contextIdToContext.set(executionContextId, context);
130
114
  }
131
115
  _onExecutionContextDestroyed(payload) {
@@ -201,7 +185,7 @@ class FFPage {
201
185
  const context = this._contextIdToContext.get(executionContextId);
202
186
  if (!context) return;
203
187
  // Juggler reports 'warn' for some internal messages generated by the browser.
204
- this._page._addConsoleMessage(type === 'warn' ? 'warning' : type, args.map(arg => context.createHandle(arg)), location);
188
+ this._page._addConsoleMessage(type === 'warn' ? 'warning' : type, args.map(arg => (0, _ffExecutionContext.createHandle)(context, arg)), location);
205
189
  }
206
190
  _onDialogOpened(params) {
207
191
  this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, params.type, params.message, async (accept, promptText) => {
@@ -213,7 +197,7 @@ class FFPage {
213
197
  }, params.defaultValue));
214
198
  }
215
199
  async _onBindingCalled(event) {
216
- const pageOrError = await this.pageOrError();
200
+ const pageOrError = await this._page.waitForInitializedOrError();
217
201
  if (!(pageOrError instanceof Error)) {
218
202
  const context = this._contextIdToContext.get(event.executionContextId);
219
203
  if (context) await this._page._onBindingCalled(event.payload, context);
@@ -226,7 +210,7 @@ class FFPage {
226
210
  } = payload;
227
211
  const context = this._contextIdToContext.get(executionContextId);
228
212
  if (!context) return;
229
- const handle = context.createHandle(element).asElement();
213
+ const handle = (0, _ffExecutionContext.createHandle)(context, element).asElement();
230
214
  await this._page._onFileChooserOpened(handle);
231
215
  }
232
216
  async _onWorkerCreated(event) {
@@ -264,7 +248,7 @@ class FFPage {
264
248
  location
265
249
  } = event;
266
250
  const context = worker._existingExecutionContext;
267
- this._page._addConsoleMessage(type, args.map(arg => context.createHandle(arg)), location);
251
+ this._page._addConsoleMessage(type, args.map(arg => (0, _ffExecutionContext.createHandle)(context, arg)), location);
268
252
  });
269
253
  // Note: we receive worker exceptions directly from the page.
270
254
  }
@@ -286,7 +270,7 @@ class FFPage {
286
270
  this._page._didCrash();
287
271
  }
288
272
  _onVideoRecordingStarted(event) {
289
- this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this.pageOrError());
273
+ this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this._page.waitForInitializedOrError());
290
274
  }
291
275
  didClose() {
292
276
  this._markAsError(new _errors.TargetClosedError());
@@ -324,12 +308,14 @@ class FFPage {
324
308
  const colorScheme = emulatedMedia.colorScheme === 'no-override' ? undefined : emulatedMedia.colorScheme;
325
309
  const reducedMotion = emulatedMedia.reducedMotion === 'no-override' ? undefined : emulatedMedia.reducedMotion;
326
310
  const forcedColors = emulatedMedia.forcedColors === 'no-override' ? undefined : emulatedMedia.forcedColors;
311
+ const contrast = emulatedMedia.contrast === 'no-override' ? undefined : emulatedMedia.contrast;
327
312
  await this._session.send('Page.setEmulatedMedia', {
328
313
  // Empty string means reset.
329
314
  type: emulatedMedia.media === 'no-override' ? '' : emulatedMedia.media,
330
315
  colorScheme,
331
316
  reducedMotion,
332
- forcedColors
317
+ forcedColors,
318
+ contrast
333
319
  });
334
320
  }
335
321
  async updateRequestInterception() {
@@ -435,9 +421,6 @@ class FFPage {
435
421
  });
436
422
  return ownerFrameId || null;
437
423
  }
438
- isElementHandle(remoteObject) {
439
- return remoteObject.subtype === 'node';
440
- }
441
424
  async getBoundingBox(handle) {
442
425
  const quads = await this.getContentQuads(handle);
443
426
  if (!quads || !quads.length) return null;
@@ -507,9 +490,6 @@ class FFPage {
507
490
  if (!result) return null;
508
491
  return result.quads.map(quad => [quad.p1, quad.p2, quad.p3, quad.p4]);
509
492
  }
510
- async setInputFiles(handle, files) {
511
- await handle.evaluateInUtility(([injected, node, files]) => injected.setInputFiles(node, files), files);
512
- }
513
493
  async setInputFilePaths(handle, files) {
514
494
  await this._session.send('Page.setFileInputFiles', {
515
495
  frameId: handle._context.frame._id,
@@ -521,10 +501,10 @@ class FFPage {
521
501
  const result = await this._session.send('Page.adoptNode', {
522
502
  frameId: handle._context.frame._id,
523
503
  objectId: handle._objectId,
524
- executionContextId: to[contextDelegateSymbol]._executionContextId
504
+ executionContextId: to.delegate._executionContextId
525
505
  });
526
506
  if (!result.remoteObject) throw new Error(dom.kUnableToAdoptErrorMessage);
527
- return to.createHandle(result.remoteObject);
507
+ return (0, _ffExecutionContext.createHandle)(to, result.remoteObject);
528
508
  }
529
509
  async getAccessibilityTree(needle) {
530
510
  return (0, _ffAccessibility.getAccessibilityTree)(this._session, needle);
@@ -543,10 +523,10 @@ class FFPage {
543
523
  const context = await parent._mainContext();
544
524
  const result = await this._session.send('Page.adoptNode', {
545
525
  frameId: frame._id,
546
- executionContextId: context[contextDelegateSymbol]._executionContextId
526
+ executionContextId: context.delegate._executionContextId
547
527
  });
548
528
  if (!result.remoteObject) throw new Error('Frame has been detached.');
549
- return context.createHandle(result.remoteObject);
529
+ return (0, _ffExecutionContext.createHandle)(context, result.remoteObject);
550
530
  }
551
531
  shouldToggleStyleSheetToSyncAnimations() {
552
532
  return false;
@@ -555,5 +535,4 @@ class FFPage {
555
535
  exports.FFPage = FFPage;
556
536
  function webSocketId(frameId, wsid) {
557
537
  return `${frameId}---${wsid}`;
558
- }
559
- const contextDelegateSymbol = Symbol('delegate');
538
+ }
@@ -4,15 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Firefox = void 0;
7
- var os = _interopRequireWildcard(require("os"));
7
+ var _os = _interopRequireDefault(require("os"));
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _ffBrowser = require("./ffBrowser");
10
10
  var _ffConnection = require("./ffConnection");
11
+ var _ascii = require("../utils/ascii");
11
12
  var _browserType = require("../browserType");
12
- var _utils = require("../../utils");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
- 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); }
15
- 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 _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
16
14
  /**
17
15
  * Copyright 2017 Google Inc. All rights reserved.
18
16
  * Modifications copyright (c) Microsoft Corporation.
@@ -40,13 +38,13 @@ class Firefox extends _browserType.BrowserType {
40
38
  doRewriteStartupLog(error) {
41
39
  if (!error.logs) return error;
42
40
  // https://github.com/microsoft/playwright/issues/6500
43
- if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
44
- if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
41
+ if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
42
+ if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
45
43
  return error;
46
44
  }
47
45
  amendEnvironment(env, userDataDir, executable, browserArguments) {
48
- if (!_path.default.isAbsolute(os.homedir())) throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${os.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);
49
- if (os.platform() === 'linux') {
46
+ if (!_path.default.isAbsolute(_os.default.homedir())) throw new Error(`Cannot launch Firefox with relative home directory. Did you set ${_os.default.platform() === 'win32' ? 'USERPROFILE' : 'HOME'} to a relative path?`);
47
+ if (_os.default.platform() === 'linux') {
50
48
  // Always remove SNAP_NAME and SNAP_INSTANCE_NAME env variables since they
51
49
  // confuse Firefox: in our case, builds never come from SNAP.
52
50
  // See https://github.com/microsoft/playwright/issues/20555
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.FrameSelectors = void 0;
7
- var _selectorParser = require("../utils/isomorphic/selectorParser");
8
7
  var _utils = require("../utils");
8
+ var _selectorParser = require("../utils/isomorphic/selectorParser");
9
9
  /**
10
10
  * Copyright (c) Microsoft Corporation.
11
11
  *
@@ -4,26 +4,27 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.NavigationAbortedError = exports.FrameManager = exports.Frame = void 0;
7
+ var _browserContext = require("./browserContext");
7
8
  var dom = _interopRequireWildcard(require("./dom"));
9
+ var _errors = require("./errors");
10
+ var _fileUploadUtils = require("./fileUploadUtils");
11
+ var _frameSelectors = require("./frameSelectors");
8
12
  var _helper = require("./helper");
9
- var _eventsHelper = require("../utils/eventsHelper");
13
+ var _instrumentation = require("./instrumentation");
10
14
  var js = _interopRequireWildcard(require("./javascript"));
11
15
  var network = _interopRequireWildcard(require("./network"));
12
16
  var _page = require("./page");
13
- var types = _interopRequireWildcard(require("./types"));
14
- var _browserContext = require("./browserContext");
15
17
  var _progress = require("./progress");
18
+ var types = _interopRequireWildcard(require("./types"));
16
19
  var _utils = require("../utils");
17
- var _manualPromise = require("../utils/manualPromise");
18
- var _debugLogger = require("../utils/debugLogger");
19
- var _instrumentation = require("./instrumentation");
20
20
  var _protocolError = require("./protocolError");
21
+ var _debugLogger = require("./utils/debugLogger");
22
+ var _eventsHelper = require("./utils/eventsHelper");
21
23
  var _selectorParser = require("../utils/isomorphic/selectorParser");
22
- var _frameSelectors = require("./frameSelectors");
23
- var _errors = require("./errors");
24
- var _fileUploadUtils = require("./fileUploadUtils");
24
+ var _manualPromise = require("../utils/isomorphic/manualPromise");
25
+ var _callLog = require("./callLog");
25
26
  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); }
26
- 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; }
27
+ 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; }
27
28
  /**
28
29
  * Copyright 2017 Google Inc. All rights reserved.
29
30
  * Modifications copyright (c) Microsoft Corporation.
@@ -195,6 +196,11 @@ class FrameManager {
195
196
  frameCommittedSameDocumentNavigation(frameId, url) {
196
197
  const frame = this._frames.get(frameId);
197
198
  if (!frame) return;
199
+ const pending = frame.pendingDocument();
200
+ if (pending && pending.documentId === undefined && pending.request === undefined) {
201
+ // WebKit has notified about the same-document navigation being requested, so clear it.
202
+ frame.setPendingDocument(undefined);
203
+ }
198
204
  frame._url = url;
199
205
  const navigationEvent = {
200
206
  url,
@@ -237,9 +243,8 @@ class FrameManager {
237
243
  request
238
244
  });
239
245
  if (request._isFavicon) {
240
- route === null || route === void 0 || route.continue({
241
- isFallback: true
242
- }).catch(() => {});
246
+ // Abort favicon requests to avoid network access in case of interception.
247
+ route === null || route === void 0 || route.abort('aborted').catch(() => {});
243
248
  return;
244
249
  }
245
250
  this._page.emitOnContext(_browserContext.BrowserContext.Events.Request, request);
@@ -626,12 +631,12 @@ class Frame extends _instrumentation.SdkObject {
626
631
  return await this.waitForSelectorInternal(progress, selector, true, options, scope);
627
632
  }, this._page._timeoutSettings.timeout(options));
628
633
  }
629
- async waitForSelectorInternal(progress, selector, performLocatorHandlersCheckpoint, options, scope) {
634
+ async waitForSelectorInternal(progress, selector, performActionPreChecks, options, scope) {
630
635
  const {
631
636
  state = 'visible'
632
637
  } = options;
633
638
  const promise = this.retryWithProgressAndTimeouts(progress, [0, 20, 50, 100, 100, 500], async continuePolling => {
634
- if (performLocatorHandlersCheckpoint) await this._page.performLocatorHandlersCheckpoint(progress);
639
+ if (performActionPreChecks) await this._page.performActionPreChecks(progress);
635
640
  const resolved = await this.selectors.resolveInjectedForSelector(selector, options, scope);
636
641
  progress.throwIfAborted();
637
642
  if (!resolved) {
@@ -642,6 +647,7 @@ class Frame extends _instrumentation.SdkObject {
642
647
  info,
643
648
  root
644
649
  }) => {
650
+ if (root && !root.isConnected) throw injected.createStacklessError('Element is not attached to the DOM');
645
651
  const elements = injected.querySelectorAll(info.parsed, root || document);
646
652
  const element = elements[0];
647
653
  const visible = element ? injected.utils.isElementVisible(element) : false;
@@ -801,9 +807,9 @@ class Frame extends _instrumentation.SdkObject {
801
807
  return this._url;
802
808
  }
803
809
  origin() {
804
- var _network$parsedURL;
810
+ var _network$parseURL;
805
811
  if (!this._url.startsWith('http')) return;
806
- return (_network$parsedURL = network.parsedURL(this._url)) === null || _network$parsedURL === void 0 ? void 0 : _network$parsedURL.origin;
812
+ return (_network$parseURL = network.parseURL(this._url)) === null || _network$parseURL === void 0 ? void 0 : _network$parseURL.origin;
807
813
  }
808
814
  parentFrame() {
809
815
  return this._parentFrame;
@@ -948,19 +954,21 @@ class Frame extends _instrumentation.SdkObject {
948
954
  // Retry upon all other errors.
949
955
  return false;
950
956
  }
951
- async _retryWithProgressIfNotConnected(progress, selector, strict, performLocatorHandlersCheckpoint, action) {
957
+ async _retryWithProgressIfNotConnected(progress, selector, strict, performActionPreChecks, action) {
952
958
  progress.log(`waiting for ${this._asLocator(selector)}`);
953
959
  return this.retryWithProgressAndTimeouts(progress, [0, 20, 50, 100, 100, 500], async continuePolling => {
954
- if (performLocatorHandlersCheckpoint) await this._page.performLocatorHandlersCheckpoint(progress);
960
+ if (performActionPreChecks) await this._page.performActionPreChecks(progress);
955
961
  const resolved = await this.selectors.resolveInjectedForSelector(selector, {
956
962
  strict
957
963
  });
958
964
  progress.throwIfAborted();
959
965
  if (!resolved) return continuePolling;
960
966
  const result = await resolved.injected.evaluateHandle((injected, {
961
- info
967
+ info,
968
+ callId
962
969
  }) => {
963
970
  const elements = injected.querySelectorAll(info.parsed, document);
971
+ if (callId) injected.markTargetElements(new Set(elements), callId);
964
972
  const element = elements[0];
965
973
  let log = '';
966
974
  if (elements.length > 1) {
@@ -975,7 +983,8 @@ class Frame extends _instrumentation.SdkObject {
975
983
  element
976
984
  };
977
985
  }, {
978
- info: resolved.info
986
+ info: resolved.info,
987
+ callId: progress.metadata.id
979
988
  });
980
989
  const {
981
990
  log,
@@ -1004,7 +1013,7 @@ class Frame extends _instrumentation.SdkObject {
1004
1013
  });
1005
1014
  }
1006
1015
  async rafrafTimeoutScreenshotElementWithProgress(progress, selector, timeout, options) {
1007
- return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, true /* performLocatorHandlersCheckpoint */, async handle => {
1016
+ return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, true /* performActionPreChecks */, async handle => {
1008
1017
  await handle._frame.rafrafTimeout(timeout);
1009
1018
  return await this._page._screenshotter.screenshotElement(progress, handle, options);
1010
1019
  });
@@ -1012,7 +1021,7 @@ class Frame extends _instrumentation.SdkObject {
1012
1021
  async click(metadata, selector, options) {
1013
1022
  const controller = new _progress.ProgressController(metadata, this);
1014
1023
  return controller.run(async progress => {
1015
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._click(progress, {
1024
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._click(progress, {
1016
1025
  ...options,
1017
1026
  waitAfter: !options.noWaitAfter
1018
1027
  })));
@@ -1021,13 +1030,13 @@ class Frame extends _instrumentation.SdkObject {
1021
1030
  async dblclick(metadata, selector, options = {}) {
1022
1031
  const controller = new _progress.ProgressController(metadata, this);
1023
1032
  return controller.run(async progress => {
1024
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._dblclick(progress, options)));
1033
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._dblclick(progress, options)));
1025
1034
  }, this._page._timeoutSettings.timeout(options));
1026
1035
  }
1027
1036
  async dragAndDrop(metadata, source, target, options = {}) {
1028
1037
  const controller = new _progress.ProgressController(metadata, this);
1029
1038
  await controller.run(async progress => {
1030
- dom.assertDone(await this._retryWithProgressIfNotConnected(progress, source, options.strict, !options.force /* performLocatorHandlersCheckpoint */, async handle => {
1039
+ dom.assertDone(await this._retryWithProgressIfNotConnected(progress, source, options.strict, !options.force /* performActionPreChecks */, async handle => {
1031
1040
  return handle._retryPointerAction(progress, 'move and down', false, async point => {
1032
1041
  await this._page.mouse.move(point.x, point.y);
1033
1042
  await this._page.mouse.down();
@@ -1039,7 +1048,7 @@ class Frame extends _instrumentation.SdkObject {
1039
1048
  });
1040
1049
  }));
1041
1050
  // Note: do not perform locator handlers checkpoint to avoid moving the mouse in the middle of a drag operation.
1042
- dom.assertDone(await this._retryWithProgressIfNotConnected(progress, target, options.strict, false /* performLocatorHandlersCheckpoint */, async handle => {
1051
+ dom.assertDone(await this._retryWithProgressIfNotConnected(progress, target, options.strict, false /* performActionPreChecks */, async handle => {
1043
1052
  return handle._retryPointerAction(progress, 'move and up', false, async point => {
1044
1053
  await this._page.mouse.move(point.x, point.y);
1045
1054
  await this._page.mouse.up();
@@ -1056,25 +1065,25 @@ class Frame extends _instrumentation.SdkObject {
1056
1065
  if (!this._page._browserContext._options.hasTouch) throw new Error('The page does not support tap. Use hasTouch context option to enable touch support.');
1057
1066
  const controller = new _progress.ProgressController(metadata, this);
1058
1067
  return controller.run(async progress => {
1059
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._tap(progress, options)));
1068
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._tap(progress, options)));
1060
1069
  }, this._page._timeoutSettings.timeout(options));
1061
1070
  }
1062
1071
  async fill(metadata, selector, value, options) {
1063
1072
  const controller = new _progress.ProgressController(metadata, this);
1064
1073
  return controller.run(async progress => {
1065
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._fill(progress, value, options)));
1074
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._fill(progress, value, options)));
1066
1075
  }, this._page._timeoutSettings.timeout(options));
1067
1076
  }
1068
1077
  async focus(metadata, selector, options = {}) {
1069
1078
  const controller = new _progress.ProgressController(metadata, this);
1070
1079
  await controller.run(async progress => {
1071
- dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performLocatorHandlersCheckpoint */, handle => handle._focus(progress)));
1080
+ dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._focus(progress)));
1072
1081
  }, this._page._timeoutSettings.timeout(options));
1073
1082
  }
1074
1083
  async blur(metadata, selector, options = {}) {
1075
1084
  const controller = new _progress.ProgressController(metadata, this);
1076
1085
  await controller.run(async progress => {
1077
- dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performLocatorHandlersCheckpoint */, handle => handle._blur(progress)));
1086
+ dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._blur(progress)));
1078
1087
  }, this._page._timeoutSettings.timeout(options));
1079
1088
  }
1080
1089
  async textContent(metadata, selector, options = {}, scope) {
@@ -1127,7 +1136,8 @@ class Frame extends _instrumentation.SdkObject {
1127
1136
  }, {
1128
1137
  state
1129
1138
  }, options, scope);
1130
- return dom.throwRetargetableDOMError(result);
1139
+ if (result.received === 'error:notconnected') dom.throwElementIsNotAttached();
1140
+ return result.matches;
1131
1141
  }
1132
1142
  async isVisible(metadata, selector, options = {}, scope) {
1133
1143
  const controller = new _progress.ProgressController(metadata, this);
@@ -1145,8 +1155,11 @@ class Frame extends _instrumentation.SdkObject {
1145
1155
  root
1146
1156
  }) => {
1147
1157
  const element = injected.querySelector(info.parsed, root || document, info.strict);
1148
- const state = element ? injected.elementState(element, 'visible') : false;
1149
- return state === 'error:notconnected' ? false : state;
1158
+ const state = element ? injected.elementState(element, 'visible') : {
1159
+ matches: false,
1160
+ received: 'error:notconnected'
1161
+ };
1162
+ return state.matches;
1150
1163
  }, {
1151
1164
  info: resolved.info,
1152
1165
  root: resolved.frame === this ? scope : undefined
@@ -1174,44 +1187,44 @@ class Frame extends _instrumentation.SdkObject {
1174
1187
  async hover(metadata, selector, options = {}) {
1175
1188
  const controller = new _progress.ProgressController(metadata, this);
1176
1189
  return controller.run(async progress => {
1177
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._hover(progress, options)));
1190
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._hover(progress, options)));
1178
1191
  }, this._page._timeoutSettings.timeout(options));
1179
1192
  }
1180
1193
  async selectOption(metadata, selector, elements, values, options = {}) {
1181
1194
  const controller = new _progress.ProgressController(metadata, this);
1182
1195
  return controller.run(async progress => {
1183
- return await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._selectOption(progress, elements, values, options));
1196
+ return await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._selectOption(progress, elements, values, options));
1184
1197
  }, this._page._timeoutSettings.timeout(options));
1185
1198
  }
1186
1199
  async setInputFiles(metadata, selector, params) {
1187
1200
  const inputFileItems = await (0, _fileUploadUtils.prepareFilesForUpload)(this, params);
1188
1201
  const controller = new _progress.ProgressController(metadata, this);
1189
1202
  return controller.run(async progress => {
1190
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, params.strict, true /* performLocatorHandlersCheckpoint */, handle => handle._setInputFiles(progress, inputFileItems)));
1203
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, params.strict, true /* performActionPreChecks */, handle => handle._setInputFiles(progress, inputFileItems)));
1191
1204
  }, this._page._timeoutSettings.timeout(params));
1192
1205
  }
1193
1206
  async type(metadata, selector, text, options = {}) {
1194
1207
  const controller = new _progress.ProgressController(metadata, this);
1195
1208
  return controller.run(async progress => {
1196
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performLocatorHandlersCheckpoint */, handle => handle._type(progress, text, options)));
1209
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._type(progress, text, options)));
1197
1210
  }, this._page._timeoutSettings.timeout(options));
1198
1211
  }
1199
1212
  async press(metadata, selector, key, options = {}) {
1200
1213
  const controller = new _progress.ProgressController(metadata, this);
1201
1214
  return controller.run(async progress => {
1202
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performLocatorHandlersCheckpoint */, handle => handle._press(progress, key, options)));
1215
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, true /* performActionPreChecks */, handle => handle._press(progress, key, options)));
1203
1216
  }, this._page._timeoutSettings.timeout(options));
1204
1217
  }
1205
1218
  async check(metadata, selector, options = {}) {
1206
1219
  const controller = new _progress.ProgressController(metadata, this);
1207
1220
  return controller.run(async progress => {
1208
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._setChecked(progress, true, options)));
1221
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._setChecked(progress, true, options)));
1209
1222
  }, this._page._timeoutSettings.timeout(options));
1210
1223
  }
1211
1224
  async uncheck(metadata, selector, options = {}) {
1212
1225
  const controller = new _progress.ProgressController(metadata, this);
1213
1226
  return controller.run(async progress => {
1214
- return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performLocatorHandlersCheckpoint */, handle => handle._setChecked(progress, false, options)));
1227
+ return dom.assertDone(await this._retryWithProgressIfNotConnected(progress, selector, options.strict, !options.force /* performActionPreChecks */, handle => handle._setChecked(progress, false, options)));
1215
1228
  }, this._page._timeoutSettings.timeout(options));
1216
1229
  }
1217
1230
  async waitForTimeout(metadata, timeout) {
@@ -1220,6 +1233,12 @@ class Frame extends _instrumentation.SdkObject {
1220
1233
  await new Promise(resolve => setTimeout(resolve, timeout));
1221
1234
  });
1222
1235
  }
1236
+ async ariaSnapshot(metadata, selector, options = {}) {
1237
+ const controller = new _progress.ProgressController(metadata, this);
1238
+ return controller.run(async progress => {
1239
+ return await this._retryWithProgressIfNotConnected(progress, selector, true /* strict */, true /* performActionPreChecks */, handle => handle.ariaSnapshot(options));
1240
+ }, this._page._timeoutSettings.timeout(options));
1241
+ }
1223
1242
  async expect(metadata, selector, options) {
1224
1243
  const result = await this._expectImpl(metadata, selector, options);
1225
1244
  // Library mode special case for the expect errors which are return values, not exceptions.
@@ -1243,7 +1262,7 @@ class Frame extends _instrumentation.SdkObject {
1243
1262
  await new _progress.ProgressController(metadata, this).run(async progress => {
1244
1263
  progress.log(`${metadata.apiName}${timeout ? ` with timeout ${timeout}ms` : ''}`);
1245
1264
  progress.log(`waiting for ${this._asLocator(selector)}`);
1246
- await this._page.performLocatorHandlersCheckpoint(progress);
1265
+ await this._page.performActionPreChecks(progress);
1247
1266
  }, timeout);
1248
1267
 
1249
1268
  // Step 2: perform one-shot expect check without a timeout.
@@ -1264,7 +1283,7 @@ class Frame extends _instrumentation.SdkObject {
1264
1283
  }
1265
1284
  if (timeout < 0) return {
1266
1285
  matches: options.isNot,
1267
- log: metadata.log,
1286
+ log: (0, _callLog.compressCallLog)(metadata.log),
1268
1287
  timedOut: true,
1269
1288
  received: lastIntermediateResult.received
1270
1289
  };
@@ -1272,7 +1291,7 @@ class Frame extends _instrumentation.SdkObject {
1272
1291
  // Step 3: auto-retry expect with increasing timeouts. Bounded by the total remaining time.
1273
1292
  return await new _progress.ProgressController(metadata, this).run(async progress => {
1274
1293
  return await this.retryWithProgressAndTimeouts(progress, [100, 250, 500, 1000], async continuePolling => {
1275
- await this._page.performLocatorHandlersCheckpoint(progress);
1294
+ await this._page.performActionPreChecks(progress);
1276
1295
  const {
1277
1296
  matches,
1278
1297
  received
@@ -1295,7 +1314,7 @@ class Frame extends _instrumentation.SdkObject {
1295
1314
  if (js.isJavaScriptErrorInEvaluate(e) || (0, _selectorParser.isInvalidSelectorError)(e)) throw e;
1296
1315
  const result = {
1297
1316
  matches: options.isNot,
1298
- log: metadata.log
1317
+ log: (0, _callLog.compressCallLog)(metadata.log)
1299
1318
  };
1300
1319
  if (lastIntermediateResult.isSet) result.received = lastIntermediateResult.received;
1301
1320
  if (e instanceof _errors.TimeoutError) result.timedOut = true;
@@ -1330,10 +1349,10 @@ class Frame extends _instrumentation.SdkObject {
1330
1349
  callId
1331
1350
  }) => {
1332
1351
  const elements = info ? injected.querySelectorAll(info.parsed, document) : [];
1352
+ if (callId) injected.markTargetElements(new Set(elements), callId);
1333
1353
  const isArray = options.expression === 'to.have.count' || options.expression.endsWith('.array');
1334
1354
  let log = '';
1335
1355
  if (isArray) log = ` locator resolved to ${elements.length} element${elements.length === 1 ? '' : 's'}`;else if (elements.length > 1) throw injected.strictModeViolationError(info.parsed, elements);else if (elements.length) log = ` locator resolved to ${injected.previewNode(elements[0])}`;
1336
- if (callId) injected.markTargetElements(new Set(elements), callId);
1337
1356
  return {
1338
1357
  log,
1339
1358
  ...(await injected.expect(elements[0], options, elements))
@@ -1641,15 +1660,6 @@ function verifyLifecycle(name, waitUntil) {
1641
1660
  return waitUntil;
1642
1661
  }
1643
1662
  function renderUnexpectedValue(expression, received) {
1644
- if (expression === 'to.be.checked') return received ? 'checked' : 'unchecked';
1645
- if (expression === 'to.be.unchecked') return received ? 'unchecked' : 'checked';
1646
- if (expression === 'to.be.visible') return received ? 'visible' : 'hidden';
1647
- if (expression === 'to.be.hidden') return received ? 'hidden' : 'visible';
1648
- if (expression === 'to.be.enabled') return received ? 'enabled' : 'disabled';
1649
- if (expression === 'to.be.disabled') return received ? 'disabled' : 'enabled';
1650
- if (expression === 'to.be.editable') return received ? 'editable' : 'readonly';
1651
- if (expression === 'to.be.readonly') return received ? 'readonly' : 'editable';
1652
- if (expression === 'to.be.empty') return received ? 'empty' : 'not empty';
1653
- if (expression === 'to.be.focused') return received ? 'focused' : 'not focused';
1663
+ if (expression === 'to.match.aria') return received ? received.raw : received;
1654
1664
  return received;
1655
1665
  }