@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.0
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.
- package/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -35
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +90 -113
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
|
@@ -1,268 +1,274 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty
|
|
4
|
-
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var ffPage_exports = {};
|
|
30
|
+
__export(ffPage_exports, {
|
|
31
|
+
FFPage: () => FFPage,
|
|
32
|
+
UTILITY_WORLD_NAME: () => UTILITY_WORLD_NAME
|
|
5
33
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var dialog =
|
|
9
|
-
var dom =
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Copyright 2019 Google Inc. All rights reserved.
|
|
24
|
-
* Modifications copyright (c) Microsoft Corporation.
|
|
25
|
-
*
|
|
26
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
27
|
-
* you may not use this file except in compliance with the License.
|
|
28
|
-
* You may obtain a copy of the License at
|
|
29
|
-
*
|
|
30
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
31
|
-
*
|
|
32
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
33
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
34
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
35
|
-
* See the License for the specific language governing permissions and
|
|
36
|
-
* limitations under the License.
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
|
-
const UTILITY_WORLD_NAME = exports.UTILITY_WORLD_NAME = '__playwright_utility_world__';
|
|
34
|
+
module.exports = __toCommonJS(ffPage_exports);
|
|
35
|
+
var import_eventsHelper = require("../utils/eventsHelper");
|
|
36
|
+
var dialog = __toESM(require("../dialog"));
|
|
37
|
+
var dom = __toESM(require("../dom"));
|
|
38
|
+
var import_page = require("../page");
|
|
39
|
+
var import_page2 = require("../page");
|
|
40
|
+
var import_ffAccessibility = require("./ffAccessibility");
|
|
41
|
+
var import_ffConnection = require("./ffConnection");
|
|
42
|
+
var import_ffExecutionContext = require("./ffExecutionContext");
|
|
43
|
+
var import_ffInput = require("./ffInput");
|
|
44
|
+
var import_ffNetworkManager = require("./ffNetworkManager");
|
|
45
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
46
|
+
var import_stackTrace = require("../../utils/isomorphic/stackTrace");
|
|
47
|
+
var import_browserContext = require("../browserContext");
|
|
48
|
+
var import_errors = require("../errors");
|
|
49
|
+
const UTILITY_WORLD_NAME = "__playwright_utility_world__";
|
|
40
50
|
class FFPage {
|
|
41
51
|
constructor(session, browserContext, opener) {
|
|
42
52
|
this.cspErrorsAsynchronousForInlineScripts = true;
|
|
43
|
-
this.rawMouse = void 0;
|
|
44
|
-
this.rawKeyboard = void 0;
|
|
45
|
-
this.rawTouchscreen = void 0;
|
|
46
|
-
this._session = void 0;
|
|
47
|
-
this._page = void 0;
|
|
48
|
-
this._networkManager = void 0;
|
|
49
|
-
this._browserContext = void 0;
|
|
50
53
|
this._reportedAsNew = false;
|
|
51
|
-
this.
|
|
52
|
-
this._contextIdToContext = void 0;
|
|
53
|
-
this._eventListeners = void 0;
|
|
54
|
-
this._workers = new Map();
|
|
55
|
-
this._screencastId = void 0;
|
|
54
|
+
this._workers = /* @__PURE__ */ new Map();
|
|
56
55
|
this._initScripts = [];
|
|
57
56
|
this._session = session;
|
|
58
57
|
this._opener = opener;
|
|
59
|
-
this.rawKeyboard = new
|
|
60
|
-
this.rawMouse = new
|
|
61
|
-
this.rawTouchscreen = new
|
|
62
|
-
this._contextIdToContext = new Map();
|
|
58
|
+
this.rawKeyboard = new import_ffInput.RawKeyboardImpl(session);
|
|
59
|
+
this.rawMouse = new import_ffInput.RawMouseImpl(session);
|
|
60
|
+
this.rawTouchscreen = new import_ffInput.RawTouchscreenImpl(session);
|
|
61
|
+
this._contextIdToContext = /* @__PURE__ */ new Map();
|
|
63
62
|
this._browserContext = browserContext;
|
|
64
|
-
this._page = new
|
|
63
|
+
this._page = new import_page2.Page(this, browserContext);
|
|
65
64
|
this.rawMouse.setPage(this._page);
|
|
66
|
-
this._networkManager = new
|
|
67
|
-
this._page.on(
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
this._networkManager = new import_ffNetworkManager.FFNetworkManager(session, this._page);
|
|
66
|
+
this._page.on(import_page2.Page.Events.FrameDetached, (frame) => this._removeContextsForFrame(frame));
|
|
67
|
+
this._eventListeners = [
|
|
68
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.eventFired", this._onEventFired.bind(this)),
|
|
69
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.frameAttached", this._onFrameAttached.bind(this)),
|
|
70
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.frameDetached", this._onFrameDetached.bind(this)),
|
|
71
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.navigationAborted", this._onNavigationAborted.bind(this)),
|
|
72
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.navigationCommitted", this._onNavigationCommitted.bind(this)),
|
|
73
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.navigationStarted", this._onNavigationStarted.bind(this)),
|
|
74
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.sameDocumentNavigation", this._onSameDocumentNavigation.bind(this)),
|
|
75
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Runtime.executionContextCreated", this._onExecutionContextCreated.bind(this)),
|
|
76
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Runtime.executionContextDestroyed", this._onExecutionContextDestroyed.bind(this)),
|
|
77
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Runtime.executionContextsCleared", this._onExecutionContextsCleared.bind(this)),
|
|
78
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.linkClicked", (event) => this._onLinkClicked(event.phase)),
|
|
79
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.uncaughtError", this._onUncaughtError.bind(this)),
|
|
80
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Runtime.console", this._onConsole.bind(this)),
|
|
81
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.dialogOpened", this._onDialogOpened.bind(this)),
|
|
82
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.bindingCalled", this._onBindingCalled.bind(this)),
|
|
83
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.fileChooserOpened", this._onFileChooserOpened.bind(this)),
|
|
84
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.workerCreated", this._onWorkerCreated.bind(this)),
|
|
85
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.workerDestroyed", this._onWorkerDestroyed.bind(this)),
|
|
86
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.dispatchMessageFromWorker", this._onDispatchMessageFromWorker.bind(this)),
|
|
87
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.crashed", this._onCrashed.bind(this)),
|
|
88
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.videoRecordingStarted", this._onVideoRecordingStarted.bind(this)),
|
|
89
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.webSocketCreated", this._onWebSocketCreated.bind(this)),
|
|
90
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.webSocketClosed", this._onWebSocketClosed.bind(this)),
|
|
91
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.webSocketFrameReceived", this._onWebSocketFrameReceived.bind(this)),
|
|
92
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.webSocketFrameSent", this._onWebSocketFrameSent.bind(this)),
|
|
93
|
+
import_eventsHelper.eventsHelper.addEventListener(this._session, "Page.screencastFrame", this._onScreencastFrame.bind(this))
|
|
94
|
+
];
|
|
95
|
+
this._session.once("Page.ready", () => {
|
|
96
|
+
if (this._reportedAsNew)
|
|
97
|
+
return;
|
|
73
98
|
this._reportedAsNew = true;
|
|
74
|
-
this._page.reportAsNew(
|
|
99
|
+
this._page.reportAsNew(this._opener?._page);
|
|
75
100
|
});
|
|
76
|
-
|
|
77
|
-
// Therefore, we can end up with an initialized page without utility world, although very unlikely.
|
|
78
|
-
this.addInitScript(new _page.InitScript('', true), UTILITY_WORLD_NAME).catch(e => this._markAsError(e));
|
|
101
|
+
this.addInitScript(new import_page.InitScript(""), UTILITY_WORLD_NAME).catch((e) => this._markAsError(e));
|
|
79
102
|
}
|
|
80
103
|
async _markAsError(error) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (this._reportedAsNew) return;
|
|
104
|
+
if (this._reportedAsNew)
|
|
105
|
+
return;
|
|
84
106
|
this._reportedAsNew = true;
|
|
85
|
-
this._page.reportAsNew(
|
|
107
|
+
this._page.reportAsNew(this._opener?._page, error);
|
|
86
108
|
}
|
|
87
109
|
_onWebSocketCreated(event) {
|
|
88
|
-
this._page.
|
|
89
|
-
this._page.
|
|
110
|
+
this._page.frameManager.onWebSocketCreated(webSocketId(event.frameId, event.wsid), event.requestURL);
|
|
111
|
+
this._page.frameManager.onWebSocketRequest(webSocketId(event.frameId, event.wsid));
|
|
90
112
|
}
|
|
91
113
|
_onWebSocketClosed(event) {
|
|
92
|
-
if (event.error)
|
|
93
|
-
|
|
114
|
+
if (event.error)
|
|
115
|
+
this._page.frameManager.webSocketError(webSocketId(event.frameId, event.wsid), event.error);
|
|
116
|
+
this._page.frameManager.webSocketClosed(webSocketId(event.frameId, event.wsid));
|
|
94
117
|
}
|
|
95
118
|
_onWebSocketFrameReceived(event) {
|
|
96
|
-
this._page.
|
|
119
|
+
this._page.frameManager.webSocketFrameReceived(webSocketId(event.frameId, event.wsid), event.opcode, event.data);
|
|
97
120
|
}
|
|
98
121
|
_onWebSocketFrameSent(event) {
|
|
99
|
-
this._page.
|
|
122
|
+
this._page.frameManager.onWebSocketFrameSent(webSocketId(event.frameId, event.wsid), event.opcode, event.data);
|
|
100
123
|
}
|
|
101
124
|
_onExecutionContextCreated(payload) {
|
|
102
|
-
const {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
if (!frame) return;
|
|
108
|
-
const delegate = new _ffExecutionContext.FFExecutionContext(this._session, executionContextId);
|
|
125
|
+
const { executionContextId, auxData } = payload;
|
|
126
|
+
const frame = this._page.frameManager.frame(auxData.frameId);
|
|
127
|
+
if (!frame)
|
|
128
|
+
return;
|
|
129
|
+
const delegate = new import_ffExecutionContext.FFExecutionContext(this._session, executionContextId);
|
|
109
130
|
let worldName;
|
|
110
|
-
if (auxData.name === UTILITY_WORLD_NAME)
|
|
131
|
+
if (auxData.name === UTILITY_WORLD_NAME)
|
|
132
|
+
worldName = "utility";
|
|
133
|
+
else if (!auxData.name)
|
|
134
|
+
worldName = "main";
|
|
135
|
+
else
|
|
136
|
+
return;
|
|
111
137
|
const context = new dom.FrameExecutionContext(delegate, frame, worldName);
|
|
112
|
-
if (worldName)
|
|
138
|
+
if (worldName)
|
|
139
|
+
frame._contextCreated(worldName, context);
|
|
113
140
|
this._contextIdToContext.set(executionContextId, context);
|
|
114
141
|
}
|
|
115
142
|
_onExecutionContextDestroyed(payload) {
|
|
116
|
-
const {
|
|
117
|
-
executionContextId
|
|
118
|
-
} = payload;
|
|
143
|
+
const { executionContextId } = payload;
|
|
119
144
|
const context = this._contextIdToContext.get(executionContextId);
|
|
120
|
-
if (!context)
|
|
145
|
+
if (!context)
|
|
146
|
+
return;
|
|
121
147
|
this._contextIdToContext.delete(executionContextId);
|
|
122
148
|
context.frame._contextDestroyed(context);
|
|
123
149
|
}
|
|
124
150
|
_onExecutionContextsCleared() {
|
|
125
|
-
for (const executionContextId of Array.from(this._contextIdToContext.keys()))
|
|
126
|
-
executionContextId
|
|
127
|
-
});
|
|
151
|
+
for (const executionContextId of Array.from(this._contextIdToContext.keys()))
|
|
152
|
+
this._onExecutionContextDestroyed({ executionContextId });
|
|
128
153
|
}
|
|
129
154
|
_removeContextsForFrame(frame) {
|
|
130
155
|
for (const [contextId, context] of this._contextIdToContext) {
|
|
131
|
-
if (context.frame === frame)
|
|
156
|
+
if (context.frame === frame)
|
|
157
|
+
this._contextIdToContext.delete(contextId);
|
|
132
158
|
}
|
|
133
159
|
}
|
|
134
160
|
_onLinkClicked(phase) {
|
|
135
|
-
if (phase ===
|
|
161
|
+
if (phase === "before")
|
|
162
|
+
this._page.frameManager.frameWillPotentiallyRequestNavigation();
|
|
163
|
+
else
|
|
164
|
+
this._page.frameManager.frameDidPotentiallyRequestNavigation();
|
|
136
165
|
}
|
|
137
166
|
_onNavigationStarted(params) {
|
|
138
|
-
this._page.
|
|
167
|
+
this._page.frameManager.frameRequestedNavigation(params.frameId, params.navigationId);
|
|
139
168
|
}
|
|
140
169
|
_onNavigationAborted(params) {
|
|
141
|
-
this._page.
|
|
170
|
+
this._page.frameManager.frameAbortedNavigation(params.frameId, params.errorText, params.navigationId);
|
|
142
171
|
}
|
|
143
172
|
_onNavigationCommitted(params) {
|
|
144
173
|
for (const [workerId, worker] of this._workers) {
|
|
145
|
-
if (worker.frameId === params.frameId)
|
|
146
|
-
workerId
|
|
147
|
-
});
|
|
174
|
+
if (worker.frameId === params.frameId)
|
|
175
|
+
this._onWorkerDestroyed({ workerId });
|
|
148
176
|
}
|
|
149
|
-
this._page.
|
|
177
|
+
this._page.frameManager.frameCommittedNewDocumentNavigation(params.frameId, params.url, params.name || "", params.navigationId || "", false);
|
|
150
178
|
}
|
|
151
179
|
_onSameDocumentNavigation(params) {
|
|
152
|
-
this._page.
|
|
180
|
+
this._page.frameManager.frameCommittedSameDocumentNavigation(params.frameId, params.url);
|
|
153
181
|
}
|
|
154
182
|
_onFrameAttached(params) {
|
|
155
|
-
this._page.
|
|
183
|
+
this._page.frameManager.frameAttached(params.frameId, params.parentFrameId);
|
|
156
184
|
}
|
|
157
185
|
_onFrameDetached(params) {
|
|
158
|
-
this._page.
|
|
186
|
+
this._page.frameManager.frameDetached(params.frameId);
|
|
159
187
|
}
|
|
160
188
|
_onEventFired(payload) {
|
|
161
|
-
const {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (name === 'DOMContentLoaded') this._page._frameManager.frameLifecycleEvent(frameId, 'domcontentloaded');
|
|
189
|
+
const { frameId, name } = payload;
|
|
190
|
+
if (name === "load")
|
|
191
|
+
this._page.frameManager.frameLifecycleEvent(frameId, "load");
|
|
192
|
+
if (name === "DOMContentLoaded")
|
|
193
|
+
this._page.frameManager.frameLifecycleEvent(frameId, "domcontentloaded");
|
|
167
194
|
}
|
|
168
195
|
_onUncaughtError(params) {
|
|
169
|
-
const {
|
|
170
|
-
name,
|
|
171
|
-
message
|
|
172
|
-
} = (0, _stackTrace.splitErrorMessage)(params.message);
|
|
196
|
+
const { name, message } = (0, import_stackTrace.splitErrorMessage)(params.message);
|
|
173
197
|
const error = new Error(message);
|
|
174
|
-
error.stack = params.message +
|
|
198
|
+
error.stack = params.message + "\n" + params.stack.split("\n").filter(Boolean).map((a) => a.replace(/([^@]*)@(.*)/, " at $1 ($2)")).join("\n");
|
|
175
199
|
error.name = name;
|
|
176
|
-
this._page.emitOnContextOnceInitialized(
|
|
200
|
+
this._page.emitOnContextOnceInitialized(import_browserContext.BrowserContext.Events.PageError, error, this._page);
|
|
177
201
|
}
|
|
178
202
|
_onConsole(payload) {
|
|
179
|
-
const {
|
|
180
|
-
type,
|
|
181
|
-
args,
|
|
182
|
-
executionContextId,
|
|
183
|
-
location
|
|
184
|
-
} = payload;
|
|
203
|
+
const { type, args, executionContextId, location } = payload;
|
|
185
204
|
const context = this._contextIdToContext.get(executionContextId);
|
|
186
|
-
if (!context)
|
|
187
|
-
|
|
188
|
-
this._page.
|
|
205
|
+
if (!context)
|
|
206
|
+
return;
|
|
207
|
+
this._page.addConsoleMessage(type === "warn" ? "warning" : type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
|
|
189
208
|
}
|
|
190
209
|
_onDialogOpened(params) {
|
|
191
|
-
this._page.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
210
|
+
this._page.browserContext.dialogManager.dialogDidOpen(new dialog.Dialog(
|
|
211
|
+
this._page,
|
|
212
|
+
params.type,
|
|
213
|
+
params.message,
|
|
214
|
+
async (accept, promptText) => {
|
|
215
|
+
await this._session.sendMayFail("Page.handleDialog", { dialogId: params.dialogId, accept, promptText });
|
|
216
|
+
},
|
|
217
|
+
params.defaultValue
|
|
218
|
+
));
|
|
198
219
|
}
|
|
199
220
|
async _onBindingCalled(event) {
|
|
200
221
|
const pageOrError = await this._page.waitForInitializedOrError();
|
|
201
222
|
if (!(pageOrError instanceof Error)) {
|
|
202
223
|
const context = this._contextIdToContext.get(event.executionContextId);
|
|
203
|
-
if (context)
|
|
224
|
+
if (context)
|
|
225
|
+
await this._page.onBindingCalled(event.payload, context);
|
|
204
226
|
}
|
|
205
227
|
}
|
|
206
228
|
async _onFileChooserOpened(payload) {
|
|
207
|
-
const {
|
|
208
|
-
executionContextId,
|
|
209
|
-
element
|
|
210
|
-
} = payload;
|
|
229
|
+
const { executionContextId, element } = payload;
|
|
211
230
|
const context = this._contextIdToContext.get(executionContextId);
|
|
212
|
-
if (!context)
|
|
213
|
-
|
|
231
|
+
if (!context)
|
|
232
|
+
return;
|
|
233
|
+
const handle = (0, import_ffExecutionContext.createHandle)(context, element).asElement();
|
|
214
234
|
await this._page._onFileChooserOpened(handle);
|
|
215
235
|
}
|
|
216
236
|
async _onWorkerCreated(event) {
|
|
217
237
|
const workerId = event.workerId;
|
|
218
|
-
const worker = new
|
|
219
|
-
const workerSession = new
|
|
220
|
-
this._session.send(
|
|
238
|
+
const worker = new import_page2.Worker(this._page, event.url);
|
|
239
|
+
const workerSession = new import_ffConnection.FFSession(this._session._connection, workerId, (message) => {
|
|
240
|
+
this._session.send("Page.sendMessageToWorker", {
|
|
221
241
|
frameId: event.frameId,
|
|
222
|
-
workerId
|
|
242
|
+
workerId,
|
|
223
243
|
message: JSON.stringify(message)
|
|
224
|
-
}).catch(e => {
|
|
225
|
-
workerSession.dispatchMessage({
|
|
226
|
-
id: message.id,
|
|
227
|
-
method: '',
|
|
228
|
-
params: {},
|
|
229
|
-
error: {
|
|
230
|
-
message: e.message,
|
|
231
|
-
data: undefined
|
|
232
|
-
}
|
|
233
|
-
});
|
|
244
|
+
}).catch((e) => {
|
|
245
|
+
workerSession.dispatchMessage({ id: message.id, method: "", params: {}, error: { message: e.message, data: void 0 } });
|
|
234
246
|
});
|
|
235
247
|
});
|
|
236
|
-
this._workers.set(workerId, {
|
|
237
|
-
|
|
238
|
-
|
|
248
|
+
this._workers.set(workerId, { session: workerSession, frameId: event.frameId });
|
|
249
|
+
this._page.addWorker(workerId, worker);
|
|
250
|
+
workerSession.once("Runtime.executionContextCreated", (event2) => {
|
|
251
|
+
worker.createExecutionContext(new import_ffExecutionContext.FFExecutionContext(workerSession, event2.executionContextId));
|
|
239
252
|
});
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
253
|
+
workerSession.on("Runtime.console", (event2) => {
|
|
254
|
+
const { type, args, location } = event2;
|
|
255
|
+
const context = worker.existingExecutionContext;
|
|
256
|
+
this._page.addConsoleMessage(type, args.map((arg) => (0, import_ffExecutionContext.createHandle)(context, arg)), location);
|
|
243
257
|
});
|
|
244
|
-
workerSession.on('Runtime.console', event => {
|
|
245
|
-
const {
|
|
246
|
-
type,
|
|
247
|
-
args,
|
|
248
|
-
location
|
|
249
|
-
} = event;
|
|
250
|
-
const context = worker._existingExecutionContext;
|
|
251
|
-
this._page._addConsoleMessage(type, args.map(arg => (0, _ffExecutionContext.createHandle)(context, arg)), location);
|
|
252
|
-
});
|
|
253
|
-
// Note: we receive worker exceptions directly from the page.
|
|
254
258
|
}
|
|
255
259
|
_onWorkerDestroyed(event) {
|
|
256
260
|
const workerId = event.workerId;
|
|
257
261
|
const worker = this._workers.get(workerId);
|
|
258
|
-
if (!worker)
|
|
262
|
+
if (!worker)
|
|
263
|
+
return;
|
|
259
264
|
worker.session.dispose();
|
|
260
265
|
this._workers.delete(workerId);
|
|
261
|
-
this._page.
|
|
266
|
+
this._page.removeWorker(workerId);
|
|
262
267
|
}
|
|
263
268
|
async _onDispatchMessageFromWorker(event) {
|
|
264
269
|
const worker = this._workers.get(event.workerId);
|
|
265
|
-
if (!worker)
|
|
270
|
+
if (!worker)
|
|
271
|
+
return;
|
|
266
272
|
worker.session.dispatchMessage(JSON.parse(event.message));
|
|
267
273
|
}
|
|
268
274
|
async _onCrashed(event) {
|
|
@@ -273,45 +279,35 @@ class FFPage {
|
|
|
273
279
|
this._browserContext._browser._videoStarted(this._browserContext, event.screencastId, event.file, this._page.waitForInitializedOrError());
|
|
274
280
|
}
|
|
275
281
|
didClose() {
|
|
276
|
-
this._markAsError(new
|
|
282
|
+
this._markAsError(new import_errors.TargetClosedError());
|
|
277
283
|
this._session.dispose();
|
|
278
|
-
|
|
284
|
+
import_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
279
285
|
this._networkManager.dispose();
|
|
280
286
|
this._page._didClose();
|
|
281
287
|
}
|
|
282
288
|
async navigateFrame(frame, url, referer) {
|
|
283
|
-
const response = await this._session.send(
|
|
284
|
-
|
|
285
|
-
referer,
|
|
286
|
-
frameId: frame._id
|
|
287
|
-
});
|
|
288
|
-
return {
|
|
289
|
-
newDocumentId: response.navigationId || undefined
|
|
290
|
-
};
|
|
289
|
+
const response = await this._session.send("Page.navigate", { url, referer, frameId: frame._id });
|
|
290
|
+
return { newDocumentId: response.navigationId || void 0 };
|
|
291
291
|
}
|
|
292
292
|
async updateExtraHTTPHeaders() {
|
|
293
|
-
await this._session.send(
|
|
294
|
-
headers: this._page.extraHTTPHeaders() || []
|
|
295
|
-
});
|
|
293
|
+
await this._session.send("Network.setExtraHTTPHeaders", { headers: this._page.extraHTTPHeaders() || [] });
|
|
296
294
|
}
|
|
297
295
|
async updateEmulatedViewportSize() {
|
|
298
|
-
const viewportSize = this._page.
|
|
299
|
-
await this._session.send(
|
|
300
|
-
viewportSize
|
|
301
|
-
});
|
|
296
|
+
const viewportSize = this._page.emulatedSize()?.viewport ?? null;
|
|
297
|
+
await this._session.send("Page.setViewportSize", { viewportSize });
|
|
302
298
|
}
|
|
303
299
|
async bringToFront() {
|
|
304
|
-
await this._session.send(
|
|
300
|
+
await this._session.send("Page.bringToFront", {});
|
|
305
301
|
}
|
|
306
302
|
async updateEmulateMedia() {
|
|
307
303
|
const emulatedMedia = this._page.emulatedMedia();
|
|
308
|
-
const colorScheme = emulatedMedia.colorScheme ===
|
|
309
|
-
const reducedMotion = emulatedMedia.reducedMotion ===
|
|
310
|
-
const forcedColors = emulatedMedia.forcedColors ===
|
|
311
|
-
const contrast = emulatedMedia.contrast ===
|
|
312
|
-
await this._session.send(
|
|
304
|
+
const colorScheme = emulatedMedia.colorScheme === "no-override" ? void 0 : emulatedMedia.colorScheme;
|
|
305
|
+
const reducedMotion = emulatedMedia.reducedMotion === "no-override" ? void 0 : emulatedMedia.reducedMotion;
|
|
306
|
+
const forcedColors = emulatedMedia.forcedColors === "no-override" ? void 0 : emulatedMedia.forcedColors;
|
|
307
|
+
const contrast = emulatedMedia.contrast === "no-override" ? void 0 : emulatedMedia.contrast;
|
|
308
|
+
await this._session.send("Page.setEmulatedMedia", {
|
|
313
309
|
// Empty string means reset.
|
|
314
|
-
type: emulatedMedia.media ===
|
|
310
|
+
type: emulatedMedia.media === "no-override" ? "" : emulatedMedia.media,
|
|
315
311
|
colorScheme,
|
|
316
312
|
reducedMotion,
|
|
317
313
|
forcedColors,
|
|
@@ -323,67 +319,45 @@ class FFPage {
|
|
|
323
319
|
}
|
|
324
320
|
async updateFileChooserInterception() {
|
|
325
321
|
const enabled = this._page.fileChooserIntercepted();
|
|
326
|
-
await this._session.send(
|
|
327
|
-
|
|
328
|
-
}).catch(() => {}); // target can be closed.
|
|
322
|
+
await this._session.send("Page.setInterceptFileChooserDialog", { enabled }).catch(() => {
|
|
323
|
+
});
|
|
329
324
|
}
|
|
330
325
|
async reload() {
|
|
331
|
-
await this._session.send(
|
|
326
|
+
await this._session.send("Page.reload");
|
|
332
327
|
}
|
|
333
328
|
async goBack() {
|
|
334
|
-
const {
|
|
335
|
-
success
|
|
336
|
-
} = await this._session.send('Page.goBack', {
|
|
337
|
-
frameId: this._page.mainFrame()._id
|
|
338
|
-
});
|
|
329
|
+
const { success } = await this._session.send("Page.goBack", { frameId: this._page.mainFrame()._id });
|
|
339
330
|
return success;
|
|
340
331
|
}
|
|
341
332
|
async goForward() {
|
|
342
|
-
const {
|
|
343
|
-
success
|
|
344
|
-
} = await this._session.send('Page.goForward', {
|
|
345
|
-
frameId: this._page.mainFrame()._id
|
|
346
|
-
});
|
|
333
|
+
const { success } = await this._session.send("Page.goForward", { frameId: this._page.mainFrame()._id });
|
|
347
334
|
return success;
|
|
348
335
|
}
|
|
349
336
|
async requestGC() {
|
|
350
|
-
await this._session.send(
|
|
337
|
+
await this._session.send("Heap.collectGarbage");
|
|
351
338
|
}
|
|
352
339
|
async addInitScript(initScript, worldName) {
|
|
353
|
-
this._initScripts.push({
|
|
354
|
-
|
|
355
|
-
worldName
|
|
356
|
-
});
|
|
357
|
-
await this._session.send('Page.setInitScripts', {
|
|
358
|
-
scripts: this._initScripts.map(s => ({
|
|
359
|
-
script: s.initScript.source,
|
|
360
|
-
worldName: s.worldName
|
|
361
|
-
}))
|
|
362
|
-
});
|
|
340
|
+
this._initScripts.push({ initScript, worldName });
|
|
341
|
+
await this._updateInitScripts();
|
|
363
342
|
}
|
|
364
|
-
async
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
});
|
|
343
|
+
async removeInitScripts(initScripts) {
|
|
344
|
+
const set = new Set(initScripts);
|
|
345
|
+
this._initScripts = this._initScripts.filter((s) => !set.has(s.initScript));
|
|
346
|
+
await this._updateInitScripts();
|
|
347
|
+
}
|
|
348
|
+
async _updateInitScripts() {
|
|
349
|
+
await this._session.send("Page.setInitScripts", { scripts: this._initScripts.map((s) => ({ script: s.initScript.source, worldName: s.worldName })) });
|
|
372
350
|
}
|
|
373
351
|
async closePage(runBeforeUnload) {
|
|
374
|
-
await this._session.send(
|
|
375
|
-
runBeforeUnload
|
|
376
|
-
});
|
|
352
|
+
await this._session.send("Page.close", { runBeforeUnload });
|
|
377
353
|
}
|
|
378
354
|
async setBackgroundColor(color) {
|
|
379
|
-
if (color)
|
|
355
|
+
if (color)
|
|
356
|
+
throw new Error("Not implemented");
|
|
380
357
|
}
|
|
381
358
|
async takeScreenshot(progress, format, documentRect, viewportRect, quality, fitsViewport, scale) {
|
|
382
359
|
if (!documentRect) {
|
|
383
|
-
const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({
|
|
384
|
-
x: window.scrollX,
|
|
385
|
-
y: window.scrollY
|
|
386
|
-
}));
|
|
360
|
+
const scrollOffset = await this._page.mainFrame().waitForFunctionValueInUtility(progress, () => ({ x: window.scrollX, y: window.scrollY }));
|
|
387
361
|
documentRect = {
|
|
388
362
|
x: viewportRect.x + scrollOffset.x,
|
|
389
363
|
y: viewportRect.y + scrollOffset.y,
|
|
@@ -391,31 +365,25 @@ class FFPage {
|
|
|
391
365
|
height: viewportRect.height
|
|
392
366
|
};
|
|
393
367
|
}
|
|
394
|
-
progress.
|
|
395
|
-
|
|
396
|
-
data
|
|
397
|
-
} = await this._session.send('Page.screenshot', {
|
|
398
|
-
mimeType: 'image/' + format,
|
|
368
|
+
const { data } = await progress.race(this._session.send("Page.screenshot", {
|
|
369
|
+
mimeType: "image/" + format,
|
|
399
370
|
clip: documentRect,
|
|
400
371
|
quality,
|
|
401
|
-
omitDeviceScaleFactor: scale ===
|
|
402
|
-
});
|
|
403
|
-
return Buffer.from(data,
|
|
372
|
+
omitDeviceScaleFactor: scale === "css"
|
|
373
|
+
}));
|
|
374
|
+
return Buffer.from(data, "base64");
|
|
404
375
|
}
|
|
405
376
|
async getContentFrame(handle) {
|
|
406
|
-
const {
|
|
407
|
-
contentFrameId
|
|
408
|
-
} = await this._session.send('Page.describeNode', {
|
|
377
|
+
const { contentFrameId } = await this._session.send("Page.describeNode", {
|
|
409
378
|
frameId: handle._context.frame._id,
|
|
410
379
|
objectId: handle._objectId
|
|
411
380
|
});
|
|
412
|
-
if (!contentFrameId)
|
|
413
|
-
|
|
381
|
+
if (!contentFrameId)
|
|
382
|
+
return null;
|
|
383
|
+
return this._page.frameManager.frame(contentFrameId);
|
|
414
384
|
}
|
|
415
385
|
async getOwnerFrame(handle) {
|
|
416
|
-
const {
|
|
417
|
-
ownerFrameId
|
|
418
|
-
} = await this._session.send('Page.describeNode', {
|
|
386
|
+
const { ownerFrameId } = await this._session.send("Page.describeNode", {
|
|
419
387
|
frameId: handle._context.frame._id,
|
|
420
388
|
objectId: handle._objectId
|
|
421
389
|
});
|
|
@@ -423,7 +391,8 @@ class FFPage {
|
|
|
423
391
|
}
|
|
424
392
|
async getBoundingBox(handle) {
|
|
425
393
|
const quads = await this.getContentQuads(handle);
|
|
426
|
-
if (!quads || !quads.length)
|
|
394
|
+
if (!quads || !quads.length)
|
|
395
|
+
return null;
|
|
427
396
|
let minX = Infinity;
|
|
428
397
|
let maxX = -Infinity;
|
|
429
398
|
let minY = Infinity;
|
|
@@ -436,44 +405,38 @@ class FFPage {
|
|
|
436
405
|
maxY = Math.max(maxY, point.y);
|
|
437
406
|
}
|
|
438
407
|
}
|
|
439
|
-
return {
|
|
440
|
-
x: minX,
|
|
441
|
-
y: minY,
|
|
442
|
-
width: maxX - minX,
|
|
443
|
-
height: maxY - minY
|
|
444
|
-
};
|
|
408
|
+
return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };
|
|
445
409
|
}
|
|
446
410
|
async scrollRectIntoViewIfNeeded(handle, rect) {
|
|
447
|
-
return await this._session.send(
|
|
411
|
+
return await this._session.send("Page.scrollIntoViewIfNeeded", {
|
|
448
412
|
frameId: handle._context.frame._id,
|
|
449
413
|
objectId: handle._objectId,
|
|
450
414
|
rect
|
|
451
|
-
}).then(() =>
|
|
452
|
-
if (e instanceof Error && e.message.includes(
|
|
453
|
-
|
|
415
|
+
}).then(() => "done").catch((e) => {
|
|
416
|
+
if (e instanceof Error && e.message.includes("Node is detached from document"))
|
|
417
|
+
return "error:notconnected";
|
|
418
|
+
if (e instanceof Error && e.message.includes("Node does not have a layout object"))
|
|
419
|
+
return "error:notvisible";
|
|
454
420
|
throw e;
|
|
455
421
|
});
|
|
456
422
|
}
|
|
457
423
|
async setScreencastOptions(options) {
|
|
458
424
|
if (options) {
|
|
459
|
-
const {
|
|
460
|
-
screencastId
|
|
461
|
-
} = await this._session.send('Page.startScreencast', options);
|
|
425
|
+
const { screencastId } = await this._session.send("Page.startScreencast", options);
|
|
462
426
|
this._screencastId = screencastId;
|
|
463
427
|
} else {
|
|
464
|
-
await this._session.send(
|
|
428
|
+
await this._session.send("Page.stopScreencast");
|
|
465
429
|
}
|
|
466
430
|
}
|
|
467
431
|
_onScreencastFrame(event) {
|
|
468
|
-
if (!this._screencastId)
|
|
432
|
+
if (!this._screencastId)
|
|
433
|
+
return;
|
|
469
434
|
const screencastId = this._screencastId;
|
|
470
435
|
this._page.throttleScreencastFrameAck(() => {
|
|
471
|
-
this._session.send(
|
|
472
|
-
screencastId
|
|
473
|
-
}).catch(e => _debugLogger.debugLogger.log('error', e));
|
|
436
|
+
this._session.send("Page.screencastFrameAck", { screencastId }).catch((e) => import_debugLogger.debugLogger.log("error", e));
|
|
474
437
|
});
|
|
475
|
-
const buffer = Buffer.from(event.data,
|
|
476
|
-
this._page.emit(
|
|
438
|
+
const buffer = Buffer.from(event.data, "base64");
|
|
439
|
+
this._page.emit(import_page2.Page.Events.ScreencastFrame, {
|
|
477
440
|
buffer,
|
|
478
441
|
width: event.deviceWidth,
|
|
479
442
|
height: event.deviceHeight
|
|
@@ -483,56 +446,61 @@ class FFPage {
|
|
|
483
446
|
return 1;
|
|
484
447
|
}
|
|
485
448
|
async getContentQuads(handle) {
|
|
486
|
-
const result = await this._session.sendMayFail(
|
|
449
|
+
const result = await this._session.sendMayFail("Page.getContentQuads", {
|
|
487
450
|
frameId: handle._context.frame._id,
|
|
488
451
|
objectId: handle._objectId
|
|
489
452
|
});
|
|
490
|
-
if (!result)
|
|
491
|
-
|
|
453
|
+
if (!result)
|
|
454
|
+
return null;
|
|
455
|
+
return result.quads.map((quad) => [quad.p1, quad.p2, quad.p3, quad.p4]);
|
|
492
456
|
}
|
|
493
457
|
async setInputFilePaths(handle, files) {
|
|
494
|
-
await this._session.send(
|
|
458
|
+
await this._session.send("Page.setFileInputFiles", {
|
|
495
459
|
frameId: handle._context.frame._id,
|
|
496
460
|
objectId: handle._objectId,
|
|
497
461
|
files
|
|
498
462
|
});
|
|
499
463
|
}
|
|
500
464
|
async adoptElementHandle(handle, to) {
|
|
501
|
-
const result = await this._session.send(
|
|
465
|
+
const result = await this._session.send("Page.adoptNode", {
|
|
502
466
|
frameId: handle._context.frame._id,
|
|
503
467
|
objectId: handle._objectId,
|
|
504
468
|
executionContextId: to.delegate._executionContextId
|
|
505
469
|
});
|
|
506
|
-
if (!result.remoteObject)
|
|
507
|
-
|
|
470
|
+
if (!result.remoteObject)
|
|
471
|
+
throw new Error(dom.kUnableToAdoptErrorMessage);
|
|
472
|
+
return (0, import_ffExecutionContext.createHandle)(to, result.remoteObject);
|
|
508
473
|
}
|
|
509
474
|
async getAccessibilityTree(needle) {
|
|
510
|
-
return (0,
|
|
475
|
+
return (0, import_ffAccessibility.getAccessibilityTree)(this._session, needle);
|
|
476
|
+
}
|
|
477
|
+
async inputActionEpilogue() {
|
|
511
478
|
}
|
|
512
|
-
async
|
|
513
|
-
|
|
514
|
-
// Firefox sometimes keeps the last mouse position in the page,
|
|
515
|
-
// which affects things like hovered state.
|
|
516
|
-
// See https://github.com/microsoft/playwright/issues/22432.
|
|
517
|
-
// Move mouse to (-1, -1) to avoid anything being hovered.
|
|
518
|
-
await this.rawMouse.move(-1, -1, 'none', new Set(), new Set(), false);
|
|
479
|
+
async resetForReuse(progress) {
|
|
480
|
+
await this.rawMouse.move(progress, -1, -1, "none", /* @__PURE__ */ new Set(), /* @__PURE__ */ new Set(), false);
|
|
519
481
|
}
|
|
520
482
|
async getFrameElement(frame) {
|
|
521
483
|
const parent = frame.parentFrame();
|
|
522
|
-
if (!parent)
|
|
484
|
+
if (!parent)
|
|
485
|
+
throw new Error("Frame has been detached.");
|
|
523
486
|
const context = await parent._mainContext();
|
|
524
|
-
const result = await this._session.send(
|
|
487
|
+
const result = await this._session.send("Page.adoptNode", {
|
|
525
488
|
frameId: frame._id,
|
|
526
489
|
executionContextId: context.delegate._executionContextId
|
|
527
490
|
});
|
|
528
|
-
if (!result.remoteObject)
|
|
529
|
-
|
|
491
|
+
if (!result.remoteObject)
|
|
492
|
+
throw new Error("Frame has been detached.");
|
|
493
|
+
return (0, import_ffExecutionContext.createHandle)(context, result.remoteObject);
|
|
530
494
|
}
|
|
531
495
|
shouldToggleStyleSheetToSyncAnimations() {
|
|
532
496
|
return false;
|
|
533
497
|
}
|
|
534
498
|
}
|
|
535
|
-
exports.FFPage = FFPage;
|
|
536
499
|
function webSocketId(frameId, wsid) {
|
|
537
500
|
return `${frameId}---${wsid}`;
|
|
538
|
-
}
|
|
501
|
+
}
|
|
502
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
503
|
+
0 && (module.exports = {
|
|
504
|
+
FFPage,
|
|
505
|
+
UTILITY_WORLD_NAME
|
|
506
|
+
});
|