easytouch-linux 1.0.7 → 1.0.17

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 (337) hide show
  1. package/LICENSE.txt +201 -0
  2. package/README.md +33 -314
  3. package/SKILL.md +366 -0
  4. package/bin/arm64/et +0 -0
  5. package/bin/et.js +60 -0
  6. package/bin/x64/et +0 -0
  7. package/package.json +19 -37
  8. package/.playwright/node/LICENSE +0 -2607
  9. package/.playwright/node/linux-x64/node +0 -0
  10. package/.playwright/package/README.md +0 -3
  11. package/.playwright/package/ThirdPartyNotices.txt +0 -1602
  12. package/.playwright/package/api.json +0 -1
  13. package/.playwright/package/bin/install_media_pack.ps1 +0 -5
  14. package/.playwright/package/bin/reinstall_chrome_beta_linux.sh +0 -42
  15. package/.playwright/package/bin/reinstall_chrome_beta_mac.sh +0 -13
  16. package/.playwright/package/bin/reinstall_chrome_beta_win.ps1 +0 -24
  17. package/.playwright/package/bin/reinstall_chrome_stable_linux.sh +0 -42
  18. package/.playwright/package/bin/reinstall_chrome_stable_mac.sh +0 -12
  19. package/.playwright/package/bin/reinstall_chrome_stable_win.ps1 +0 -24
  20. package/.playwright/package/bin/reinstall_msedge_beta_linux.sh +0 -48
  21. package/.playwright/package/bin/reinstall_msedge_beta_mac.sh +0 -11
  22. package/.playwright/package/bin/reinstall_msedge_beta_win.ps1 +0 -23
  23. package/.playwright/package/bin/reinstall_msedge_dev_linux.sh +0 -48
  24. package/.playwright/package/bin/reinstall_msedge_dev_mac.sh +0 -11
  25. package/.playwright/package/bin/reinstall_msedge_dev_win.ps1 +0 -23
  26. package/.playwright/package/bin/reinstall_msedge_stable_linux.sh +0 -48
  27. package/.playwright/package/bin/reinstall_msedge_stable_mac.sh +0 -11
  28. package/.playwright/package/bin/reinstall_msedge_stable_win.ps1 +0 -24
  29. package/.playwright/package/browsers.json +0 -66
  30. package/.playwright/package/cli.js +0 -18
  31. package/.playwright/package/index.d.ts +0 -17
  32. package/.playwright/package/index.js +0 -33
  33. package/.playwright/package/index.mjs +0 -28
  34. package/.playwright/package/lib/androidServerImpl.js +0 -69
  35. package/.playwright/package/lib/browserServerImpl.js +0 -92
  36. package/.playwright/package/lib/cli/driver.js +0 -95
  37. package/.playwright/package/lib/cli/program.js +0 -583
  38. package/.playwright/package/lib/cli/programWithTestStub.js +0 -67
  39. package/.playwright/package/lib/client/accessibility.js +0 -50
  40. package/.playwright/package/lib/client/android.js +0 -473
  41. package/.playwright/package/lib/client/api.js +0 -285
  42. package/.playwright/package/lib/client/artifact.js +0 -79
  43. package/.playwright/package/lib/client/browser.js +0 -145
  44. package/.playwright/package/lib/client/browserContext.js +0 -559
  45. package/.playwright/package/lib/client/browserType.js +0 -241
  46. package/.playwright/package/lib/client/cdpSession.js +0 -53
  47. package/.playwright/package/lib/client/channelOwner.js +0 -215
  48. package/.playwright/package/lib/client/clientHelper.js +0 -57
  49. package/.playwright/package/lib/client/clientInstrumentation.js +0 -52
  50. package/.playwright/package/lib/client/clock.js +0 -68
  51. package/.playwright/package/lib/client/connection.js +0 -333
  52. package/.playwright/package/lib/client/consoleMessage.js +0 -55
  53. package/.playwright/package/lib/client/coverage.js +0 -41
  54. package/.playwright/package/lib/client/dialog.js +0 -57
  55. package/.playwright/package/lib/client/download.js +0 -62
  56. package/.playwright/package/lib/client/electron.js +0 -135
  57. package/.playwright/package/lib/client/elementHandle.js +0 -321
  58. package/.playwright/package/lib/client/errors.js +0 -77
  59. package/.playwright/package/lib/client/eventEmitter.js +0 -314
  60. package/.playwright/package/lib/client/events.js +0 -94
  61. package/.playwright/package/lib/client/fetch.js +0 -391
  62. package/.playwright/package/lib/client/fileChooser.js +0 -45
  63. package/.playwright/package/lib/client/frame.js +0 -504
  64. package/.playwright/package/lib/client/harRouter.js +0 -99
  65. package/.playwright/package/lib/client/input.js +0 -111
  66. package/.playwright/package/lib/client/jsHandle.js +0 -121
  67. package/.playwright/package/lib/client/jsonPipe.js +0 -35
  68. package/.playwright/package/lib/client/localUtils.js +0 -36
  69. package/.playwright/package/lib/client/locator.js +0 -448
  70. package/.playwright/package/lib/client/network.js +0 -769
  71. package/.playwright/package/lib/client/page.js +0 -748
  72. package/.playwright/package/lib/client/playwright.js +0 -80
  73. package/.playwright/package/lib/client/selectors.js +0 -67
  74. package/.playwright/package/lib/client/stream.js +0 -54
  75. package/.playwright/package/lib/client/tracing.js +0 -147
  76. package/.playwright/package/lib/client/types.js +0 -24
  77. package/.playwright/package/lib/client/video.js +0 -51
  78. package/.playwright/package/lib/client/waiter.js +0 -162
  79. package/.playwright/package/lib/client/webError.js +0 -37
  80. package/.playwright/package/lib/client/worker.js +0 -71
  81. package/.playwright/package/lib/client/writableStream.js +0 -54
  82. package/.playwright/package/lib/common/socksProxy.js +0 -569
  83. package/.playwright/package/lib/common/timeoutSettings.js +0 -73
  84. package/.playwright/package/lib/common/types.js +0 -5
  85. package/.playwright/package/lib/generated/clockSource.js +0 -7
  86. package/.playwright/package/lib/generated/consoleApiSource.js +0 -7
  87. package/.playwright/package/lib/generated/injectedScriptSource.js +0 -7
  88. package/.playwright/package/lib/generated/pollingRecorderSource.js +0 -7
  89. package/.playwright/package/lib/generated/utilityScriptSource.js +0 -7
  90. package/.playwright/package/lib/generated/webSocketMockSource.js +0 -7
  91. package/.playwright/package/lib/image_tools/colorUtils.js +0 -98
  92. package/.playwright/package/lib/image_tools/compare.js +0 -108
  93. package/.playwright/package/lib/image_tools/imageChannel.js +0 -70
  94. package/.playwright/package/lib/image_tools/stats.js +0 -102
  95. package/.playwright/package/lib/inProcessFactory.js +0 -56
  96. package/.playwright/package/lib/inprocess.js +0 -20
  97. package/.playwright/package/lib/outofprocess.js +0 -67
  98. package/.playwright/package/lib/protocol/debug.js +0 -27
  99. package/.playwright/package/lib/protocol/serializers.js +0 -173
  100. package/.playwright/package/lib/protocol/transport.js +0 -82
  101. package/.playwright/package/lib/protocol/validator.js +0 -2780
  102. package/.playwright/package/lib/protocol/validatorPrimitives.js +0 -139
  103. package/.playwright/package/lib/remote/playwrightConnection.js +0 -275
  104. package/.playwright/package/lib/remote/playwrightServer.js +0 -111
  105. package/.playwright/package/lib/server/accessibility.js +0 -62
  106. package/.playwright/package/lib/server/android/android.js +0 -441
  107. package/.playwright/package/lib/server/android/backendAdb.js +0 -172
  108. package/.playwright/package/lib/server/artifact.js +0 -104
  109. package/.playwright/package/lib/server/bidi/bidiBrowser.js +0 -314
  110. package/.playwright/package/lib/server/bidi/bidiChromium.js +0 -124
  111. package/.playwright/package/lib/server/bidi/bidiConnection.js +0 -204
  112. package/.playwright/package/lib/server/bidi/bidiExecutionContext.js +0 -175
  113. package/.playwright/package/lib/server/bidi/bidiFirefox.js +0 -104
  114. package/.playwright/package/lib/server/bidi/bidiInput.js +0 -160
  115. package/.playwright/package/lib/server/bidi/bidiNetworkManager.js +0 -337
  116. package/.playwright/package/lib/server/bidi/bidiOverCdp.js +0 -103
  117. package/.playwright/package/lib/server/bidi/bidiPage.js +0 -518
  118. package/.playwright/package/lib/server/bidi/bidiPdf.js +0 -140
  119. package/.playwright/package/lib/server/bidi/third_party/bidiDeserializer.js +0 -93
  120. package/.playwright/package/lib/server/bidi/third_party/bidiKeyboard.js +0 -240
  121. package/.playwright/package/lib/server/bidi/third_party/bidiProtocol.js +0 -139
  122. package/.playwright/package/lib/server/bidi/third_party/bidiSerializer.js +0 -144
  123. package/.playwright/package/lib/server/bidi/third_party/firefoxPrefs.js +0 -221
  124. package/.playwright/package/lib/server/browser.js +0 -148
  125. package/.playwright/package/lib/server/browserContext.js +0 -675
  126. package/.playwright/package/lib/server/browserType.js +0 -338
  127. package/.playwright/package/lib/server/chromium/appIcon.png +0 -0
  128. package/.playwright/package/lib/server/chromium/chromium.js +0 -354
  129. package/.playwright/package/lib/server/chromium/chromiumSwitches.js +0 -46
  130. package/.playwright/package/lib/server/chromium/crAccessibility.js +0 -237
  131. package/.playwright/package/lib/server/chromium/crBrowser.js +0 -516
  132. package/.playwright/package/lib/server/chromium/crConnection.js +0 -228
  133. package/.playwright/package/lib/server/chromium/crCoverage.js +0 -246
  134. package/.playwright/package/lib/server/chromium/crDevTools.js +0 -104
  135. package/.playwright/package/lib/server/chromium/crDragDrop.js +0 -143
  136. package/.playwright/package/lib/server/chromium/crExecutionContext.js +0 -132
  137. package/.playwright/package/lib/server/chromium/crInput.js +0 -182
  138. package/.playwright/package/lib/server/chromium/crNetworkManager.js +0 -767
  139. package/.playwright/package/lib/server/chromium/crPage.js +0 -1122
  140. package/.playwright/package/lib/server/chromium/crPdf.js +0 -153
  141. package/.playwright/package/lib/server/chromium/crProtocolHelper.js +0 -133
  142. package/.playwright/package/lib/server/chromium/crServiceWorker.js +0 -112
  143. package/.playwright/package/lib/server/chromium/defaultFontFamilies.js +0 -145
  144. package/.playwright/package/lib/server/chromium/videoRecorder.js +0 -155
  145. package/.playwright/package/lib/server/clock.js +0 -125
  146. package/.playwright/package/lib/server/codegen/csharp.js +0 -304
  147. package/.playwright/package/lib/server/codegen/java.js +0 -243
  148. package/.playwright/package/lib/server/codegen/javascript.js +0 -253
  149. package/.playwright/package/lib/server/codegen/jsonl.js +0 -47
  150. package/.playwright/package/lib/server/codegen/language.js +0 -88
  151. package/.playwright/package/lib/server/codegen/languages.js +0 -30
  152. package/.playwright/package/lib/server/codegen/python.js +0 -262
  153. package/.playwright/package/lib/server/codegen/types.js +0 -5
  154. package/.playwright/package/lib/server/console.js +0 -57
  155. package/.playwright/package/lib/server/cookieStore.js +0 -185
  156. package/.playwright/package/lib/server/debugController.js +0 -212
  157. package/.playwright/package/lib/server/debugger.js +0 -132
  158. package/.playwright/package/lib/server/deviceDescriptors.js +0 -26
  159. package/.playwright/package/lib/server/deviceDescriptorsSource.json +0 -1669
  160. package/.playwright/package/lib/server/dialog.js +0 -71
  161. package/.playwright/package/lib/server/dispatchers/androidDispatcher.js +0 -204
  162. package/.playwright/package/lib/server/dispatchers/artifactDispatcher.js +0 -118
  163. package/.playwright/package/lib/server/dispatchers/browserContextDispatcher.js +0 -357
  164. package/.playwright/package/lib/server/dispatchers/browserDispatcher.js +0 -170
  165. package/.playwright/package/lib/server/dispatchers/browserTypeDispatcher.js +0 -55
  166. package/.playwright/package/lib/server/dispatchers/cdpSessionDispatcher.js +0 -48
  167. package/.playwright/package/lib/server/dispatchers/debugControllerDispatcher.js +0 -105
  168. package/.playwright/package/lib/server/dispatchers/dialogDispatcher.js +0 -44
  169. package/.playwright/package/lib/server/dispatchers/dispatcher.js +0 -395
  170. package/.playwright/package/lib/server/dispatchers/electronDispatcher.js +0 -93
  171. package/.playwright/package/lib/server/dispatchers/elementHandlerDispatcher.js +0 -228
  172. package/.playwright/package/lib/server/dispatchers/frameDispatcher.js +0 -294
  173. package/.playwright/package/lib/server/dispatchers/jsHandleDispatcher.js +0 -97
  174. package/.playwright/package/lib/server/dispatchers/jsonPipeDispatcher.js +0 -59
  175. package/.playwright/package/lib/server/dispatchers/localUtilsDispatcher.js +0 -413
  176. package/.playwright/package/lib/server/dispatchers/networkDispatchers.js +0 -221
  177. package/.playwright/package/lib/server/dispatchers/pageDispatcher.js +0 -367
  178. package/.playwright/package/lib/server/dispatchers/playwrightDispatcher.js +0 -107
  179. package/.playwright/package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
  180. package/.playwright/package/lib/server/dispatchers/streamDispatcher.js +0 -62
  181. package/.playwright/package/lib/server/dispatchers/tracingDispatcher.js +0 -64
  182. package/.playwright/package/lib/server/dispatchers/webSocketRouteDispatcher.js +0 -188
  183. package/.playwright/package/lib/server/dispatchers/writableStreamDispatcher.js +0 -58
  184. package/.playwright/package/lib/server/dom.js +0 -893
  185. package/.playwright/package/lib/server/download.js +0 -60
  186. package/.playwright/package/lib/server/electron/electron.js +0 -296
  187. package/.playwright/package/lib/server/electron/loader.js +0 -57
  188. package/.playwright/package/lib/server/errors.js +0 -68
  189. package/.playwright/package/lib/server/fetch.js +0 -663
  190. package/.playwright/package/lib/server/fileChooser.js +0 -42
  191. package/.playwright/package/lib/server/fileUploadUtils.js +0 -75
  192. package/.playwright/package/lib/server/firefox/ffAccessibility.js +0 -216
  193. package/.playwright/package/lib/server/firefox/ffBrowser.js +0 -462
  194. package/.playwright/package/lib/server/firefox/ffConnection.js +0 -168
  195. package/.playwright/package/lib/server/firefox/ffExecutionContext.js +0 -123
  196. package/.playwright/package/lib/server/firefox/ffInput.js +0 -161
  197. package/.playwright/package/lib/server/firefox/ffNetworkManager.js +0 -233
  198. package/.playwright/package/lib/server/firefox/ffPage.js +0 -544
  199. package/.playwright/package/lib/server/firefox/firefox.js +0 -99
  200. package/.playwright/package/lib/server/formData.js +0 -75
  201. package/.playwright/package/lib/server/frameSelectors.js +0 -171
  202. package/.playwright/package/lib/server/frames.js +0 -1663
  203. package/.playwright/package/lib/server/har/harRecorder.js +0 -139
  204. package/.playwright/package/lib/server/har/harTracer.js +0 -542
  205. package/.playwright/package/lib/server/helper.js +0 -103
  206. package/.playwright/package/lib/server/index.js +0 -108
  207. package/.playwright/package/lib/server/input.js +0 -309
  208. package/.playwright/package/lib/server/instrumentation.js +0 -70
  209. package/.playwright/package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
  210. package/.playwright/package/lib/server/javascript.js +0 -293
  211. package/.playwright/package/lib/server/launchApp.js +0 -91
  212. package/.playwright/package/lib/server/macEditingCommands.js +0 -139
  213. package/.playwright/package/lib/server/network.js +0 -617
  214. package/.playwright/package/lib/server/page.js +0 -863
  215. package/.playwright/package/lib/server/pipeTransport.js +0 -85
  216. package/.playwright/package/lib/server/playwright.js +0 -88
  217. package/.playwright/package/lib/server/progress.js +0 -99
  218. package/.playwright/package/lib/server/protocolError.js +0 -49
  219. package/.playwright/package/lib/server/recorder/chat.js +0 -177
  220. package/.playwright/package/lib/server/recorder/contextRecorder.js +0 -290
  221. package/.playwright/package/lib/server/recorder/recorderApp.js +0 -187
  222. package/.playwright/package/lib/server/recorder/recorderCollection.js +0 -104
  223. package/.playwright/package/lib/server/recorder/recorderFrontend.js +0 -5
  224. package/.playwright/package/lib/server/recorder/recorderRunner.js +0 -159
  225. package/.playwright/package/lib/server/recorder/recorderUtils.js +0 -89
  226. package/.playwright/package/lib/server/recorder/throttledFile.js +0 -46
  227. package/.playwright/package/lib/server/recorder.js +0 -367
  228. package/.playwright/package/lib/server/registry/browserFetcher.js +0 -168
  229. package/.playwright/package/lib/server/registry/dependencies.js +0 -322
  230. package/.playwright/package/lib/server/registry/index.js +0 -1165
  231. package/.playwright/package/lib/server/registry/nativeDeps.js +0 -496
  232. package/.playwright/package/lib/server/registry/oopDownloadBrowserMain.js +0 -138
  233. package/.playwright/package/lib/server/screenshotter.js +0 -348
  234. package/.playwright/package/lib/server/selectors.js +0 -73
  235. package/.playwright/package/lib/server/socksClientCertificatesInterceptor.js +0 -340
  236. package/.playwright/package/lib/server/socksInterceptor.js +0 -100
  237. package/.playwright/package/lib/server/trace/recorder/snapshotter.js +0 -161
  238. package/.playwright/package/lib/server/trace/recorder/snapshotterInjected.js +0 -518
  239. package/.playwright/package/lib/server/trace/recorder/tracing.js +0 -596
  240. package/.playwright/package/lib/server/trace/test/inMemorySnapshotter.js +0 -93
  241. package/.playwright/package/lib/server/trace/viewer/traceViewer.js +0 -219
  242. package/.playwright/package/lib/server/transport.js +0 -192
  243. package/.playwright/package/lib/server/types.js +0 -24
  244. package/.playwright/package/lib/server/usKeyboardLayout.js +0 -555
  245. package/.playwright/package/lib/server/webkit/webkit.js +0 -87
  246. package/.playwright/package/lib/server/webkit/wkAccessibility.js +0 -194
  247. package/.playwright/package/lib/server/webkit/wkBrowser.js +0 -329
  248. package/.playwright/package/lib/server/webkit/wkConnection.js +0 -173
  249. package/.playwright/package/lib/server/webkit/wkExecutionContext.js +0 -131
  250. package/.playwright/package/lib/server/webkit/wkInput.js +0 -179
  251. package/.playwright/package/lib/server/webkit/wkInterceptableRequest.js +0 -162
  252. package/.playwright/package/lib/server/webkit/wkPage.js +0 -1207
  253. package/.playwright/package/lib/server/webkit/wkProvisionalPage.js +0 -94
  254. package/.playwright/package/lib/server/webkit/wkWorkers.js +0 -104
  255. package/.playwright/package/lib/third_party/pixelmatch.js +0 -255
  256. package/.playwright/package/lib/utils/ascii.js +0 -31
  257. package/.playwright/package/lib/utils/comparators.js +0 -159
  258. package/.playwright/package/lib/utils/crypto.js +0 -171
  259. package/.playwright/package/lib/utils/debug.js +0 -46
  260. package/.playwright/package/lib/utils/debugLogger.js +0 -93
  261. package/.playwright/package/lib/utils/env.js +0 -49
  262. package/.playwright/package/lib/utils/eventsHelper.js +0 -38
  263. package/.playwright/package/lib/utils/expectUtils.js +0 -33
  264. package/.playwright/package/lib/utils/fileUtils.js +0 -205
  265. package/.playwright/package/lib/utils/happy-eyeballs.js +0 -194
  266. package/.playwright/package/lib/utils/headers.js +0 -52
  267. package/.playwright/package/lib/utils/hostPlatform.js +0 -145
  268. package/.playwright/package/lib/utils/httpServer.js +0 -233
  269. package/.playwright/package/lib/utils/index.js +0 -368
  270. package/.playwright/package/lib/utils/isomorphic/ariaSnapshot.js +0 -391
  271. package/.playwright/package/lib/utils/isomorphic/cssParser.js +0 -250
  272. package/.playwright/package/lib/utils/isomorphic/cssTokenizer.js +0 -979
  273. package/.playwright/package/lib/utils/isomorphic/locatorGenerators.js +0 -660
  274. package/.playwright/package/lib/utils/isomorphic/locatorParser.js +0 -185
  275. package/.playwright/package/lib/utils/isomorphic/locatorUtils.js +0 -62
  276. package/.playwright/package/lib/utils/isomorphic/mimeType.js +0 -29
  277. package/.playwright/package/lib/utils/isomorphic/selectorParser.js +0 -397
  278. package/.playwright/package/lib/utils/isomorphic/stringUtils.js +0 -169
  279. package/.playwright/package/lib/utils/isomorphic/traceUtils.js +0 -39
  280. package/.playwright/package/lib/utils/isomorphic/urlMatch.js +0 -122
  281. package/.playwright/package/lib/utils/linuxUtils.js +0 -78
  282. package/.playwright/package/lib/utils/manualPromise.js +0 -109
  283. package/.playwright/package/lib/utils/multimap.js +0 -75
  284. package/.playwright/package/lib/utils/network.js +0 -160
  285. package/.playwright/package/lib/utils/processLauncher.js +0 -248
  286. package/.playwright/package/lib/utils/profiler.js +0 -53
  287. package/.playwright/package/lib/utils/rtti.js +0 -44
  288. package/.playwright/package/lib/utils/semaphore.js +0 -51
  289. package/.playwright/package/lib/utils/sequence.js +0 -64
  290. package/.playwright/package/lib/utils/spawnAsync.js +0 -45
  291. package/.playwright/package/lib/utils/stackTrace.js +0 -134
  292. package/.playwright/package/lib/utils/task.js +0 -58
  293. package/.playwright/package/lib/utils/time.js +0 -37
  294. package/.playwright/package/lib/utils/timeoutRunner.js +0 -66
  295. package/.playwright/package/lib/utils/traceUtils.js +0 -44
  296. package/.playwright/package/lib/utils/userAgent.js +0 -105
  297. package/.playwright/package/lib/utils/wsServer.js +0 -128
  298. package/.playwright/package/lib/utils/zipFile.js +0 -75
  299. package/.playwright/package/lib/utils/zones.js +0 -69
  300. package/.playwright/package/lib/utilsBundle.js +0 -81
  301. package/.playwright/package/lib/utilsBundleImpl/index.js +0 -210
  302. package/.playwright/package/lib/utilsBundleImpl/xdg-open +0 -1066
  303. package/.playwright/package/lib/vite/htmlReport/index.html +0 -69
  304. package/.playwright/package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
  305. package/.playwright/package/lib/vite/recorder/assets/codeMirrorModule-k-61wZCK.js +0 -24
  306. package/.playwright/package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  307. package/.playwright/package/lib/vite/recorder/assets/index-B70BEW3b.js +0 -184
  308. package/.playwright/package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
  309. package/.playwright/package/lib/vite/recorder/index.html +0 -29
  310. package/.playwright/package/lib/vite/recorder/playwright-logo.svg +0 -9
  311. package/.playwright/package/lib/vite/traceViewer/assets/codeMirrorModule-CyuxU5C-.js +0 -24
  312. package/.playwright/package/lib/vite/traceViewer/assets/defaultSettingsView-5nVJRt0A.js +0 -243
  313. package/.playwright/package/lib/vite/traceViewer/assets/xtermModule-c-SNdYZy.js +0 -9
  314. package/.playwright/package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
  315. package/.playwright/package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  316. package/.playwright/package/lib/vite/traceViewer/defaultSettingsView.2xeEXCXv.css +0 -1
  317. package/.playwright/package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  318. package/.playwright/package/lib/vite/traceViewer/index.html +0 -43
  319. package/.playwright/package/lib/vite/traceViewer/index.qVn2ZnpC.js +0 -2
  320. package/.playwright/package/lib/vite/traceViewer/playwright-logo.svg +0 -9
  321. package/.playwright/package/lib/vite/traceViewer/snapshot.html +0 -21
  322. package/.playwright/package/lib/vite/traceViewer/sw.bundle.js +0 -3
  323. package/.playwright/package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
  324. package/.playwright/package/lib/vite/traceViewer/uiMode.html +0 -17
  325. package/.playwright/package/lib/vite/traceViewer/uiMode.m4IPRPOd.js +0 -5
  326. package/.playwright/package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
  327. package/.playwright/package/lib/zipBundle.js +0 -25
  328. package/.playwright/package/lib/zipBundleImpl.js +0 -5
  329. package/.playwright/package/package.json +0 -44
  330. package/.playwright/package/protocol.yml +0 -3758
  331. package/.playwright/package/types/protocol.d.ts +0 -21868
  332. package/.playwright/package/types/structs.d.ts +0 -45
  333. package/.playwright/package/types/types.d.ts +0 -22663
  334. package/et +0 -0
  335. package/install.js +0 -19
  336. package/playwright.ps1 +0 -7
  337. package/scripts/playwright-bridge.js +0 -560
@@ -1,1207 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.WKPage = void 0;
7
- var _path = _interopRequireDefault(require("path"));
8
- var _utilsBundle = require("../../utilsBundle");
9
- var _stackTrace = require("../../utils/stackTrace");
10
- var _utils = require("../../utils");
11
- var _hostPlatform = require("../../utils/hostPlatform");
12
- var dialog = _interopRequireWildcard(require("../dialog"));
13
- var dom = _interopRequireWildcard(require("../dom"));
14
- var _eventsHelper = require("../../utils/eventsHelper");
15
- var _helper = require("../helper");
16
- var network = _interopRequireWildcard(require("../network"));
17
- var _page = require("../page");
18
- var _wkAccessibility = require("./wkAccessibility");
19
- var _wkConnection = require("./wkConnection");
20
- var _wkExecutionContext = require("./wkExecutionContext");
21
- var _wkInput = require("./wkInput");
22
- var _wkInterceptableRequest = require("./wkInterceptableRequest");
23
- var _wkProvisionalPage = require("./wkProvisionalPage");
24
- var _wkWorkers = require("./wkWorkers");
25
- var _debugLogger = require("../../utils/debugLogger");
26
- var _browserContext = require("../browserContext");
27
- var _errors = require("../errors");
28
- 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); }
29
- 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; }
30
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
- /**
32
- * Copyright 2017 Google Inc. All rights reserved.
33
- * Modifications copyright (c) Microsoft Corporation.
34
- *
35
- * Licensed under the Apache License, Version 2.0 (the "License");
36
- * you may not use this file except in compliance with the License.
37
- * You may obtain a copy of the License at
38
- *
39
- * http://www.apache.org/licenses/LICENSE-2.0
40
- *
41
- * Unless required by applicable law or agreed to in writing, software
42
- * distributed under the License is distributed on an "AS IS" BASIS,
43
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44
- * See the License for the specific language governing permissions and
45
- * limitations under the License.
46
- */
47
-
48
- const UTILITY_WORLD_NAME = '__playwright_utility_world__';
49
- class WKPage {
50
- constructor(browserContext, pageProxySession, opener) {
51
- this.rawMouse = void 0;
52
- this.rawKeyboard = void 0;
53
- this.rawTouchscreen = void 0;
54
- this._session = void 0;
55
- this._provisionalPage = null;
56
- this._page = void 0;
57
- this._pageProxySession = void 0;
58
- this._opener = void 0;
59
- this._requestIdToRequest = new Map();
60
- this._requestIdToRequestWillBeSentEvent = new Map();
61
- this._workers = void 0;
62
- this._contextIdToContext = void 0;
63
- this._sessionListeners = [];
64
- this._eventListeners = void 0;
65
- this._browserContext = void 0;
66
- this._firstNonInitialNavigationCommittedPromise = void 0;
67
- this._firstNonInitialNavigationCommittedFulfill = () => {};
68
- this._firstNonInitialNavigationCommittedReject = e => {};
69
- this._lastConsoleMessage = null;
70
- this._requestIdToResponseReceivedPayloadEvent = new Map();
71
- // Holds window features for the next popup being opened via window.open,
72
- // until the popup page proxy arrives.
73
- this._nextWindowOpenPopupFeatures = void 0;
74
- this._recordingVideoFile = null;
75
- this._screencastGeneration = 0;
76
- this._pageProxySession = pageProxySession;
77
- this._opener = opener;
78
- this.rawKeyboard = new _wkInput.RawKeyboardImpl(pageProxySession);
79
- this.rawMouse = new _wkInput.RawMouseImpl(pageProxySession);
80
- this.rawTouchscreen = new _wkInput.RawTouchscreenImpl(pageProxySession);
81
- this._contextIdToContext = new Map();
82
- this._page = new _page.Page(this, browserContext);
83
- this.rawMouse.setPage(this._page);
84
- this._workers = new _wkWorkers.WKWorkers(this._page);
85
- this._session = undefined;
86
- this._browserContext = browserContext;
87
- this._page.on(_page.Page.Events.FrameDetached, frame => this._removeContextsForFrame(frame, false));
88
- this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Target.targetCreated', this._onTargetCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Target.targetDestroyed', this._onTargetDestroyed.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Target.dispatchMessageFromTarget', this._onDispatchMessageFromTarget.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Target.didCommitProvisionalTarget', this._onDidCommitProvisionalTarget.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Screencast.screencastFrame', this._onScreencastFrame.bind(this))];
89
- this._firstNonInitialNavigationCommittedPromise = new Promise((f, r) => {
90
- this._firstNonInitialNavigationCommittedFulfill = f;
91
- this._firstNonInitialNavigationCommittedReject = r;
92
- });
93
- if (opener && !browserContext._options.noDefaultViewport && opener._nextWindowOpenPopupFeatures) {
94
- const viewportSize = _helper.helper.getViewportSizeFromWindowFeatures(opener._nextWindowOpenPopupFeatures);
95
- opener._nextWindowOpenPopupFeatures = undefined;
96
- if (viewportSize) this._page._emulatedSize = {
97
- viewport: viewportSize,
98
- screen: viewportSize
99
- };
100
- }
101
- }
102
- async _initializePageProxySession() {
103
- if (this._page._browserContext.isSettingStorageState()) return;
104
- const promises = [this._pageProxySession.send('Dialog.enable'), this._pageProxySession.send('Emulation.setActiveAndFocused', {
105
- active: true
106
- })];
107
- const contextOptions = this._browserContext._options;
108
- if (contextOptions.javaScriptEnabled === false) promises.push(this._pageProxySession.send('Emulation.setJavaScriptEnabled', {
109
- enabled: false
110
- }));
111
- promises.push(this._updateViewport());
112
- promises.push(this.updateHttpCredentials());
113
- if (this._browserContext._permissions.size) {
114
- for (const [key, value] of this._browserContext._permissions) promises.push(this._grantPermissions(key, value));
115
- }
116
- if (this._browserContext._options.recordVideo) {
117
- const outputFile = _path.default.join(this._browserContext._options.recordVideo.dir, (0, _utils.createGuid)() + '.webm');
118
- promises.push(this._browserContext._ensureVideosPath().then(() => {
119
- return this._startVideo({
120
- // validateBrowserContextOptions ensures correct video size.
121
- ...this._browserContext._options.recordVideo.size,
122
- outputFile
123
- });
124
- }));
125
- }
126
- await Promise.all(promises);
127
- }
128
- _setSession(session) {
129
- _eventsHelper.eventsHelper.removeEventListeners(this._sessionListeners);
130
- this._session = session;
131
- this.rawKeyboard.setSession(session);
132
- this.rawMouse.setSession(session);
133
- this._addSessionListeners();
134
- this._workers.setSession(session);
135
- }
136
-
137
- // This method is called for provisional targets as well. The session passed as the parameter
138
- // may be different from the current session and may be destroyed without becoming current.
139
- async _initializeSession(session, provisional, resourceTreeHandler) {
140
- await this._initializeSessionMayThrow(session, resourceTreeHandler).catch(e => {
141
- // Provisional session can be disposed at any time, for example due to new navigation initiating
142
- // a new provisional page.
143
- if (provisional && session.isDisposed()) return;
144
- // Swallow initialization errors due to newer target swap in,
145
- // since we will reinitialize again.
146
- if (this._session === session) throw e;
147
- });
148
- }
149
- async _initializeSessionMayThrow(session, resourceTreeHandler) {
150
- const [, frameTree] = await Promise.all([
151
- // Page agent must be enabled before Runtime.
152
- session.send('Page.enable'), session.send('Page.getResourceTree')]);
153
- resourceTreeHandler(frameTree);
154
- const promises = [
155
- // Resource tree should be received before first execution context.
156
- session.send('Runtime.enable'), session.send('Runtime.addBinding', {
157
- name: _page.PageBinding.kPlaywrightBinding
158
- }), session.send('Page.createUserWorld', {
159
- name: UTILITY_WORLD_NAME
160
- }).catch(_ => {}),
161
- // Worlds are per-process
162
- session.send('Console.enable'), session.send('Network.enable'), this._workers.initializeSession(session)];
163
- if (this._page.needsRequestInterception()) {
164
- promises.push(session.send('Network.setInterceptionEnabled', {
165
- enabled: true
166
- }));
167
- promises.push(session.send('Network.setResourceCachingDisabled', {
168
- disabled: true
169
- }));
170
- promises.push(session.send('Network.addInterception', {
171
- url: '.*',
172
- stage: 'request',
173
- isRegex: true
174
- }));
175
- }
176
- if (this._page._browserContext.isSettingStorageState()) {
177
- await Promise.all(promises);
178
- return;
179
- }
180
- const contextOptions = this._browserContext._options;
181
- if (contextOptions.userAgent) promises.push(this.updateUserAgent());
182
- const emulatedMedia = this._page.emulatedMedia();
183
- if (emulatedMedia.media || emulatedMedia.colorScheme || emulatedMedia.reducedMotion || emulatedMedia.forcedColors) promises.push(WKPage._setEmulateMedia(session, emulatedMedia.media, emulatedMedia.colorScheme, emulatedMedia.reducedMotion, emulatedMedia.forcedColors));
184
- const bootstrapScript = this._calculateBootstrapScript();
185
- if (bootstrapScript.length) promises.push(session.send('Page.setBootstrapScript', {
186
- source: bootstrapScript
187
- }));
188
- this._page.frames().map(frame => frame.evaluateExpression(bootstrapScript).catch(e => {}));
189
- if (contextOptions.bypassCSP) promises.push(session.send('Page.setBypassCSP', {
190
- enabled: true
191
- }));
192
- const emulatedSize = this._page.emulatedSize();
193
- if (emulatedSize) {
194
- promises.push(session.send('Page.setScreenSizeOverride', {
195
- width: emulatedSize.screen.width,
196
- height: emulatedSize.screen.height
197
- }));
198
- }
199
- promises.push(this.updateEmulateMedia());
200
- promises.push(session.send('Network.setExtraHTTPHeaders', {
201
- headers: (0, _utils.headersArrayToObject)(this._calculateExtraHTTPHeaders(), false /* lowerCase */)
202
- }));
203
- if (contextOptions.offline) promises.push(session.send('Network.setEmulateOfflineState', {
204
- offline: true
205
- }));
206
- promises.push(session.send('Page.setTouchEmulationEnabled', {
207
- enabled: !!contextOptions.hasTouch
208
- }));
209
- if (contextOptions.timezoneId) {
210
- promises.push(session.send('Page.setTimeZone', {
211
- timeZone: contextOptions.timezoneId
212
- }).catch(e => {
213
- throw new Error(`Invalid timezone ID: ${contextOptions.timezoneId}`);
214
- }));
215
- }
216
- if (this._page.fileChooserIntercepted()) promises.push(session.send('Page.setInterceptFileChooserDialog', {
217
- enabled: true
218
- }));
219
- promises.push(session.send('Page.overrideSetting', {
220
- setting: 'DeviceOrientationEventEnabled',
221
- value: contextOptions.isMobile
222
- }));
223
- promises.push(session.send('Page.overrideSetting', {
224
- setting: 'FullScreenEnabled',
225
- value: !contextOptions.isMobile
226
- }));
227
- promises.push(session.send('Page.overrideSetting', {
228
- setting: 'NotificationsEnabled',
229
- value: !contextOptions.isMobile
230
- }));
231
- promises.push(session.send('Page.overrideSetting', {
232
- setting: 'PointerLockEnabled',
233
- value: !contextOptions.isMobile
234
- }));
235
- promises.push(session.send('Page.overrideSetting', {
236
- setting: 'InputTypeMonthEnabled',
237
- value: contextOptions.isMobile
238
- }));
239
- promises.push(session.send('Page.overrideSetting', {
240
- setting: 'InputTypeWeekEnabled',
241
- value: contextOptions.isMobile
242
- }));
243
- promises.push(session.send('Page.overrideSetting', {
244
- setting: 'FixedBackgroundsPaintRelativeToDocument',
245
- value: contextOptions.isMobile
246
- }));
247
- await Promise.all(promises);
248
- }
249
- _onDidCommitProvisionalTarget(event) {
250
- const {
251
- oldTargetId,
252
- newTargetId
253
- } = event;
254
- (0, _utils.assert)(this._provisionalPage);
255
- (0, _utils.assert)(this._provisionalPage._session.sessionId === newTargetId, 'Unknown new target: ' + newTargetId);
256
- (0, _utils.assert)(this._session.sessionId === oldTargetId, 'Unknown old target: ' + oldTargetId);
257
- const newSession = this._provisionalPage._session;
258
- this._provisionalPage.commit();
259
- this._provisionalPage.dispose();
260
- this._provisionalPage = null;
261
- this._setSession(newSession);
262
- }
263
- _onTargetDestroyed(event) {
264
- const {
265
- targetId,
266
- crashed
267
- } = event;
268
- if (this._provisionalPage && this._provisionalPage._session.sessionId === targetId) {
269
- this._maybeCancelCoopNavigationRequest(this._provisionalPage);
270
- this._provisionalPage._session.dispose();
271
- this._provisionalPage.dispose();
272
- this._provisionalPage = null;
273
- } else if (this._session.sessionId === targetId) {
274
- this._session.dispose();
275
- _eventsHelper.eventsHelper.removeEventListeners(this._sessionListeners);
276
- if (crashed) {
277
- this._session.markAsCrashed();
278
- this._page._didCrash();
279
- }
280
- }
281
- }
282
- didClose() {
283
- this._pageProxySession.dispose();
284
- _eventsHelper.eventsHelper.removeEventListeners(this._sessionListeners);
285
- _eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
286
- if (this._session) this._session.dispose();
287
- if (this._provisionalPage) {
288
- this._provisionalPage._session.dispose();
289
- this._provisionalPage.dispose();
290
- this._provisionalPage = null;
291
- }
292
- this._firstNonInitialNavigationCommittedReject(new _errors.TargetClosedError());
293
- this._page._didClose();
294
- }
295
- dispatchMessageToSession(message) {
296
- this._pageProxySession.dispatchMessage(message);
297
- }
298
- handleProvisionalLoadFailed(event) {
299
- if (!this._page.initializedOrUndefined()) {
300
- this._firstNonInitialNavigationCommittedReject(new Error('Initial load failed'));
301
- return;
302
- }
303
- if (!this._provisionalPage) return;
304
- let errorText = event.error;
305
- if (errorText.includes('cancelled')) errorText += '; maybe frame was detached?';
306
- this._page._frameManager.frameAbortedNavigation(this._page.mainFrame()._id, errorText, event.loaderId);
307
- }
308
- handleWindowOpen(event) {
309
- (0, _utils.debugAssert)(!this._nextWindowOpenPopupFeatures);
310
- this._nextWindowOpenPopupFeatures = event.windowFeatures;
311
- }
312
- async _onTargetCreated(event) {
313
- const {
314
- targetInfo
315
- } = event;
316
- const session = new _wkConnection.WKSession(this._pageProxySession.connection, targetInfo.targetId, message => {
317
- this._pageProxySession.send('Target.sendMessageToTarget', {
318
- message: JSON.stringify(message),
319
- targetId: targetInfo.targetId
320
- }).catch(e => {
321
- session.dispatchMessage({
322
- id: message.id,
323
- error: {
324
- message: e.message
325
- }
326
- });
327
- });
328
- });
329
- (0, _utils.assert)(targetInfo.type === 'page', 'Only page targets are expected in WebKit, received: ' + targetInfo.type);
330
- if (!targetInfo.isProvisional) {
331
- var _this$_opener;
332
- (0, _utils.assert)(!this._page.initializedOrUndefined());
333
- let pageOrError;
334
- try {
335
- this._setSession(session);
336
- await Promise.all([this._initializePageProxySession(), this._initializeSession(session, false, ({
337
- frameTree
338
- }) => this._handleFrameTree(frameTree))]);
339
- pageOrError = this._page;
340
- } catch (e) {
341
- pageOrError = e;
342
- }
343
- if (targetInfo.isPaused) this._pageProxySession.sendMayFail('Target.resume', {
344
- targetId: targetInfo.targetId
345
- });
346
- if (pageOrError instanceof _page.Page && this._page.mainFrame().url() === '') {
347
- try {
348
- // Initial empty page has an empty url. We should wait until the first real url has been loaded,
349
- // even if that url is about:blank. This is especially important for popups, where we need the
350
- // actual url before interacting with it.
351
- await this._firstNonInitialNavigationCommittedPromise;
352
- } catch (e) {
353
- pageOrError = e;
354
- }
355
- } else {
356
- // Avoid rejection on disconnect.
357
- this._firstNonInitialNavigationCommittedPromise.catch(() => {});
358
- }
359
- this._page.reportAsNew((_this$_opener = this._opener) === null || _this$_opener === void 0 ? void 0 : _this$_opener._page, pageOrError instanceof _page.Page ? undefined : pageOrError);
360
- } else {
361
- (0, _utils.assert)(targetInfo.isProvisional);
362
- (0, _utils.assert)(!this._provisionalPage);
363
- this._provisionalPage = new _wkProvisionalPage.WKProvisionalPage(session, this);
364
- if (targetInfo.isPaused) {
365
- this._provisionalPage.initializationPromise.then(() => {
366
- this._pageProxySession.sendMayFail('Target.resume', {
367
- targetId: targetInfo.targetId
368
- });
369
- });
370
- }
371
- }
372
- }
373
- _onDispatchMessageFromTarget(event) {
374
- const {
375
- targetId,
376
- message
377
- } = event;
378
- if (this._provisionalPage && this._provisionalPage._session.sessionId === targetId) this._provisionalPage._session.dispatchMessage(JSON.parse(message));else if (this._session.sessionId === targetId) this._session.dispatchMessage(JSON.parse(message));else throw new Error('Unknown target: ' + targetId);
379
- }
380
- _addSessionListeners() {
381
- this._sessionListeners = [_eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameNavigated', event => this._onFrameNavigated(event.frame, false)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.navigatedWithinDocument', event => this._onFrameNavigatedWithinDocument(event.frameId, event.url)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameAttached', event => this._onFrameAttached(event.frameId, event.parentFrameId)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameDetached', event => this._onFrameDetached(event.frameId)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.willCheckNavigationPolicy', event => this._onWillCheckNavigationPolicy(event.frameId)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.didCheckNavigationPolicy', event => this._onDidCheckNavigationPolicy(event.frameId, event.cancel)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.frameScheduledNavigation', event => this._onFrameScheduledNavigation(event.frameId, event.delay, event.targetIsCurrentFrame)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.loadEventFired', event => this._page._frameManager.frameLifecycleEvent(event.frameId, 'load')), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.domContentEventFired', event => this._page._frameManager.frameLifecycleEvent(event.frameId, 'domcontentloaded')), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.executionContextCreated', event => this._onExecutionContextCreated(event.context)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Runtime.bindingCalled', event => this._onBindingCalled(event.contextId, event.argument)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Console.messageAdded', event => this._onConsoleMessage(event)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Console.messageRepeatCountUpdated', event => this._onConsoleRepeatCountUpdated(event)), _eventsHelper.eventsHelper.addEventListener(this._pageProxySession, 'Dialog.javascriptDialogOpening', event => this._onDialog(event)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Page.fileChooserOpened', event => this._onFileChooserOpened(event)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.requestWillBeSent', e => this._onRequestWillBeSent(this._session, e)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.requestIntercepted', e => this._onRequestIntercepted(this._session, e)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.responseReceived', e => this._onResponseReceived(this._session, e)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.loadingFinished', e => this._onLoadingFinished(e)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.loadingFailed', e => this._onLoadingFailed(this._session, e)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketCreated', e => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketWillSendHandshakeRequest', e => this._page._frameManager.onWebSocketRequest(e.requestId)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketHandshakeResponseReceived', e => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketClosed', e => this._page._frameManager.webSocketClosed(e.requestId)), _eventsHelper.eventsHelper.addEventListener(this._session, 'Network.webSocketFrameError', e => this._page._frameManager.webSocketError(e.requestId, e.errorMessage))];
382
- }
383
- async _updateState(method, params) {
384
- await this._forAllSessions(session => session.send(method, params).then());
385
- }
386
- async _forAllSessions(callback) {
387
- const sessions = [this._session];
388
- // If the state changes during provisional load, push it to the provisional page
389
- // as well to always be in sync with the backend.
390
- if (this._provisionalPage) sessions.push(this._provisionalPage._session);
391
- await Promise.all(sessions.map(session => callback(session).catch(e => {})));
392
- }
393
- _onWillCheckNavigationPolicy(frameId) {
394
- // It may happen that new policy check occurs while there is an ongoing
395
- // provisional load, in this case it should be safe to ignore it as it will
396
- // either:
397
- // - end up canceled, e.g. ctrl+click opening link in new tab, having no effect
398
- // on this page
399
- // - start new provisional load which we will miss in our signal trackers but
400
- // we certainly won't hang waiting for it to finish and there is high chance
401
- // that the current provisional page will commit navigation canceling the new
402
- // one.
403
- if (this._provisionalPage) return;
404
- this._page._frameManager.frameRequestedNavigation(frameId);
405
- }
406
- _onDidCheckNavigationPolicy(frameId, cancel) {
407
- if (!cancel) return;
408
- // This is a cross-process navigation that is canceled in the original page and continues in
409
- // the provisional page. Bail out as we are tracking it.
410
- if (this._provisionalPage) return;
411
- this._page._frameManager.frameAbortedNavigation(frameId, 'Navigation canceled by policy check');
412
- }
413
- _onFrameScheduledNavigation(frameId, delay, targetIsCurrentFrame) {
414
- if (targetIsCurrentFrame) this._page._frameManager.frameRequestedNavigation(frameId);
415
- }
416
- _handleFrameTree(frameTree) {
417
- this._onFrameAttached(frameTree.frame.id, frameTree.frame.parentId || null);
418
- this._onFrameNavigated(frameTree.frame, true);
419
- this._page._frameManager.frameLifecycleEvent(frameTree.frame.id, 'domcontentloaded');
420
- this._page._frameManager.frameLifecycleEvent(frameTree.frame.id, 'load');
421
- if (!frameTree.childFrames) return;
422
- for (const child of frameTree.childFrames) this._handleFrameTree(child);
423
- }
424
- _onFrameAttached(frameId, parentFrameId) {
425
- return this._page._frameManager.frameAttached(frameId, parentFrameId);
426
- }
427
- _onFrameNavigated(framePayload, initial) {
428
- const frame = this._page._frameManager.frame(framePayload.id);
429
- (0, _utils.assert)(frame);
430
- this._removeContextsForFrame(frame, true);
431
- if (!framePayload.parentId) this._workers.clear();
432
- this._page._frameManager.frameCommittedNewDocumentNavigation(framePayload.id, framePayload.url, framePayload.name || '', framePayload.loaderId, initial);
433
- if (!initial) this._firstNonInitialNavigationCommittedFulfill();
434
- }
435
- _onFrameNavigatedWithinDocument(frameId, url) {
436
- this._page._frameManager.frameCommittedSameDocumentNavigation(frameId, url);
437
- }
438
- _onFrameDetached(frameId) {
439
- this._page._frameManager.frameDetached(frameId);
440
- }
441
- _removeContextsForFrame(frame, notifyFrame) {
442
- for (const [contextId, context] of this._contextIdToContext) {
443
- if (context.frame === frame) {
444
- this._contextIdToContext.delete(contextId);
445
- if (notifyFrame) frame._contextDestroyed(context);
446
- }
447
- }
448
- }
449
- _onExecutionContextCreated(contextPayload) {
450
- if (this._contextIdToContext.has(contextPayload.id)) return;
451
- const frame = this._page._frameManager.frame(contextPayload.frameId);
452
- if (!frame) return;
453
- const delegate = new _wkExecutionContext.WKExecutionContext(this._session, contextPayload.id);
454
- let worldName = null;
455
- if (contextPayload.type === 'normal') worldName = 'main';else if (contextPayload.type === 'user' && contextPayload.name === UTILITY_WORLD_NAME) worldName = 'utility';
456
- const context = new dom.FrameExecutionContext(delegate, frame, worldName);
457
- context[contextDelegateSymbol] = delegate;
458
- if (worldName) frame._contextCreated(worldName, context);
459
- this._contextIdToContext.set(contextPayload.id, context);
460
- }
461
- async _onBindingCalled(contextId, argument) {
462
- const pageOrError = await this._page.waitForInitializedOrError();
463
- if (!(pageOrError instanceof Error)) {
464
- const context = this._contextIdToContext.get(contextId);
465
- if (context) await this._page._onBindingCalled(argument, context);
466
- }
467
- }
468
- async navigateFrame(frame, url, referrer) {
469
- if (this._pageProxySession.isDisposed()) throw new _errors.TargetClosedError();
470
- const pageProxyId = this._pageProxySession.sessionId;
471
- const result = await this._pageProxySession.connection.browserSession.send('Playwright.navigate', {
472
- url,
473
- pageProxyId,
474
- frameId: frame._id,
475
- referrer
476
- });
477
- return {
478
- newDocumentId: result.loaderId
479
- };
480
- }
481
- _onConsoleMessage(event) {
482
- // Note: do no introduce await in this function, otherwise we lose the ordering.
483
- // For example, frame.setContent relies on this.
484
- const {
485
- type,
486
- level,
487
- text,
488
- parameters,
489
- url,
490
- line: lineNumber,
491
- column: columnNumber,
492
- source
493
- } = event.message;
494
- if (level === 'error' && source === 'javascript') {
495
- const {
496
- name,
497
- message
498
- } = (0, _stackTrace.splitErrorMessage)(text);
499
- let stack;
500
- if (event.message.stackTrace) {
501
- stack = text + '\n' + event.message.stackTrace.callFrames.map(callFrame => {
502
- return ` at ${callFrame.functionName || 'unknown'} (${callFrame.url}:${callFrame.lineNumber}:${callFrame.columnNumber})`;
503
- }).join('\n');
504
- } else {
505
- stack = '';
506
- }
507
- this._lastConsoleMessage = null;
508
- const error = new Error(message);
509
- error.stack = stack;
510
- error.name = name;
511
- this._page.emitOnContextOnceInitialized(_browserContext.BrowserContext.Events.PageError, error, this._page);
512
- return;
513
- }
514
- let derivedType = type || '';
515
- if (type === 'log') derivedType = level;else if (type === 'timing') derivedType = 'timeEnd';
516
- const handles = [];
517
- for (const p of parameters || []) {
518
- let context;
519
- if (p.objectId) {
520
- const objectId = JSON.parse(p.objectId);
521
- context = this._contextIdToContext.get(objectId.injectedScriptId);
522
- } else {
523
- // Pick any context if the parameter is a value.
524
- context = [...this._contextIdToContext.values()].find(c => c.frame === this._page.mainFrame());
525
- }
526
- if (!context) return;
527
- handles.push(context.createHandle(p));
528
- }
529
- this._lastConsoleMessage = {
530
- derivedType,
531
- text,
532
- handles,
533
- count: 0,
534
- location: {
535
- url: url || '',
536
- lineNumber: (lineNumber || 1) - 1,
537
- columnNumber: (columnNumber || 1) - 1
538
- }
539
- };
540
- this._onConsoleRepeatCountUpdated({
541
- count: 1
542
- });
543
- }
544
- _onConsoleRepeatCountUpdated(event) {
545
- if (this._lastConsoleMessage) {
546
- const {
547
- derivedType,
548
- text,
549
- handles,
550
- count,
551
- location
552
- } = this._lastConsoleMessage;
553
- for (let i = count; i < event.count; ++i) this._page._addConsoleMessage(derivedType, handles, location, handles.length ? undefined : text);
554
- this._lastConsoleMessage.count = event.count;
555
- }
556
- }
557
- _onDialog(event) {
558
- this._page.emitOnContext(_browserContext.BrowserContext.Events.Dialog, new dialog.Dialog(this._page, event.type, event.message, async (accept, promptText) => {
559
- // TODO: this should actually be a RDP event that notifies about a cancelled navigation attempt.
560
- if (event.type === 'beforeunload' && !accept) this._page._frameManager.frameAbortedNavigation(this._page.mainFrame()._id, 'navigation cancelled by beforeunload dialog');
561
- await this._pageProxySession.send('Dialog.handleJavaScriptDialog', {
562
- accept,
563
- promptText
564
- });
565
- }, event.defaultPrompt));
566
- }
567
- async _onFileChooserOpened(event) {
568
- let handle;
569
- try {
570
- const context = await this._page._frameManager.frame(event.frameId)._mainContext();
571
- handle = context.createHandle(event.element).asElement();
572
- } catch (e) {
573
- // During async processing, frame/context may go away. We should not throw.
574
- return;
575
- }
576
- await this._page._onFileChooserOpened(handle);
577
- }
578
- static async _setEmulateMedia(session, mediaType, colorScheme, reducedMotion, forcedColors) {
579
- const promises = [];
580
- promises.push(session.send('Page.setEmulatedMedia', {
581
- media: mediaType === 'no-override' ? '' : mediaType
582
- }));
583
- let appearance = undefined;
584
- switch (colorScheme) {
585
- case 'light':
586
- appearance = 'Light';
587
- break;
588
- case 'dark':
589
- appearance = 'Dark';
590
- break;
591
- case 'no-override':
592
- appearance = undefined;
593
- break;
594
- }
595
- promises.push(session.send('Page.overrideUserPreference', {
596
- name: 'PrefersColorScheme',
597
- value: appearance
598
- }));
599
- let reducedMotionWk = undefined;
600
- switch (reducedMotion) {
601
- case 'reduce':
602
- reducedMotionWk = 'Reduce';
603
- break;
604
- case 'no-preference':
605
- reducedMotionWk = 'NoPreference';
606
- break;
607
- case 'no-override':
608
- reducedMotionWk = undefined;
609
- break;
610
- }
611
- promises.push(session.send('Page.overrideUserPreference', {
612
- name: 'PrefersReducedMotion',
613
- value: reducedMotionWk
614
- }));
615
- let forcedColorsWk = undefined;
616
- switch (forcedColors) {
617
- case 'active':
618
- forcedColorsWk = 'Active';
619
- break;
620
- case 'none':
621
- forcedColorsWk = 'None';
622
- break;
623
- case 'no-override':
624
- forcedColorsWk = undefined;
625
- break;
626
- }
627
- promises.push(session.send('Page.setForcedColors', {
628
- forcedColors: forcedColorsWk
629
- }));
630
- await Promise.all(promises);
631
- }
632
- async updateExtraHTTPHeaders() {
633
- await this._updateState('Network.setExtraHTTPHeaders', {
634
- headers: (0, _utils.headersArrayToObject)(this._calculateExtraHTTPHeaders(), false /* lowerCase */)
635
- });
636
- }
637
- _calculateExtraHTTPHeaders() {
638
- const locale = this._browserContext._options.locale;
639
- const headers = network.mergeHeaders([this._browserContext._options.extraHTTPHeaders, this._page.extraHTTPHeaders(), locale ? network.singleHeader('Accept-Language', locale) : undefined]);
640
- return headers;
641
- }
642
- async updateEmulateMedia() {
643
- const emulatedMedia = this._page.emulatedMedia();
644
- const colorScheme = emulatedMedia.colorScheme;
645
- const reducedMotion = emulatedMedia.reducedMotion;
646
- const forcedColors = emulatedMedia.forcedColors;
647
- await this._forAllSessions(session => WKPage._setEmulateMedia(session, emulatedMedia.media, colorScheme, reducedMotion, forcedColors));
648
- }
649
- async updateEmulatedViewportSize() {
650
- this._browserContext._validateEmulatedViewport(this._page.viewportSize());
651
- await this._updateViewport();
652
- }
653
- async updateUserAgent() {
654
- const contextOptions = this._browserContext._options;
655
- this._updateState('Page.overrideUserAgent', {
656
- value: contextOptions.userAgent
657
- });
658
- }
659
- async bringToFront() {
660
- this._pageProxySession.send('Target.activate', {
661
- targetId: this._session.sessionId
662
- });
663
- }
664
- async _updateViewport() {
665
- const options = this._browserContext._options;
666
- const deviceSize = this._page.emulatedSize();
667
- if (deviceSize === null) return;
668
- const viewportSize = deviceSize.viewport;
669
- const screenSize = deviceSize.screen;
670
- const promises = [this._pageProxySession.send('Emulation.setDeviceMetricsOverride', {
671
- width: viewportSize.width,
672
- height: viewportSize.height,
673
- fixedLayout: !!options.isMobile,
674
- deviceScaleFactor: options.deviceScaleFactor || 1
675
- }), this._session.send('Page.setScreenSizeOverride', {
676
- width: screenSize.width,
677
- height: screenSize.height
678
- })];
679
- if (options.isMobile) {
680
- const angle = viewportSize.width > viewportSize.height ? 90 : 0;
681
- promises.push(this._pageProxySession.send('Emulation.setOrientationOverride', {
682
- angle
683
- }));
684
- }
685
- await Promise.all(promises);
686
- }
687
- async updateRequestInterception() {
688
- const enabled = this._page.needsRequestInterception();
689
- await Promise.all([this._updateState('Network.setInterceptionEnabled', {
690
- enabled
691
- }), this._updateState('Network.setResourceCachingDisabled', {
692
- disabled: enabled
693
- }), this._updateState('Network.addInterception', {
694
- url: '.*',
695
- stage: 'request',
696
- isRegex: true
697
- })]);
698
- }
699
- async updateOffline() {
700
- await this._updateState('Network.setEmulateOfflineState', {
701
- offline: !!this._browserContext._options.offline
702
- });
703
- }
704
- async updateHttpCredentials() {
705
- const credentials = this._browserContext._options.httpCredentials || {
706
- username: '',
707
- password: '',
708
- origin: ''
709
- };
710
- await this._pageProxySession.send('Emulation.setAuthCredentials', {
711
- username: credentials.username,
712
- password: credentials.password,
713
- origin: credentials.origin
714
- });
715
- }
716
- async updateFileChooserInterception() {
717
- const enabled = this._page.fileChooserIntercepted();
718
- await this._session.send('Page.setInterceptFileChooserDialog', {
719
- enabled
720
- }).catch(() => {}); // target can be closed.
721
- }
722
- async reload() {
723
- await this._session.send('Page.reload');
724
- }
725
- goBack() {
726
- return this._session.send('Page.goBack').then(() => true).catch(error => {
727
- if (error instanceof Error && error.message.includes(`Protocol error (Page.goBack): Failed to go`)) return false;
728
- throw error;
729
- });
730
- }
731
- goForward() {
732
- return this._session.send('Page.goForward').then(() => true).catch(error => {
733
- if (error instanceof Error && error.message.includes(`Protocol error (Page.goForward): Failed to go`)) return false;
734
- throw error;
735
- });
736
- }
737
- async requestGC() {
738
- await this._session.send('Heap.gc');
739
- }
740
- async addInitScript(initScript) {
741
- await this._updateBootstrapScript();
742
- }
743
- async removeNonInternalInitScripts() {
744
- await this._updateBootstrapScript();
745
- }
746
- _calculateBootstrapScript() {
747
- const scripts = [];
748
- if (!this._page.context()._options.isMobile) {
749
- scripts.push('delete window.orientation');
750
- scripts.push('delete window.ondevicemotion');
751
- scripts.push('delete window.ondeviceorientation');
752
- }
753
- scripts.push('if (!window.safari) window.safari = { pushNotification: { toString() { return "[object SafariRemoteNotification]"; } } };');
754
- scripts.push('if (!window.GestureEvent) window.GestureEvent = function GestureEvent() {};');
755
- scripts.push(...this._page.allInitScripts().map(script => script.source));
756
- return scripts.join(';\n');
757
- }
758
- async _updateBootstrapScript() {
759
- await this._updateState('Page.setBootstrapScript', {
760
- source: this._calculateBootstrapScript()
761
- });
762
- }
763
- async closePage(runBeforeUnload) {
764
- await this._stopVideo();
765
- await this._pageProxySession.sendMayFail('Target.close', {
766
- targetId: this._session.sessionId,
767
- runBeforeUnload
768
- });
769
- }
770
- async setBackgroundColor(color) {
771
- await this._session.send('Page.setDefaultBackgroundColorOverride', {
772
- color
773
- });
774
- }
775
- _toolbarHeight() {
776
- var _this$_page$_browserC;
777
- if ((_this$_page$_browserC = this._page._browserContext._browser) !== null && _this$_page$_browserC !== void 0 && _this$_page$_browserC.options.headful) return _hostPlatform.hostPlatform === 'mac10.15' ? 55 : 59;
778
- return 0;
779
- }
780
- async _startVideo(options) {
781
- (0, _utils.assert)(!this._recordingVideoFile);
782
- const {
783
- screencastId
784
- } = await this._pageProxySession.send('Screencast.startVideo', {
785
- file: options.outputFile,
786
- width: options.width,
787
- height: options.height,
788
- toolbarHeight: this._toolbarHeight()
789
- });
790
- this._recordingVideoFile = options.outputFile;
791
- this._browserContext._browser._videoStarted(this._browserContext, screencastId, options.outputFile, this._page.waitForInitializedOrError());
792
- }
793
- async _stopVideo() {
794
- if (!this._recordingVideoFile) return;
795
- await this._pageProxySession.sendMayFail('Screencast.stopVideo');
796
- this._recordingVideoFile = null;
797
- }
798
- validateScreenshotDimension(side, omitDeviceScaleFactor) {
799
- // Cairo based implementations (Linux and Windows) have hard limit of 32767
800
- // (see https://github.com/microsoft/playwright/issues/16727).
801
- if (process.platform === 'darwin') return;
802
- if (!omitDeviceScaleFactor && this._page._browserContext._options.deviceScaleFactor) side = Math.ceil(side * this._page._browserContext._options.deviceScaleFactor);
803
- if (side > 32767) throw new Error('Cannot take screenshot larger than 32767 pixels on any dimension');
804
- }
805
- async takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, scale) {
806
- const rect = documentRect || viewportRect;
807
- const omitDeviceScaleFactor = scale === 'css';
808
- this.validateScreenshotDimension(rect.width, omitDeviceScaleFactor);
809
- this.validateScreenshotDimension(rect.height, omitDeviceScaleFactor);
810
- const result = await this._session.send('Page.snapshotRect', {
811
- ...rect,
812
- coordinateSystem: documentRect ? 'Page' : 'Viewport',
813
- omitDeviceScaleFactor
814
- });
815
- const prefix = 'data:image/png;base64,';
816
- let buffer = Buffer.from(result.dataURL.substr(prefix.length), 'base64');
817
- if (format === 'jpeg') buffer = _utilsBundle.jpegjs.encode(_utilsBundle.PNG.sync.read(buffer), quality).data;
818
- return buffer;
819
- }
820
- async getContentFrame(handle) {
821
- const nodeInfo = await this._session.send('DOM.describeNode', {
822
- objectId: handle._objectId
823
- });
824
- if (!nodeInfo.contentFrameId) return null;
825
- return this._page._frameManager.frame(nodeInfo.contentFrameId);
826
- }
827
- async getOwnerFrame(handle) {
828
- if (!handle._objectId) return null;
829
- const nodeInfo = await this._session.send('DOM.describeNode', {
830
- objectId: handle._objectId
831
- });
832
- return nodeInfo.ownerFrameId || null;
833
- }
834
- isElementHandle(remoteObject) {
835
- return remoteObject.subtype === 'node';
836
- }
837
- async getBoundingBox(handle) {
838
- const quads = await this.getContentQuads(handle);
839
- if (!quads || !quads.length) return null;
840
- let minX = Infinity;
841
- let maxX = -Infinity;
842
- let minY = Infinity;
843
- let maxY = -Infinity;
844
- for (const quad of quads) {
845
- for (const point of quad) {
846
- minX = Math.min(minX, point.x);
847
- maxX = Math.max(maxX, point.x);
848
- minY = Math.min(minY, point.y);
849
- maxY = Math.max(maxY, point.y);
850
- }
851
- }
852
- return {
853
- x: minX,
854
- y: minY,
855
- width: maxX - minX,
856
- height: maxY - minY
857
- };
858
- }
859
- async scrollRectIntoViewIfNeeded(handle, rect) {
860
- return await this._session.send('DOM.scrollIntoViewIfNeeded', {
861
- objectId: handle._objectId,
862
- rect
863
- }).then(() => 'done').catch(e => {
864
- if (e instanceof Error && e.message.includes('Node does not have a layout object')) return 'error:notvisible';
865
- if (e instanceof Error && e.message.includes('Node is detached from document')) return 'error:notconnected';
866
- throw e;
867
- });
868
- }
869
- async setScreencastOptions(options) {
870
- if (options) {
871
- const so = {
872
- ...options,
873
- toolbarHeight: this._toolbarHeight()
874
- };
875
- const {
876
- generation
877
- } = await this._pageProxySession.send('Screencast.startScreencast', so);
878
- this._screencastGeneration = generation;
879
- } else {
880
- await this._pageProxySession.send('Screencast.stopScreencast');
881
- }
882
- }
883
- _onScreencastFrame(event) {
884
- const generation = this._screencastGeneration;
885
- this._page.throttleScreencastFrameAck(() => {
886
- this._pageProxySession.send('Screencast.screencastFrameAck', {
887
- generation
888
- }).catch(e => _debugLogger.debugLogger.log('error', e));
889
- });
890
- const buffer = Buffer.from(event.data, 'base64');
891
- this._page.emit(_page.Page.Events.ScreencastFrame, {
892
- buffer,
893
- width: event.deviceWidth,
894
- height: event.deviceHeight
895
- });
896
- }
897
- rafCountForStablePosition() {
898
- return process.platform === 'win32' ? 5 : 1;
899
- }
900
- async getContentQuads(handle) {
901
- const result = await this._session.sendMayFail('DOM.getContentQuads', {
902
- objectId: handle._objectId
903
- });
904
- if (!result) return null;
905
- return result.quads.map(quad => [{
906
- x: quad[0],
907
- y: quad[1]
908
- }, {
909
- x: quad[2],
910
- y: quad[3]
911
- }, {
912
- x: quad[4],
913
- y: quad[5]
914
- }, {
915
- x: quad[6],
916
- y: quad[7]
917
- }]);
918
- }
919
- async setInputFiles(handle, files) {
920
- const objectId = handle._objectId;
921
- const protocolFiles = files.map(file => ({
922
- name: file.name,
923
- type: file.mimeType,
924
- data: file.buffer
925
- }));
926
- await this._session.send('DOM.setInputFiles', {
927
- objectId,
928
- files: protocolFiles
929
- });
930
- }
931
- async setInputFilePaths(handle, paths) {
932
- const pageProxyId = this._pageProxySession.sessionId;
933
- const objectId = handle._objectId;
934
- await Promise.all([this._pageProxySession.connection.browserSession.send('Playwright.grantFileReadAccess', {
935
- pageProxyId,
936
- paths
937
- }), this._session.send('DOM.setInputFiles', {
938
- objectId,
939
- paths
940
- })]);
941
- }
942
- async adoptElementHandle(handle, to) {
943
- const result = await this._session.sendMayFail('DOM.resolveNode', {
944
- objectId: handle._objectId,
945
- executionContextId: to[contextDelegateSymbol]._contextId
946
- });
947
- if (!result || result.object.subtype === 'null') throw new Error(dom.kUnableToAdoptErrorMessage);
948
- return to.createHandle(result.object);
949
- }
950
- async getAccessibilityTree(needle) {
951
- return (0, _wkAccessibility.getAccessibilityTree)(this._session, needle);
952
- }
953
- async inputActionEpilogue() {}
954
- async resetForReuse() {}
955
- async getFrameElement(frame) {
956
- const parent = frame.parentFrame();
957
- if (!parent) throw new Error('Frame has been detached.');
958
- const context = await parent._mainContext();
959
- const result = await this._session.send('DOM.resolveNode', {
960
- frameId: frame._id,
961
- executionContextId: context[contextDelegateSymbol]._contextId
962
- });
963
- if (!result || result.object.subtype === 'null') throw new Error('Frame has been detached.');
964
- return context.createHandle(result.object);
965
- }
966
- _maybeCancelCoopNavigationRequest(provisionalPage) {
967
- const navigationRequest = provisionalPage.coopNavigationRequest();
968
- for (const [requestId, request] of this._requestIdToRequest) {
969
- if (request.request === navigationRequest) {
970
- // Make sure the request completes if the provisional navigation is canceled.
971
- this._onLoadingFailed(provisionalPage._session, {
972
- requestId: requestId,
973
- errorText: 'Provisiolal navigation canceled.',
974
- timestamp: request._timestamp,
975
- canceled: true
976
- });
977
- return;
978
- }
979
- }
980
- }
981
- _adoptRequestFromNewProcess(navigationRequest, newSession, newRequestId) {
982
- for (const [requestId, request] of this._requestIdToRequest) {
983
- if (request.request === navigationRequest) {
984
- this._requestIdToRequest.delete(requestId);
985
- request.adoptRequestFromNewProcess(newSession, newRequestId);
986
- this._requestIdToRequest.set(newRequestId, request);
987
- return;
988
- }
989
- }
990
- }
991
- _onRequestWillBeSent(session, event) {
992
- if (event.request.url.startsWith('data:')) return;
993
-
994
- // We do not support intercepting redirects.
995
- if (this._page.needsRequestInterception() && !event.redirectResponse) this._requestIdToRequestWillBeSentEvent.set(event.requestId, event);else this._onRequest(session, event, false);
996
- }
997
- _onRequest(session, event, intercepted) {
998
- let redirectedFrom = null;
999
- if (event.redirectResponse) {
1000
- const request = this._requestIdToRequest.get(event.requestId);
1001
- // If we connect late to the target, we could have missed the requestWillBeSent event.
1002
- if (request) {
1003
- this._handleRequestRedirect(request, event.requestId, event.redirectResponse, event.timestamp);
1004
- redirectedFrom = request;
1005
- }
1006
- }
1007
- const frame = redirectedFrom ? redirectedFrom.request.frame() : this._page._frameManager.frame(event.frameId);
1008
- // sometimes we get stray network events for detached frames
1009
- // TODO(einbinder) why?
1010
- if (!frame) return;
1011
-
1012
- // TODO(einbinder) this will fail if we are an XHR document request
1013
- const isNavigationRequest = event.type === 'Document';
1014
- const documentId = isNavigationRequest ? event.loaderId : undefined;
1015
- const request = new _wkInterceptableRequest.WKInterceptableRequest(session, frame, event, redirectedFrom, documentId);
1016
- let route;
1017
- if (intercepted) {
1018
- route = new _wkInterceptableRequest.WKRouteImpl(session, event.requestId);
1019
- // There is no point in waiting for the raw headers in Network.responseReceived when intercepting.
1020
- // Use provisional headers as raw headers, so that client can call allHeaders() from the route handler.
1021
- request.request.setRawRequestHeaders(null);
1022
- }
1023
- this._requestIdToRequest.set(event.requestId, request);
1024
- this._page._frameManager.requestStarted(request.request, route);
1025
- }
1026
- _handleRequestRedirect(request, requestId, responsePayload, timestamp) {
1027
- const response = request.createResponse(responsePayload);
1028
- response._securityDetailsFinished();
1029
- response._serverAddrFinished();
1030
- response.setResponseHeadersSize(null);
1031
- response.setEncodedBodySize(null);
1032
- response._requestFinished(responsePayload.timing ? _helper.helper.secondsToRoundishMillis(timestamp - request._timestamp) : -1);
1033
- this._requestIdToRequest.delete(requestId);
1034
- this._page._frameManager.requestReceivedResponse(response);
1035
- this._page._frameManager.reportRequestFinished(request.request, response);
1036
- }
1037
- _onRequestIntercepted(session, event) {
1038
- const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
1039
- if (!requestWillBeSentEvent) {
1040
- // Intercepted, although we do not intend to allow interception.
1041
- // Just continue.
1042
- session.sendMayFail('Network.interceptWithRequest', {
1043
- requestId: event.requestId
1044
- });
1045
- return;
1046
- }
1047
- this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
1048
- this._onRequest(session, requestWillBeSentEvent, true);
1049
- }
1050
- _onResponseReceived(session, event) {
1051
- const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
1052
- if (requestWillBeSentEvent) {
1053
- this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
1054
- // We received a response, so the request won't be intercepted (e.g. it was handled by a
1055
- // service worker and we don't intercept service workers).
1056
- this._onRequest(session, requestWillBeSentEvent, false);
1057
- }
1058
- const request = this._requestIdToRequest.get(event.requestId);
1059
- // FileUpload sends a response without a matching request.
1060
- if (!request) return;
1061
- this._requestIdToResponseReceivedPayloadEvent.set(event.requestId, event);
1062
- const response = request.createResponse(event.response);
1063
- this._page._frameManager.requestReceivedResponse(response);
1064
- if (response.status() === 204 && request.request.isNavigationRequest()) {
1065
- this._onLoadingFailed(session, {
1066
- requestId: event.requestId,
1067
- errorText: 'Aborted: 204 No Content',
1068
- timestamp: event.timestamp
1069
- });
1070
- }
1071
- }
1072
- _onLoadingFinished(event) {
1073
- const request = this._requestIdToRequest.get(event.requestId);
1074
- // For certain requestIds we never receive requestWillBeSent event.
1075
- // @see https://crbug.com/750469
1076
- if (!request) return;
1077
-
1078
- // Under certain conditions we never get the Network.responseReceived
1079
- // event from protocol. @see https://crbug.com/883475
1080
- const response = request.request._existingResponse();
1081
- if (response) {
1082
- var _event$metrics, _event$metrics2, _responseReceivedPayl, _responseReceivedPayl2, _responseReceivedPayl3, _event$metrics3, _event$metrics$respon, _event$metrics4, _event$metrics$respon2, _event$metrics5;
1083
- const responseReceivedPayload = this._requestIdToResponseReceivedPayloadEvent.get(event.requestId);
1084
- response._serverAddrFinished(parseRemoteAddress(event === null || event === void 0 || (_event$metrics = event.metrics) === null || _event$metrics === void 0 ? void 0 : _event$metrics.remoteAddress));
1085
- response._securityDetailsFinished({
1086
- protocol: isLoadedSecurely(response.url(), response.timing()) ? (_event$metrics2 = event.metrics) === null || _event$metrics2 === void 0 || (_event$metrics2 = _event$metrics2.securityConnection) === null || _event$metrics2 === void 0 ? void 0 : _event$metrics2.protocol : undefined,
1087
- subjectName: responseReceivedPayload === null || responseReceivedPayload === void 0 || (_responseReceivedPayl = responseReceivedPayload.response.security) === null || _responseReceivedPayl === void 0 || (_responseReceivedPayl = _responseReceivedPayl.certificate) === null || _responseReceivedPayl === void 0 ? void 0 : _responseReceivedPayl.subject,
1088
- validFrom: responseReceivedPayload === null || responseReceivedPayload === void 0 || (_responseReceivedPayl2 = responseReceivedPayload.response.security) === null || _responseReceivedPayl2 === void 0 || (_responseReceivedPayl2 = _responseReceivedPayl2.certificate) === null || _responseReceivedPayl2 === void 0 ? void 0 : _responseReceivedPayl2.validFrom,
1089
- validTo: responseReceivedPayload === null || responseReceivedPayload === void 0 || (_responseReceivedPayl3 = responseReceivedPayload.response.security) === null || _responseReceivedPayl3 === void 0 || (_responseReceivedPayl3 = _responseReceivedPayl3.certificate) === null || _responseReceivedPayl3 === void 0 ? void 0 : _responseReceivedPayl3.validUntil
1090
- });
1091
- if ((_event$metrics3 = event.metrics) !== null && _event$metrics3 !== void 0 && _event$metrics3.protocol) response._setHttpVersion(event.metrics.protocol);
1092
- response.setEncodedBodySize((_event$metrics$respon = (_event$metrics4 = event.metrics) === null || _event$metrics4 === void 0 ? void 0 : _event$metrics4.responseBodyBytesReceived) !== null && _event$metrics$respon !== void 0 ? _event$metrics$respon : null);
1093
- response.setResponseHeadersSize((_event$metrics$respon2 = (_event$metrics5 = event.metrics) === null || _event$metrics5 === void 0 ? void 0 : _event$metrics5.responseHeaderBytesReceived) !== null && _event$metrics$respon2 !== void 0 ? _event$metrics$respon2 : null);
1094
- response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
1095
- } else {
1096
- // Use provisional headers if we didn't have the response with raw headers.
1097
- request.request.setRawRequestHeaders(null);
1098
- }
1099
- this._requestIdToResponseReceivedPayloadEvent.delete(event.requestId);
1100
- this._requestIdToRequest.delete(event.requestId);
1101
- this._page._frameManager.reportRequestFinished(request.request, response);
1102
- }
1103
- _onLoadingFailed(session, event) {
1104
- const requestWillBeSentEvent = this._requestIdToRequestWillBeSentEvent.get(event.requestId);
1105
- if (requestWillBeSentEvent) {
1106
- this._requestIdToRequestWillBeSentEvent.delete(event.requestId);
1107
- // If loading failed, the request won't be intercepted (e.g. it was handled by a
1108
- // service worker and we don't intercept service workers).
1109
- this._onRequest(session, requestWillBeSentEvent, false);
1110
- }
1111
- const request = this._requestIdToRequest.get(event.requestId);
1112
- // For certain requestIds we never receive requestWillBeSent event.
1113
- // @see https://crbug.com/750469
1114
- if (!request) return;
1115
- const response = request.request._existingResponse();
1116
- if (response) {
1117
- response._serverAddrFinished();
1118
- response._securityDetailsFinished();
1119
- response.setResponseHeadersSize(null);
1120
- response.setEncodedBodySize(null);
1121
- response._requestFinished(_helper.helper.secondsToRoundishMillis(event.timestamp - request._timestamp));
1122
- } else {
1123
- // Use provisional headers if we didn't have the response with raw headers.
1124
- request.request.setRawRequestHeaders(null);
1125
- }
1126
- this._requestIdToRequest.delete(event.requestId);
1127
- request.request._setFailureText(event.errorText);
1128
- this._page._frameManager.requestFailed(request.request, event.errorText.includes('cancelled'));
1129
- }
1130
- async _grantPermissions(origin, permissions) {
1131
- const webPermissionToProtocol = new Map([['geolocation', 'geolocation'], ['notifications', 'notifications'], ['clipboard-read', 'clipboard-read']]);
1132
- const filtered = permissions.map(permission => {
1133
- const protocolPermission = webPermissionToProtocol.get(permission);
1134
- if (!protocolPermission) throw new Error('Unknown permission: ' + permission);
1135
- return protocolPermission;
1136
- });
1137
- await this._pageProxySession.send('Emulation.grantPermissions', {
1138
- origin,
1139
- permissions: filtered
1140
- });
1141
- }
1142
- async _clearPermissions() {
1143
- await this._pageProxySession.send('Emulation.resetPermissions', {});
1144
- }
1145
- shouldToggleStyleSheetToSyncAnimations() {
1146
- return true;
1147
- }
1148
- }
1149
-
1150
- /**
1151
- * WebKit Remote Addresses look like:
1152
- *
1153
- * macOS:
1154
- * ::1.8911
1155
- * 2606:2800:220:1:248:1893:25c8:1946.443
1156
- * 127.0.0.1:8000
1157
- *
1158
- * ubuntu:
1159
- * ::1:8907
1160
- * 127.0.0.1:8000
1161
- *
1162
- * NB: They look IPv4 and IPv6's with ports but use an alternative notation.
1163
- */
1164
- exports.WKPage = WKPage;
1165
- function parseRemoteAddress(value) {
1166
- if (!value) return;
1167
- try {
1168
- const colon = value.lastIndexOf(':');
1169
- const dot = value.lastIndexOf('.');
1170
- if (dot < 0) {
1171
- // IPv6ish:port
1172
- return {
1173
- ipAddress: `[${value.slice(0, colon)}]`,
1174
- port: +value.slice(colon + 1)
1175
- };
1176
- }
1177
- if (colon > dot) {
1178
- // IPv4:port
1179
- const [address, port] = value.split(':');
1180
- return {
1181
- ipAddress: address,
1182
- port: +port
1183
- };
1184
- } else {
1185
- // IPv6ish.port
1186
- const [address, port] = value.split('.');
1187
- return {
1188
- ipAddress: `[${address}]`,
1189
- port: +port
1190
- };
1191
- }
1192
- } catch (_) {}
1193
- }
1194
-
1195
- /**
1196
- * Adapted from Source/WebInspectorUI/UserInterface/Models/Resource.js in
1197
- * WebKit codebase.
1198
- */
1199
- function isLoadedSecurely(url, timing) {
1200
- try {
1201
- const u = new URL(url);
1202
- if (u.protocol !== 'https:' && u.protocol !== 'wss:' && u.protocol !== 'sftp:') return false;
1203
- if (timing.secureConnectionStart === -1 && timing.connectStart !== -1) return false;
1204
- return true;
1205
- } catch (_) {}
1206
- }
1207
- const contextDelegateSymbol = Symbol('delegate');