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

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 +3 -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
@@ -2,10 +2,10 @@
2
2
 
3
3
  var _fs = _interopRequireDefault(require("fs"));
4
4
  var _path = _interopRequireDefault(require("path"));
5
- var _network = require("../../utils/network");
6
- var _manualPromise = require("../../utils/manualPromise");
5
+ var _manualPromise = require("../../utils/isomorphic/manualPromise");
6
+ var _network = require("../utils/network");
7
7
  var _zipBundle = require("../../zipBundle");
8
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  /**
10
10
  * Copyright (c) Microsoft Corporation.
11
11
  *
@@ -7,7 +7,7 @@ exports.Screenshotter = void 0;
7
7
  exports.validateScreenshotOptions = validateScreenshotOptions;
8
8
  var _helper = require("./helper");
9
9
  var _utils = require("../utils");
10
- var _multimap = require("../utils/multimap");
10
+ var _multimap = require("../utils/isomorphic/multimap");
11
11
  /**
12
12
  * Copyright 2019 Google Inc. All rights reserved.
13
13
  * Modifications copyright (c) Microsoft Corporation.
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Selectors = void 0;
7
+ var _crypto = require("./utils/crypto");
7
8
  var _selectorParser = require("../utils/isomorphic/selectorParser");
8
- var _utils = require("../utils");
9
9
  /**
10
10
  * Copyright (c) Microsoft Corporation.
11
11
  *
@@ -27,10 +27,10 @@ class Selectors {
27
27
  this._builtinEngines = void 0;
28
28
  this._builtinEnginesInMainWorld = void 0;
29
29
  this._engines = void 0;
30
- this.guid = `selectors@${(0, _utils.createGuid)()}`;
30
+ this.guid = `selectors@${(0, _crypto.createGuid)()}`;
31
31
  this._testIdAttributeName = 'data-testid';
32
32
  // Note: keep in sync with InjectedScript class.
33
- this._builtinEngines = new Set(['css', 'css:light', 'xpath', 'xpath:light', '_react', '_vue', 'text', 'text:light', 'id', 'id:light', 'data-testid', 'data-testid:light', 'data-test-id', 'data-test-id:light', 'data-test', 'data-test:light', 'nth', 'visible', 'internal:control', 'internal:has', 'internal:has-not', 'internal:has-text', 'internal:has-not-text', 'internal:and', 'internal:or', 'internal:chain', 'role', 'internal:attr', 'internal:label', 'internal:text', 'internal:role', 'internal:testid']);
33
+ this._builtinEngines = new Set(['css', 'css:light', 'xpath', 'xpath:light', '_react', '_vue', 'text', 'text:light', 'id', 'id:light', 'data-testid', 'data-testid:light', 'data-test-id', 'data-test-id:light', 'data-test', 'data-test:light', 'nth', 'visible', 'internal:control', 'internal:has', 'internal:has-not', 'internal:has-text', 'internal:has-not-text', 'internal:and', 'internal:or', 'internal:chain', 'role', 'internal:attr', 'internal:label', 'internal:text', 'internal:role', 'internal:testid', 'internal:aria-id']);
34
34
  this._builtinEnginesInMainWorld = new Set(['_react', '_vue']);
35
35
  this._engines = new Map();
36
36
  }
@@ -6,18 +6,18 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.ClientCertificatesProxy = void 0;
7
7
  exports.getMatchingTLSOptionsForOrigin = getMatchingTLSOptionsForOrigin;
8
8
  exports.rewriteOpenSSLErrorIfNeeded = rewriteOpenSSLErrorIfNeeded;
9
- var _net = _interopRequireDefault(require("net"));
9
+ var _events = require("events");
10
10
  var _http = _interopRequireDefault(require("http2"));
11
- var _tls = _interopRequireDefault(require("tls"));
11
+ var _net = _interopRequireDefault(require("net"));
12
12
  var _stream = _interopRequireDefault(require("stream"));
13
- var _happyEyeballs = require("../utils/happy-eyeballs");
13
+ var _tls = _interopRequireDefault(require("tls"));
14
+ var _socksProxy = require("./utils/socksProxy");
14
15
  var _utils = require("../utils");
15
- var _socksProxy = require("../common/socksProxy");
16
- var _debugLogger = require("../utils/debugLogger");
17
- var _fetch = require("./fetch");
18
- var _events = require("events");
19
16
  var _browserContext = require("./browserContext");
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+ var _fetch = require("./fetch");
18
+ var _debugLogger = require("./utils/debugLogger");
19
+ var _happyEyeballs = require("./utils/happyEyeballs");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  /**
22
22
  * Copyright (c) Microsoft Corporation.
23
23
  *
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SocksInterceptor = void 0;
7
- var socks = _interopRequireWildcard(require("../common/socksProxy"));
8
7
  var _events = _interopRequireDefault(require("events"));
8
+ var socks = _interopRequireWildcard(require("./utils/socksProxy"));
9
9
  var _validator = require("../protocol/validator");
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ var _debug = require("./utils/debug");
11
11
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  /**
14
15
  * Copyright (c) Microsoft Corporation.
15
16
  *
@@ -44,7 +45,8 @@ class SocksInterceptor {
44
45
  const validator = (0, _validator.findValidator)('SocksSupport', prop, 'Params');
45
46
  params = validator(params, '', {
46
47
  tChannelImpl: tChannelForSocks,
47
- binary: 'toBase64'
48
+ binary: 'toBase64',
49
+ isUnderTest: _debug.isUnderTest
48
50
  });
49
51
  transport.send({
50
52
  id,
@@ -86,7 +88,8 @@ class SocksInterceptor {
86
88
  const validator = (0, _validator.findValidator)('SocksSupport', message.method, 'Event');
87
89
  const params = validator(message.params, '', {
88
90
  tChannelImpl: tChannelForSocks,
89
- binary: 'fromBase64'
91
+ binary: 'fromBase64',
92
+ isUnderTest: _debug.isUnderTest
90
93
  });
91
94
  this._channel.emit(message.method, params);
92
95
  return true;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.collect = collect;
7
+ exports.restore = restore;
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
+ async function collect(serializers, isFirefox, recordIndexedDB) {
25
+ async function collectDB(dbInfo) {
26
+ if (!dbInfo.name) throw new Error('Database name is empty');
27
+ if (!dbInfo.version) throw new Error('Database version is unset');
28
+ function idbRequestToPromise(request) {
29
+ return new Promise((resolve, reject) => {
30
+ request.addEventListener('success', () => resolve(request.result));
31
+ request.addEventListener('error', () => reject(request.error));
32
+ });
33
+ }
34
+ function isPlainObject(v) {
35
+ const ctor = v === null || v === void 0 ? void 0 : v.constructor;
36
+ if (isFirefox) {
37
+ const constructorImpl = ctor === null || ctor === void 0 ? void 0 : ctor.toString();
38
+ if (constructorImpl.startsWith('function Object() {') && constructorImpl.includes('[native code]')) return true;
39
+ }
40
+ return ctor === Object;
41
+ }
42
+ function trySerialize(value) {
43
+ let trivial = true;
44
+ const encoded = serializers.serializeAsCallArgument(value, v => {
45
+ const isTrivial = isPlainObject(v) || Array.isArray(v) || typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean' || Object.is(v, null);
46
+ if (!isTrivial) trivial = false;
47
+ return {
48
+ fallThrough: v
49
+ };
50
+ });
51
+ if (trivial) return {
52
+ trivial: value
53
+ };
54
+ return {
55
+ encoded
56
+ };
57
+ }
58
+ const db = await idbRequestToPromise(indexedDB.open(dbInfo.name));
59
+ const transaction = db.transaction(db.objectStoreNames, 'readonly');
60
+ const stores = await Promise.all([...db.objectStoreNames].map(async storeName => {
61
+ const objectStore = transaction.objectStore(storeName);
62
+ const keys = await idbRequestToPromise(objectStore.getAllKeys());
63
+ const records = await Promise.all(keys.map(async key => {
64
+ const record = {};
65
+ if (objectStore.keyPath === null) {
66
+ const {
67
+ encoded,
68
+ trivial
69
+ } = trySerialize(key);
70
+ if (trivial) record.key = trivial;else record.keyEncoded = encoded;
71
+ }
72
+ const value = await idbRequestToPromise(objectStore.get(key));
73
+ const {
74
+ encoded,
75
+ trivial
76
+ } = trySerialize(value);
77
+ if (trivial) record.value = trivial;else record.valueEncoded = encoded;
78
+ return record;
79
+ }));
80
+ const indexes = [...objectStore.indexNames].map(indexName => {
81
+ const index = objectStore.index(indexName);
82
+ return {
83
+ name: index.name,
84
+ keyPath: typeof index.keyPath === 'string' ? index.keyPath : undefined,
85
+ keyPathArray: Array.isArray(index.keyPath) ? index.keyPath : undefined,
86
+ multiEntry: index.multiEntry,
87
+ unique: index.unique
88
+ };
89
+ });
90
+ return {
91
+ name: storeName,
92
+ records: records,
93
+ indexes,
94
+ autoIncrement: objectStore.autoIncrement,
95
+ keyPath: typeof objectStore.keyPath === 'string' ? objectStore.keyPath : undefined,
96
+ keyPathArray: Array.isArray(objectStore.keyPath) ? objectStore.keyPath : undefined
97
+ };
98
+ }));
99
+ return {
100
+ name: dbInfo.name,
101
+ version: dbInfo.version,
102
+ stores
103
+ };
104
+ }
105
+ return {
106
+ localStorage: Object.keys(localStorage).map(name => ({
107
+ name,
108
+ value: localStorage.getItem(name)
109
+ })),
110
+ indexedDB: recordIndexedDB ? await Promise.all((await indexedDB.databases()).map(collectDB)).catch(e => {
111
+ throw new Error('Unable to serialize IndexedDB: ' + e.message);
112
+ }) : undefined
113
+ };
114
+ }
115
+ async function restore(originState, serializers) {
116
+ var _originState$indexedD;
117
+ for (const {
118
+ name,
119
+ value
120
+ } of originState.localStorage || []) localStorage.setItem(name, value);
121
+ await Promise.all(((_originState$indexedD = originState.indexedDB) !== null && _originState$indexedD !== void 0 ? _originState$indexedD : []).map(async dbInfo => {
122
+ const openRequest = indexedDB.open(dbInfo.name, dbInfo.version);
123
+ openRequest.addEventListener('upgradeneeded', () => {
124
+ const db = openRequest.result;
125
+ for (const store of dbInfo.stores) {
126
+ var _store$keyPathArray;
127
+ const objectStore = db.createObjectStore(store.name, {
128
+ autoIncrement: store.autoIncrement,
129
+ keyPath: (_store$keyPathArray = store.keyPathArray) !== null && _store$keyPathArray !== void 0 ? _store$keyPathArray : store.keyPath
130
+ });
131
+ for (const index of store.indexes) {
132
+ var _index$keyPathArray;
133
+ objectStore.createIndex(index.name, (_index$keyPathArray = index.keyPathArray) !== null && _index$keyPathArray !== void 0 ? _index$keyPathArray : index.keyPath, {
134
+ unique: index.unique,
135
+ multiEntry: index.multiEntry
136
+ });
137
+ }
138
+ }
139
+ });
140
+ function idbRequestToPromise(request) {
141
+ return new Promise((resolve, reject) => {
142
+ request.addEventListener('success', () => resolve(request.result));
143
+ request.addEventListener('error', () => reject(request.error));
144
+ });
145
+ }
146
+
147
+ // after `upgradeneeded` finishes, `success` event is fired.
148
+ const db = await idbRequestToPromise(openRequest);
149
+ const transaction = db.transaction(db.objectStoreNames, 'readwrite');
150
+ await Promise.all(dbInfo.stores.map(async store => {
151
+ const objectStore = transaction.objectStore(store.name);
152
+ await Promise.all(store.records.map(async record => {
153
+ var _record$value, _record$key;
154
+ await idbRequestToPromise(objectStore.add((_record$value = record.value) !== null && _record$value !== void 0 ? _record$value : serializers.parseEvaluationResultValue(record.valueEncoded), (_record$key = record.key) !== null && _record$key !== void 0 ? _record$key : serializers.parseEvaluationResultValue(record.keyEncoded)));
155
+ }));
156
+ }));
157
+ })).catch(e => {
158
+ throw new Error('Unable to restore IndexedDB: ' + e.message);
159
+ });
160
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TimeoutSettings = exports.DEFAULT_TIMEOUT = exports.DEFAULT_LAUNCH_TIMEOUT = void 0;
7
+ var _debug = require("./utils/debug");
8
+ /**
9
+ * Copyright 2019 Google Inc. All rights reserved.
10
+ * Modifications copyright (c) Microsoft Corporation.
11
+ *
12
+ * Licensed under the Apache License, Version 2.0 (the "License");
13
+ * you may not use this file except in compliance with the License.
14
+ * You may obtain a copy of the License at
15
+ *
16
+ * http://www.apache.org/licenses/LICENSE-2.0
17
+ *
18
+ * Unless required by applicable law or agreed to in writing, software
19
+ * distributed under the License is distributed on an "AS IS" BASIS,
20
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
+ * See the License for the specific language governing permissions and
22
+ * limitations under the License.
23
+ */
24
+
25
+ // Keep in sync with client.
26
+ const DEFAULT_TIMEOUT = exports.DEFAULT_TIMEOUT = 30000;
27
+ const DEFAULT_LAUNCH_TIMEOUT = exports.DEFAULT_LAUNCH_TIMEOUT = 3 * 60 * 1000; // 3 minutes
28
+
29
+ class TimeoutSettings {
30
+ constructor(parent) {
31
+ this._parent = void 0;
32
+ this._defaultTimeout = void 0;
33
+ this._defaultNavigationTimeout = void 0;
34
+ this._parent = parent;
35
+ }
36
+ setDefaultTimeout(timeout) {
37
+ this._defaultTimeout = timeout;
38
+ }
39
+ setDefaultNavigationTimeout(timeout) {
40
+ this._defaultNavigationTimeout = timeout;
41
+ }
42
+ defaultNavigationTimeout() {
43
+ return this._defaultNavigationTimeout;
44
+ }
45
+ defaultTimeout() {
46
+ return this._defaultTimeout;
47
+ }
48
+ navigationTimeout(options) {
49
+ if (typeof options.timeout === 'number') return options.timeout;
50
+ if (this._defaultNavigationTimeout !== undefined) return this._defaultNavigationTimeout;
51
+ if ((0, _debug.debugMode)()) return 0;
52
+ if (this._defaultTimeout !== undefined) return this._defaultTimeout;
53
+ if (this._parent) return this._parent.navigationTimeout(options);
54
+ return DEFAULT_TIMEOUT;
55
+ }
56
+ timeout(options) {
57
+ if (typeof options.timeout === 'number') return options.timeout;
58
+ if ((0, _debug.debugMode)()) return 0;
59
+ if (this._defaultTimeout !== undefined) return this._defaultTimeout;
60
+ if (this._parent) return this._parent.timeout(options);
61
+ return DEFAULT_TIMEOUT;
62
+ }
63
+ static timeout(options) {
64
+ if (typeof options.timeout === 'number') return options.timeout;
65
+ if ((0, _debug.debugMode)()) return 0;
66
+ return DEFAULT_TIMEOUT;
67
+ }
68
+ static launchTimeout(options) {
69
+ if (typeof options.timeout === 'number') return options.timeout;
70
+ if ((0, _debug.debugMode)()) return 0;
71
+ return DEFAULT_LAUNCH_TIMEOUT;
72
+ }
73
+ }
74
+ exports.TimeoutSettings = TimeoutSettings;
@@ -4,13 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Snapshotter = void 0;
7
- var _browserContext = require("../../browserContext");
8
- var _page = require("../../page");
9
- var _eventsHelper = require("../../../utils/eventsHelper");
10
- var _debugLogger = require("../../../utils/debugLogger");
11
7
  var _snapshotterInjected = require("./snapshotterInjected");
12
- var _utils = require("../../../utils");
8
+ var _time = require("../../../utils/isomorphic/time");
9
+ var _crypto = require("../../utils/crypto");
10
+ var _debugLogger = require("../../utils/debugLogger");
11
+ var _eventsHelper = require("../../utils/eventsHelper");
13
12
  var _utilsBundle = require("../../../utilsBundle");
13
+ var _browserContext = require("../../browserContext");
14
+ var _page = require("../../page");
14
15
  /**
15
16
  * Copyright (c) Microsoft Corporation.
16
17
  *
@@ -37,7 +38,7 @@ class Snapshotter {
37
38
  this._started = false;
38
39
  this._context = context;
39
40
  this._delegate = delegate;
40
- const guid = (0, _utils.createGuid)();
41
+ const guid = (0, _crypto.createGuid)();
41
42
  this._snapshotStreamer = '__playwright_snapshot_streamer_' + guid;
42
43
  }
43
44
  started() {
@@ -81,21 +82,10 @@ class Snapshotter {
81
82
  dispose() {
82
83
  _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
83
84
  }
84
- async captureSnapshot(page, callId, snapshotName, element) {
85
+ async captureSnapshot(page, callId, snapshotName) {
85
86
  // Prepare expression synchronously.
86
87
  const expression = `window["${this._snapshotStreamer}"].captureSnapshot(${JSON.stringify(snapshotName)})`;
87
88
 
88
- // In a best-effort manner, without waiting for it, mark target element.
89
- element === null || element === void 0 || element.callFunctionNoReply((element, callId) => {
90
- const customEvent = new CustomEvent('__playwright_target__', {
91
- bubbles: true,
92
- cancelable: true,
93
- detail: callId,
94
- composed: true
95
- });
96
- element.dispatchEvent(customEvent);
97
- }, callId);
98
-
99
89
  // In each frame, in a non-stalling manner, capture the snapshots.
100
90
  const snapshots = page.frames().map(async frame => {
101
91
  const data = await frame.nonStallingRawEvaluateInExistingMainContext(expression).catch(e => _debugLogger.debugLogger.log('error', e));
@@ -110,7 +100,7 @@ class Snapshotter {
110
100
  doctype: data.doctype,
111
101
  html: data.html,
112
102
  viewport: data.viewport,
113
- timestamp: (0, _utils.monotonicTime)(),
103
+ timestamp: (0, _time.monotonicTime)(),
114
104
  wallTime: data.wallTime,
115
105
  collectionTime: data.collectionTime,
116
106
  resourceOverrides: [],
@@ -123,7 +113,7 @@ class Snapshotter {
123
113
  } of data.resourceOverrides) {
124
114
  if (typeof content === 'string') {
125
115
  const buffer = Buffer.from(content);
126
- const sha1 = (0, _utils.calculateSha1)(buffer) + '.' + (_utilsBundle.mime.getExtension(contentType) || 'dat');
116
+ const sha1 = (0, _crypto.calculateSha1)(buffer) + '.' + (_utilsBundle.mime.getExtension(contentType) || 'dat');
127
117
  this._delegate.onSnapshotterBlob({
128
118
  sha1,
129
119
  buffer
@@ -35,6 +35,8 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
35
35
  const kTargetAttribute = '__playwright_target__';
36
36
  const kCustomElementsAttribute = '__playwright_custom_elements__';
37
37
  const kCurrentSrcAttribute = '__playwright_current_src__';
38
+ const kBoundingRectAttribute = '__playwright_bounding_rect__';
39
+ const kPopoverOpenAttribute = '__playwright_popover_open_';
38
40
 
39
41
  // Symbols for our own info on Nodes/StyleSheets.
40
42
  const kSnapshotFrameId = Symbol('__playwright_snapshot_frameid_');
@@ -112,11 +114,16 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
112
114
  });
113
115
  }
114
116
  _refreshListeners() {
115
- document.addEventListener('__playwright_target__', event => {
117
+ document.addEventListener('__playwright_mark_target__', event => {
116
118
  if (!event.detail) return;
117
119
  const callId = event.detail;
118
120
  event.composedPath()[0].__playwright_target__ = callId;
119
121
  });
122
+ document.addEventListener('__playwright_unmark_target__', event => {
123
+ if (!event.detail) return;
124
+ const callId = event.detail;
125
+ if (event.composedPath()[0].__playwright_target__ === callId) delete event.composedPath()[0].__playwright_target__;
126
+ });
120
127
  }
121
128
  _interceptNativeMethod(obj, method, cb) {
122
129
  const native = obj[method];
@@ -348,6 +355,24 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
348
355
  expectValue(value);
349
356
  attrs[kSelectedAttribute] = value;
350
357
  }
358
+ if (nodeName === 'CANVAS' || nodeName === 'IFRAME' || nodeName === 'FRAME') {
359
+ const boundingRect = element.getBoundingClientRect();
360
+ const value = JSON.stringify({
361
+ left: boundingRect.left,
362
+ top: boundingRect.top,
363
+ right: boundingRect.right,
364
+ bottom: boundingRect.bottom
365
+ });
366
+ expectValue(kBoundingRectAttribute);
367
+ expectValue(value);
368
+ attrs[kBoundingRectAttribute] = value;
369
+ }
370
+ if (element.popover && element.matches && element.matches(':popover-open')) {
371
+ const value = 'true';
372
+ expectValue(kPopoverOpenAttribute);
373
+ expectValue(value);
374
+ attrs[kPopoverOpenAttribute] = value;
375
+ }
351
376
  if (element.scrollTop) {
352
377
  expectValue(kScrollTopAttribute);
353
378
  expectValue(element.scrollTop);