@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
@@ -5,25 +5,25 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.kNoXServerRunningError = exports.BrowserType = exports.BrowserReadyState = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
8
- var os = _interopRequireWildcard(require("os"));
8
+ var _os = _interopRequireDefault(require("os"));
9
9
  var _path = _interopRequireDefault(require("path"));
10
10
  var _browserContext = require("./browserContext");
11
- var _registry = require("./registry");
12
- var _transport = require("./transport");
13
- var _processLauncher = require("../utils/processLauncher");
14
- var _pipeTransport = require("./pipeTransport");
15
- var _progress = require("./progress");
16
- var _timeoutSettings = require("../common/timeoutSettings");
17
- var _utils = require("../utils");
18
- var _fileUtils = require("../utils/fileUtils");
11
+ var _timeoutSettings = require("./timeoutSettings");
12
+ var _debug = require("./utils/debug");
13
+ var _assert = require("../utils/isomorphic/assert");
14
+ var _manualPromise = require("../utils/isomorphic/manualPromise");
15
+ var _fileUtils = require("./utils/fileUtils");
19
16
  var _helper = require("./helper");
20
- var _debugLogger = require("../utils/debugLogger");
21
17
  var _instrumentation = require("./instrumentation");
18
+ var _pipeTransport = require("./pipeTransport");
19
+ var _processLauncher = require("./utils/processLauncher");
20
+ var _progress = require("./progress");
22
21
  var _protocolError = require("./protocolError");
22
+ var _registry = require("./registry");
23
23
  var _socksClientCertificatesInterceptor = require("./socksClientCertificatesInterceptor");
24
- 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); }
25
- 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; }
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
+ var _transport = require("./transport");
25
+ var _debugLogger = require("./utils/debugLogger");
26
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
27
27
  /**
28
28
  * Copyright (c) Microsoft Corporation.
29
29
  *
@@ -43,7 +43,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
43
43
  const kNoXServerRunningError = exports.kNoXServerRunningError = 'Looks like you launched a headed browser without having a XServer running.\n' + 'Set either \'headless: true\' or use \'xvfb-run <your-playwright-app>\' before running Playwright.\n\n<3 Playwright Team';
44
44
  class BrowserReadyState {
45
45
  constructor() {
46
- this._wsEndpoint = new _utils.ManualPromise();
46
+ this._wsEndpoint = new _manualPromise.ManualPromise();
47
47
  }
48
48
  onBrowserExit() {
49
49
  // Unblock launch when browser prematurely exits.
@@ -178,16 +178,17 @@ class BrowserType extends _instrumentation.SdkObject {
178
178
  const env = options.env ? (0, _processLauncher.envArrayToObject)(options.env) : process.env;
179
179
  await this._createArtifactDirs(options);
180
180
  const tempDirectories = [];
181
- const artifactsDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), 'playwright-artifacts-'));
181
+ const artifactsDir = await _fs.default.promises.mkdtemp(_path.default.join(_os.default.tmpdir(), 'playwright-artifacts-'));
182
182
  tempDirectories.push(artifactsDir);
183
183
  if (userDataDir) {
184
+ (0, _assert.assert)(_path.default.isAbsolute(userDataDir), 'userDataDir must be an absolute path');
184
185
  // Firefox bails if the profile directory does not exist, Chrome creates it. We ensure consistent behavior here.
185
186
  if (!(await (0, _fileUtils.existsAsync)(userDataDir))) await _fs.default.promises.mkdir(userDataDir, {
186
187
  recursive: true,
187
188
  mode: 0o700
188
189
  });
189
190
  } else {
190
- userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(os.tmpdir(), `playwright_${this._name}dev_profile-`));
191
+ userDataDir = await _fs.default.promises.mkdtemp(_path.default.join(_os.default.tmpdir(), `playwright_${this._name}dev_profile-`));
191
192
  tempDirectories.push(userDataDir);
192
193
  }
193
194
  await this.prepareUserDataDir(options, userDataDir);
@@ -198,7 +199,7 @@ class BrowserType extends _instrumentation.SdkObject {
198
199
  if (!(await (0, _fileUtils.existsAsync)(executablePath))) throw new Error(`Failed to launch ${this._name} because executable doesn't exist at ${executablePath}`);
199
200
  executable = executablePath;
200
201
  } else {
201
- const registryExecutable = _registry.registry.findExecutable(options.channel || this._name);
202
+ const registryExecutable = _registry.registry.findExecutable(this.getExecutableName(options));
202
203
  if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
203
204
  executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);
204
205
  await _registry.registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
@@ -293,7 +294,7 @@ class BrowserType extends _instrumentation.SdkObject {
293
294
  downloadsPath,
294
295
  proxy
295
296
  } = options;
296
- if ((0, _utils.debugMode)()) headless = false;
297
+ if ((0, _debug.debugMode)()) headless = false;
297
298
  if (downloadsPath && !_path.default.isAbsolute(downloadsPath)) downloadsPath = _path.default.join(process.cwd(), downloadsPath);
298
299
  if (this.attribution.playwright.options.socksProxyPort) proxy = {
299
300
  server: `socks5://127.0.0.1:${this.attribution.playwright.options.socksProxyPort}`
@@ -326,6 +327,9 @@ class BrowserType extends _instrumentation.SdkObject {
326
327
  return undefined;
327
328
  }
328
329
  async prepareUserDataDir(options, userDataDir) {}
330
+ getExecutableName(options) {
331
+ return options.channel || this._name;
332
+ }
329
333
  }
330
334
  exports.BrowserType = BrowserType;
331
335
  function copyTestHooks(from, to) {
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.compressCallLog = compressCallLog;
7
+ exports.findRepeatedSubsequencesForTest = void 0;
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 compressCallLog(log) {
25
+ const lines = [];
26
+ for (const block of findRepeatedSubsequences(log)) {
27
+ for (let i = 0; i < block.sequence.length; i++) {
28
+ const line = block.sequence[i];
29
+ const leadingWhitespace = line.match(/^\s*/);
30
+ const whitespacePrefix = ' ' + (leadingWhitespace === null || leadingWhitespace === void 0 ? void 0 : leadingWhitespace[0]) || '';
31
+ const countPrefix = `${block.count} × `;
32
+ if (block.count > 1 && i === 0) lines.push(whitespacePrefix + countPrefix + line.trim());else if (block.count > 1) lines.push(whitespacePrefix + ' '.repeat(countPrefix.length - 2) + '- ' + line.trim());else lines.push(whitespacePrefix + '- ' + line.trim());
33
+ }
34
+ }
35
+ return lines;
36
+ }
37
+ function findRepeatedSubsequences(s) {
38
+ const n = s.length;
39
+ const result = [];
40
+ let i = 0;
41
+ const arraysEqual = (a1, a2) => {
42
+ if (a1.length !== a2.length) return false;
43
+ for (let j = 0; j < a1.length; j++) {
44
+ if (a1[j] !== a2[j]) return false;
45
+ }
46
+ return true;
47
+ };
48
+ while (i < n) {
49
+ let maxRepeatCount = 1;
50
+ let maxRepeatSubstr = [s[i]]; // Initialize with the element at index i
51
+ let maxRepeatLength = 1;
52
+
53
+ // Try substrings of length from 1 to the remaining length of the array
54
+ for (let p = 1; p <= n - i; p++) {
55
+ const substr = s.slice(i, i + p); // Extract substring as array
56
+ let k = 1;
57
+
58
+ // Count how many times the substring repeats consecutively
59
+ while (i + p * k <= n && arraysEqual(s.slice(i + p * (k - 1), i + p * k), substr)) k += 1;
60
+ k -= 1; // Adjust k since it increments one extra time in the loop
61
+
62
+ // Update the maximal repeating substring if necessary
63
+ if (k > 1 && k * p > maxRepeatCount * maxRepeatLength) {
64
+ maxRepeatCount = k;
65
+ maxRepeatSubstr = substr;
66
+ maxRepeatLength = p;
67
+ }
68
+ }
69
+
70
+ // Record the substring and its count
71
+ result.push({
72
+ sequence: maxRepeatSubstr,
73
+ count: maxRepeatCount
74
+ });
75
+ i += maxRepeatLength * maxRepeatCount; // Move index forward
76
+ }
77
+ return result;
78
+ }
79
+ const findRepeatedSubsequencesForTest = exports.findRepeatedSubsequencesForTest = findRepeatedSubsequences;
@@ -7,27 +7,27 @@ exports.Chromium = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
8
8
  var _os = _interopRequireDefault(require("os"));
9
9
  var _path = _interopRequireDefault(require("path"));
10
+ var _chromiumSwitches = require("./chromiumSwitches");
10
11
  var _crBrowser = require("./crBrowser");
11
- var _processLauncher = require("../../utils/processLauncher");
12
12
  var _crConnection = require("./crConnection");
13
+ var _timeoutSettings = require("../timeoutSettings");
14
+ var _utils = require("../../utils");
15
+ var _ascii = require("../utils/ascii");
16
+ var _debugLogger = require("../utils/debugLogger");
17
+ var _manualPromise = require("../../utils/isomorphic/manualPromise");
18
+ var _network = require("../utils/network");
19
+ var _userAgent = require("../utils/userAgent");
20
+ var _browserContext = require("../browserContext");
13
21
  var _browserType = require("../browserType");
22
+ var _helper = require("../helper");
23
+ var _registry = require("../registry");
14
24
  var _transport = require("../transport");
15
25
  var _crDevTools = require("./crDevTools");
16
26
  var _browser = require("../browser");
17
- var _network = require("../../utils/network");
18
- var _userAgent = require("../../utils/userAgent");
19
- var _ascii = require("../../utils/ascii");
20
- var _utils = require("../../utils");
21
- var _fileUtils = require("../../utils/fileUtils");
22
- var _debugLogger = require("../../utils/debugLogger");
27
+ var _fileUtils = require("../utils/fileUtils");
28
+ var _processLauncher = require("../utils/processLauncher");
23
29
  var _progress = require("../progress");
24
- var _timeoutSettings = require("../../common/timeoutSettings");
25
- var _helper = require("../helper");
26
- var _registry = require("../registry");
27
- var _manualPromise = require("../../utils/manualPromise");
28
- var _browserContext = require("../browserContext");
29
- var _chromiumSwitches = require("./chromiumSwitches");
30
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
31
31
  /**
32
32
  * Copyright 2017 Google Inc. All rights reserved.
33
33
  * Modifications copyright (c) Microsoft Corporation.
@@ -267,11 +267,11 @@ class Chromium extends _browserType.BrowserType {
267
267
  // See https://github.com/microsoft/playwright/issues/7362
268
268
  chromeArguments.push('--enable-use-zoom-for-dsf=false');
269
269
  // See https://bugs.chromium.org/p/chromium/issues/detail?id=1407025.
270
- if (options.headless) chromeArguments.push('--use-angle');
270
+ if (options.headless && (!options.channel || options.channel === 'chromium-headless-shell')) chromeArguments.push('--use-angle');
271
271
  }
272
272
  if (options.devtools) chromeArguments.push('--auto-open-devtools-for-tabs');
273
273
  if (options.headless) {
274
- if (process.env.PLAYWRIGHT_CHROMIUM_USE_HEADLESS_NEW) chromeArguments.push('--headless=new');else chromeArguments.push('--headless=old');
274
+ chromeArguments.push('--headless');
275
275
  chromeArguments.push('--hide-scrollbars', '--mute-audio', '--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4');
276
276
  }
277
277
  if (options.chromiumSandbox !== true) chromeArguments.push('--no-sandbox');
@@ -300,6 +300,10 @@ class Chromium extends _browserType.BrowserType {
300
300
  if (options.useWebSocket || (_options$args = options.args) !== null && _options$args !== void 0 && _options$args.some(a => a.startsWith('--remote-debugging-port'))) return new ChromiumReadyState();
301
301
  return undefined;
302
302
  }
303
+ getExecutableName(options) {
304
+ if (options.channel) return options.channel;
305
+ return options.headless ? 'chromium-headless-shell' : 'chromium';
306
+ }
303
307
  }
304
308
  exports.Chromium = Chromium;
305
309
  class ChromiumReadyState extends _browserType.BrowserReadyState {
@@ -23,21 +23,44 @@ exports.chromiumSwitches = void 0;
23
23
 
24
24
  // No dependencies as it is used from the Electron loader.
25
25
 
26
+ const disabledFeatures = [
27
+ // See https://github.com/microsoft/playwright/pull/10380
28
+ 'AcceptCHFrame',
29
+ // See https://github.com/microsoft/playwright/pull/10679
30
+ 'AutoExpandDetailsElement',
31
+ // See https://github.com/microsoft/playwright/issues/14047
32
+ 'AvoidUnnecessaryBeforeUnloadCheckSync',
33
+ // See https://github.com/microsoft/playwright/pull/12992
34
+ 'CertificateTransparencyComponentUpdater',
35
+ // This makes Page.frameScheduledNavigation arrive much later after a click,
36
+ // making our navigation auto-wait after click not working.
37
+ // Can be removed once we deperecate noWaitAfter.
38
+ // See https://github.com/microsoft/playwright/pull/34372.
39
+ 'DeferRendererTasksAfterInput', 'DestroyProfileOnBrowserClose',
40
+ // See https://github.com/microsoft/playwright/pull/13854
41
+ 'DialMediaRouteProvider',
42
+ // Chromium is disabling manifest version 2. Allow testing it as long as Chromium can actually run it.
43
+ // Disabled in https://chromium-review.googlesource.com/c/chromium/src/+/6265903.
44
+ 'ExtensionManifestV2Disabled', 'GlobalMediaControls',
45
+ // See https://github.com/microsoft/playwright/pull/27605
46
+ 'HttpsUpgrades', 'ImprovedCookieControls', 'LazyFrameLoading',
47
+ // Hides the Lens feature in the URL address bar. Its not working in unofficial builds.
48
+ 'LensOverlay',
49
+ // See https://github.com/microsoft/playwright/pull/8162
50
+ 'MediaRouter',
51
+ // See https://github.com/microsoft/playwright/issues/28023
52
+ 'PaintHolding',
53
+ // See https://github.com/microsoft/playwright/issues/32230
54
+ 'ThirdPartyStoragePartitioning',
55
+ // See https://github.com/microsoft/playwright/issues/16126
56
+ 'Translate'];
26
57
  const chromiumSwitches = exports.chromiumSwitches = ['--disable-field-trial-config',
27
58
  // https://source.chromium.org/chromium/chromium/src/+/main:testing/variations/README.md
28
59
  '--disable-background-networking', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-back-forward-cache',
29
60
  // Avoids surprises like main request not being intercepted during page.goBack().
30
61
  '--disable-breakpad', '--disable-client-side-phishing-detection', '--disable-component-extensions-with-background-pages', '--disable-component-update',
31
62
  // Avoids unneeded network activity after startup.
32
- '--no-default-browser-check', '--disable-default-apps', '--disable-dev-shm-usage', '--disable-extensions',
33
- // AvoidUnnecessaryBeforeUnloadCheckSync - https://github.com/microsoft/playwright/issues/14047
34
- // Translate - https://github.com/microsoft/playwright/issues/16126
35
- // HttpsUpgrades - https://github.com/microsoft/playwright/pull/27605
36
- // PaintHolding - https://github.com/microsoft/playwright/issues/28023
37
- // ThirdPartyStoragePartitioning - https://github.com/microsoft/playwright/issues/32230
38
- // LensOverlay - Hides the Lens feature in the URL address bar. Its not working in unofficial builds.
39
- // PlzDedicatedWorker - https://github.com/microsoft/playwright/issues/31747
40
- '--disable-features=ImprovedCookieControls,LazyFrameLoading,GlobalMediaControls,DestroyProfileOnBrowserClose,MediaRouter,DialMediaRouteProvider,AcceptCHFrame,AutoExpandDetailsElement,CertificateTransparencyComponentUpdater,AvoidUnnecessaryBeforeUnloadCheckSync,Translate,HttpsUpgrades,PaintHolding,ThirdPartyStoragePartitioning,LensOverlay,PlzDedicatedWorker', '--allow-pre-commit-input', '--disable-hang-monitor', '--disable-ipc-flooding-protection', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-renderer-backgrounding', '--force-color-profile=srgb', '--metrics-recording-only', '--no-first-run', '--enable-automation', '--password-store=basic', '--use-mock-keychain',
63
+ '--no-default-browser-check', '--disable-default-apps', '--disable-dev-shm-usage', '--disable-extensions', '--disable-features=' + disabledFeatures.join(','), '--allow-pre-commit-input', '--disable-hang-monitor', '--disable-ipc-flooding-protection', '--disable-popup-blocking', '--disable-prompt-on-repost', '--disable-renderer-backgrounding', '--force-color-profile=srgb', '--metrics-recording-only', '--no-first-run', '--enable-automation', '--password-store=basic', '--use-mock-keychain',
41
64
  // See https://chromium-review.googlesource.com/c/chromium/src/+/2436773
42
65
  '--no-service-autorun', '--export-tagged-pdf',
43
66
  // https://chromium-review.googlesource.com/c/chromium/src/+/4853540
@@ -5,20 +5,21 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.CRBrowserContext = exports.CRBrowser = void 0;
7
7
  var _path = _interopRequireDefault(require("path"));
8
+ var _assert = require("../../utils/isomorphic/assert");
9
+ var _crypto = require("../utils/crypto");
10
+ var _artifact = require("../artifact");
8
11
  var _browser = require("../browser");
9
12
  var _browserContext = require("../browserContext");
10
- var _utils = require("../../utils");
13
+ var _frames = require("../frames");
11
14
  var network = _interopRequireWildcard(require("../network"));
12
15
  var _page = require("../page");
13
- var _frames = require("../frames");
14
16
  var _crConnection = require("./crConnection");
15
17
  var _crPage = require("./crPage");
16
18
  var _crProtocolHelper = require("./crProtocolHelper");
17
19
  var _crServiceWorker = require("./crServiceWorker");
18
- var _artifact = require("../artifact");
19
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); }
20
- 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 _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
22
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
23
  /**
23
24
  * Copyright 2017 Google Inc. All rights reserved.
24
25
  * Modifications copyright (c) Microsoft Corporation.
@@ -134,7 +135,7 @@ class CRBrowser extends _browser.Browser {
134
135
  return this.options.name === 'clank';
135
136
  }
136
137
  async _waitForAllPagesToBeInitialized() {
137
- await Promise.all([...this._crPages.values()].map(page => page.pageOrError()));
138
+ await Promise.all([...this._crPages.values()].map(crPage => crPage._page.waitForInitializedOrError()));
138
139
  }
139
140
  _onAttachedToTarget({
140
141
  targetInfo,
@@ -143,7 +144,7 @@ class CRBrowser extends _browser.Browser {
143
144
  }) {
144
145
  if (targetInfo.type === 'browser') return;
145
146
  const session = this._session.createChildSession(sessionId);
146
- (0, _utils.assert)(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2));
147
+ (0, _assert.assert)(targetInfo.browserContextId, 'targetInfo: ' + JSON.stringify(targetInfo, null, 2));
147
148
  let context = this._contexts.get(targetInfo.browserContextId) || null;
148
149
  if (!context) {
149
150
  // TODO: auto attach only to pages from our contexts.
@@ -159,9 +160,9 @@ class CRBrowser extends _browser.Browser {
159
160
  session.detach().catch(() => {});
160
161
  return;
161
162
  }
162
- (0, _utils.assert)(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
163
- (0, _utils.assert)(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
164
- (0, _utils.assert)(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
163
+ (0, _assert.assert)(!this._crPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
164
+ (0, _assert.assert)(!this._backgroundPages.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
165
+ (0, _assert.assert)(!this._serviceWorkers.has(targetInfo.targetId), 'Duplicate target ' + targetInfo.targetId);
165
166
  if (targetInfo.type === 'background_page') {
166
167
  const backgroundPage = new _crPage.CRPage(session, targetInfo.targetId, context, null, {
167
168
  hasUIWindow: false,
@@ -239,9 +240,9 @@ class CRBrowser extends _browser.Browser {
239
240
  return;
240
241
  }
241
242
  page.willBeginDownload();
242
- let originPage = page._initializedPage;
243
+ let originPage = page._page.initializedOrUndefined();
243
244
  // If it's a new window download, report it on the opener page.
244
- if (!originPage && page._opener) originPage = page._opener._initializedPage;
245
+ if (!originPage && page._opener) originPage = page._opener._page.initializedOrUndefined();
245
246
  if (!originPage) return;
246
247
  this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename);
247
248
  }
@@ -258,7 +259,7 @@ class CRBrowser extends _browser.Browser {
258
259
  return await this._connection.createBrowserSession();
259
260
  }
260
261
  async startTracing(page, options = {}) {
261
- (0, _utils.assert)(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');
262
+ (0, _assert.assert)(!this._tracingRecording, 'Cannot start recording trace while already recording trace.');
262
263
  this._tracingClient = page ? page._delegate._mainFrameSession._client : this._session;
263
264
  const defaultCategories = ['-*', 'devtools.timeline', 'v8.execute', 'disabled-by-default-devtools.timeline', 'disabled-by-default-devtools.timeline.frame', 'toplevel', 'blink.console', 'blink.user_timing', 'latencyInfo', 'disabled-by-default-devtools.timeline.stack', 'disabled-by-default-v8.cpu_profiler', 'disabled-by-default-v8.cpu_profiler.hires'];
264
265
  const {
@@ -273,9 +274,9 @@ class CRBrowser extends _browser.Browser {
273
274
  });
274
275
  }
275
276
  async stopTracing() {
276
- (0, _utils.assert)(this._tracingClient, 'Tracing was not started.');
277
+ (0, _assert.assert)(this._tracingClient, 'Tracing was not started.');
277
278
  const [event] = await Promise.all([new Promise(f => this._tracingClient.once('Tracing.tracingComplete', f)), this._tracingClient.send('Tracing.end')]);
278
- const tracingPath = _path.default.join(this.options.artifactsDir, (0, _utils.createGuid)() + '.crtrace');
279
+ const tracingPath = _path.default.join(this.options.artifactsDir, (0, _crypto.createGuid)() + '.crtrace');
279
280
  await (0, _crProtocolHelper.saveProtocolStream)(this._tracingClient, event.stream, tracingPath);
280
281
  this._tracingRecording = false;
281
282
  const artifact = new _artifact.Artifact(this, tracingPath);
@@ -297,7 +298,7 @@ class CRBrowserContext extends _browserContext.BrowserContext {
297
298
  this._authenticateProxyViaCredentials();
298
299
  }
299
300
  async _initialize() {
300
- (0, _utils.assert)(!Array.from(this._browser._crPages.values()).some(page => page._browserContext === this));
301
+ (0, _assert.assert)(!Array.from(this._browser._crPages.values()).some(page => page._browserContext === this));
301
302
  const promises = [super._initialize()];
302
303
  if (this._browser.options.name !== 'clank' && this._options.acceptDownloads !== 'internal-browser-default') {
303
304
  promises.push(this._browser._session.send('Browser.setDownloadBehavior', {
@@ -312,10 +313,10 @@ class CRBrowserContext extends _browserContext.BrowserContext {
312
313
  _crPages() {
313
314
  return [...this._browser._crPages.values()].filter(crPage => crPage._browserContext === this);
314
315
  }
315
- pages() {
316
- return this._crPages().map(crPage => crPage._initializedPage).filter(Boolean);
316
+ possiblyUninitializedPages() {
317
+ return this._crPages().map(crPage => crPage._page);
317
318
  }
318
- async newPageDelegate() {
319
+ async doCreateNewPage() {
319
320
  (0, _browserContext.assertBrowserContextIsNotOwned)(this);
320
321
  const oldKeys = this._browser.isClank() ? new Set(this._browser._crPages.keys()) : undefined;
321
322
  let {
@@ -335,10 +336,10 @@ class CRBrowserContext extends _browserContext.BrowserContext {
335
336
  const page = this._browser._crPages.get(key);
336
337
  if (page._opener) newKeys.delete(key);
337
338
  }
338
- (0, _utils.assert)(newKeys.size === 1);
339
+ (0, _assert.assert)(newKeys.size === 1);
339
340
  [targetId] = [...newKeys];
340
341
  }
341
- return this._browser._crPages.get(targetId);
342
+ return this._browser._crPages.get(targetId)._page;
342
343
  }
343
344
  async doGetCookies(urls) {
344
345
  const {
@@ -372,7 +373,7 @@ class CRBrowserContext extends _browserContext.BrowserContext {
372
373
  });
373
374
  }
374
375
  async doGrantPermissions(origin, permissions) {
375
- const webPermissionToProtocol = new Map([['geolocation', 'geolocation'], ['midi', 'midi'], ['notifications', 'notifications'], ['camera', 'videoCapture'], ['microphone', 'audioCapture'], ['background-sync', 'backgroundSync'], ['ambient-light-sensor', 'sensors'], ['accelerometer', 'sensors'], ['gyroscope', 'sensors'], ['magnetometer', 'sensors'], ['accessibility-events', 'accessibilityEvents'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'],
376
+ const webPermissionToProtocol = new Map([['geolocation', 'geolocation'], ['midi', 'midi'], ['notifications', 'notifications'], ['camera', 'videoCapture'], ['microphone', 'audioCapture'], ['background-sync', 'backgroundSync'], ['ambient-light-sensor', 'sensors'], ['accelerometer', 'sensors'], ['gyroscope', 'sensors'], ['magnetometer', 'sensors'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], ['payment-handler', 'paymentHandler'],
376
377
  // chrome-specific permissions we have.
377
378
  ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess']]);
378
379
  const filtered = permissions.map(permission => {
@@ -466,7 +467,7 @@ class CRBrowserContext extends _browserContext.BrowserContext {
466
467
  // When persistent context is closed, we do not necessary get Target.detachedFromTarget
467
468
  // for all the background pages.
468
469
  for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {
469
- if (backgroundPage._browserContext === this && backgroundPage._initializedPage) {
470
+ if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {
470
471
  backgroundPage.didClose();
471
472
  this._browser._backgroundPages.delete(targetId);
472
473
  }
@@ -487,7 +488,7 @@ class CRBrowserContext extends _browserContext.BrowserContext {
487
488
  backgroundPages() {
488
489
  const result = [];
489
490
  for (const backgroundPage of this._browser._backgroundPages.values()) {
490
- if (backgroundPage._browserContext === this && backgroundPage._initializedPage) result.push(backgroundPage._initializedPage);
491
+ if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) result.push(backgroundPage._page);
491
492
  }
492
493
  return result;
493
494
  }
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.kBrowserCloseMessageId = exports.ConnectionEvents = exports.CRSession = exports.CRConnection = exports.CDPSession = void 0;
7
- var _utils = require("../../utils");
8
7
  var _events = require("events");
9
- var _debugLogger = require("../../utils/debugLogger");
8
+ var _utils = require("../../utils");
9
+ var _debugLogger = require("../utils/debugLogger");
10
10
  var _helper = require("../helper");
11
11
  var _protocolError = require("../protocolError");
12
12
  /**
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CRCoverage = void 0;
7
- var _eventsHelper = require("../../utils/eventsHelper");
8
7
  var _utils = require("../../utils");
8
+ var _eventsHelper = require("../utils/eventsHelper");
9
9
  /**
10
10
  * Copyright 2017 Google Inc. All rights reserved.
11
11
  * Modifications copyright (c) Microsoft Corporation.
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.CRDevTools = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
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
  *
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DragManager = void 0;
7
- var _utils = require("../../utils");
8
7
  var _crProtocolHelper = require("./crProtocolHelper");
8
+ var _utils = require("../../utils");
9
9
  /**
10
10
  * Copyright (c) Microsoft Corporation.
11
11
  *
@@ -4,13 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.CRExecutionContext = void 0;
7
+ exports.createHandle = createHandle;
8
+ var _assert = require("../../utils/isomorphic/assert");
7
9
  var _crProtocolHelper = require("./crProtocolHelper");
8
- var js = _interopRequireWildcard(require("../javascript"));
9
- var _stackTrace = require("../../utils/stackTrace");
10
+ var _stackTrace = require("../../utils/isomorphic/stackTrace");
10
11
  var _utilityScriptSerializers = require("../isomorphic/utilityScriptSerializers");
12
+ var js = _interopRequireWildcard(require("../javascript"));
13
+ var dom = _interopRequireWildcard(require("../dom"));
11
14
  var _protocolError = require("../protocolError");
12
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
17
  /**
15
18
  * Copyright 2017 Google Inc. All rights reserved.
16
19
  * Modifications copyright (c) Microsoft Corporation.
@@ -47,7 +50,7 @@ class CRExecutionContext {
47
50
  if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails));
48
51
  return remoteObject.value;
49
52
  }
50
- async rawEvaluateHandle(expression) {
53
+ async rawEvaluateHandle(context, expression) {
51
54
  const {
52
55
  exceptionDetails,
53
56
  result: remoteObject
@@ -56,22 +59,9 @@ class CRExecutionContext {
56
59
  contextId: this._contextId
57
60
  }).catch(rewriteError);
58
61
  if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails));
59
- return remoteObject.objectId;
60
- }
61
- rawCallFunctionNoReply(func, ...args) {
62
- this._client.send('Runtime.callFunctionOn', {
63
- functionDeclaration: func.toString(),
64
- arguments: args.map(a => a instanceof js.JSHandle ? {
65
- objectId: a._objectId
66
- } : {
67
- value: a
68
- }),
69
- returnByValue: true,
70
- executionContextId: this._contextId,
71
- userGesture: true
72
- }).catch(() => {});
62
+ return createHandle(context, remoteObject);
73
63
  }
74
- async evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds) {
64
+ async evaluateWithArguments(expression, returnByValue, utilityScript, values, handles) {
75
65
  const {
76
66
  exceptionDetails,
77
67
  result: remoteObject
@@ -82,42 +72,36 @@ class CRExecutionContext {
82
72
  objectId: utilityScript._objectId
83
73
  }, ...values.map(value => ({
84
74
  value
85
- })), ...objectIds.map(objectId => ({
86
- objectId
75
+ })), ...handles.map(handle => ({
76
+ objectId: handle._objectId
87
77
  }))],
88
78
  returnByValue,
89
79
  awaitPromise: true,
90
80
  userGesture: true
91
81
  }).catch(rewriteError);
92
82
  if (exceptionDetails) throw new js.JavaScriptErrorInEvaluate((0, _crProtocolHelper.getExceptionMessage)(exceptionDetails));
93
- return returnByValue ? (0, _utilityScriptSerializers.parseEvaluationResultValue)(remoteObject.value) : utilityScript._context.createHandle(remoteObject);
83
+ return returnByValue ? (0, _utilityScriptSerializers.parseEvaluationResultValue)(remoteObject.value) : createHandle(utilityScript._context, remoteObject);
94
84
  }
95
- async getProperties(context, objectId) {
85
+ async getProperties(object) {
96
86
  const response = await this._client.send('Runtime.getProperties', {
97
- objectId,
87
+ objectId: object._objectId,
98
88
  ownProperties: true
99
89
  });
100
90
  const result = new Map();
101
91
  for (const property of response.result) {
102
92
  if (!property.enumerable || !property.value) continue;
103
- result.set(property.name, context.createHandle(property.value));
93
+ result.set(property.name, createHandle(object._context, property.value));
104
94
  }
105
95
  return result;
106
96
  }
107
- createHandle(context, remoteObject) {
108
- return new js.JSHandle(context, remoteObject.subtype || remoteObject.type, renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject));
109
- }
110
- async releaseHandle(objectId) {
111
- await (0, _crProtocolHelper.releaseObject)(this._client, objectId);
97
+ async releaseHandle(handle) {
98
+ if (!handle._objectId) return;
99
+ await (0, _crProtocolHelper.releaseObject)(this._client, handle._objectId);
112
100
  }
113
101
  }
114
102
  exports.CRExecutionContext = CRExecutionContext;
115
103
  function rewriteError(error) {
116
- if (error.message.includes('Object reference chain is too long')) return {
117
- result: {
118
- type: 'undefined'
119
- }
120
- };
104
+ if (error.message.includes('Object reference chain is too long')) throw new Error('Cannot serialize result: object reference chain is too long.');
121
105
  if (error.message.includes('Object couldn\'t be returned by value')) return {
122
106
  result: {
123
107
  type: 'undefined'
@@ -146,4 +130,11 @@ function renderPreview(object) {
146
130
  }
147
131
  if (object.subtype === 'array' && object.preview) return js.sparseArrayToString(object.preview.properties);
148
132
  return object.description;
133
+ }
134
+ function createHandle(context, remoteObject) {
135
+ if (remoteObject.subtype === 'node') {
136
+ (0, _assert.assert)(context instanceof dom.FrameExecutionContext);
137
+ return new dom.ElementHandle(context, remoteObject.objectId);
138
+ }
139
+ return new js.JSHandle(context, remoteObject.subtype || remoteObject.type, renderPreview(remoteObject), remoteObject.objectId, potentiallyUnserializableValue(remoteObject));
149
140
  }