rebrowser-playwright-core 1.49.0 → 1.52.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 +381 -55
- package/bin/reinstall_msedge_beta_linux.sh +6 -0
- package/bin/reinstall_msedge_dev_linux.sh +6 -0
- package/bin/reinstall_msedge_stable_linux.sh +6 -0
- package/browsers.json +28 -13
- package/index.js +0 -1
- package/lib/androidServerImpl.js +42 -48
- package/lib/browserServerImpl.js +60 -64
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +314 -354
- package/lib/cli/programWithTestStub.js +51 -44
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +146 -254
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -39
- package/lib/client/browser.js +59 -68
- package/lib/client/browserContext.js +302 -322
- package/lib/client/browserType.js +95 -143
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +109 -139
- package/lib/client/clientHelper.js +49 -42
- package/lib/client/clientInstrumentation.js +40 -35
- package/lib/client/clientStackTrace.js +69 -0
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +203 -218
- package/lib/client/consoleMessage.js +33 -33
- 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 +74 -76
- package/lib/client/elementHandle.js +126 -163
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +127 -127
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +154 -178
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +34 -0
- package/lib/client/frame.js +189 -307
- package/lib/client/harRouter.js +44 -56
- package/lib/client/input.js +40 -69
- package/lib/client/jsHandle.js +55 -71
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +53 -28
- package/lib/client/locator.js +144 -230
- package/lib/client/network.js +285 -301
- package/lib/client/page.js +273 -312
- package/lib/client/platform.js +74 -0
- package/lib/client/playwright.js +62 -57
- package/lib/client/selectors.js +51 -43
- package/lib/client/stream.js +30 -45
- package/lib/client/timeoutSettings.js +75 -0
- package/lib/client/tracing.js +49 -82
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +71 -91
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +111 -0
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +28 -43
- package/lib/generated/clockSource.js +26 -5
- package/lib/generated/consoleApiSource.js +26 -5
- package/lib/generated/injectedScriptSource.js +26 -5
- package/lib/generated/pollingRecorderSource.js +26 -5
- package/lib/generated/utilityScriptSource.js +26 -5
- package/lib/generated/webSocketMockSource.js +375 -4
- package/lib/inProcessFactory.js +53 -48
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +53 -42
- package/lib/protocol/debug.js +209 -25
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2712 -2667
- package/lib/protocol/validatorPrimitives.js +115 -75
- package/lib/remote/playwrightConnection.js +144 -152
- package/lib/remote/playwrightServer.js +106 -77
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +216 -206
- package/lib/server/android/backendAdb.js +89 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +227 -158
- package/lib/server/bidi/bidiChromium.js +106 -78
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +161 -97
- package/lib/server/bidi/bidiFirefox.js +76 -68
- package/lib/server/bidi/bidiInput.js +90 -102
- package/lib/server/bidi/bidiNetworkManager.js +141 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +262 -261
- 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 +241 -223
- package/lib/server/bidi/third_party/bidiProtocol.js +144 -131
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +149 -111
- package/lib/server/browser.js +76 -84
- package/lib/server/browserContext.js +343 -360
- package/lib/server/browserType.js +169 -181
- package/lib/server/callLog.js +82 -0
- package/lib/server/chromium/chromium.js +212 -190
- package/lib/server/chromium/chromiumSwitches.js +99 -44
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +262 -280
- package/lib/server/chromium/crConnection.js +121 -178
- package/lib/server/chromium/crCoverage.js +113 -127
- package/lib/server/chromium/crDevTools.js +64 -55
- package/lib/server/chromium/crDragDrop.js +62 -79
- package/lib/server/chromium/crExecutionContext.js +100 -91
- package/lib/server/chromium/crInput.js +101 -88
- package/lib/server/chromium/crNetworkManager.js +269 -370
- package/lib/server/chromium/crPage.js +509 -595
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +85 -69
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +65 -99
- package/lib/server/clock.js +58 -46
- package/lib/server/codegen/csharp.js +191 -156
- package/lib/server/codegen/java.js +163 -125
- package/lib/server/codegen/javascript.js +166 -143
- package/lib/server/codegen/jsonl.js +33 -29
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -125
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +105 -86
- package/lib/server/debugController.js +102 -154
- package/lib/server/debugger.js +82 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +131 -131
- package/lib/server/dialog.js +36 -35
- package/lib/server/dispatchers/androidDispatcher.js +196 -107
- package/lib/server/dispatchers/artifactDispatcher.js +62 -62
- package/lib/server/dispatchers/browserContextDispatcher.js +177 -217
- package/lib/server/dispatchers/browserDispatcher.js +78 -97
- package/lib/server/dispatchers/browserTypeDispatcher.js +35 -35
- package/lib/server/dispatchers/cdpSessionDispatcher.js +32 -36
- package/lib/server/dispatchers/debugControllerDispatcher.js +48 -64
- package/lib/server/dispatchers/dialogDispatcher.js +30 -27
- package/lib/server/dispatchers/dispatcher.js +180 -229
- package/lib/server/dispatchers/electronDispatcher.js +54 -57
- package/lib/server/dispatchers/elementHandlerDispatcher.js +79 -116
- package/lib/server/dispatchers/frameDispatcher.js +93 -162
- package/lib/server/dispatchers/jsHandleDispatcher.js +49 -66
- package/lib/server/dispatchers/jsonPipeDispatcher.js +35 -36
- package/lib/server/dispatchers/localUtilsDispatcher.js +107 -365
- package/lib/server/dispatchers/networkDispatchers.js +92 -109
- package/lib/server/dispatchers/pageDispatcher.js +130 -169
- package/lib/server/dispatchers/playwrightDispatcher.js +69 -76
- package/lib/server/dispatchers/selectorsDispatcher.js +28 -24
- package/lib/server/dispatchers/streamDispatcher.js +42 -44
- package/lib/server/dispatchers/tracingDispatcher.js +36 -41
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +100 -135
- package/lib/server/dispatchers/writableStreamDispatcher.js +54 -39
- package/lib/server/dom.js +424 -443
- package/lib/server/download.js +45 -35
- package/lib/server/electron/electron.js +156 -175
- package/lib/server/electron/loader.js +8 -36
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +302 -331
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -57
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +218 -274
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +103 -77
- package/lib/server/firefox/ffInput.js +72 -63
- package/lib/server/firefox/ffNetworkManager.js +131 -110
- package/lib/server/firefox/ffPage.js +244 -302
- package/lib/server/firefox/firefox.js +76 -69
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +77 -111
- package/lib/server/frames.js +719 -855
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +288 -224
- package/lib/server/harBackend.js +157 -0
- package/lib/server/helper.js +56 -59
- package/lib/server/index.js +59 -106
- package/lib/server/input.js +136 -166
- package/lib/server/instrumentation.js +49 -44
- package/lib/server/javascript.js +157 -151
- package/lib/server/launchApp.js +92 -73
- package/lib/server/localUtils.js +211 -0
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +263 -297
- package/lib/server/page.js +353 -432
- package/lib/server/pageBinding.js +88 -0
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +60 -67
- package/lib/server/progress.js +56 -51
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +161 -0
- package/lib/server/recorder/contextRecorder.js +135 -148
- package/lib/server/recorder/recorderApp.js +129 -132
- package/lib/server/recorder/recorderCollection.js +57 -57
- package/lib/server/recorder/recorderFrontend.js +15 -4
- package/lib/server/recorder/recorderRunner.js +80 -100
- package/lib/server/recorder/recorderUtils.js +59 -72
- package/lib/server/recorder/throttledFile.js +42 -31
- package/lib/server/recorder.js +186 -190
- package/lib/server/registry/browserFetcher.js +107 -100
- package/lib/server/registry/dependencies.js +247 -198
- package/lib/server/registry/index.js +928 -709
- package/lib/server/registry/nativeDeps.js +1073 -461
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +166 -182
- package/lib/server/selectors.js +85 -46
- package/lib/server/socksClientCertificatesInterceptor.js +166 -185
- package/lib/server/socksInterceptor.js +62 -67
- package/lib/server/storageScript.js +154 -0
- package/lib/server/timeoutSettings.js +89 -0
- package/lib/server/trace/recorder/snapshotter.js +70 -88
- package/lib/server/trace/recorder/snapshotterInjected.js +246 -218
- package/lib/server/trace/recorder/tracing.js +324 -327
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +172 -137
- package/lib/server/transport.js +125 -133
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +44 -0
- package/lib/server/utils/comparators.js +161 -0
- package/lib/server/utils/crypto.js +216 -0
- package/lib/server/utils/debug.js +47 -0
- package/lib/server/utils/debugLogger.js +114 -0
- package/lib/server/utils/env.js +68 -0
- package/lib/server/utils/eventsHelper.js +39 -0
- package/lib/server/utils/expectUtils.js +38 -0
- package/lib/server/utils/fileUtils.js +191 -0
- package/lib/server/utils/happyEyeballs.js +207 -0
- package/lib/server/utils/hostPlatform.js +109 -0
- package/lib/server/utils/httpServer.js +218 -0
- package/lib/server/utils/image_tools/colorUtils.js +89 -0
- package/lib/{image_tools → server/utils/image_tools}/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +78 -0
- package/lib/{image_tools → server/utils/image_tools}/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +71 -0
- package/lib/server/utils/network.js +217 -0
- package/lib/server/utils/nodePlatform.js +148 -0
- package/lib/server/utils/pipeTransport.js +84 -0
- package/lib/server/utils/processLauncher.js +238 -0
- package/lib/server/utils/profiler.js +65 -0
- package/lib/server/utils/socksProxy.js +511 -0
- package/lib/server/utils/spawnAsync.js +41 -0
- package/lib/server/utils/task.js +51 -0
- package/lib/server/utils/userAgent.js +98 -0
- package/lib/server/utils/wsServer.js +132 -0
- package/lib/server/utils/zipFile.js +74 -0
- package/lib/server/utils/zones.js +57 -0
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +76 -63
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +163 -180
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +96 -73
- package/lib/server/webkit/wkInput.js +87 -75
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +536 -645
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +77 -77
- package/lib/utils/isomorphic/ariaSnapshot.js +245 -128
- package/lib/utils/isomorphic/assert.js +31 -0
- package/lib/utils/isomorphic/builtins.js +90 -0
- package/lib/utils/isomorphic/colors.js +72 -0
- package/lib/utils/isomorphic/cssParser.js +123 -127
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +53 -0
- package/lib/utils/isomorphic/locatorGenerators.js +344 -349
- package/lib/utils/isomorphic/locatorParser.js +103 -106
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +115 -0
- package/lib/utils/isomorphic/mimeType.js +453 -22
- package/lib/utils/isomorphic/multimap.js +81 -0
- package/lib/utils/isomorphic/rtti.js +43 -0
- package/lib/utils/isomorphic/selectorParser.js +183 -193
- package/lib/utils/isomorphic/semaphore.js +54 -0
- package/lib/utils/isomorphic/stackTrace.js +158 -0
- package/lib/utils/isomorphic/stringUtils.js +113 -106
- package/lib/utils/isomorphic/time.js +44 -0
- package/lib/utils/isomorphic/timeoutRunner.js +67 -0
- package/lib/utils/isomorphic/traceUtils.js +52 -32
- package/lib/utils/isomorphic/types.js +16 -0
- package/lib/utils/isomorphic/urlMatch.js +114 -71
- package/lib/utils/isomorphic/utilityScriptSerializers.js +248 -0
- package/lib/utils.js +101 -0
- package/lib/utilsBundle.js +101 -76
- package/lib/utilsBundleImpl/index.js +114 -116
- package/lib/vite/htmlReport/index.html +26 -20
- package/lib/vite/recorder/assets/codeMirrorModule-DVQi6prl.js +24 -0
- package/lib/vite/recorder/assets/index-97EUAAbk.js +184 -0
- package/lib/vite/recorder/assets/{index-iA1aAGZg.css → index-eHBmevrY.css} +1 -1
- package/lib/vite/recorder/index.html +2 -2
- package/lib/vite/traceViewer/assets/codeMirrorModule-DwAiTpyC.js +24 -0
- package/lib/vite/traceViewer/assets/defaultSettingsView-DkkRvn5X.js +265 -0
- package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +1 -0
- package/lib/vite/traceViewer/index.DvtSwn6E.js +2 -0
- package/lib/vite/traceViewer/index.html +4 -7
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/{uiMode.voC1ZiOQ.css → uiMode.BatfzHMG.css} +1 -1
- package/lib/vite/traceViewer/uiMode.Sdytl9wc.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -7
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +7 -7
- package/types/protocol.d.ts +819 -127
- package/types/types.d.ts +196 -75
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +0 -2
- 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/imageChannel.js +0 -70
- package/lib/protocol/transport.js +0 -82
- package/lib/server/ariaSnapshot.js +0 -33
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -226
- package/lib/server/recorder/recorderInTraceViewer.js +0 -144
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -153
- package/lib/utils/crypto.js +0 -171
- 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/expectUtils.js +0 -33
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -194
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -139
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/isomorphic/recorderUtils.js +0 -227
- 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/sequence.js +0 -64
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -134
- 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 -71
- package/lib/vite/recorder/assets/codeMirrorModule-AFvV6hAs.js +0 -24
- package/lib/vite/recorder/assets/index-_cTWgVuJ.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-KatbITLF.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-DdpLd2bb.js +0 -68
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-CdYbzWFD.js +0 -9
- package/lib/vite/traceViewer/embedded.6m3UZh7r.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.w7WN2u1R.css +0 -1
- package/lib/vite/traceViewer/index.WUV-8boJ.js +0 -2
- package/lib/vite/traceViewer/inspectorTab.DEOUW62d.css +0 -1
- package/lib/vite/traceViewer/recorder.B_SY1GJM.css +0 -0
- package/lib/vite/traceViewer/recorder.OT2tVHgn.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/uiMode.BZBTyvGn.js +0 -5
- package/lib/vite/traceViewer/workbench.C-zR9ysA.css +0 -1
- /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
- /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
- /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
|
@@ -1,114 +1,109 @@
|
|
|
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 crBrowser_exports = {};
|
|
30
|
+
__export(crBrowser_exports, {
|
|
31
|
+
CRBrowser: () => CRBrowser,
|
|
32
|
+
CRBrowserContext: () => CRBrowserContext
|
|
5
33
|
});
|
|
6
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class CRBrowser extends _browser.Browser {
|
|
34
|
+
module.exports = __toCommonJS(crBrowser_exports);
|
|
35
|
+
var import_path = __toESM(require("path"));
|
|
36
|
+
var import_assert = require("../../utils/isomorphic/assert");
|
|
37
|
+
var import_crypto = require("../utils/crypto");
|
|
38
|
+
var import_artifact = require("../artifact");
|
|
39
|
+
var import_browser = require("../browser");
|
|
40
|
+
var import_browserContext = require("../browserContext");
|
|
41
|
+
var import_frames = require("../frames");
|
|
42
|
+
var network = __toESM(require("../network"));
|
|
43
|
+
var import_page = require("../page");
|
|
44
|
+
var import_crConnection = require("./crConnection");
|
|
45
|
+
var import_crPage = require("./crPage");
|
|
46
|
+
var import_crProtocolHelper = require("./crProtocolHelper");
|
|
47
|
+
var import_crServiceWorker = require("./crServiceWorker");
|
|
48
|
+
class CRBrowser extends import_browser.Browser {
|
|
49
|
+
constructor(parent, connection, options) {
|
|
50
|
+
super(parent, options);
|
|
51
|
+
this._clientRootSessionPromise = null;
|
|
52
|
+
this._contexts = /* @__PURE__ */ new Map();
|
|
53
|
+
this._crPages = /* @__PURE__ */ new Map();
|
|
54
|
+
this._backgroundPages = /* @__PURE__ */ new Map();
|
|
55
|
+
this._serviceWorkers = /* @__PURE__ */ new Map();
|
|
56
|
+
this._version = "";
|
|
57
|
+
this._tracingRecording = false;
|
|
58
|
+
this._userAgent = "";
|
|
59
|
+
this._connection = connection;
|
|
60
|
+
this._session = this._connection.rootSession;
|
|
61
|
+
this._connection.on(import_crConnection.ConnectionEvents.Disconnected, () => this._didDisconnect());
|
|
62
|
+
this._session.on("Target.attachedToTarget", this._onAttachedToTarget.bind(this));
|
|
63
|
+
this._session.on("Target.detachedFromTarget", this._onDetachedFromTarget.bind(this));
|
|
64
|
+
this._session.on("Browser.downloadWillBegin", this._onDownloadWillBegin.bind(this));
|
|
65
|
+
this._session.on("Browser.downloadProgress", this._onDownloadProgress.bind(this));
|
|
66
|
+
}
|
|
40
67
|
static async connect(parent, transport, options, devtools) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
...options
|
|
44
|
-
};
|
|
45
|
-
const connection = new _crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector);
|
|
68
|
+
options = { ...options };
|
|
69
|
+
const connection = new import_crConnection.CRConnection(transport, options.protocolLogger, options.browserLogsCollector);
|
|
46
70
|
const browser = new CRBrowser(parent, connection, options);
|
|
47
71
|
browser._devtools = devtools;
|
|
48
|
-
if (browser.isClank())
|
|
72
|
+
if (browser.isClank())
|
|
73
|
+
browser._isCollocatedWithServer = false;
|
|
49
74
|
const session = connection.rootSession;
|
|
50
|
-
if (options.__testHookOnConnectToBrowser)
|
|
51
|
-
|
|
52
|
-
|
|
75
|
+
if (options.__testHookOnConnectToBrowser)
|
|
76
|
+
await options.__testHookOnConnectToBrowser();
|
|
77
|
+
const version = await session.send("Browser.getVersion");
|
|
78
|
+
browser._version = version.product.substring(version.product.indexOf("/") + 1);
|
|
53
79
|
browser._userAgent = version.userAgent;
|
|
54
|
-
|
|
55
|
-
// may have been launched with different options.
|
|
56
|
-
browser.options.headful = !version.userAgent.includes('Headless');
|
|
80
|
+
browser.options.headful = !version.userAgent.includes("Headless");
|
|
57
81
|
if (!options.persistent) {
|
|
58
|
-
await session.send(
|
|
59
|
-
autoAttach: true,
|
|
60
|
-
waitForDebuggerOnStart: true,
|
|
61
|
-
flatten: true
|
|
62
|
-
});
|
|
82
|
+
await session.send("Target.setAutoAttach", { autoAttach: true, waitForDebuggerOnStart: true, flatten: true });
|
|
63
83
|
return browser;
|
|
64
84
|
}
|
|
65
|
-
browser._defaultContext = new CRBrowserContext(browser,
|
|
66
|
-
await Promise.all([
|
|
67
|
-
autoAttach: true,
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// However making a dummy call afterwards fixes this.
|
|
73
|
-
// This can be removed after https://chromium-review.googlesource.com/c/chromium/src/+/2885888 lands in stable.
|
|
74
|
-
await session.send('Target.getTargetInfo');
|
|
75
|
-
}), browser._defaultContext._initialize()]);
|
|
85
|
+
browser._defaultContext = new CRBrowserContext(browser, void 0, options.persistent);
|
|
86
|
+
await Promise.all([
|
|
87
|
+
session.send("Target.setAutoAttach", { autoAttach: true, waitForDebuggerOnStart: true, flatten: true }).then(async () => {
|
|
88
|
+
await session.send("Target.getTargetInfo");
|
|
89
|
+
}),
|
|
90
|
+
browser._defaultContext._initialize()
|
|
91
|
+
]);
|
|
76
92
|
await browser._waitForAllPagesToBeInitialized();
|
|
77
93
|
return browser;
|
|
78
94
|
}
|
|
79
|
-
constructor(parent, connection, options) {
|
|
80
|
-
super(parent, options);
|
|
81
|
-
this._connection = void 0;
|
|
82
|
-
this._session = void 0;
|
|
83
|
-
this._clientRootSessionPromise = null;
|
|
84
|
-
this._contexts = new Map();
|
|
85
|
-
this._crPages = new Map();
|
|
86
|
-
this._backgroundPages = new Map();
|
|
87
|
-
this._serviceWorkers = new Map();
|
|
88
|
-
this._devtools = void 0;
|
|
89
|
-
this._version = '';
|
|
90
|
-
this._tracingRecording = false;
|
|
91
|
-
this._tracingClient = void 0;
|
|
92
|
-
this._userAgent = '';
|
|
93
|
-
this._connection = connection;
|
|
94
|
-
this._session = this._connection.rootSession;
|
|
95
|
-
this._connection.on(_crConnection.ConnectionEvents.Disconnected, () => this._didDisconnect());
|
|
96
|
-
this._session.on('Target.attachedToTarget', this._onAttachedToTarget.bind(this));
|
|
97
|
-
this._session.on('Target.detachedFromTarget', this._onDetachedFromTarget.bind(this));
|
|
98
|
-
this._session.on('Browser.downloadWillBegin', this._onDownloadWillBegin.bind(this));
|
|
99
|
-
this._session.on('Browser.downloadProgress', this._onDownloadProgress.bind(this));
|
|
100
|
-
}
|
|
101
95
|
async doCreateNewContext(options) {
|
|
102
96
|
const proxy = options.proxyOverride || options.proxy;
|
|
103
|
-
let proxyBypassList =
|
|
97
|
+
let proxyBypassList = void 0;
|
|
104
98
|
if (proxy) {
|
|
105
|
-
if (process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK)
|
|
99
|
+
if (process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK)
|
|
100
|
+
proxyBypassList = proxy.bypass;
|
|
101
|
+
else
|
|
102
|
+
proxyBypassList = "<-loopback>" + (proxy.bypass ? `,${proxy.bypass}` : "");
|
|
106
103
|
}
|
|
107
|
-
const {
|
|
108
|
-
browserContextId
|
|
109
|
-
} = await this._session.send('Target.createBrowserContext', {
|
|
104
|
+
const { browserContextId } = await this._session.send("Target.createBrowserContext", {
|
|
110
105
|
disposeOnDetach: true,
|
|
111
|
-
proxyServer: proxy ? proxy.server :
|
|
106
|
+
proxyServer: proxy ? proxy.server : void 0,
|
|
112
107
|
proxyBypassList
|
|
113
108
|
});
|
|
114
109
|
const context = new CRBrowserContext(this, browserContextId, options);
|
|
@@ -126,72 +121,59 @@ class CRBrowser extends _browser.Browser {
|
|
|
126
121
|
return this._userAgent;
|
|
127
122
|
}
|
|
128
123
|
_platform() {
|
|
129
|
-
if (this._userAgent.includes(
|
|
130
|
-
|
|
131
|
-
|
|
124
|
+
if (this._userAgent.includes("Windows"))
|
|
125
|
+
return "win";
|
|
126
|
+
if (this._userAgent.includes("Macintosh"))
|
|
127
|
+
return "mac";
|
|
128
|
+
return "linux";
|
|
132
129
|
}
|
|
133
130
|
isClank() {
|
|
134
|
-
return this.options.name ===
|
|
131
|
+
return this.options.name === "clank";
|
|
135
132
|
}
|
|
136
133
|
async _waitForAllPagesToBeInitialized() {
|
|
137
|
-
await Promise.all([...this._crPages.values()].map(
|
|
138
|
-
}
|
|
139
|
-
_onAttachedToTarget({
|
|
140
|
-
targetInfo
|
|
141
|
-
|
|
142
|
-
waitingForDebugger
|
|
143
|
-
}) {
|
|
144
|
-
if (targetInfo.type === 'browser') return;
|
|
134
|
+
await Promise.all([...this._crPages.values()].map((crPage) => crPage._page.waitForInitializedOrError()));
|
|
135
|
+
}
|
|
136
|
+
_onAttachedToTarget({ targetInfo, sessionId, waitingForDebugger }) {
|
|
137
|
+
if (targetInfo.type === "browser")
|
|
138
|
+
return;
|
|
145
139
|
const session = this._session.createChildSession(sessionId);
|
|
146
|
-
(0,
|
|
140
|
+
(0, import_assert.assert)(targetInfo.browserContextId, "targetInfo: " + JSON.stringify(targetInfo, null, 2));
|
|
147
141
|
let context = this._contexts.get(targetInfo.browserContextId) || null;
|
|
148
142
|
if (!context) {
|
|
149
|
-
// TODO: auto attach only to pages from our contexts.
|
|
150
|
-
// assert(this._defaultContext);
|
|
151
143
|
context = this._defaultContext;
|
|
152
144
|
}
|
|
153
|
-
if (targetInfo.type ===
|
|
145
|
+
if (targetInfo.type === "other" && targetInfo.url.startsWith("devtools://devtools") && this._devtools) {
|
|
154
146
|
this._devtools.install(session);
|
|
155
147
|
return;
|
|
156
148
|
}
|
|
157
|
-
const treatOtherAsPage = targetInfo.type ===
|
|
158
|
-
if (!context || targetInfo.type ===
|
|
159
|
-
session.detach().catch(() => {
|
|
149
|
+
const treatOtherAsPage = targetInfo.type === "other" && process.env.PW_CHROMIUM_ATTACH_TO_OTHER;
|
|
150
|
+
if (!context || targetInfo.type === "other" && !treatOtherAsPage) {
|
|
151
|
+
session.detach().catch(() => {
|
|
152
|
+
});
|
|
160
153
|
return;
|
|
161
154
|
}
|
|
162
|
-
(0,
|
|
163
|
-
(0,
|
|
164
|
-
(0,
|
|
165
|
-
if (targetInfo.type ===
|
|
166
|
-
const backgroundPage = new
|
|
167
|
-
hasUIWindow: false,
|
|
168
|
-
isBackgroundPage: true
|
|
169
|
-
});
|
|
155
|
+
(0, import_assert.assert)(!this._crPages.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
|
|
156
|
+
(0, import_assert.assert)(!this._backgroundPages.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
|
|
157
|
+
(0, import_assert.assert)(!this._serviceWorkers.has(targetInfo.targetId), "Duplicate target " + targetInfo.targetId);
|
|
158
|
+
if (targetInfo.type === "background_page") {
|
|
159
|
+
const backgroundPage = new import_crPage.CRPage(session, targetInfo.targetId, context, null, { hasUIWindow: false, isBackgroundPage: true });
|
|
170
160
|
this._backgroundPages.set(targetInfo.targetId, backgroundPage);
|
|
171
161
|
return;
|
|
172
162
|
}
|
|
173
|
-
if (targetInfo.type ===
|
|
163
|
+
if (targetInfo.type === "page" || treatOtherAsPage) {
|
|
174
164
|
const opener = targetInfo.openerId ? this._crPages.get(targetInfo.openerId) || null : null;
|
|
175
|
-
const crPage = new
|
|
176
|
-
hasUIWindow: targetInfo.type === 'page',
|
|
177
|
-
isBackgroundPage: false
|
|
178
|
-
});
|
|
165
|
+
const crPage = new import_crPage.CRPage(session, targetInfo.targetId, context, opener, { hasUIWindow: targetInfo.type === "page", isBackgroundPage: false });
|
|
179
166
|
this._crPages.set(targetInfo.targetId, crPage);
|
|
180
167
|
return;
|
|
181
168
|
}
|
|
182
|
-
if (targetInfo.type ===
|
|
183
|
-
const serviceWorker = new
|
|
169
|
+
if (targetInfo.type === "service_worker") {
|
|
170
|
+
const serviceWorker = new import_crServiceWorker.CRServiceWorker(context, session, targetInfo.url);
|
|
184
171
|
this._serviceWorkers.set(targetInfo.targetId, serviceWorker);
|
|
185
172
|
context.emit(CRBrowserContext.CREvents.ServiceWorker, serviceWorker);
|
|
186
173
|
return;
|
|
187
174
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
//
|
|
191
|
-
// One example of a side effect: upon shared worker restart, we receive
|
|
192
|
-
// Inspector.targetReloadedAfterCrash and backend waits for Runtime.runIfWaitingForDebugger
|
|
193
|
-
// from any attached client. If we do not resume, shared worker will stall.
|
|
194
|
-
session.detach().catch(() => {});
|
|
175
|
+
session.detach().catch(() => {
|
|
176
|
+
});
|
|
195
177
|
}
|
|
196
178
|
_onDetachedFromTarget(payload) {
|
|
197
179
|
const targetId = payload.targetId;
|
|
@@ -215,70 +197,89 @@ class CRBrowser extends _browser.Browser {
|
|
|
215
197
|
}
|
|
216
198
|
}
|
|
217
199
|
_didDisconnect() {
|
|
218
|
-
for (const crPage of this._crPages.values())
|
|
200
|
+
for (const crPage of this._crPages.values())
|
|
201
|
+
crPage.didClose();
|
|
219
202
|
this._crPages.clear();
|
|
220
|
-
for (const backgroundPage of this._backgroundPages.values())
|
|
203
|
+
for (const backgroundPage of this._backgroundPages.values())
|
|
204
|
+
backgroundPage.didClose();
|
|
221
205
|
this._backgroundPages.clear();
|
|
222
|
-
for (const serviceWorker of this._serviceWorkers.values())
|
|
206
|
+
for (const serviceWorker of this._serviceWorkers.values())
|
|
207
|
+
serviceWorker.didClose();
|
|
223
208
|
this._serviceWorkers.clear();
|
|
224
209
|
this._didClose();
|
|
225
210
|
}
|
|
226
211
|
_findOwningPage(frameId) {
|
|
227
212
|
for (const crPage of this._crPages.values()) {
|
|
228
213
|
const frame = crPage._page._frameManager.frame(frameId);
|
|
229
|
-
if (frame)
|
|
214
|
+
if (frame)
|
|
215
|
+
return crPage;
|
|
230
216
|
}
|
|
231
217
|
return null;
|
|
232
218
|
}
|
|
233
219
|
_onDownloadWillBegin(payload) {
|
|
234
220
|
const page = this._findOwningPage(payload.frameId);
|
|
235
221
|
if (!page) {
|
|
236
|
-
// There might be no page when download originates from something unusual, like
|
|
237
|
-
// a DevTools window or maybe an extension page.
|
|
238
|
-
// See https://github.com/microsoft/playwright/issues/22551.
|
|
239
222
|
return;
|
|
240
223
|
}
|
|
241
224
|
page.willBeginDownload();
|
|
242
|
-
let originPage = page.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (!originPage)
|
|
225
|
+
let originPage = page._page.initializedOrUndefined();
|
|
226
|
+
if (!originPage && page._opener)
|
|
227
|
+
originPage = page._opener._page.initializedOrUndefined();
|
|
228
|
+
if (!originPage)
|
|
229
|
+
return;
|
|
246
230
|
this._downloadCreated(originPage, payload.guid, payload.url, payload.suggestedFilename);
|
|
247
231
|
}
|
|
248
232
|
_onDownloadProgress(payload) {
|
|
249
|
-
if (payload.state ===
|
|
250
|
-
|
|
233
|
+
if (payload.state === "completed")
|
|
234
|
+
this._downloadFinished(payload.guid, "");
|
|
235
|
+
if (payload.state === "canceled")
|
|
236
|
+
this._downloadFinished(payload.guid, this._closeReason || "canceled");
|
|
251
237
|
}
|
|
252
238
|
async _closePage(crPage) {
|
|
253
|
-
await this._session.send(
|
|
254
|
-
targetId: crPage._targetId
|
|
255
|
-
});
|
|
239
|
+
await this._session.send("Target.closeTarget", { targetId: crPage._targetId });
|
|
256
240
|
}
|
|
257
241
|
async newBrowserCDPSession() {
|
|
258
242
|
return await this._connection.createBrowserSession();
|
|
259
243
|
}
|
|
260
244
|
async startTracing(page, options = {}) {
|
|
261
|
-
(0,
|
|
245
|
+
(0, import_assert.assert)(!this._tracingRecording, "Cannot start recording trace while already recording trace.");
|
|
262
246
|
this._tracingClient = page ? page._delegate._mainFrameSession._client : this._session;
|
|
263
|
-
const defaultCategories = [
|
|
247
|
+
const defaultCategories = [
|
|
248
|
+
"-*",
|
|
249
|
+
"devtools.timeline",
|
|
250
|
+
"v8.execute",
|
|
251
|
+
"disabled-by-default-devtools.timeline",
|
|
252
|
+
"disabled-by-default-devtools.timeline.frame",
|
|
253
|
+
"toplevel",
|
|
254
|
+
"blink.console",
|
|
255
|
+
"blink.user_timing",
|
|
256
|
+
"latencyInfo",
|
|
257
|
+
"disabled-by-default-devtools.timeline.stack",
|
|
258
|
+
"disabled-by-default-v8.cpu_profiler",
|
|
259
|
+
"disabled-by-default-v8.cpu_profiler.hires"
|
|
260
|
+
];
|
|
264
261
|
const {
|
|
265
262
|
screenshots = false,
|
|
266
263
|
categories = defaultCategories
|
|
267
264
|
} = options;
|
|
268
|
-
if (screenshots)
|
|
265
|
+
if (screenshots)
|
|
266
|
+
categories.push("disabled-by-default-devtools.screenshot");
|
|
269
267
|
this._tracingRecording = true;
|
|
270
|
-
await this._tracingClient.send(
|
|
271
|
-
transferMode:
|
|
272
|
-
categories: categories.join(
|
|
268
|
+
await this._tracingClient.send("Tracing.start", {
|
|
269
|
+
transferMode: "ReturnAsStream",
|
|
270
|
+
categories: categories.join(",")
|
|
273
271
|
});
|
|
274
272
|
}
|
|
275
273
|
async stopTracing() {
|
|
276
|
-
(0,
|
|
277
|
-
const [event] = await Promise.all([
|
|
278
|
-
|
|
279
|
-
|
|
274
|
+
(0, import_assert.assert)(this._tracingClient, "Tracing was not started.");
|
|
275
|
+
const [event] = await Promise.all([
|
|
276
|
+
new Promise((f) => this._tracingClient.once("Tracing.tracingComplete", f)),
|
|
277
|
+
this._tracingClient.send("Tracing.end")
|
|
278
|
+
]);
|
|
279
|
+
const tracingPath = import_path.default.join(this.options.artifactsDir, (0, import_crypto.createGuid)() + ".crtrace");
|
|
280
|
+
await (0, import_crProtocolHelper.saveProtocolStream)(this._tracingClient, event.stream, tracingPath);
|
|
280
281
|
this._tracingRecording = false;
|
|
281
|
-
const artifact = new
|
|
282
|
+
const artifact = new import_artifact.Artifact(this, tracingPath);
|
|
282
283
|
artifact.reportFinished();
|
|
283
284
|
return artifact;
|
|
284
285
|
}
|
|
@@ -286,22 +287,28 @@ class CRBrowser extends _browser.Browser {
|
|
|
286
287
|
return !this._connection._closed;
|
|
287
288
|
}
|
|
288
289
|
async _clientRootSession() {
|
|
289
|
-
if (!this._clientRootSessionPromise)
|
|
290
|
+
if (!this._clientRootSessionPromise)
|
|
291
|
+
this._clientRootSessionPromise = this._connection.createBrowserSession();
|
|
290
292
|
return this._clientRootSessionPromise;
|
|
291
293
|
}
|
|
292
294
|
}
|
|
293
|
-
|
|
294
|
-
|
|
295
|
+
class CRBrowserContext extends import_browserContext.BrowserContext {
|
|
296
|
+
static {
|
|
297
|
+
this.CREvents = {
|
|
298
|
+
BackgroundPage: "backgroundpage",
|
|
299
|
+
ServiceWorker: "serviceworker"
|
|
300
|
+
};
|
|
301
|
+
}
|
|
295
302
|
constructor(browser, browserContextId, options) {
|
|
296
303
|
super(browser, options, browserContextId);
|
|
297
304
|
this._authenticateProxyViaCredentials();
|
|
298
305
|
}
|
|
299
306
|
async _initialize() {
|
|
300
|
-
(0,
|
|
307
|
+
(0, import_assert.assert)(!Array.from(this._browser._crPages.values()).some((page) => page._browserContext === this));
|
|
301
308
|
const promises = [super._initialize()];
|
|
302
|
-
if (this._browser.options.name !==
|
|
303
|
-
promises.push(this._browser._session.send(
|
|
304
|
-
behavior: this._options.acceptDownloads ===
|
|
309
|
+
if (this._browser.options.name !== "clank" && this._options.acceptDownloads !== "internal-browser-default") {
|
|
310
|
+
promises.push(this._browser._session.send("Browser.setDownloadBehavior", {
|
|
311
|
+
behavior: this._options.acceptDownloads === "accept" ? "allowAndName" : "deny",
|
|
305
312
|
browserContextId: this._browserContextId,
|
|
306
313
|
downloadPath: this._browser.options.downloadsPath,
|
|
307
314
|
eventsEnabled: true
|
|
@@ -310,47 +317,20 @@ class CRBrowserContext extends _browserContext.BrowserContext {
|
|
|
310
317
|
await Promise.all(promises);
|
|
311
318
|
}
|
|
312
319
|
_crPages() {
|
|
313
|
-
return [...this._browser._crPages.values()].filter(crPage => crPage._browserContext === this);
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
return this._crPages().map(crPage => crPage.
|
|
317
|
-
}
|
|
318
|
-
async
|
|
319
|
-
(0,
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
targetId
|
|
323
|
-
} = await this._browser._session.send('Target.createTarget', {
|
|
324
|
-
url: 'about:blank',
|
|
325
|
-
browserContextId: this._browserContextId
|
|
326
|
-
});
|
|
327
|
-
if (oldKeys) {
|
|
328
|
-
// Chrome for Android returns tab ids (1, 2, 3, 4, 5) instead of content target ids here, work around it via the
|
|
329
|
-
// heuristic assuming that there is only one page created at a time.
|
|
330
|
-
const newKeys = new Set(this._browser._crPages.keys());
|
|
331
|
-
// Remove old keys.
|
|
332
|
-
for (const key of oldKeys) newKeys.delete(key);
|
|
333
|
-
// Remove potential concurrent popups.
|
|
334
|
-
for (const key of newKeys) {
|
|
335
|
-
const page = this._browser._crPages.get(key);
|
|
336
|
-
if (page._opener) newKeys.delete(key);
|
|
337
|
-
}
|
|
338
|
-
(0, _utils.assert)(newKeys.size === 1);
|
|
339
|
-
[targetId] = [...newKeys];
|
|
340
|
-
}
|
|
341
|
-
return this._browser._crPages.get(targetId);
|
|
320
|
+
return [...this._browser._crPages.values()].filter((crPage) => crPage._browserContext === this);
|
|
321
|
+
}
|
|
322
|
+
possiblyUninitializedPages() {
|
|
323
|
+
return this._crPages().map((crPage) => crPage._page);
|
|
324
|
+
}
|
|
325
|
+
async doCreateNewPage() {
|
|
326
|
+
(0, import_browserContext.assertBrowserContextIsNotOwned)(this);
|
|
327
|
+
const { targetId } = await this._browser._session.send("Target.createTarget", { url: "about:blank", browserContextId: this._browserContextId });
|
|
328
|
+
return this._browser._crPages.get(targetId)._page;
|
|
342
329
|
}
|
|
343
330
|
async doGetCookies(urls) {
|
|
344
|
-
const {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
browserContextId: this._browserContextId
|
|
348
|
-
});
|
|
349
|
-
return network.filterCookies(cookies.map(c => {
|
|
350
|
-
const copy = {
|
|
351
|
-
sameSite: 'Lax',
|
|
352
|
-
...c
|
|
353
|
-
};
|
|
331
|
+
const { cookies } = await this._browser._session.send("Storage.getCookies", { browserContextId: this._browserContextId });
|
|
332
|
+
return network.filterCookies(cookies.map((c) => {
|
|
333
|
+
const copy = { sameSite: "Lax", ...c };
|
|
354
334
|
delete copy.size;
|
|
355
335
|
delete copy.priority;
|
|
356
336
|
delete copy.session;
|
|
@@ -361,156 +341,158 @@ class CRBrowserContext extends _browserContext.BrowserContext {
|
|
|
361
341
|
}), urls);
|
|
362
342
|
}
|
|
363
343
|
async addCookies(cookies) {
|
|
364
|
-
await this._browser._session.send(
|
|
365
|
-
cookies: network.rewriteCookies(cookies),
|
|
366
|
-
browserContextId: this._browserContextId
|
|
367
|
-
});
|
|
344
|
+
await this._browser._session.send("Storage.setCookies", { cookies: network.rewriteCookies(cookies), browserContextId: this._browserContextId });
|
|
368
345
|
}
|
|
369
346
|
async doClearCookies() {
|
|
370
|
-
await this._browser._session.send(
|
|
371
|
-
browserContextId: this._browserContextId
|
|
372
|
-
});
|
|
347
|
+
await this._browser._session.send("Storage.clearCookies", { browserContextId: this._browserContextId });
|
|
373
348
|
}
|
|
374
349
|
async doGrantPermissions(origin, permissions) {
|
|
375
|
-
const webPermissionToProtocol = new Map([
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
350
|
+
const webPermissionToProtocol = /* @__PURE__ */ new Map([
|
|
351
|
+
["geolocation", "geolocation"],
|
|
352
|
+
["midi", "midi"],
|
|
353
|
+
["notifications", "notifications"],
|
|
354
|
+
["camera", "videoCapture"],
|
|
355
|
+
["microphone", "audioCapture"],
|
|
356
|
+
["background-sync", "backgroundSync"],
|
|
357
|
+
["ambient-light-sensor", "sensors"],
|
|
358
|
+
["accelerometer", "sensors"],
|
|
359
|
+
["gyroscope", "sensors"],
|
|
360
|
+
["magnetometer", "sensors"],
|
|
361
|
+
["clipboard-read", "clipboardReadWrite"],
|
|
362
|
+
["clipboard-write", "clipboardSanitizedWrite"],
|
|
363
|
+
["payment-handler", "paymentHandler"],
|
|
364
|
+
// chrome-specific permissions we have.
|
|
365
|
+
["midi-sysex", "midiSysex"],
|
|
366
|
+
["storage-access", "storageAccess"]
|
|
367
|
+
]);
|
|
368
|
+
const filtered = permissions.map((permission) => {
|
|
379
369
|
const protocolPermission = webPermissionToProtocol.get(permission);
|
|
380
|
-
if (!protocolPermission)
|
|
370
|
+
if (!protocolPermission)
|
|
371
|
+
throw new Error("Unknown permission: " + permission);
|
|
381
372
|
return protocolPermission;
|
|
382
373
|
});
|
|
383
|
-
await this._browser._session.send(
|
|
384
|
-
origin: origin === '*' ? undefined : origin,
|
|
385
|
-
browserContextId: this._browserContextId,
|
|
386
|
-
permissions: filtered
|
|
387
|
-
});
|
|
374
|
+
await this._browser._session.send("Browser.grantPermissions", { origin: origin === "*" ? void 0 : origin, browserContextId: this._browserContextId, permissions: filtered });
|
|
388
375
|
}
|
|
389
376
|
async doClearPermissions() {
|
|
390
|
-
await this._browser._session.send(
|
|
391
|
-
browserContextId: this._browserContextId
|
|
392
|
-
});
|
|
377
|
+
await this._browser._session.send("Browser.resetPermissions", { browserContextId: this._browserContextId });
|
|
393
378
|
}
|
|
394
379
|
async setGeolocation(geolocation) {
|
|
395
|
-
(0,
|
|
380
|
+
(0, import_browserContext.verifyGeolocation)(geolocation);
|
|
396
381
|
this._options.geolocation = geolocation;
|
|
397
|
-
for (const page of this.pages())
|
|
382
|
+
for (const page of this.pages())
|
|
383
|
+
await page._delegate.updateGeolocation();
|
|
398
384
|
}
|
|
399
385
|
async setExtraHTTPHeaders(headers) {
|
|
400
386
|
this._options.extraHTTPHeaders = headers;
|
|
401
|
-
for (const page of this.pages())
|
|
402
|
-
|
|
387
|
+
for (const page of this.pages())
|
|
388
|
+
await page._delegate.updateExtraHTTPHeaders();
|
|
389
|
+
for (const sw of this.serviceWorkers())
|
|
390
|
+
await sw.updateExtraHTTPHeaders();
|
|
403
391
|
}
|
|
404
392
|
async setUserAgent(userAgent) {
|
|
405
393
|
this._options.userAgent = userAgent;
|
|
406
|
-
for (const page of this.pages())
|
|
407
|
-
|
|
394
|
+
for (const page of this.pages())
|
|
395
|
+
await page._delegate.updateUserAgent();
|
|
408
396
|
}
|
|
409
397
|
async setOffline(offline) {
|
|
410
398
|
this._options.offline = offline;
|
|
411
|
-
for (const page of this.pages())
|
|
412
|
-
|
|
399
|
+
for (const page of this.pages())
|
|
400
|
+
await page._delegate.updateOffline();
|
|
401
|
+
for (const sw of this.serviceWorkers())
|
|
402
|
+
await sw.updateOffline();
|
|
413
403
|
}
|
|
414
404
|
async doSetHTTPCredentials(httpCredentials) {
|
|
415
405
|
this._options.httpCredentials = httpCredentials;
|
|
416
|
-
for (const page of this.pages())
|
|
417
|
-
|
|
406
|
+
for (const page of this.pages())
|
|
407
|
+
await page._delegate.updateHttpCredentials();
|
|
408
|
+
for (const sw of this.serviceWorkers())
|
|
409
|
+
await sw.updateHttpCredentials();
|
|
418
410
|
}
|
|
419
411
|
async doAddInitScript(initScript) {
|
|
420
|
-
for (const page of this.pages())
|
|
412
|
+
for (const page of this.pages())
|
|
413
|
+
await page._delegate.addInitScript(initScript);
|
|
421
414
|
}
|
|
422
415
|
async doRemoveNonInternalInitScripts() {
|
|
423
|
-
for (const page of this.pages())
|
|
416
|
+
for (const page of this.pages())
|
|
417
|
+
await page._delegate.removeNonInternalInitScripts();
|
|
424
418
|
}
|
|
425
419
|
async doUpdateRequestInterception() {
|
|
426
|
-
for (const page of this.pages())
|
|
427
|
-
|
|
420
|
+
for (const page of this.pages())
|
|
421
|
+
await page._delegate.updateRequestInterception();
|
|
422
|
+
for (const sw of this.serviceWorkers())
|
|
423
|
+
await sw.updateRequestInterception();
|
|
428
424
|
}
|
|
429
425
|
async doClose(reason) {
|
|
430
|
-
// Headful chrome cannot dispose browser context with opened 'beforeunload'
|
|
431
|
-
// dialogs, so we should close all that are currently opened.
|
|
432
|
-
// We also won't get new ones since `Target.disposeBrowserContext` does not trigger
|
|
433
|
-
// beforeunload.
|
|
434
426
|
const openedBeforeUnloadDialogs = [];
|
|
435
427
|
for (const crPage of this._crPages()) {
|
|
436
|
-
const dialogs = [...crPage._page._frameManager._openedDialogs].filter(dialog => dialog.type() ===
|
|
428
|
+
const dialogs = [...crPage._page._frameManager._openedDialogs].filter((dialog) => dialog.type() === "beforeunload");
|
|
437
429
|
openedBeforeUnloadDialogs.push(...dialogs);
|
|
438
430
|
}
|
|
439
|
-
await Promise.all(openedBeforeUnloadDialogs.map(dialog => dialog.dismiss()));
|
|
431
|
+
await Promise.all(openedBeforeUnloadDialogs.map((dialog) => dialog.dismiss()));
|
|
440
432
|
if (!this._browserContextId) {
|
|
441
433
|
await this.stopVideoRecording();
|
|
442
|
-
|
|
443
|
-
await this._browser.close({
|
|
444
|
-
reason
|
|
445
|
-
});
|
|
434
|
+
await this._browser.close({ reason });
|
|
446
435
|
return;
|
|
447
436
|
}
|
|
448
|
-
await this._browser._session.send(
|
|
449
|
-
browserContextId: this._browserContextId
|
|
450
|
-
});
|
|
437
|
+
await this._browser._session.send("Target.disposeBrowserContext", { browserContextId: this._browserContextId });
|
|
451
438
|
this._browser._contexts.delete(this._browserContextId);
|
|
452
439
|
for (const [targetId, serviceWorker] of this._browser._serviceWorkers) {
|
|
453
|
-
if (serviceWorker._browserContext !== this)
|
|
454
|
-
|
|
455
|
-
// asynchronously and we get detached from them later.
|
|
456
|
-
// To avoid the wrong order of notifications, we manually fire
|
|
457
|
-
// "close" event here and forget about the service worker.
|
|
440
|
+
if (serviceWorker._browserContext !== this)
|
|
441
|
+
continue;
|
|
458
442
|
serviceWorker.didClose();
|
|
459
443
|
this._browser._serviceWorkers.delete(targetId);
|
|
460
444
|
}
|
|
461
445
|
}
|
|
462
446
|
async stopVideoRecording() {
|
|
463
|
-
await Promise.all(this._crPages().map(crPage => crPage._mainFrameSession._stopVideoRecording()));
|
|
447
|
+
await Promise.all(this._crPages().map((crPage) => crPage._mainFrameSession._stopVideoRecording()));
|
|
464
448
|
}
|
|
465
449
|
onClosePersistent() {
|
|
466
|
-
// When persistent context is closed, we do not necessary get Target.detachedFromTarget
|
|
467
|
-
// for all the background pages.
|
|
468
450
|
for (const [targetId, backgroundPage] of this._browser._backgroundPages.entries()) {
|
|
469
|
-
if (backgroundPage._browserContext === this && backgroundPage.
|
|
451
|
+
if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined()) {
|
|
470
452
|
backgroundPage.didClose();
|
|
471
453
|
this._browser._backgroundPages.delete(targetId);
|
|
472
454
|
}
|
|
473
455
|
}
|
|
474
456
|
}
|
|
475
457
|
async clearCache() {
|
|
476
|
-
for (const page of this._crPages())
|
|
458
|
+
for (const page of this._crPages())
|
|
459
|
+
await page._networkManager.clearCache();
|
|
477
460
|
}
|
|
478
461
|
async cancelDownload(guid) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
// cancellation (finished, cancelled, etc.) or the guid is invalid at all.
|
|
482
|
-
await this._browser._session.send('Browser.cancelDownload', {
|
|
483
|
-
guid: guid,
|
|
462
|
+
await this._browser._session.send("Browser.cancelDownload", {
|
|
463
|
+
guid,
|
|
484
464
|
browserContextId: this._browserContextId
|
|
485
465
|
});
|
|
486
466
|
}
|
|
487
467
|
backgroundPages() {
|
|
488
468
|
const result = [];
|
|
489
469
|
for (const backgroundPage of this._browser._backgroundPages.values()) {
|
|
490
|
-
if (backgroundPage._browserContext === this && backgroundPage.
|
|
470
|
+
if (backgroundPage._browserContext === this && backgroundPage._page.initializedOrUndefined())
|
|
471
|
+
result.push(backgroundPage._page);
|
|
491
472
|
}
|
|
492
473
|
return result;
|
|
493
474
|
}
|
|
494
475
|
serviceWorkers() {
|
|
495
|
-
return Array.from(this._browser._serviceWorkers.values()).filter(serviceWorker => serviceWorker._browserContext === this);
|
|
476
|
+
return Array.from(this._browser._serviceWorkers.values()).filter((serviceWorker) => serviceWorker._browserContext === this);
|
|
496
477
|
}
|
|
497
478
|
async newCDPSession(page) {
|
|
498
479
|
let targetId = null;
|
|
499
|
-
if (page instanceof
|
|
480
|
+
if (page instanceof import_page.Page) {
|
|
500
481
|
targetId = page._delegate._targetId;
|
|
501
|
-
} else if (page instanceof
|
|
482
|
+
} else if (page instanceof import_frames.Frame) {
|
|
502
483
|
const session = page._page._delegate._sessions.get(page._id);
|
|
503
|
-
if (!session)
|
|
484
|
+
if (!session)
|
|
485
|
+
throw new Error(`This frame does not have a separate CDP session, it is a part of the parent frame's session`);
|
|
504
486
|
targetId = session._targetId;
|
|
505
487
|
} else {
|
|
506
|
-
throw new Error(
|
|
488
|
+
throw new Error("page: expected Page or Frame");
|
|
507
489
|
}
|
|
508
490
|
const rootSession = await this._browser._clientRootSession();
|
|
509
491
|
return rootSession.attachToTarget(targetId);
|
|
510
492
|
}
|
|
511
493
|
}
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
};
|
|
494
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
495
|
+
0 && (module.exports = {
|
|
496
|
+
CRBrowser,
|
|
497
|
+
CRBrowserContext
|
|
498
|
+
});
|