rebrowser-playwright-core 1.49.1 → 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 -597
- 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 +351 -434
- 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 -647
- 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-C5j27SYZ.js → codeMirrorModule-DVQi6prl.js} +13 -13
- 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 +181 -69
- 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/index-m0XdVJHe.js +0 -184
- package/lib/vite/traceViewer/assets/codeMirrorModule-BBCX0spr.js +0 -24
- package/lib/vite/traceViewer/assets/inspectorTab-B4Iw34Ow.js +0 -68
- package/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +0 -1
- package/lib/vite/traceViewer/assets/workbench-DFlGYqou.js +0 -9
- package/lib/vite/traceViewer/embedded.CmarehFk.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.FBucu_gE.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.CW_rzcEp.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/uiMode.CDUVjusr.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,67 +1,90 @@
|
|
|
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 bidiBrowser_exports = {};
|
|
30
|
+
__export(bidiBrowser_exports, {
|
|
31
|
+
BidiBrowser: () => BidiBrowser,
|
|
32
|
+
BidiBrowserContext: () => BidiBrowserContext,
|
|
33
|
+
Network: () => Network
|
|
5
34
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var network =
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var bidi =
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
* distributed under the License is distributed on an 'AS IS' BASIS,
|
|
28
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
29
|
-
* See the License for the specific language governing permissions and
|
|
30
|
-
* limitations under the License.
|
|
31
|
-
*/
|
|
32
|
-
|
|
33
|
-
class BidiBrowser extends _browser.Browser {
|
|
35
|
+
module.exports = __toCommonJS(bidiBrowser_exports);
|
|
36
|
+
var import_eventsHelper = require("../utils/eventsHelper");
|
|
37
|
+
var import_browser = require("../browser");
|
|
38
|
+
var import_browserContext = require("../browserContext");
|
|
39
|
+
var network = __toESM(require("../network"));
|
|
40
|
+
var import_bidiConnection = require("./bidiConnection");
|
|
41
|
+
var import_bidiNetworkManager = require("./bidiNetworkManager");
|
|
42
|
+
var import_bidiPage = require("./bidiPage");
|
|
43
|
+
var bidi = __toESM(require("./third_party/bidiProtocol"));
|
|
44
|
+
class BidiBrowser extends import_browser.Browser {
|
|
45
|
+
constructor(parent, transport, options) {
|
|
46
|
+
super(parent, options);
|
|
47
|
+
this._contexts = /* @__PURE__ */ new Map();
|
|
48
|
+
this._bidiPages = /* @__PURE__ */ new Map();
|
|
49
|
+
this._connection = new import_bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
50
|
+
this._browserSession = this._connection.browserSession;
|
|
51
|
+
this._eventListeners = [
|
|
52
|
+
import_eventsHelper.eventsHelper.addEventListener(this._browserSession, "browsingContext.contextCreated", this._onBrowsingContextCreated.bind(this)),
|
|
53
|
+
import_eventsHelper.eventsHelper.addEventListener(this._browserSession, "script.realmDestroyed", this._onScriptRealmDestroyed.bind(this))
|
|
54
|
+
];
|
|
55
|
+
}
|
|
34
56
|
static async connect(parent, transport, options) {
|
|
35
57
|
const browser = new BidiBrowser(parent, transport, options);
|
|
36
|
-
if (options.__testHookOnConnectToBrowser)
|
|
58
|
+
if (options.__testHookOnConnectToBrowser)
|
|
59
|
+
await options.__testHookOnConnectToBrowser();
|
|
37
60
|
let proxy;
|
|
38
61
|
if (options.proxy) {
|
|
39
62
|
proxy = {
|
|
40
|
-
proxyType:
|
|
63
|
+
proxyType: "manual"
|
|
41
64
|
};
|
|
42
|
-
const url = new URL(options.proxy.server);
|
|
65
|
+
const url = new URL(options.proxy.server);
|
|
43
66
|
switch (url.protocol) {
|
|
44
|
-
case
|
|
67
|
+
case "http:":
|
|
45
68
|
proxy.httpProxy = url.host;
|
|
46
69
|
break;
|
|
47
|
-
case
|
|
70
|
+
case "https:":
|
|
48
71
|
proxy.httpsProxy = url.host;
|
|
49
72
|
break;
|
|
50
|
-
case
|
|
73
|
+
case "socks4:":
|
|
51
74
|
proxy.socksProxy = url.host;
|
|
52
75
|
proxy.socksVersion = 4;
|
|
53
76
|
break;
|
|
54
|
-
case
|
|
77
|
+
case "socks5:":
|
|
55
78
|
proxy.socksProxy = url.host;
|
|
56
79
|
proxy.socksVersion = 5;
|
|
57
80
|
break;
|
|
58
81
|
default:
|
|
59
|
-
throw new Error(
|
|
82
|
+
throw new Error("Invalid proxy server protocol: " + options.proxy.server);
|
|
60
83
|
}
|
|
61
|
-
if (options.proxy.bypass)
|
|
62
|
-
|
|
84
|
+
if (options.proxy.bypass)
|
|
85
|
+
proxy.noProxy = options.proxy.bypass.split(",");
|
|
63
86
|
}
|
|
64
|
-
browser._bidiSessionInfo = await browser._browserSession.send(
|
|
87
|
+
browser._bidiSessionInfo = await browser._browserSession.send("session.new", {
|
|
65
88
|
capabilities: {
|
|
66
89
|
alwaysMatch: {
|
|
67
90
|
acceptInsecureCerts: false,
|
|
@@ -73,37 +96,28 @@ class BidiBrowser extends _browser.Browser {
|
|
|
73
96
|
}
|
|
74
97
|
}
|
|
75
98
|
});
|
|
76
|
-
await browser._browserSession.send(
|
|
77
|
-
events: [
|
|
99
|
+
await browser._browserSession.send("session.subscribe", {
|
|
100
|
+
events: [
|
|
101
|
+
"browsingContext",
|
|
102
|
+
"network",
|
|
103
|
+
"log",
|
|
104
|
+
"script"
|
|
105
|
+
]
|
|
78
106
|
});
|
|
79
107
|
if (options.persistent) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
await
|
|
108
|
+
const context = new BidiBrowserContext(browser, void 0, options.persistent);
|
|
109
|
+
browser._defaultContext = context;
|
|
110
|
+
await context._initialize();
|
|
111
|
+
const page = await browser._defaultContext.doCreateNewPage();
|
|
112
|
+
await page.waitForInitializedOrError();
|
|
85
113
|
}
|
|
86
114
|
return browser;
|
|
87
115
|
}
|
|
88
|
-
constructor(parent, transport, options) {
|
|
89
|
-
super(parent, options);
|
|
90
|
-
this._connection = void 0;
|
|
91
|
-
this._browserSession = void 0;
|
|
92
|
-
this._bidiSessionInfo = void 0;
|
|
93
|
-
this._contexts = new Map();
|
|
94
|
-
this._bidiPages = new Map();
|
|
95
|
-
this._eventListeners = void 0;
|
|
96
|
-
this._connection = new _bidiConnection.BidiConnection(transport, this._onDisconnect.bind(this), options.protocolLogger, options.browserLogsCollector);
|
|
97
|
-
this._browserSession = this._connection.browserSession;
|
|
98
|
-
this._eventListeners = [_eventsHelper.eventsHelper.addEventListener(this._browserSession, 'browsingContext.contextCreated', this._onBrowsingContextCreated.bind(this)), _eventsHelper.eventsHelper.addEventListener(this._browserSession, 'script.realmDestroyed', this._onScriptRealmDestroyed.bind(this))];
|
|
99
|
-
}
|
|
100
116
|
_onDisconnect() {
|
|
101
117
|
this._didClose();
|
|
102
118
|
}
|
|
103
119
|
async doCreateNewContext(options) {
|
|
104
|
-
const {
|
|
105
|
-
userContext
|
|
106
|
-
} = await this._browserSession.send('browser.createUserContext', {});
|
|
120
|
+
const { userContext } = await this._browserSession.send("browser.createUserContext", {});
|
|
107
121
|
const context = new BidiBrowserContext(this, userContext, options);
|
|
108
122
|
await context._initialize();
|
|
109
123
|
this._contexts.set(userContext, context);
|
|
@@ -124,21 +138,28 @@ class BidiBrowser extends _browser.Browser {
|
|
|
124
138
|
_onBrowsingContextCreated(event) {
|
|
125
139
|
if (event.parent) {
|
|
126
140
|
const parentFrameId = event.parent;
|
|
127
|
-
for (const
|
|
128
|
-
const parentFrame =
|
|
129
|
-
if (!parentFrame)
|
|
130
|
-
|
|
131
|
-
|
|
141
|
+
for (const page2 of this._bidiPages.values()) {
|
|
142
|
+
const parentFrame = page2._page._frameManager.frame(parentFrameId);
|
|
143
|
+
if (!parentFrame)
|
|
144
|
+
continue;
|
|
145
|
+
page2._session.addFrameBrowsingContext(event.context);
|
|
146
|
+
page2._page._frameManager.frameAttached(event.context, parentFrameId);
|
|
147
|
+
const frame = page2._page._frameManager.frame(event.context);
|
|
148
|
+
if (frame)
|
|
149
|
+
frame._url = event.url;
|
|
132
150
|
return;
|
|
133
151
|
}
|
|
134
152
|
return;
|
|
135
153
|
}
|
|
136
154
|
let context = this._contexts.get(event.userContext);
|
|
137
|
-
if (!context)
|
|
138
|
-
|
|
155
|
+
if (!context)
|
|
156
|
+
context = this._defaultContext;
|
|
157
|
+
if (!context)
|
|
158
|
+
return;
|
|
139
159
|
const session = this._connection.createMainFrameBrowsingContextSession(event.context);
|
|
140
160
|
const opener = event.originalOpener && this._bidiPages.get(event.originalOpener);
|
|
141
|
-
const page = new
|
|
161
|
+
const page = new import_bidiPage.BidiPage(context, session, opener || null);
|
|
162
|
+
page._page.mainFrame()._url = event.url;
|
|
142
163
|
this._bidiPages.set(event.context, page);
|
|
143
164
|
}
|
|
144
165
|
_onBrowsingContextDestroyed(event) {
|
|
@@ -147,165 +168,213 @@ class BidiBrowser extends _browser.Browser {
|
|
|
147
168
|
const parentFrameId = event.parent;
|
|
148
169
|
for (const page of this._bidiPages.values()) {
|
|
149
170
|
const parentFrame = page._page._frameManager.frame(parentFrameId);
|
|
150
|
-
if (!parentFrame)
|
|
171
|
+
if (!parentFrame)
|
|
172
|
+
continue;
|
|
151
173
|
page._page._frameManager.frameDetached(event.context);
|
|
152
174
|
return;
|
|
153
175
|
}
|
|
154
176
|
return;
|
|
155
177
|
}
|
|
156
178
|
const bidiPage = this._bidiPages.get(event.context);
|
|
157
|
-
if (!bidiPage)
|
|
179
|
+
if (!bidiPage)
|
|
180
|
+
return;
|
|
158
181
|
bidiPage.didClose();
|
|
159
182
|
this._bidiPages.delete(event.context);
|
|
160
183
|
}
|
|
161
184
|
_onScriptRealmDestroyed(event) {
|
|
162
185
|
for (const page of this._bidiPages.values()) {
|
|
163
|
-
if (page._onRealmDestroyed(event))
|
|
186
|
+
if (page._onRealmDestroyed(event))
|
|
187
|
+
return;
|
|
164
188
|
}
|
|
165
189
|
}
|
|
166
190
|
}
|
|
167
|
-
|
|
168
|
-
class BidiBrowserContext extends _browserContext.BrowserContext {
|
|
191
|
+
class BidiBrowserContext extends import_browserContext.BrowserContext {
|
|
169
192
|
constructor(browser, browserContextId, options) {
|
|
170
193
|
super(browser, options, browserContextId);
|
|
194
|
+
this._initScriptIds = [];
|
|
171
195
|
this._authenticateProxyViaHeader();
|
|
172
196
|
}
|
|
173
197
|
_bidiPages() {
|
|
174
|
-
return [...this._browser._bidiPages.values()].filter(bidiPage => bidiPage._browserContext === this);
|
|
198
|
+
return [...this._browser._bidiPages.values()].filter((bidiPage) => bidiPage._browserContext === this);
|
|
199
|
+
}
|
|
200
|
+
async _initialize() {
|
|
201
|
+
const promises = [
|
|
202
|
+
super._initialize(),
|
|
203
|
+
this._installMainBinding()
|
|
204
|
+
];
|
|
205
|
+
if (this._options.viewport) {
|
|
206
|
+
promises.push(this._browser._browserSession.send("browsingContext.setViewport", {
|
|
207
|
+
viewport: {
|
|
208
|
+
width: this._options.viewport.width,
|
|
209
|
+
height: this._options.viewport.height
|
|
210
|
+
},
|
|
211
|
+
devicePixelRatio: this._options.deviceScaleFactor || 1,
|
|
212
|
+
userContexts: [this._userContextId()]
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
await Promise.all(promises);
|
|
216
|
+
}
|
|
217
|
+
// TODO: consider calling this only when bindings are added.
|
|
218
|
+
async _installMainBinding() {
|
|
219
|
+
const functionDeclaration = import_bidiPage.addMainBinding.toString();
|
|
220
|
+
const args = [{
|
|
221
|
+
type: "channel",
|
|
222
|
+
value: {
|
|
223
|
+
channel: import_bidiPage.kPlaywrightBindingChannel,
|
|
224
|
+
ownership: bidi.Script.ResultOwnership.Root
|
|
225
|
+
}
|
|
226
|
+
}];
|
|
227
|
+
await this._browser._browserSession.send("script.addPreloadScript", {
|
|
228
|
+
functionDeclaration,
|
|
229
|
+
arguments: args,
|
|
230
|
+
userContexts: [this._userContextId()]
|
|
231
|
+
});
|
|
175
232
|
}
|
|
176
|
-
|
|
177
|
-
return this._bidiPages().map(bidiPage => bidiPage.
|
|
233
|
+
possiblyUninitializedPages() {
|
|
234
|
+
return this._bidiPages().map((bidiPage) => bidiPage._page);
|
|
178
235
|
}
|
|
179
|
-
async
|
|
180
|
-
(0,
|
|
181
|
-
const {
|
|
182
|
-
context
|
|
183
|
-
} = await this._browser._browserSession.send('browsingContext.create', {
|
|
236
|
+
async doCreateNewPage() {
|
|
237
|
+
(0, import_browserContext.assertBrowserContextIsNotOwned)(this);
|
|
238
|
+
const { context } = await this._browser._browserSession.send("browsingContext.create", {
|
|
184
239
|
type: bidi.BrowsingContext.CreateType.Window,
|
|
185
240
|
userContext: this._browserContextId
|
|
186
241
|
});
|
|
187
|
-
return this._browser._bidiPages.get(context);
|
|
242
|
+
return this._browser._bidiPages.get(context)._page;
|
|
188
243
|
}
|
|
189
244
|
async doGetCookies(urls) {
|
|
190
|
-
const {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
userContext: this._browserContextId
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
return network.filterCookies(cookies.map(c => {
|
|
199
|
-
var _c$expiry;
|
|
245
|
+
const { cookies } = await this._browser._browserSession.send(
|
|
246
|
+
"storage.getCookies",
|
|
247
|
+
{ partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
248
|
+
);
|
|
249
|
+
return network.filterCookies(cookies.map((c) => {
|
|
200
250
|
const copy = {
|
|
201
251
|
name: c.name,
|
|
202
|
-
value: (0,
|
|
252
|
+
value: (0, import_bidiNetworkManager.bidiBytesValueToString)(c.value),
|
|
203
253
|
domain: c.domain,
|
|
204
254
|
path: c.path,
|
|
205
255
|
httpOnly: c.httpOnly,
|
|
206
256
|
secure: c.secure,
|
|
207
|
-
expires:
|
|
208
|
-
sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) :
|
|
257
|
+
expires: c.expiry ?? -1,
|
|
258
|
+
sameSite: c.sameSite ? fromBidiSameSite(c.sameSite) : "None"
|
|
209
259
|
};
|
|
210
260
|
return copy;
|
|
211
261
|
}), urls);
|
|
212
262
|
}
|
|
213
263
|
async addCookies(cookies) {
|
|
214
264
|
cookies = network.rewriteCookies(cookies);
|
|
215
|
-
const promises = cookies.map(c => {
|
|
265
|
+
const promises = cookies.map((c) => {
|
|
216
266
|
const cookie = {
|
|
217
267
|
name: c.name,
|
|
218
|
-
value: {
|
|
219
|
-
type: 'string',
|
|
220
|
-
value: c.value
|
|
221
|
-
},
|
|
268
|
+
value: { type: "string", value: c.value },
|
|
222
269
|
domain: c.domain,
|
|
223
270
|
path: c.path,
|
|
224
271
|
httpOnly: c.httpOnly,
|
|
225
272
|
secure: c.secure,
|
|
226
273
|
sameSite: c.sameSite && toBidiSameSite(c.sameSite),
|
|
227
|
-
expiry: c.expires === -1 || c.expires ===
|
|
274
|
+
expiry: c.expires === -1 || c.expires === void 0 ? void 0 : Math.round(c.expires)
|
|
228
275
|
};
|
|
229
|
-
return this._browser._browserSession.send(
|
|
230
|
-
|
|
231
|
-
partition: {
|
|
232
|
-
|
|
233
|
-
userContext: this._browserContextId
|
|
234
|
-
}
|
|
235
|
-
});
|
|
276
|
+
return this._browser._browserSession.send(
|
|
277
|
+
"storage.setCookie",
|
|
278
|
+
{ cookie, partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
279
|
+
);
|
|
236
280
|
});
|
|
237
281
|
await Promise.all(promises);
|
|
238
282
|
}
|
|
239
283
|
async doClearCookies() {
|
|
240
|
-
await this._browser._browserSession.send(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
284
|
+
await this._browser._browserSession.send(
|
|
285
|
+
"storage.deleteCookies",
|
|
286
|
+
{ partition: { type: "storageKey", userContext: this._browserContextId } }
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
async doGrantPermissions(origin, permissions) {
|
|
290
|
+
}
|
|
291
|
+
async doClearPermissions() {
|
|
292
|
+
}
|
|
293
|
+
async setGeolocation(geolocation) {
|
|
294
|
+
}
|
|
295
|
+
async setExtraHTTPHeaders(headers) {
|
|
296
|
+
}
|
|
297
|
+
async setUserAgent(userAgent) {
|
|
298
|
+
}
|
|
299
|
+
async setOffline(offline) {
|
|
246
300
|
}
|
|
247
|
-
async doGrantPermissions(origin, permissions) {}
|
|
248
|
-
async doClearPermissions() {}
|
|
249
|
-
async setGeolocation(geolocation) {}
|
|
250
|
-
async setExtraHTTPHeaders(headers) {}
|
|
251
|
-
async setUserAgent(userAgent) {}
|
|
252
|
-
async setOffline(offline) {}
|
|
253
301
|
async doSetHTTPCredentials(httpCredentials) {
|
|
254
302
|
this._options.httpCredentials = httpCredentials;
|
|
255
|
-
for (const page of this.pages())
|
|
303
|
+
for (const page of this.pages())
|
|
304
|
+
await page._delegate.updateHttpCredentials();
|
|
256
305
|
}
|
|
257
306
|
async doAddInitScript(initScript) {
|
|
258
|
-
await
|
|
307
|
+
const { script } = await this._browser._browserSession.send("script.addPreloadScript", {
|
|
308
|
+
// TODO: remove function call from the source.
|
|
309
|
+
functionDeclaration: `() => { return ${initScript.source} }`,
|
|
310
|
+
userContexts: [this._browserContextId || "default"]
|
|
311
|
+
});
|
|
312
|
+
if (!initScript.internal)
|
|
313
|
+
this._initScriptIds.push(script);
|
|
314
|
+
}
|
|
315
|
+
async doRemoveNonInternalInitScripts() {
|
|
316
|
+
const promise = Promise.all(this._initScriptIds.map((script) => this._browser._browserSession.send("script.removePreloadScript", { script })));
|
|
317
|
+
this._initScriptIds = [];
|
|
318
|
+
await promise;
|
|
319
|
+
}
|
|
320
|
+
async doUpdateRequestInterception() {
|
|
321
|
+
}
|
|
322
|
+
onClosePersistent() {
|
|
323
|
+
}
|
|
324
|
+
async clearCache() {
|
|
259
325
|
}
|
|
260
|
-
async doRemoveNonInternalInitScripts() {}
|
|
261
|
-
async doUpdateRequestInterception() {}
|
|
262
|
-
onClosePersistent() {}
|
|
263
|
-
async clearCache() {}
|
|
264
326
|
async doClose(reason) {
|
|
265
327
|
if (!this._browserContextId) {
|
|
266
|
-
|
|
267
|
-
await this._browser.close({
|
|
268
|
-
reason
|
|
269
|
-
});
|
|
328
|
+
await this._browser.close({ reason });
|
|
270
329
|
return;
|
|
271
330
|
}
|
|
272
|
-
await this._browser._browserSession.send(
|
|
331
|
+
await this._browser._browserSession.send("browser.removeUserContext", {
|
|
273
332
|
userContext: this._browserContextId
|
|
274
333
|
});
|
|
275
334
|
this._browser._contexts.delete(this._browserContextId);
|
|
276
335
|
}
|
|
277
|
-
async cancelDownload(uuid) {
|
|
336
|
+
async cancelDownload(uuid) {
|
|
337
|
+
}
|
|
338
|
+
_userContextId() {
|
|
339
|
+
if (this._browserContextId)
|
|
340
|
+
return this._browserContextId;
|
|
341
|
+
return "default";
|
|
342
|
+
}
|
|
278
343
|
}
|
|
279
|
-
exports.BidiBrowserContext = BidiBrowserContext;
|
|
280
344
|
function fromBidiSameSite(sameSite) {
|
|
281
345
|
switch (sameSite) {
|
|
282
|
-
case
|
|
283
|
-
return
|
|
284
|
-
case
|
|
285
|
-
return
|
|
286
|
-
case
|
|
287
|
-
return
|
|
288
|
-
}
|
|
289
|
-
return
|
|
346
|
+
case "strict":
|
|
347
|
+
return "Strict";
|
|
348
|
+
case "lax":
|
|
349
|
+
return "Lax";
|
|
350
|
+
case "none":
|
|
351
|
+
return "None";
|
|
352
|
+
}
|
|
353
|
+
return "None";
|
|
290
354
|
}
|
|
291
355
|
function toBidiSameSite(sameSite) {
|
|
292
356
|
switch (sameSite) {
|
|
293
|
-
case
|
|
357
|
+
case "Strict":
|
|
294
358
|
return bidi.Network.SameSite.Strict;
|
|
295
|
-
case
|
|
359
|
+
case "Lax":
|
|
296
360
|
return bidi.Network.SameSite.Lax;
|
|
297
|
-
case
|
|
361
|
+
case "None":
|
|
298
362
|
return bidi.Network.SameSite.None;
|
|
299
363
|
}
|
|
300
364
|
return bidi.Network.SameSite.None;
|
|
301
365
|
}
|
|
302
|
-
|
|
303
|
-
(
|
|
304
|
-
let SameSite
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
}({});
|
|
310
|
-
|
|
311
|
-
|
|
366
|
+
var Network;
|
|
367
|
+
((Network2) => {
|
|
368
|
+
let SameSite;
|
|
369
|
+
((SameSite2) => {
|
|
370
|
+
SameSite2["Strict"] = "strict";
|
|
371
|
+
SameSite2["Lax"] = "lax";
|
|
372
|
+
SameSite2["None"] = "none";
|
|
373
|
+
})(SameSite = Network2.SameSite || (Network2.SameSite = {}));
|
|
374
|
+
})(Network || (Network = {}));
|
|
375
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
376
|
+
0 && (module.exports = {
|
|
377
|
+
BidiBrowser,
|
|
378
|
+
BidiBrowserContext,
|
|
379
|
+
Network
|
|
380
|
+
});
|