@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +89 -112
- 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,233 +1,230 @@
|
|
|
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 chromium_exports = {};
|
|
30
|
+
__export(chromium_exports, {
|
|
31
|
+
Chromium: () => Chromium,
|
|
32
|
+
waitForReadyState: () => waitForReadyState
|
|
5
33
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
18
|
-
var
|
|
19
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
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 ARTIFACTS_FOLDER = _path.default.join(_os.default.tmpdir(), 'playwright-artifacts-');
|
|
49
|
-
class Chromium extends _browserType.BrowserType {
|
|
34
|
+
module.exports = __toCommonJS(chromium_exports);
|
|
35
|
+
var import_fs = __toESM(require("fs"));
|
|
36
|
+
var import_os = __toESM(require("os"));
|
|
37
|
+
var import_path = __toESM(require("path"));
|
|
38
|
+
var import_chromiumSwitches = require("./chromiumSwitches");
|
|
39
|
+
var import_crBrowser = require("./crBrowser");
|
|
40
|
+
var import_crConnection = require("./crConnection");
|
|
41
|
+
var import_utils = require("../../utils");
|
|
42
|
+
var import_ascii = require("../utils/ascii");
|
|
43
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
44
|
+
var import_manualPromise = require("../../utils/isomorphic/manualPromise");
|
|
45
|
+
var import_network = require("../utils/network");
|
|
46
|
+
var import_userAgent = require("../utils/userAgent");
|
|
47
|
+
var import_browserContext = require("../browserContext");
|
|
48
|
+
var import_browserType = require("../browserType");
|
|
49
|
+
var import_helper = require("../helper");
|
|
50
|
+
var import_registry = require("../registry");
|
|
51
|
+
var import_transport = require("../transport");
|
|
52
|
+
var import_crDevTools = require("./crDevTools");
|
|
53
|
+
var import_browser = require("../browser");
|
|
54
|
+
var import_fileUtils = require("../utils/fileUtils");
|
|
55
|
+
var import_processLauncher = require("../utils/processLauncher");
|
|
56
|
+
const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
|
|
57
|
+
class Chromium extends import_browserType.BrowserType {
|
|
50
58
|
constructor(parent) {
|
|
51
|
-
super(parent,
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
super(parent, "chromium");
|
|
60
|
+
if ((0, import_utils.debugMode)())
|
|
61
|
+
this._devtools = this._createDevTools();
|
|
54
62
|
}
|
|
55
|
-
async connectOverCDP(
|
|
56
|
-
|
|
57
|
-
controller.setLogName('browser');
|
|
58
|
-
return controller.run(async progress => {
|
|
59
|
-
return await this._connectOverCDPInternal(progress, endpointURL, options);
|
|
60
|
-
}, _timeoutSettings.TimeoutSettings.timeout({
|
|
61
|
-
timeout
|
|
62
|
-
}));
|
|
63
|
+
async connectOverCDP(progress, endpointURL, options) {
|
|
64
|
+
return await this._connectOverCDPInternal(progress, endpointURL, options);
|
|
63
65
|
}
|
|
64
66
|
async _connectOverCDPInternal(progress, endpointURL, options, onClose) {
|
|
65
67
|
let headersMap;
|
|
66
|
-
if (options.headers)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
if (options.headers)
|
|
69
|
+
headersMap = (0, import_utils.headersArrayToObject)(options.headers, false);
|
|
70
|
+
if (!headersMap)
|
|
71
|
+
headersMap = { "User-Agent": (0, import_userAgent.getUserAgent)() };
|
|
72
|
+
else if (headersMap && !Object.keys(headersMap).some((key) => key.toLowerCase() === "user-agent"))
|
|
73
|
+
headersMap["User-Agent"] = (0, import_userAgent.getUserAgent)();
|
|
74
|
+
const artifactsDir = await progress.race(import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER));
|
|
71
75
|
const wsEndpoint = await urlToWSEndpoint(progress, endpointURL, headersMap);
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const cleanedUp = new
|
|
76
|
+
const chromeTransport = await import_transport.WebSocketTransport.connect(progress, wsEndpoint, { headers: headersMap });
|
|
77
|
+
progress.cleanupWhenAborted(() => chromeTransport.close());
|
|
78
|
+
const cleanedUp = new import_manualPromise.ManualPromise();
|
|
75
79
|
const doCleanup = async () => {
|
|
76
|
-
await (0,
|
|
77
|
-
await
|
|
80
|
+
await (0, import_fileUtils.removeFolders)([artifactsDir]);
|
|
81
|
+
await onClose?.();
|
|
78
82
|
cleanedUp.resolve();
|
|
79
83
|
};
|
|
80
84
|
const doClose = async () => {
|
|
81
85
|
await chromeTransport.closeAndWait();
|
|
82
86
|
await cleanedUp;
|
|
83
87
|
};
|
|
84
|
-
const browserProcess = {
|
|
85
|
-
|
|
86
|
-
kill: doClose
|
|
87
|
-
};
|
|
88
|
-
const persistent = {
|
|
89
|
-
noDefaultViewport: true
|
|
90
|
-
};
|
|
88
|
+
const browserProcess = { close: doClose, kill: doClose };
|
|
89
|
+
const persistent = { noDefaultViewport: true };
|
|
91
90
|
const browserOptions = {
|
|
92
91
|
slowMo: options.slowMo,
|
|
93
|
-
name:
|
|
92
|
+
name: "chromium",
|
|
94
93
|
isChromium: true,
|
|
95
94
|
persistent,
|
|
96
95
|
browserProcess,
|
|
97
|
-
protocolLogger:
|
|
98
|
-
browserLogsCollector: new
|
|
96
|
+
protocolLogger: import_helper.helper.debugProtocolLogger(),
|
|
97
|
+
browserLogsCollector: new import_debugLogger.RecentLogsCollector(),
|
|
99
98
|
artifactsDir,
|
|
100
99
|
downloadsPath: options.downloadsPath || artifactsDir,
|
|
101
100
|
tracesDir: options.tracesDir || artifactsDir,
|
|
102
101
|
originalLaunchOptions: {}
|
|
103
102
|
};
|
|
104
|
-
(0,
|
|
105
|
-
progress.
|
|
106
|
-
const browser = await _crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions);
|
|
103
|
+
(0, import_browserContext.validateBrowserContextOptions)(persistent, browserOptions);
|
|
104
|
+
const browser = await progress.race(import_crBrowser.CRBrowser.connect(this.attribution.playwright, chromeTransport, browserOptions));
|
|
107
105
|
browser._isCollocatedWithServer = false;
|
|
108
|
-
browser.on(
|
|
106
|
+
browser.on(import_browser.Browser.Events.Disconnected, doCleanup);
|
|
109
107
|
return browser;
|
|
110
108
|
}
|
|
111
109
|
_createDevTools() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return directory ? new _crDevTools.CRDevTools(_path.default.join(directory, 'devtools-preferences.json')) : undefined;
|
|
110
|
+
const directory = import_registry.registry.findExecutable("chromium").directory;
|
|
111
|
+
return directory ? new import_crDevTools.CRDevTools(import_path.default.join(directory, "devtools-preferences.json")) : void 0;
|
|
115
112
|
}
|
|
116
|
-
async connectToTransport(transport, options) {
|
|
113
|
+
async connectToTransport(transport, options, browserLogsCollector) {
|
|
117
114
|
let devtools = this._devtools;
|
|
118
115
|
if (options.__testHookForDevTools) {
|
|
119
116
|
devtools = this._createDevTools();
|
|
120
117
|
await options.__testHookForDevTools(devtools);
|
|
121
118
|
}
|
|
122
|
-
|
|
119
|
+
try {
|
|
120
|
+
return await import_crBrowser.CRBrowser.connect(this.attribution.playwright, transport, options, devtools);
|
|
121
|
+
} catch (e) {
|
|
122
|
+
if (browserLogsCollector.recentLogs().some((log) => log.includes("Failed to create a ProcessSingleton for your profile directory."))) {
|
|
123
|
+
throw new Error(
|
|
124
|
+
"Failed to create a ProcessSingleton for your profile directory. This usually means that the profile is already in use by another instance of Chromium."
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
throw e;
|
|
128
|
+
}
|
|
123
129
|
}
|
|
124
130
|
doRewriteStartupLog(error) {
|
|
125
|
-
if (!error.logs)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (!error.logs.includes(
|
|
130
|
-
|
|
131
|
+
if (!error.logs)
|
|
132
|
+
return error;
|
|
133
|
+
if (error.logs.includes("Missing X server"))
|
|
134
|
+
error.logs = "\n" + (0, import_ascii.wrapInASCIIBox)(import_browserType.kNoXServerRunningError, 1);
|
|
135
|
+
if (!error.logs.includes("crbug.com/357670") && !error.logs.includes("No usable sandbox!") && !error.logs.includes("crbug.com/638180"))
|
|
136
|
+
return error;
|
|
137
|
+
error.logs = [
|
|
138
|
+
`Chromium sandboxing failed!`,
|
|
139
|
+
`================================`,
|
|
140
|
+
`To avoid the sandboxing issue, do either of the following:`,
|
|
141
|
+
` - (preferred): Configure your environment to support sandboxing`,
|
|
142
|
+
` - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option`,
|
|
143
|
+
`================================`,
|
|
144
|
+
``
|
|
145
|
+
].join("\n");
|
|
131
146
|
return error;
|
|
132
147
|
}
|
|
133
|
-
amendEnvironment(env
|
|
148
|
+
amendEnvironment(env) {
|
|
134
149
|
return env;
|
|
135
150
|
}
|
|
136
151
|
attemptToGracefullyCloseBrowser(transport) {
|
|
137
|
-
const message = {
|
|
138
|
-
method: 'Browser.close',
|
|
139
|
-
id: _crConnection.kBrowserCloseMessageId,
|
|
140
|
-
params: {}
|
|
141
|
-
};
|
|
152
|
+
const message = { method: "Browser.close", id: import_crConnection.kBrowserCloseMessageId, params: {} };
|
|
142
153
|
transport.send(message);
|
|
143
154
|
}
|
|
144
155
|
async _launchWithSeleniumHub(progress, hubUrl, options) {
|
|
145
|
-
await this._createArtifactDirs(options);
|
|
146
|
-
if (!hubUrl.endsWith(
|
|
156
|
+
await progress.race(this._createArtifactDirs(options));
|
|
157
|
+
if (!hubUrl.endsWith("/"))
|
|
158
|
+
hubUrl = hubUrl + "/";
|
|
147
159
|
const args = this._innerDefaultArgs(options);
|
|
148
|
-
args.push(
|
|
149
|
-
const isEdge = options.channel && options.channel.startsWith(
|
|
160
|
+
args.push("--remote-debugging-port=0");
|
|
161
|
+
const isEdge = options.channel && options.channel.startsWith("msedge");
|
|
150
162
|
let desiredCapabilities = {
|
|
151
|
-
|
|
152
|
-
[isEdge ?
|
|
153
|
-
args
|
|
154
|
-
}
|
|
163
|
+
"browserName": isEdge ? "MicrosoftEdge" : "chrome",
|
|
164
|
+
[isEdge ? "ms:edgeOptions" : "goog:chromeOptions"]: { args }
|
|
155
165
|
};
|
|
156
166
|
if (process.env.SELENIUM_REMOTE_CAPABILITIES) {
|
|
157
|
-
const remoteCapabilities = parseSeleniumRemoteParams({
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}, progress);
|
|
161
|
-
if (remoteCapabilities) desiredCapabilities = {
|
|
162
|
-
...desiredCapabilities,
|
|
163
|
-
...remoteCapabilities
|
|
164
|
-
};
|
|
167
|
+
const remoteCapabilities = parseSeleniumRemoteParams({ name: "capabilities", value: process.env.SELENIUM_REMOTE_CAPABILITIES }, progress);
|
|
168
|
+
if (remoteCapabilities)
|
|
169
|
+
desiredCapabilities = { ...desiredCapabilities, ...remoteCapabilities };
|
|
165
170
|
}
|
|
166
171
|
let headers = {};
|
|
167
172
|
if (process.env.SELENIUM_REMOTE_HEADERS) {
|
|
168
|
-
const remoteHeaders = parseSeleniumRemoteParams({
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}, progress);
|
|
172
|
-
if (remoteHeaders) headers = remoteHeaders;
|
|
173
|
+
const remoteHeaders = parseSeleniumRemoteParams({ name: "headers", value: process.env.SELENIUM_REMOTE_HEADERS }, progress);
|
|
174
|
+
if (remoteHeaders)
|
|
175
|
+
headers = remoteHeaders;
|
|
173
176
|
}
|
|
174
177
|
progress.log(`<selenium> connecting to ${hubUrl}`);
|
|
175
|
-
const response = await (0,
|
|
176
|
-
url: hubUrl +
|
|
177
|
-
method:
|
|
178
|
+
const response = await (0, import_network.fetchData)(progress, {
|
|
179
|
+
url: hubUrl + "session",
|
|
180
|
+
method: "POST",
|
|
178
181
|
headers: {
|
|
179
|
-
|
|
182
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
180
183
|
...headers
|
|
181
184
|
},
|
|
182
185
|
data: JSON.stringify({
|
|
183
|
-
capabilities: {
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
}),
|
|
187
|
-
timeout: progress.timeUntilDeadline()
|
|
186
|
+
capabilities: { alwaysMatch: desiredCapabilities }
|
|
187
|
+
})
|
|
188
188
|
}, seleniumErrorHandler);
|
|
189
189
|
const value = JSON.parse(response).value;
|
|
190
190
|
const sessionId = value.sessionId;
|
|
191
191
|
progress.log(`<selenium> connected to sessionId=${sessionId}`);
|
|
192
192
|
const disconnectFromSelenium = async () => {
|
|
193
193
|
progress.log(`<selenium> disconnecting from sessionId=${sessionId}`);
|
|
194
|
-
await (0,
|
|
195
|
-
url: hubUrl +
|
|
196
|
-
method:
|
|
194
|
+
await (0, import_network.fetchData)(void 0, {
|
|
195
|
+
url: hubUrl + "session/" + sessionId,
|
|
196
|
+
method: "DELETE",
|
|
197
197
|
headers
|
|
198
|
-
}).catch(error => progress.log(`<error disconnecting from selenium>: ${error}`));
|
|
198
|
+
}).catch((error) => progress.log(`<error disconnecting from selenium>: ${error}`));
|
|
199
199
|
progress.log(`<selenium> disconnected from sessionId=${sessionId}`);
|
|
200
|
-
|
|
200
|
+
import_processLauncher.gracefullyCloseSet.delete(disconnectFromSelenium);
|
|
201
201
|
};
|
|
202
|
-
|
|
202
|
+
import_processLauncher.gracefullyCloseSet.add(disconnectFromSelenium);
|
|
203
203
|
try {
|
|
204
204
|
const capabilities = value.capabilities;
|
|
205
205
|
let endpointURL;
|
|
206
|
-
if (capabilities[
|
|
207
|
-
// Selenium 4 - use built-in CDP websocket proxy.
|
|
206
|
+
if (capabilities["se:cdp"]) {
|
|
208
207
|
progress.log(`<selenium> using selenium v4`);
|
|
209
|
-
const endpointURLString = addProtocol(capabilities[
|
|
208
|
+
const endpointURLString = addProtocol(capabilities["se:cdp"]);
|
|
210
209
|
endpointURL = new URL(endpointURLString);
|
|
211
|
-
if (endpointURL.hostname ===
|
|
210
|
+
if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1")
|
|
211
|
+
endpointURL.hostname = new URL(hubUrl).hostname;
|
|
212
212
|
progress.log(`<selenium> retrieved endpoint ${endpointURL.toString()} for sessionId=${sessionId}`);
|
|
213
213
|
} else {
|
|
214
|
-
// Selenium 3 - resolve target node IP to use instead of localhost ws url.
|
|
215
214
|
progress.log(`<selenium> using selenium v3`);
|
|
216
|
-
const maybeChromeOptions = capabilities[
|
|
217
|
-
const chromeOptions = maybeChromeOptions && typeof maybeChromeOptions ===
|
|
218
|
-
const debuggerAddress = chromeOptions && typeof chromeOptions.debuggerAddress ===
|
|
219
|
-
const chromeOptionsURL = typeof maybeChromeOptions ===
|
|
220
|
-
|
|
221
|
-
const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace('localhost', '127.0.0.1');
|
|
215
|
+
const maybeChromeOptions = capabilities["goog:chromeOptions"];
|
|
216
|
+
const chromeOptions = maybeChromeOptions && typeof maybeChromeOptions === "object" ? maybeChromeOptions : void 0;
|
|
217
|
+
const debuggerAddress = chromeOptions && typeof chromeOptions.debuggerAddress === "string" ? chromeOptions.debuggerAddress : void 0;
|
|
218
|
+
const chromeOptionsURL = typeof maybeChromeOptions === "string" ? maybeChromeOptions : void 0;
|
|
219
|
+
const endpointURLString = addProtocol(debuggerAddress || chromeOptionsURL).replace("localhost", "127.0.0.1");
|
|
222
220
|
progress.log(`<selenium> retrieved endpoint ${endpointURLString} for sessionId=${sessionId}`);
|
|
223
221
|
endpointURL = new URL(endpointURLString);
|
|
224
|
-
if (endpointURL.hostname ===
|
|
225
|
-
const sessionInfoUrl = new URL(hubUrl).origin +
|
|
222
|
+
if (endpointURL.hostname === "localhost" || endpointURL.hostname === "127.0.0.1") {
|
|
223
|
+
const sessionInfoUrl = new URL(hubUrl).origin + "/grid/api/testsession?session=" + sessionId;
|
|
226
224
|
try {
|
|
227
|
-
const sessionResponse = await (0,
|
|
225
|
+
const sessionResponse = await (0, import_network.fetchData)(progress, {
|
|
228
226
|
url: sessionInfoUrl,
|
|
229
|
-
method:
|
|
230
|
-
timeout: progress.timeUntilDeadline(),
|
|
227
|
+
method: "GET",
|
|
231
228
|
headers
|
|
232
229
|
}, seleniumErrorHandler);
|
|
233
230
|
const proxyId = JSON.parse(sessionResponse).proxyId;
|
|
@@ -240,7 +237,7 @@ class Chromium extends _browserType.BrowserType {
|
|
|
240
237
|
}
|
|
241
238
|
return await this._connectOverCDPInternal(progress, endpointURL.toString(), {
|
|
242
239
|
...options,
|
|
243
|
-
headers: (0,
|
|
240
|
+
headers: (0, import_utils.headersObjectToArray)(headers)
|
|
244
241
|
}, disconnectFromSelenium);
|
|
245
242
|
} catch (e) {
|
|
246
243
|
await disconnectFromSelenium();
|
|
@@ -250,76 +247,104 @@ class Chromium extends _browserType.BrowserType {
|
|
|
250
247
|
defaultArgs(options, isPersistent, userDataDir) {
|
|
251
248
|
const chromeArguments = this._innerDefaultArgs(options);
|
|
252
249
|
chromeArguments.push(`--user-data-dir=${userDataDir}`);
|
|
253
|
-
if (options.
|
|
254
|
-
|
|
250
|
+
if (options.cdpPort !== void 0)
|
|
251
|
+
chromeArguments.push(`--remote-debugging-port=${options.cdpPort}`);
|
|
252
|
+
else
|
|
253
|
+
chromeArguments.push("--remote-debugging-pipe");
|
|
254
|
+
if (isPersistent)
|
|
255
|
+
chromeArguments.push("about:blank");
|
|
256
|
+
else
|
|
257
|
+
chromeArguments.push("--no-startup-window");
|
|
255
258
|
return chromeArguments;
|
|
256
259
|
}
|
|
257
260
|
_innerDefaultArgs(options) {
|
|
258
|
-
const {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
if (args.find(arg => !arg.startsWith(
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
chromeArguments.push(
|
|
269
|
-
|
|
270
|
-
if (options.headless && (!options.channel || options.channel === 'chromium-headless-shell')) chromeArguments.push('--use-angle');
|
|
261
|
+
const { args = [] } = options;
|
|
262
|
+
const userDataDirArg = args.find((arg) => arg.startsWith("--user-data-dir"));
|
|
263
|
+
if (userDataDirArg)
|
|
264
|
+
throw this._createUserDataDirArgMisuseError("--user-data-dir");
|
|
265
|
+
if (args.find((arg) => arg.startsWith("--remote-debugging-pipe")))
|
|
266
|
+
throw new Error("Playwright manages remote debugging connection itself.");
|
|
267
|
+
if (args.find((arg) => !arg.startsWith("-")))
|
|
268
|
+
throw new Error("Arguments can not specify page to be opened");
|
|
269
|
+
const chromeArguments = [...(0, import_chromiumSwitches.chromiumSwitches)(options.assistantMode, options.channel)];
|
|
270
|
+
if (import_os.default.platform() === "darwin") {
|
|
271
|
+
chromeArguments.push("--enable-use-zoom-for-dsf=false");
|
|
272
|
+
chromeArguments.push("--enable-unsafe-swiftshader");
|
|
271
273
|
}
|
|
272
|
-
if (options.devtools)
|
|
274
|
+
if (options.devtools)
|
|
275
|
+
chromeArguments.push("--auto-open-devtools-for-tabs");
|
|
273
276
|
if (options.headless) {
|
|
274
|
-
chromeArguments.push(
|
|
275
|
-
chromeArguments.push(
|
|
277
|
+
chromeArguments.push("--headless");
|
|
278
|
+
chromeArguments.push(
|
|
279
|
+
"--hide-scrollbars",
|
|
280
|
+
"--mute-audio",
|
|
281
|
+
"--blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4"
|
|
282
|
+
);
|
|
276
283
|
}
|
|
277
|
-
if (options.chromiumSandbox !== true)
|
|
284
|
+
if (options.chromiumSandbox !== true)
|
|
285
|
+
chromeArguments.push("--no-sandbox");
|
|
278
286
|
const proxy = options.proxyOverride || options.proxy;
|
|
279
287
|
if (proxy) {
|
|
280
288
|
const proxyURL = new URL(proxy.server);
|
|
281
|
-
const isSocks = proxyURL.protocol ===
|
|
282
|
-
|
|
283
|
-
if (isSocks && !this.attribution.playwright.options.socksProxyPort) {
|
|
284
|
-
// https://www.chromium.org/developers/design-documents/network-stack/socks-proxy
|
|
289
|
+
const isSocks = proxyURL.protocol === "socks5:";
|
|
290
|
+
if (isSocks && !options.socksProxyPort) {
|
|
285
291
|
chromeArguments.push(`--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE ${proxyURL.hostname}"`);
|
|
286
292
|
}
|
|
287
293
|
chromeArguments.push(`--proxy-server=${proxy.server}`);
|
|
288
294
|
const proxyBypassRules = [];
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
if (proxy.bypass)
|
|
292
|
-
|
|
293
|
-
if (
|
|
295
|
+
if (options.socksProxyPort)
|
|
296
|
+
proxyBypassRules.push("<-loopback>");
|
|
297
|
+
if (proxy.bypass)
|
|
298
|
+
proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
|
|
299
|
+
if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes("<-loopback>"))
|
|
300
|
+
proxyBypassRules.push("<-loopback>");
|
|
301
|
+
if (proxyBypassRules.length > 0)
|
|
302
|
+
chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
|
|
294
303
|
}
|
|
295
304
|
chromeArguments.push(...args);
|
|
296
305
|
return chromeArguments;
|
|
297
306
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
if (options.useWebSocket || (_options$args = options.args) !== null && _options$args !== void 0 && _options$args.some(a => a.startsWith('--remote-debugging-port'))) return new ChromiumReadyState();
|
|
301
|
-
return undefined;
|
|
307
|
+
async waitForReadyState(options, browserLogsCollector) {
|
|
308
|
+
return waitForReadyState(options, browserLogsCollector);
|
|
302
309
|
}
|
|
303
310
|
getExecutableName(options) {
|
|
304
|
-
if (options.channel)
|
|
305
|
-
|
|
311
|
+
if (options.channel)
|
|
312
|
+
return options.channel;
|
|
313
|
+
return options.headless ? "chromium-headless-shell" : "chromium";
|
|
306
314
|
}
|
|
307
315
|
}
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
316
|
+
async function waitForReadyState(options, browserLogsCollector) {
|
|
317
|
+
if (options.cdpPort === void 0 && !options.args?.some((a) => a.startsWith("--remote-debugging-port")))
|
|
318
|
+
return {};
|
|
319
|
+
const result = new import_manualPromise.ManualPromise();
|
|
320
|
+
browserLogsCollector.onMessage((message) => {
|
|
321
|
+
if (message.includes("Failed to create a ProcessSingleton for your profile directory.")) {
|
|
322
|
+
result.reject(new Error("Failed to create a ProcessSingleton for your profile directory. This usually means that the profile is already in use by another instance of Chromium."));
|
|
323
|
+
}
|
|
311
324
|
const match = message.match(/DevTools listening on (.*)/);
|
|
312
|
-
if (match)
|
|
313
|
-
|
|
325
|
+
if (match)
|
|
326
|
+
result.resolve({ wsEndpoint: match[1] });
|
|
327
|
+
});
|
|
328
|
+
return result;
|
|
314
329
|
}
|
|
315
330
|
async function urlToWSEndpoint(progress, endpointURL, headers) {
|
|
316
|
-
if (endpointURL.startsWith(
|
|
331
|
+
if (endpointURL.startsWith("ws"))
|
|
332
|
+
return endpointURL;
|
|
317
333
|
progress.log(`<ws preparing> retrieving websocket url from ${endpointURL}`);
|
|
318
|
-
const
|
|
319
|
-
|
|
320
|
-
url
|
|
321
|
-
|
|
322
|
-
|
|
334
|
+
const url = new URL(endpointURL);
|
|
335
|
+
if (!url.pathname.endsWith("/"))
|
|
336
|
+
url.pathname += "/";
|
|
337
|
+
url.pathname += "json/version/";
|
|
338
|
+
const httpURL = url.toString();
|
|
339
|
+
const json = await (0, import_network.fetchData)(
|
|
340
|
+
progress,
|
|
341
|
+
{
|
|
342
|
+
url: httpURL,
|
|
343
|
+
headers
|
|
344
|
+
},
|
|
345
|
+
async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.
|
|
346
|
+
This does not look like a DevTools server, try connecting via ws://.`)
|
|
347
|
+
);
|
|
323
348
|
return JSON.parse(json).webSocketDebuggerUrl;
|
|
324
349
|
}
|
|
325
350
|
async function seleniumErrorHandler(params, response) {
|
|
@@ -328,19 +353,21 @@ async function seleniumErrorHandler(params, response) {
|
|
|
328
353
|
try {
|
|
329
354
|
const json = JSON.parse(body);
|
|
330
355
|
message = json.value.localizedMessage || json.value.message;
|
|
331
|
-
} catch (e) {
|
|
356
|
+
} catch (e) {
|
|
357
|
+
}
|
|
332
358
|
return new Error(`Error connecting to Selenium at ${params.url}: ${message}`);
|
|
333
359
|
}
|
|
334
360
|
function addProtocol(url) {
|
|
335
|
-
if (![
|
|
361
|
+
if (!["ws://", "wss://", "http://", "https://"].some((protocol) => url.startsWith(protocol)))
|
|
362
|
+
return "http://" + url;
|
|
336
363
|
return url;
|
|
337
364
|
}
|
|
338
365
|
function streamToString(stream) {
|
|
339
366
|
return new Promise((resolve, reject) => {
|
|
340
367
|
const chunks = [];
|
|
341
|
-
stream.on(
|
|
342
|
-
stream.on(
|
|
343
|
-
stream.on(
|
|
368
|
+
stream.on("data", (chunk) => chunks.push(Buffer.from(chunk)));
|
|
369
|
+
stream.on("error", reject);
|
|
370
|
+
stream.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
|
|
344
371
|
});
|
|
345
372
|
}
|
|
346
373
|
function parseSeleniumRemoteParams(env, progress) {
|
|
@@ -351,4 +378,9 @@ function parseSeleniumRemoteParams(env, progress) {
|
|
|
351
378
|
} catch (e) {
|
|
352
379
|
progress.log(`<selenium> ignoring additional ${env.name} "${env.value}": ${e}`);
|
|
353
380
|
}
|
|
354
|
-
}
|
|
381
|
+
}
|
|
382
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
383
|
+
0 && (module.exports = {
|
|
384
|
+
Chromium,
|
|
385
|
+
waitForReadyState
|
|
386
|
+
});
|