@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
@@ -6,10 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ChannelOwner = void 0;
7
7
  var _eventEmitter = require("./eventEmitter");
8
8
  var _validator = require("../protocol/validator");
9
- var _debugLogger = require("../utils/debugLogger");
10
- var _stackTrace = require("../utils/stackTrace");
11
- var _utils = require("../utils");
12
- var _zones = require("../utils/zones");
9
+ var _clientStackTrace = require("./clientStackTrace");
10
+ var _stackTrace = require("../utils/isomorphic/stackTrace");
13
11
  /**
14
12
  * Copyright (c) Microsoft Corporation.
15
13
  *
@@ -28,7 +26,8 @@ var _zones = require("../utils/zones");
28
26
 
29
27
  class ChannelOwner extends _eventEmitter.EventEmitter {
30
28
  constructor(parent, type, guid, initializer) {
31
- super();
29
+ const connection = parent instanceof ChannelOwner ? parent._connection : parent;
30
+ super(connection._platform);
32
31
  this._connection = void 0;
33
32
  this._parent = void 0;
34
33
  this._objects = new Map();
@@ -42,7 +41,7 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
42
41
  this._isInternalType = false;
43
42
  this._wasCollected = false;
44
43
  this.setMaxListeners(0);
45
- this._connection = parent instanceof ChannelOwner ? parent._connection : parent;
44
+ this._connection = connection;
46
45
  this._type = type;
47
46
  this._guid = guid;
48
47
  this._parent = parent instanceof ChannelOwner ? parent : undefined;
@@ -52,7 +51,7 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
52
51
  this._parent._objects.set(guid, this);
53
52
  this._logger = this._parent._logger;
54
53
  }
55
- this._channel = this._createChannel(new _eventEmitter.EventEmitter());
54
+ this._channel = this._createChannel(new _eventEmitter.EventEmitter(connection._platform));
56
55
  this._initializer = initializer;
57
56
  }
58
57
  markAsInternalType() {
@@ -118,6 +117,13 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
118
117
  objects: Array.from(this._objects.values()).map(o => o._debugScopeState())
119
118
  };
120
119
  }
120
+ _validatorToWireContext() {
121
+ return {
122
+ tChannelImpl: tChannelImplToWire,
123
+ binary: this._connection.rawBuffers() ? 'buffer' : 'toBase64',
124
+ isUnderTest: () => this._platform.isUnderTest()
125
+ };
126
+ }
121
127
  _createChannel(base) {
122
128
  const channel = new Proxy(base, {
123
129
  get: (obj, prop) => {
@@ -126,30 +132,18 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
126
132
  if (validator) {
127
133
  return async params => {
128
134
  return await this._wrapApiCall(async apiZone => {
129
- const {
130
- apiName,
131
- frames,
132
- csi,
133
- callCookie,
134
- stepId
135
- } = apiZone.reported ? {
136
- apiName: undefined,
137
- csi: undefined,
138
- callCookie: undefined,
139
- frames: [],
140
- stepId: undefined
141
- } : apiZone;
142
- apiZone.reported = true;
143
- let currentStepId = stepId;
144
- if (csi && apiName) {
145
- const out = {};
146
- csi.onApiCallBegin(apiName, params, frames, callCookie, out);
147
- currentStepId = out.stepId;
135
+ const validatedParams = validator(params, '', this._validatorToWireContext());
136
+ if (!apiZone.isInternal && !apiZone.reported) {
137
+ // Reporting/tracing/logging this api call for the first time.
138
+ apiZone.params = params;
139
+ apiZone.reported = true;
140
+ this._instrumentation.onApiCallBegin(apiZone);
141
+ logApiCall(this._platform, this._logger, `=> ${apiZone.apiName} started`);
142
+ return await this._connection.sendMessageToServer(this, prop, validatedParams, apiZone.apiName, apiZone.frames, apiZone.stepId);
148
143
  }
149
- return await this._connection.sendMessageToServer(this, prop, validator(params, '', {
150
- tChannelImpl: tChannelImplToWire,
151
- binary: this._connection.rawBuffers() ? 'buffer' : 'toBase64'
152
- }), apiName, frames, currentStepId);
144
+ // Since this api call is either internal, or has already been reported/traced once,
145
+ // passing undefined apiName will avoid an extra unneeded tracing entry.
146
+ return await this._connection.sendMessageToServer(this, prop, validatedParams, undefined, [], undefined);
153
147
  });
154
148
  };
155
149
  }
@@ -160,47 +154,39 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
160
154
  channel._object = this;
161
155
  return channel;
162
156
  }
163
- async _wrapApiCall(func, isInternal = false) {
157
+ async _wrapApiCall(func, isInternal) {
164
158
  const logger = this._logger;
165
- const apiZone = _zones.zones.zoneData('apiZone');
166
- if (apiZone) return await func(apiZone);
167
- const stackTrace = (0, _stackTrace.captureLibraryStackTrace)();
168
- let apiName = stackTrace.apiName;
169
- const frames = stackTrace.frames;
170
- isInternal = isInternal || this._isInternalType;
171
- if (isInternal) apiName = undefined;
172
-
173
- // Enclosing zone could have provided the apiName and wallTime.
174
- const expectZone = _zones.zones.zoneData('expectZone');
175
- const stepId = expectZone === null || expectZone === void 0 ? void 0 : expectZone.stepId;
176
- if (!isInternal && expectZone) apiName = expectZone.title;
177
-
178
- // If we are coming from the expectZone, there is no need to generate a new
179
- // step for the API call, since it will be generated by the expect itself.
180
- const csi = isInternal || expectZone ? undefined : this._instrumentation;
181
- const callCookie = {};
159
+ const existingApiZone = this._platform.zones.current().data();
160
+ if (existingApiZone) return await func(existingApiZone);
161
+ if (isInternal === undefined) isInternal = this._isInternalType;
162
+ const stackTrace = (0, _clientStackTrace.captureLibraryStackTrace)(this._platform);
163
+ const apiZone = {
164
+ apiName: stackTrace.apiName,
165
+ frames: stackTrace.frames,
166
+ isInternal,
167
+ reported: false,
168
+ userData: undefined,
169
+ stepId: undefined
170
+ };
182
171
  try {
183
- logApiCall(logger, `=> ${apiName} started`, isInternal);
184
- const apiZone = {
185
- apiName,
186
- frames,
187
- isInternal,
188
- reported: false,
189
- csi,
190
- callCookie,
191
- stepId
192
- };
193
- const result = await _zones.zones.run('apiZone', apiZone, async () => await func(apiZone));
194
- csi === null || csi === void 0 || csi.onApiCallEnd(callCookie, null, result);
195
- logApiCall(logger, `<= ${apiName} succeeded`, isInternal);
172
+ const result = await this._platform.zones.current().push(apiZone).run(async () => await func(apiZone));
173
+ if (!isInternal) {
174
+ logApiCall(this._platform, logger, `<= ${apiZone.apiName} succeeded`);
175
+ // @ts-ignore
176
+ // patch:checkly[2025-04]
177
+ this._instrumentation.onApiCallEnd(apiZone, result);
178
+ }
196
179
  return result;
197
180
  } catch (e) {
198
- const innerError = (process.env.PWDEBUGIMPL || (0, _utils.isUnderTest)()) && e.stack ? '\n<inner error>\n' + e.stack : '';
199
- if (apiName && !apiName.includes('<anonymous>')) e.message = apiName + ': ' + e.message;
181
+ const innerError = (this._platform.showInternalStackFrames() || this._platform.isUnderTest()) && e.stack ? '\n<inner error>\n' + e.stack : '';
182
+ if (apiZone.apiName && !apiZone.apiName.includes('<anonymous>')) e.message = apiZone.apiName + ': ' + e.message;
200
183
  const stackFrames = '\n' + (0, _stackTrace.stringifyStackFrames)(stackTrace.frames).join('\n') + innerError;
201
184
  if (stackFrames.trim()) e.stack = e.message + stackFrames;else e.stack = '';
202
- csi === null || csi === void 0 || csi.onApiCallEnd(callCookie, e);
203
- logApiCall(logger, `<= ${apiName} failed`, isInternal);
185
+ if (!isInternal) {
186
+ apiZone.error = e;
187
+ logApiCall(this._platform, logger, `<= ${apiZone.apiName} failed`);
188
+ this._instrumentation.onApiCallEnd(apiZone);
189
+ }
204
190
  throw e;
205
191
  }
206
192
  }
@@ -220,12 +206,11 @@ class ChannelOwner extends _eventEmitter.EventEmitter {
220
206
  }
221
207
  }
222
208
  exports.ChannelOwner = ChannelOwner;
223
- function logApiCall(logger, message, isNested) {
224
- if (isNested) return;
209
+ function logApiCall(platform, logger, message) {
225
210
  if (logger && logger.isEnabled('api', 'info')) logger.log('api', 'info', message, [], {
226
211
  color: 'cyan'
227
212
  });
228
- _debugLogger.debugLogger.log('api', message);
213
+ platform.log('api', message);
229
214
  }
230
215
  function tChannelImplToWire(names, arg, path, context) {
231
216
  if (arg._object instanceof ChannelOwner && (names === '*' || names.includes(arg._object._type))) return {
@@ -6,9 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.addSourceUrlToScript = addSourceUrlToScript;
7
7
  exports.envObjectToArray = envObjectToArray;
8
8
  exports.evaluationScript = evaluationScript;
9
- var _fs = _interopRequireDefault(require("fs"));
10
- var _utils = require("../utils");
11
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ var _rtti = require("../utils/isomorphic/rtti");
12
10
  /**
13
11
  * Copyright 2017 Google Inc. All rights reserved.
14
12
  * Modifications copyright (c) Microsoft Corporation.
@@ -36,17 +34,17 @@ function envObjectToArray(env) {
36
34
  }
37
35
  return result;
38
36
  }
39
- async function evaluationScript(fun, arg, addSourceUrl = true) {
37
+ async function evaluationScript(platform, fun, arg, addSourceUrl = true) {
40
38
  if (typeof fun === 'function') {
41
39
  const source = fun.toString();
42
40
  const argString = Object.is(arg, undefined) ? 'undefined' : JSON.stringify(arg);
43
41
  return `(${source})(${argString})`;
44
42
  }
45
43
  if (arg !== undefined) throw new Error('Cannot evaluate a string with arguments');
46
- if ((0, _utils.isString)(fun)) return fun;
44
+ if ((0, _rtti.isString)(fun)) return fun;
47
45
  if (fun.content !== undefined) return fun.content;
48
46
  if (fun.path !== undefined) {
49
- let source = await _fs.default.promises.readFile(fun.path, 'utf8');
47
+ let source = await platform.fs().promises.readFile(fun.path, 'utf8');
50
48
  if (addSourceUrl) source = addSourceUrlToScript(source, fun.path);
51
49
  return source;
52
50
  }
@@ -20,6 +20,8 @@ exports.createInstrumentation = createInstrumentation;
20
20
  * limitations under the License.
21
21
  */
22
22
 
23
+ // Instrumentation can mutate the data, for example change apiName or stepId.
24
+
23
25
  function createInstrumentation() {
24
26
  const listeners = [];
25
27
  return new Proxy({}, {
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.captureLibraryStackTrace = captureLibraryStackTrace;
7
+ var _stackTrace = require("../utils/isomorphic/stackTrace");
8
+ /**
9
+ * Copyright (c) Microsoft Corporation.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+
24
+ function captureLibraryStackTrace(platform) {
25
+ const stack = (0, _stackTrace.captureRawStack)();
26
+ let parsedFrames = stack.map(line => {
27
+ const frame = (0, _stackTrace.parseStackFrame)(line, platform.pathSeparator, platform.showInternalStackFrames());
28
+ if (!frame || !frame.file) return null;
29
+ const isPlaywrightLibrary = !!platform.coreDir && frame.file.startsWith(platform.coreDir);
30
+ const parsed = {
31
+ frame,
32
+ frameText: line,
33
+ isPlaywrightLibrary
34
+ };
35
+ return parsed;
36
+ }).filter(Boolean);
37
+ let apiName = '';
38
+
39
+ // Deepest transition between non-client code calling into client
40
+ // code is the api entry.
41
+ for (let i = 0; i < parsedFrames.length - 1; i++) {
42
+ const parsedFrame = parsedFrames[i];
43
+ if (parsedFrame.isPlaywrightLibrary && !parsedFrames[i + 1].isPlaywrightLibrary) {
44
+ apiName = apiName || normalizeAPIName(parsedFrame.frame.function);
45
+ break;
46
+ }
47
+ }
48
+ function normalizeAPIName(name) {
49
+ if (!name) return '';
50
+ const match = name.match(/(API|JS|CDP|[A-Z])(.*)/);
51
+ if (!match) return name;
52
+ return match[1].toLowerCase() + match[2];
53
+ }
54
+
55
+ // This is for the inspector so that it did not include the test runner stack frames.
56
+ const filterPrefixes = platform.boxedStackPrefixes();
57
+ parsedFrames = parsedFrames.filter(f => {
58
+ if (filterPrefixes.some(prefix => f.frame.file.startsWith(prefix))) return false;
59
+ return true;
60
+ });
61
+ return {
62
+ frames: parsedFrames.map(p => p.frame),
63
+ apiName
64
+ };
65
+ }
@@ -4,35 +4,34 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Connection = void 0;
7
+ var _eventEmitter = require("./eventEmitter");
8
+ var _android = require("./android");
9
+ var _artifact = require("./artifact");
7
10
  var _browser = require("./browser");
8
11
  var _browserContext = require("./browserContext");
9
12
  var _browserType = require("./browserType");
13
+ var _cdpSession = require("./cdpSession");
10
14
  var _channelOwner = require("./channelOwner");
15
+ var _clientInstrumentation = require("./clientInstrumentation");
16
+ var _dialog = require("./dialog");
17
+ var _electron = require("./electron");
11
18
  var _elementHandle = require("./elementHandle");
19
+ var _errors = require("./errors");
20
+ var _fetch = require("./fetch");
12
21
  var _frame = require("./frame");
13
22
  var _jsHandle = require("./jsHandle");
23
+ var _jsonPipe = require("./jsonPipe");
24
+ var _localUtils = require("./localUtils");
14
25
  var _network = require("./network");
15
26
  var _page = require("./page");
16
- var _worker = require("./worker");
17
- var _dialog = require("./dialog");
18
- var _errors = require("./errors");
19
- var _cdpSession = require("./cdpSession");
20
27
  var _playwright = require("./playwright");
21
- var _electron = require("./electron");
22
- var _stream = require("./stream");
23
- var _writableStream = require("./writableStream");
24
- var _debugLogger = require("../utils/debugLogger");
25
28
  var _selectors = require("./selectors");
26
- var _android = require("./android");
27
- var _artifact = require("./artifact");
28
- var _events = require("events");
29
- var _jsonPipe = require("./jsonPipe");
30
- var _fetch = require("./fetch");
31
- var _localUtils = require("./localUtils");
29
+ var _stream = require("./stream");
32
30
  var _tracing = require("./tracing");
31
+ var _worker = require("./worker");
32
+ var _writableStream = require("./writableStream");
33
33
  var _validator = require("../protocol/validator");
34
- var _clientInstrumentation = require("./clientInstrumentation");
35
- var _utils = require("../utils");
34
+ var _stackTrace = require("../utils/isomorphic/stackTrace");
36
35
  /**
37
36
  * Copyright (c) Microsoft Corporation.
38
37
  *
@@ -60,9 +59,9 @@ class Root extends _channelOwner.ChannelOwner {
60
59
  }
61
60
  }
62
61
  class DummyChannelOwner extends _channelOwner.ChannelOwner {}
63
- class Connection extends _events.EventEmitter {
64
- constructor(localUtils, instrumentation) {
65
- super();
62
+ class Connection extends _eventEmitter.EventEmitter {
63
+ constructor(platform, localUtils, instrumentation, headers = []) {
64
+ super(platform);
66
65
  this._objects = new Map();
67
66
  this.onmessage = message => {};
68
67
  this._lastId = 0;
@@ -76,9 +75,12 @@ class Connection extends _events.EventEmitter {
76
75
  this.toImpl = void 0;
77
76
  this._tracingCount = 0;
78
77
  this._instrumentation = void 0;
79
- this._rootObject = new Root(this);
80
- this._localUtils = localUtils;
78
+ // Used from @playwright/test fixtures -> TODO remove?
79
+ this.headers = void 0;
81
80
  this._instrumentation = instrumentation || (0, _clientInstrumentation.createInstrumentation)();
81
+ this._localUtils = localUtils;
82
+ this._rootObject = new Root(this);
83
+ this.headers = headers;
82
84
  }
83
85
  markAsRemote() {
84
86
  this._isRemote = true;
@@ -117,9 +119,9 @@ class Connection extends _events.EventEmitter {
117
119
  method,
118
120
  params
119
121
  };
120
- if (_debugLogger.debugLogger.isEnabled('channel')) {
122
+ if (this._platform.isLogEnabled('channel')) {
121
123
  // Do not include metadata in debug logs to avoid noise.
122
- _debugLogger.debugLogger.log('channel', 'SEND> ' + JSON.stringify(message));
124
+ this._platform.log('channel', 'SEND> ' + JSON.stringify(message));
123
125
  }
124
126
  const location = frames[0] ? {
125
127
  file: frames[0].file,
@@ -132,7 +134,7 @@ class Connection extends _events.EventEmitter {
132
134
  internal: !apiName,
133
135
  stepId
134
136
  };
135
- if (this._tracingCount && frames && type !== 'LocalUtils') (_this$_localUtils = this._localUtils) === null || _this$_localUtils === void 0 || _this$_localUtils._channel.addStackToTracingNoReply({
137
+ if (this._tracingCount && frames && type !== 'LocalUtils') (_this$_localUtils = this._localUtils) === null || _this$_localUtils === void 0 || _this$_localUtils.addStackToTracingNoReply({
136
138
  callData: {
137
139
  stack: frames,
138
140
  id
@@ -140,7 +142,7 @@ class Connection extends _events.EventEmitter {
140
142
  }).catch(() => {});
141
143
  // We need to exit zones before calling into the server, otherwise
142
144
  // when we receive events from the server, we would be in an API zone.
143
- _utils.zones.exitZones(() => this.onmessage({
145
+ this._platform.zones.empty.run(() => this.onmessage({
144
146
  ...message,
145
147
  metadata
146
148
  }));
@@ -152,6 +154,13 @@ class Connection extends _events.EventEmitter {
152
154
  method
153
155
  }));
154
156
  }
157
+ _validatorFromWireContext() {
158
+ return {
159
+ tChannelImpl: this._tChannelImplFromWire.bind(this),
160
+ binary: this._rawBuffers ? 'buffer' : 'fromBase64',
161
+ isUnderTest: () => this._platform.isUnderTest()
162
+ };
163
+ }
155
164
  dispatch(message) {
156
165
  if (this._closedError) return;
157
166
  const {
@@ -164,24 +173,21 @@ class Connection extends _events.EventEmitter {
164
173
  log
165
174
  } = message;
166
175
  if (id) {
167
- if (_debugLogger.debugLogger.isEnabled('channel')) _debugLogger.debugLogger.log('channel', '<RECV ' + JSON.stringify(message));
176
+ if (this._platform.isLogEnabled('channel')) this._platform.log('channel', '<RECV ' + JSON.stringify(message));
168
177
  const callback = this._callbacks.get(id);
169
178
  if (!callback) throw new Error(`Cannot find command to respond: ${id}`);
170
179
  this._callbacks.delete(id);
171
180
  if (error && !result) {
172
181
  const parsedError = (0, _errors.parseError)(error);
173
- (0, _utils.rewriteErrorMessage)(parsedError, parsedError.message + (0, _utils.formatCallLog)(log));
182
+ (0, _stackTrace.rewriteErrorMessage)(parsedError, parsedError.message + formatCallLog(this._platform, log));
174
183
  callback.reject(parsedError);
175
184
  } else {
176
185
  const validator = (0, _validator.findValidator)(callback.type, callback.method, 'Result');
177
- callback.resolve(validator(result, '', {
178
- tChannelImpl: this._tChannelImplFromWire.bind(this),
179
- binary: this._rawBuffers ? 'buffer' : 'fromBase64'
180
- }));
186
+ callback.resolve(validator(result, '', this._validatorFromWireContext()));
181
187
  }
182
188
  return;
183
189
  }
184
- if (_debugLogger.debugLogger.isEnabled('channel')) _debugLogger.debugLogger.log('channel', '<EVENT ' + JSON.stringify(message));
190
+ if (this._platform.isLogEnabled('channel')) this._platform.log('channel', '<EVENT ' + JSON.stringify(message));
185
191
  if (method === '__create__') {
186
192
  this._createRemoteObject(guid, params.type, params.guid, params.initializer);
187
193
  return;
@@ -199,10 +205,7 @@ class Connection extends _events.EventEmitter {
199
205
  return;
200
206
  }
201
207
  const validator = (0, _validator.findValidator)(object._type, method, 'Event');
202
- object._channel.emit(method, validator(params, '', {
203
- tChannelImpl: this._tChannelImplFromWire.bind(this),
204
- binary: this._rawBuffers ? 'buffer' : 'fromBase64'
205
- }));
208
+ object._channel.emit(method, validator(params, '', this._validatorFromWireContext()));
206
209
  }
207
210
  close(cause) {
208
211
  if (this._closedError) return;
@@ -225,10 +228,7 @@ class Connection extends _events.EventEmitter {
225
228
  if (!parent) throw new Error(`Cannot find parent object ${parentGuid} to create ${guid}`);
226
229
  let result;
227
230
  const validator = (0, _validator.findValidator)(type, '', 'Initializer');
228
- initializer = validator(initializer, '', {
229
- tChannelImpl: this._tChannelImplFromWire.bind(this),
230
- binary: this._rawBuffers ? 'buffer' : 'fromBase64'
231
- });
231
+ initializer = validator(initializer, '', this._validatorFromWireContext());
232
232
  switch (type) {
233
233
  case 'Android':
234
234
  result = new _android.Android(parent, type, guid, initializer);
@@ -330,4 +330,11 @@ class Connection extends _events.EventEmitter {
330
330
  return result;
331
331
  }
332
332
  }
333
- exports.Connection = Connection;
333
+ exports.Connection = Connection;
334
+ function formatCallLog(platform, log) {
335
+ if (!log || !log.some(l => !!l)) return '';
336
+ return `
337
+ Call log:
338
+ ${platform.colors.dim(log.join('\n'))}
339
+ `;
340
+ }
@@ -4,10 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ConsoleMessage = void 0;
7
- var util = _interopRequireWildcard(require("util"));
8
7
  var _jsHandle = require("./jsHandle");
9
8
  var _page = require("./page");
10
- let _util$inspect$custom;
11
9
  /**
12
10
  * Copyright (c) Microsoft Corporation.
13
11
  *
@@ -23,15 +21,14 @@ let _util$inspect$custom;
23
21
  * See the License for the specific language governing permissions and
24
22
  * limitations under the License.
25
23
  */
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); }
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 && 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; }
28
- _util$inspect$custom = util.inspect.custom;
24
+
29
25
  class ConsoleMessage {
30
- constructor(event) {
26
+ constructor(platform, event) {
31
27
  this._page = void 0;
32
28
  this._event = void 0;
33
29
  this._page = 'page' in event && event.page ? _page.Page.from(event.page) : null;
34
30
  this._event = event;
31
+ if (platform.inspectCustom) this[platform.inspectCustom] = () => this._inspect();
35
32
  }
36
33
  page() {
37
34
  return this._page;
@@ -48,7 +45,7 @@ class ConsoleMessage {
48
45
  location() {
49
46
  return this._event.location;
50
47
  }
51
- [_util$inspect$custom]() {
48
+ _inspect() {
52
49
  return this.text();
53
50
  }
54
51
  }
@@ -4,16 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ElectronApplication = exports.Electron = void 0;
7
- var _timeoutSettings = require("../common/timeoutSettings");
8
7
  var _browserContext = require("./browserContext");
9
8
  var _channelOwner = require("./channelOwner");
10
9
  var _clientHelper = require("./clientHelper");
10
+ var _consoleMessage = require("./consoleMessage");
11
+ var _errors = require("./errors");
11
12
  var _events = require("./events");
12
13
  var _jsHandle = require("./jsHandle");
13
- var _consoleMessage = require("./consoleMessage");
14
14
  var _waiter = require("./waiter");
15
- var _errors = require("./errors");
16
- let _Symbol$asyncDispose;
15
+ var _timeoutSettings = require("./timeoutSettings");
17
16
  /**
18
17
  * Copyright (c) Microsoft Corporation.
19
18
  *
@@ -29,6 +28,7 @@ let _Symbol$asyncDispose;
29
28
  * See the License for the specific language governing permissions and
30
29
  * limitations under the License.
31
30
  */
31
+
32
32
  class Electron extends _channelOwner.ChannelOwner {
33
33
  static from(electron) {
34
34
  return electron._object;
@@ -38,8 +38,8 @@ class Electron extends _channelOwner.ChannelOwner {
38
38
  }
39
39
  async launch(options = {}) {
40
40
  const params = {
41
- ...(await (0, _browserContext.prepareBrowserContextParams)(options)),
42
- env: (0, _clientHelper.envObjectToArray)(options.env ? options.env : process.env),
41
+ ...(await (0, _browserContext.prepareBrowserContextParams)(this._platform, options)),
42
+ env: (0, _clientHelper.envObjectToArray)(options.env ? options.env : this._platform.env),
43
43
  tracesDir: options.tracesDir
44
44
  };
45
45
  const app = ElectronApplication.from((await this._channel.launch(params)).electronApplication);
@@ -48,7 +48,6 @@ class Electron extends _channelOwner.ChannelOwner {
48
48
  }
49
49
  }
50
50
  exports.Electron = Electron;
51
- _Symbol$asyncDispose = Symbol.asyncDispose;
52
51
  class ElectronApplication extends _channelOwner.ChannelOwner {
53
52
  static from(electronApplication) {
54
53
  return electronApplication._object;
@@ -57,14 +56,15 @@ class ElectronApplication extends _channelOwner.ChannelOwner {
57
56
  super(parent, type, guid, initializer);
58
57
  this._context = void 0;
59
58
  this._windows = new Set();
60
- this._timeoutSettings = new _timeoutSettings.TimeoutSettings();
59
+ this._timeoutSettings = void 0;
60
+ this._timeoutSettings = new _timeoutSettings.TimeoutSettings(this._platform);
61
61
  this._context = _browserContext.BrowserContext.from(initializer.context);
62
62
  for (const page of this._context._pages) this._onPage(page);
63
63
  this._context.on(_events.Events.BrowserContext.Page, page => this._onPage(page));
64
64
  this._channel.on('close', () => {
65
65
  this.emit(_events.Events.ElectronApplication.Close);
66
66
  });
67
- this._channel.on('console', event => this.emit(_events.Events.ElectronApplication.Console, new _consoleMessage.ConsoleMessage(event)));
67
+ this._channel.on('console', event => this.emit(_events.Events.ElectronApplication.Console, new _consoleMessage.ConsoleMessage(this._platform, event)));
68
68
  this._setEventToSubscriptionMapping(new Map([[_events.Events.ElectronApplication.Console, 'console']]));
69
69
  }
70
70
  process() {
@@ -86,7 +86,7 @@ class ElectronApplication extends _channelOwner.ChannelOwner {
86
86
  context() {
87
87
  return this._context;
88
88
  }
89
- async [_Symbol$asyncDispose]() {
89
+ async [Symbol.asyncDispose]() {
90
90
  await this.close();
91
91
  }
92
92
  async close() {