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,68 +1,83 @@
|
|
|
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 android_exports = {};
|
|
30
|
+
__export(android_exports, {
|
|
31
|
+
Android: () => Android,
|
|
32
|
+
AndroidDevice: () => AndroidDevice
|
|
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
|
-
var
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* You may obtain a copy of the License at
|
|
32
|
-
*
|
|
33
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
34
|
-
*
|
|
35
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
36
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
37
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
38
|
-
* See the License for the specific language governing permissions and
|
|
39
|
-
* limitations under the License.
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
const ARTIFACTS_FOLDER = _path.default.join(_os.default.tmpdir(), 'playwright-artifacts-');
|
|
43
|
-
class Android extends _instrumentation.SdkObject {
|
|
34
|
+
module.exports = __toCommonJS(android_exports);
|
|
35
|
+
var import_events = require("events");
|
|
36
|
+
var import_fs = __toESM(require("fs"));
|
|
37
|
+
var import_os = __toESM(require("os"));
|
|
38
|
+
var import_path = __toESM(require("path"));
|
|
39
|
+
var import_timeoutSettings = require("../timeoutSettings");
|
|
40
|
+
var import_pipeTransport = require("../utils/pipeTransport");
|
|
41
|
+
var import_crypto = require("../utils/crypto");
|
|
42
|
+
var import_debug = require("../utils/debug");
|
|
43
|
+
var import_env = require("../utils/env");
|
|
44
|
+
var import_task = require("../utils/task");
|
|
45
|
+
var import_debugLogger = require("../utils/debugLogger");
|
|
46
|
+
var import_utilsBundle = require("../../utilsBundle");
|
|
47
|
+
var import_utilsBundle2 = require("../../utilsBundle");
|
|
48
|
+
var import_browserContext = require("../browserContext");
|
|
49
|
+
var import_chromiumSwitches = require("../chromium/chromiumSwitches");
|
|
50
|
+
var import_crBrowser = require("../chromium/crBrowser");
|
|
51
|
+
var import_fileUtils = require("../utils/fileUtils");
|
|
52
|
+
var import_helper = require("../helper");
|
|
53
|
+
var import_instrumentation = require("../instrumentation");
|
|
54
|
+
var import_processLauncher = require("../utils/processLauncher");
|
|
55
|
+
var import_progress = require("../progress");
|
|
56
|
+
var import_registry = require("../registry");
|
|
57
|
+
const ARTIFACTS_FOLDER = import_path.default.join(import_os.default.tmpdir(), "playwright-artifacts-");
|
|
58
|
+
class Android extends import_instrumentation.SdkObject {
|
|
44
59
|
constructor(parent, backend) {
|
|
45
|
-
super(parent,
|
|
46
|
-
this.
|
|
47
|
-
this._devices = new Map();
|
|
48
|
-
this._timeoutSettings = void 0;
|
|
60
|
+
super(parent, "android");
|
|
61
|
+
this._devices = /* @__PURE__ */ new Map();
|
|
49
62
|
this._backend = backend;
|
|
50
|
-
this._timeoutSettings = new
|
|
63
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings();
|
|
51
64
|
}
|
|
52
65
|
setDefaultTimeout(timeout) {
|
|
53
66
|
this._timeoutSettings.setDefaultTimeout(timeout);
|
|
54
67
|
}
|
|
55
68
|
async devices(options) {
|
|
56
|
-
const devices = (await this._backend.devices(options)).filter(d => d.status ===
|
|
57
|
-
const newSerials = new Set();
|
|
69
|
+
const devices = (await this._backend.devices(options)).filter((d) => d.status === "device");
|
|
70
|
+
const newSerials = /* @__PURE__ */ new Set();
|
|
58
71
|
for (const d of devices) {
|
|
59
72
|
newSerials.add(d.serial);
|
|
60
|
-
if (this._devices.has(d.serial))
|
|
73
|
+
if (this._devices.has(d.serial))
|
|
74
|
+
continue;
|
|
61
75
|
const device = await AndroidDevice.create(this, d, options);
|
|
62
76
|
this._devices.set(d.serial, device);
|
|
63
77
|
}
|
|
64
78
|
for (const d of this._devices.keys()) {
|
|
65
|
-
if (!newSerials.has(d))
|
|
79
|
+
if (!newSerials.has(d))
|
|
80
|
+
this._devices.delete(d);
|
|
66
81
|
}
|
|
67
82
|
return [...this._devices.values()];
|
|
68
83
|
}
|
|
@@ -70,33 +85,31 @@ class Android extends _instrumentation.SdkObject {
|
|
|
70
85
|
this._devices.delete(device.serial);
|
|
71
86
|
}
|
|
72
87
|
}
|
|
73
|
-
|
|
74
|
-
class AndroidDevice extends _instrumentation.SdkObject {
|
|
88
|
+
class AndroidDevice extends import_instrumentation.SdkObject {
|
|
75
89
|
constructor(android, backend, model, options) {
|
|
76
|
-
super(android,
|
|
77
|
-
this._backend = void 0;
|
|
78
|
-
this.model = void 0;
|
|
79
|
-
this.serial = void 0;
|
|
80
|
-
this._options = void 0;
|
|
81
|
-
this._driverPromise = void 0;
|
|
90
|
+
super(android, "android-device");
|
|
82
91
|
this._lastId = 0;
|
|
83
|
-
this._callbacks = new Map();
|
|
84
|
-
this.
|
|
85
|
-
this.
|
|
86
|
-
this._webViews = new Map();
|
|
87
|
-
this._browserConnections = new Set();
|
|
88
|
-
this._android = void 0;
|
|
92
|
+
this._callbacks = /* @__PURE__ */ new Map();
|
|
93
|
+
this._webViews = /* @__PURE__ */ new Map();
|
|
94
|
+
this._browserConnections = /* @__PURE__ */ new Set();
|
|
89
95
|
this._isClosed = false;
|
|
90
96
|
this._android = android;
|
|
91
97
|
this._backend = backend;
|
|
92
98
|
this.model = model;
|
|
93
99
|
this.serial = backend.serial;
|
|
94
100
|
this._options = options;
|
|
95
|
-
this._timeoutSettings = new
|
|
101
|
+
this._timeoutSettings = new import_timeoutSettings.TimeoutSettings(android._timeoutSettings);
|
|
102
|
+
}
|
|
103
|
+
static {
|
|
104
|
+
this.Events = {
|
|
105
|
+
WebViewAdded: "webViewAdded",
|
|
106
|
+
WebViewRemoved: "webViewRemoved",
|
|
107
|
+
Close: "close"
|
|
108
|
+
};
|
|
96
109
|
}
|
|
97
110
|
static async create(android, backend, options) {
|
|
98
111
|
await backend.init();
|
|
99
|
-
const model = await backend.runCommand(
|
|
112
|
+
const model = await backend.runCommand("shell:getprop ro.product.model");
|
|
100
113
|
const device = new AndroidDevice(android, backend, model.toString().trim(), options);
|
|
101
114
|
await device._init();
|
|
102
115
|
return device;
|
|
@@ -105,7 +118,8 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
105
118
|
await this._refreshWebViews();
|
|
106
119
|
const poll = () => {
|
|
107
120
|
this._pollingWebViews = setTimeout(() => this._refreshWebViews().then(poll).catch(() => {
|
|
108
|
-
this.close().catch(() => {
|
|
121
|
+
this.close().catch(() => {
|
|
122
|
+
});
|
|
109
123
|
}), 500);
|
|
110
124
|
};
|
|
111
125
|
poll();
|
|
@@ -125,127 +139,131 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
125
139
|
return await this._backend.runCommand(`shell:screencap -p`);
|
|
126
140
|
}
|
|
127
141
|
async _driver() {
|
|
128
|
-
if (this._isClosed)
|
|
129
|
-
|
|
142
|
+
if (this._isClosed)
|
|
143
|
+
return;
|
|
144
|
+
if (!this._driverPromise)
|
|
145
|
+
this._driverPromise = this._installDriver();
|
|
130
146
|
return this._driverPromise;
|
|
131
147
|
}
|
|
132
148
|
async _installDriver() {
|
|
133
|
-
(0,
|
|
149
|
+
(0, import_utilsBundle.debug)("pw:android")("Stopping the old driver");
|
|
134
150
|
await this.shell(`am force-stop com.microsoft.playwright.androiddriver`);
|
|
135
|
-
|
|
136
|
-
// uninstall and install driver on every execution
|
|
137
151
|
if (!this._options.omitDriverInstall) {
|
|
138
|
-
(0,
|
|
152
|
+
(0, import_utilsBundle.debug)("pw:android")("Uninstalling the old driver");
|
|
139
153
|
await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver`);
|
|
140
154
|
await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`);
|
|
141
|
-
(0,
|
|
142
|
-
const executable =
|
|
143
|
-
const packageManagerCommand = (0,
|
|
144
|
-
for (const file of [
|
|
145
|
-
const fullName =
|
|
146
|
-
if (!
|
|
147
|
-
|
|
155
|
+
(0, import_utilsBundle.debug)("pw:android")("Installing the new driver");
|
|
156
|
+
const executable = import_registry.registry.findExecutable("android");
|
|
157
|
+
const packageManagerCommand = (0, import_env.getPackageManagerExecCommand)();
|
|
158
|
+
for (const file of ["android-driver.apk", "android-driver-target.apk"]) {
|
|
159
|
+
const fullName = import_path.default.join(executable.directory, file);
|
|
160
|
+
if (!import_fs.default.existsSync(fullName))
|
|
161
|
+
throw new Error(`Please install Android driver apk using '${packageManagerCommand} playwright install android'`);
|
|
162
|
+
await this.installApk(await import_fs.default.promises.readFile(fullName));
|
|
148
163
|
}
|
|
149
164
|
} else {
|
|
150
|
-
(0,
|
|
165
|
+
(0, import_utilsBundle.debug)("pw:android")("Skipping the driver installation");
|
|
151
166
|
}
|
|
152
|
-
(0,
|
|
153
|
-
this.shell(
|
|
154
|
-
const socket = await this._waitForLocalAbstract(
|
|
155
|
-
const transport = new
|
|
156
|
-
transport.onmessage = message => {
|
|
167
|
+
(0, import_utilsBundle.debug)("pw:android")("Starting the new driver");
|
|
168
|
+
this.shell("am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner").catch((e) => (0, import_utilsBundle.debug)("pw:android")(e));
|
|
169
|
+
const socket = await this._waitForLocalAbstract("playwright_android_driver_socket");
|
|
170
|
+
const transport = new import_pipeTransport.PipeTransport(socket, socket, socket, "be");
|
|
171
|
+
transport.onmessage = (message) => {
|
|
157
172
|
const response = JSON.parse(message);
|
|
158
|
-
const {
|
|
159
|
-
id,
|
|
160
|
-
result,
|
|
161
|
-
error
|
|
162
|
-
} = response;
|
|
173
|
+
const { id, result, error } = response;
|
|
163
174
|
const callback = this._callbacks.get(id);
|
|
164
|
-
if (!callback)
|
|
165
|
-
|
|
175
|
+
if (!callback)
|
|
176
|
+
return;
|
|
177
|
+
if (error)
|
|
178
|
+
callback.reject(new Error(error));
|
|
179
|
+
else
|
|
180
|
+
callback.fulfill(result);
|
|
166
181
|
this._callbacks.delete(id);
|
|
167
182
|
};
|
|
168
183
|
return transport;
|
|
169
184
|
}
|
|
170
185
|
async _waitForLocalAbstract(socketName) {
|
|
171
186
|
let socket;
|
|
172
|
-
(0,
|
|
187
|
+
(0, import_utilsBundle.debug)("pw:android")(`Polling the socket localabstract:${socketName}`);
|
|
173
188
|
while (!socket) {
|
|
174
189
|
try {
|
|
175
190
|
socket = await this._backend.open(`localabstract:${socketName}`);
|
|
176
191
|
} catch (e) {
|
|
177
|
-
await new Promise(f => setTimeout(f, 250));
|
|
192
|
+
await new Promise((f) => setTimeout(f, 250));
|
|
178
193
|
}
|
|
179
194
|
}
|
|
180
|
-
(0,
|
|
195
|
+
(0, import_utilsBundle.debug)("pw:android")(`Connected to localabstract:${socketName}`);
|
|
181
196
|
return socket;
|
|
182
197
|
}
|
|
183
198
|
async send(method, params = {}) {
|
|
184
|
-
// Patch the timeout in!
|
|
185
199
|
params.timeout = this._timeoutSettings.timeout(params);
|
|
186
200
|
const driver = await this._driver();
|
|
187
|
-
if (!driver)
|
|
201
|
+
if (!driver)
|
|
202
|
+
throw new Error("Device is closed");
|
|
188
203
|
const id = ++this._lastId;
|
|
189
|
-
const result = new Promise((fulfill, reject) => this._callbacks.set(id, {
|
|
190
|
-
|
|
191
|
-
reject
|
|
192
|
-
}));
|
|
193
|
-
driver.send(JSON.stringify({
|
|
194
|
-
id,
|
|
195
|
-
method,
|
|
196
|
-
params
|
|
197
|
-
}));
|
|
204
|
+
const result = new Promise((fulfill, reject) => this._callbacks.set(id, { fulfill, reject }));
|
|
205
|
+
driver.send(JSON.stringify({ id, method, params }));
|
|
198
206
|
return result;
|
|
199
207
|
}
|
|
200
208
|
async close() {
|
|
201
|
-
if (this._isClosed)
|
|
209
|
+
if (this._isClosed)
|
|
210
|
+
return;
|
|
202
211
|
this._isClosed = true;
|
|
203
|
-
if (this._pollingWebViews)
|
|
204
|
-
|
|
212
|
+
if (this._pollingWebViews)
|
|
213
|
+
clearTimeout(this._pollingWebViews);
|
|
214
|
+
for (const connection of this._browserConnections)
|
|
215
|
+
await connection.close();
|
|
205
216
|
if (this._driverPromise) {
|
|
206
217
|
const driver = await this._driver();
|
|
207
|
-
driver
|
|
218
|
+
driver?.close();
|
|
208
219
|
}
|
|
209
220
|
await this._backend.close();
|
|
210
221
|
this._android._deviceClosed(this);
|
|
211
222
|
this.emit(AndroidDevice.Events.Close);
|
|
212
223
|
}
|
|
213
|
-
async launchBrowser(pkg =
|
|
214
|
-
(0,
|
|
224
|
+
async launchBrowser(pkg = "com.android.chrome", options) {
|
|
225
|
+
(0, import_utilsBundle.debug)("pw:android")("Force-stopping", pkg);
|
|
215
226
|
await this._backend.runCommand(`shell:am force-stop ${pkg}`);
|
|
216
|
-
const socketName = (0,
|
|
217
|
-
const commandLine = this._defaultArgs(options, socketName).join(
|
|
218
|
-
(0,
|
|
219
|
-
|
|
220
|
-
await this._backend.runCommand(`shell:echo "${Buffer.from(commandLine).toString('base64')}" | base64 -d > /data/local/tmp/chrome-command-line`);
|
|
227
|
+
const socketName = (0, import_debug.isUnderTest)() ? "webview_devtools_remote_playwright_test" : "playwright_" + (0, import_crypto.createGuid)() + "_devtools_remote";
|
|
228
|
+
const commandLine = this._defaultArgs(options, socketName).join(" ");
|
|
229
|
+
(0, import_utilsBundle.debug)("pw:android")("Starting", pkg, commandLine);
|
|
230
|
+
await this._backend.runCommand(`shell:echo "${Buffer.from(commandLine).toString("base64")}" | base64 -d > /data/local/tmp/chrome-command-line`);
|
|
221
231
|
await this._backend.runCommand(`shell:am start -a android.intent.action.VIEW -d about:blank ${pkg}`);
|
|
222
232
|
const browserContext = await this._connectToBrowser(socketName, options);
|
|
223
233
|
await this._backend.runCommand(`shell:rm /data/local/tmp/chrome-command-line`);
|
|
224
234
|
return browserContext;
|
|
225
235
|
}
|
|
226
236
|
_defaultArgs(options, socketName) {
|
|
227
|
-
const chromeArguments = [
|
|
237
|
+
const chromeArguments = [
|
|
238
|
+
"_",
|
|
239
|
+
"--disable-fre",
|
|
240
|
+
"--no-default-browser-check",
|
|
241
|
+
`--remote-debugging-socket-name=${socketName}`,
|
|
242
|
+
...import_chromiumSwitches.chromiumSwitches,
|
|
243
|
+
...this._innerDefaultArgs(options)
|
|
244
|
+
];
|
|
228
245
|
return chromeArguments;
|
|
229
246
|
}
|
|
230
247
|
_innerDefaultArgs(options) {
|
|
231
|
-
const {
|
|
232
|
-
args = [],
|
|
233
|
-
proxy
|
|
234
|
-
} = options;
|
|
248
|
+
const { args = [], proxy } = options;
|
|
235
249
|
const chromeArguments = [];
|
|
236
250
|
if (proxy) {
|
|
237
251
|
chromeArguments.push(`--proxy-server=${proxy.server}`);
|
|
238
252
|
const proxyBypassRules = [];
|
|
239
|
-
if (proxy.bypass)
|
|
240
|
-
|
|
241
|
-
if (
|
|
253
|
+
if (proxy.bypass)
|
|
254
|
+
proxyBypassRules.push(...proxy.bypass.split(",").map((t) => t.trim()).map((t) => t.startsWith(".") ? "*" + t : t));
|
|
255
|
+
if (!process.env.PLAYWRIGHT_DISABLE_FORCED_CHROMIUM_PROXIED_LOOPBACK && !proxyBypassRules.includes("<-loopback>"))
|
|
256
|
+
proxyBypassRules.push("<-loopback>");
|
|
257
|
+
if (proxyBypassRules.length > 0)
|
|
258
|
+
chromeArguments.push(`--proxy-bypass-list=${proxyBypassRules.join(";")}`);
|
|
242
259
|
}
|
|
243
260
|
chromeArguments.push(...args);
|
|
244
261
|
return chromeArguments;
|
|
245
262
|
}
|
|
246
263
|
async connectToWebView(socketName) {
|
|
247
264
|
const webView = this._webViews.get(socketName);
|
|
248
|
-
if (!webView)
|
|
265
|
+
if (!webView)
|
|
266
|
+
throw new Error("WebView has been closed");
|
|
249
267
|
return await this._connectToBrowser(socketName);
|
|
250
268
|
}
|
|
251
269
|
async _connectToBrowser(socketName, options = {}) {
|
|
@@ -253,38 +271,36 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
253
271
|
const androidBrowser = new AndroidBrowser(this, socket);
|
|
254
272
|
await androidBrowser._init();
|
|
255
273
|
this._browserConnections.add(androidBrowser);
|
|
256
|
-
const artifactsDir = await
|
|
274
|
+
const artifactsDir = await import_fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
|
|
257
275
|
const cleanupArtifactsDir = async () => {
|
|
258
|
-
const errors = await (0,
|
|
259
|
-
for (let i = 0; i < (errors || []).length; ++i)
|
|
276
|
+
const errors = (await (0, import_fileUtils.removeFolders)([artifactsDir])).filter(Boolean);
|
|
277
|
+
for (let i = 0; i < (errors || []).length; ++i)
|
|
278
|
+
(0, import_utilsBundle.debug)("pw:android")(`exception while removing ${artifactsDir}: ${errors[i]}`);
|
|
260
279
|
};
|
|
261
|
-
|
|
262
|
-
socket.on(
|
|
263
|
-
|
|
264
|
-
cleanupArtifactsDir().catch(e => (0,
|
|
280
|
+
import_processLauncher.gracefullyCloseSet.add(cleanupArtifactsDir);
|
|
281
|
+
socket.on("close", async () => {
|
|
282
|
+
import_processLauncher.gracefullyCloseSet.delete(cleanupArtifactsDir);
|
|
283
|
+
cleanupArtifactsDir().catch((e) => (0, import_utilsBundle.debug)("pw:android")(`could not cleanup artifacts dir: ${e}`));
|
|
265
284
|
});
|
|
266
285
|
const browserOptions = {
|
|
267
|
-
name:
|
|
286
|
+
name: "clank",
|
|
268
287
|
isChromium: true,
|
|
269
288
|
slowMo: 0,
|
|
270
|
-
persistent: {
|
|
271
|
-
...options,
|
|
272
|
-
noDefaultViewport: true
|
|
273
|
-
},
|
|
289
|
+
persistent: { ...options, noDefaultViewport: true },
|
|
274
290
|
artifactsDir,
|
|
275
291
|
downloadsPath: artifactsDir,
|
|
276
292
|
tracesDir: artifactsDir,
|
|
277
293
|
browserProcess: new ClankBrowserProcess(androidBrowser),
|
|
278
294
|
proxy: options.proxy,
|
|
279
|
-
protocolLogger:
|
|
280
|
-
browserLogsCollector: new
|
|
295
|
+
protocolLogger: import_helper.helper.debugProtocolLogger(),
|
|
296
|
+
browserLogsCollector: new import_debugLogger.RecentLogsCollector(),
|
|
281
297
|
originalLaunchOptions: {}
|
|
282
298
|
};
|
|
283
|
-
(0,
|
|
284
|
-
const browser = await
|
|
285
|
-
const controller = new
|
|
299
|
+
(0, import_browserContext.validateBrowserContextOptions)(options, browserOptions);
|
|
300
|
+
const browser = await import_crBrowser.CRBrowser.connect(this.attribution.playwright, androidBrowser, browserOptions);
|
|
301
|
+
const controller = new import_progress.ProgressController((0, import_instrumentation.serverSideCallMetadata)(), this);
|
|
286
302
|
const defaultContext = browser._defaultContext;
|
|
287
|
-
await controller.run(async progress => {
|
|
303
|
+
await controller.run(async (progress) => {
|
|
288
304
|
await defaultContext._loadDefaultContextAsIs(progress);
|
|
289
305
|
});
|
|
290
306
|
return defaultContext;
|
|
@@ -293,16 +309,16 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
293
309
|
return [...this._webViews.values()];
|
|
294
310
|
}
|
|
295
311
|
async installApk(content, options) {
|
|
296
|
-
const args = options && options.args ? options.args : [
|
|
297
|
-
(0,
|
|
298
|
-
const installSocket = await this._backend.open(`shell:cmd package install ${args.join(
|
|
299
|
-
(0,
|
|
312
|
+
const args = options && options.args ? options.args : ["-r", "-t", "-S"];
|
|
313
|
+
(0, import_utilsBundle.debug)("pw:android")("Opening install socket");
|
|
314
|
+
const installSocket = await this._backend.open(`shell:cmd package install ${args.join(" ")} ${content.length}`);
|
|
315
|
+
(0, import_utilsBundle.debug)("pw:android")("Writing driver bytes: " + content.length);
|
|
300
316
|
await installSocket.write(content);
|
|
301
|
-
const success = await new Promise(f => installSocket.on(
|
|
302
|
-
(0,
|
|
317
|
+
const success = await new Promise((f) => installSocket.on("data", f));
|
|
318
|
+
(0, import_utilsBundle.debug)("pw:android")("Written driver bytes: " + success);
|
|
303
319
|
installSocket.close();
|
|
304
320
|
}
|
|
305
|
-
async push(content,
|
|
321
|
+
async push(content, path2, mode = 420) {
|
|
306
322
|
const socket = await this._backend.open(`sync:`);
|
|
307
323
|
const sendHeader = async (command, length) => {
|
|
308
324
|
const buffer = Buffer.alloc(command.length + 4);
|
|
@@ -314,39 +330,38 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
314
330
|
await sendHeader(command, data.length);
|
|
315
331
|
await socket.write(data);
|
|
316
332
|
};
|
|
317
|
-
await send(
|
|
333
|
+
await send("SEND", Buffer.from(`${path2},${mode}`));
|
|
318
334
|
const maxChunk = 65535;
|
|
319
|
-
for (let i = 0; i < content.length; i += maxChunk)
|
|
320
|
-
|
|
321
|
-
|
|
335
|
+
for (let i = 0; i < content.length; i += maxChunk)
|
|
336
|
+
await send("DATA", content.slice(i, i + maxChunk));
|
|
337
|
+
await sendHeader("DONE", Date.now() / 1e3 | 0);
|
|
338
|
+
const result = await new Promise((f) => socket.once("data", f));
|
|
322
339
|
const code = result.slice(0, 4).toString();
|
|
323
|
-
if (code !==
|
|
340
|
+
if (code !== "OKAY")
|
|
341
|
+
throw new Error("Could not push: " + code);
|
|
324
342
|
socket.close();
|
|
325
343
|
}
|
|
326
344
|
async _refreshWebViews() {
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
const socketNames = new Set();
|
|
345
|
+
const sockets = (await this._backend.runCommand(`shell:cat /proc/net/unix | grep webview_devtools_remote`)).toString().split("\n");
|
|
346
|
+
if (this._isClosed)
|
|
347
|
+
return;
|
|
348
|
+
const socketNames = /* @__PURE__ */ new Set();
|
|
331
349
|
for (const line of sockets) {
|
|
332
350
|
const matchSocketName = line.match(/[^@]+@(.*?webview_devtools_remote_?.*)/);
|
|
333
|
-
if (!matchSocketName)
|
|
351
|
+
if (!matchSocketName)
|
|
352
|
+
continue;
|
|
334
353
|
const socketName = matchSocketName[1];
|
|
335
354
|
socketNames.add(socketName);
|
|
336
|
-
if (this._webViews.has(socketName))
|
|
337
|
-
|
|
338
|
-
// possible line: 0000000000000000: 00000002 00000000 00010000 0001 01 5841881 @webview_devtools_remote_zeus
|
|
339
|
-
// the result: match[1] = ''
|
|
355
|
+
if (this._webViews.has(socketName))
|
|
356
|
+
continue;
|
|
340
357
|
const match = line.match(/[^@]+@.*?webview_devtools_remote_?(\d*)/);
|
|
341
358
|
let pid = -1;
|
|
342
|
-
if (match && match[1])
|
|
359
|
+
if (match && match[1])
|
|
360
|
+
pid = +match[1];
|
|
343
361
|
const pkg = await this._extractPkg(pid);
|
|
344
|
-
if (this._isClosed)
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
pkg,
|
|
348
|
-
socketName
|
|
349
|
-
};
|
|
362
|
+
if (this._isClosed)
|
|
363
|
+
return;
|
|
364
|
+
const webView = { pid, pkg, socketName };
|
|
350
365
|
this._webViews.set(socketName, webView);
|
|
351
366
|
this.emit(AndroidDevice.Events.WebViewAdded, webView);
|
|
352
367
|
}
|
|
@@ -358,44 +373,37 @@ class AndroidDevice extends _instrumentation.SdkObject {
|
|
|
358
373
|
}
|
|
359
374
|
}
|
|
360
375
|
async _extractPkg(pid) {
|
|
361
|
-
let pkg =
|
|
362
|
-
if (pid === -1)
|
|
363
|
-
|
|
376
|
+
let pkg = "";
|
|
377
|
+
if (pid === -1)
|
|
378
|
+
return pkg;
|
|
379
|
+
const procs = (await this._backend.runCommand(`shell:ps -A | grep ${pid}`)).toString().split("\n");
|
|
364
380
|
for (const proc of procs) {
|
|
365
381
|
const match = proc.match(/[^\s]+\s+(\d+).*$/);
|
|
366
|
-
if (!match)
|
|
367
|
-
|
|
382
|
+
if (!match)
|
|
383
|
+
continue;
|
|
384
|
+
pkg = proc.substring(proc.lastIndexOf(" ") + 1);
|
|
368
385
|
}
|
|
369
386
|
return pkg;
|
|
370
387
|
}
|
|
371
388
|
}
|
|
372
|
-
|
|
373
|
-
AndroidDevice.Events = {
|
|
374
|
-
WebViewAdded: 'webViewAdded',
|
|
375
|
-
WebViewRemoved: 'webViewRemoved',
|
|
376
|
-
Close: 'close'
|
|
377
|
-
};
|
|
378
|
-
class AndroidBrowser extends _events.EventEmitter {
|
|
389
|
+
class AndroidBrowser extends import_events.EventEmitter {
|
|
379
390
|
constructor(device, socket) {
|
|
380
391
|
super();
|
|
381
|
-
this.
|
|
382
|
-
this._socket = void 0;
|
|
383
|
-
this._receiver = void 0;
|
|
384
|
-
this._waitForNextTask = (0, _utils.makeWaitForNextTask)();
|
|
385
|
-
this.onmessage = void 0;
|
|
386
|
-
this.onclose = void 0;
|
|
392
|
+
this._waitForNextTask = (0, import_task.makeWaitForNextTask)();
|
|
387
393
|
this.setMaxListeners(0);
|
|
388
394
|
this.device = device;
|
|
389
395
|
this._socket = socket;
|
|
390
|
-
this._socket.on(
|
|
396
|
+
this._socket.on("close", () => {
|
|
391
397
|
this._waitForNextTask(() => {
|
|
392
|
-
if (this.onclose)
|
|
398
|
+
if (this.onclose)
|
|
399
|
+
this.onclose();
|
|
393
400
|
});
|
|
394
401
|
});
|
|
395
|
-
this._receiver = new
|
|
396
|
-
this._receiver.on(
|
|
402
|
+
this._receiver = new import_utilsBundle2.wsReceiver();
|
|
403
|
+
this._receiver.on("message", (message) => {
|
|
397
404
|
this._waitForNextTask(() => {
|
|
398
|
-
if (this.onmessage)
|
|
405
|
+
if (this.onmessage)
|
|
406
|
+
this.onmessage(JSON.parse(message));
|
|
399
407
|
});
|
|
400
408
|
});
|
|
401
409
|
}
|
|
@@ -407,11 +415,9 @@ Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r
|
|
|
407
415
|
Sec-WebSocket-Version: 13\r
|
|
408
416
|
\r
|
|
409
417
|
`));
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
// Start sending web frame to receiver.
|
|
414
|
-
this._socket.on('data', data => this._receiver._write(data, 'binary', () => {}));
|
|
418
|
+
await new Promise((f) => this._socket.once("data", f));
|
|
419
|
+
this._socket.on("data", (data) => this._receiver._write(data, "binary", () => {
|
|
420
|
+
}));
|
|
415
421
|
}
|
|
416
422
|
async send(s) {
|
|
417
423
|
await this._socket.write(encodeWebFrame(JSON.stringify(s)));
|
|
@@ -421,7 +427,7 @@ Sec-WebSocket-Version: 13\r
|
|
|
421
427
|
}
|
|
422
428
|
}
|
|
423
429
|
function encodeWebFrame(data) {
|
|
424
|
-
return
|
|
430
|
+
return import_utilsBundle2.wsSender.frame(Buffer.from(data), {
|
|
425
431
|
opcode: 1,
|
|
426
432
|
mask: true,
|
|
427
433
|
fin: true,
|
|
@@ -430,12 +436,16 @@ function encodeWebFrame(data) {
|
|
|
430
436
|
}
|
|
431
437
|
class ClankBrowserProcess {
|
|
432
438
|
constructor(browser) {
|
|
433
|
-
this._browser = void 0;
|
|
434
|
-
this.onclose = void 0;
|
|
435
439
|
this._browser = browser;
|
|
436
440
|
}
|
|
437
|
-
async kill() {
|
|
441
|
+
async kill() {
|
|
442
|
+
}
|
|
438
443
|
async close() {
|
|
439
444
|
await this._browser.close();
|
|
440
445
|
}
|
|
441
|
-
}
|
|
446
|
+
}
|
|
447
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
448
|
+
0 && (module.exports = {
|
|
449
|
+
Android,
|
|
450
|
+
AndroidDevice
|
|
451
|
+
});
|