@checkly/playwright-core 1.41.2-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +3 -0
- package/ThirdPartyNotices.txt +1513 -0
- package/bin/PrintDeps.exe +0 -0
- package/bin/README.md +2 -0
- package/bin/install_media_pack.ps1 +5 -0
- package/bin/reinstall_chrome_beta_linux.sh +40 -0
- package/bin/reinstall_chrome_beta_mac.sh +13 -0
- package/bin/reinstall_chrome_beta_win.ps1 +23 -0
- package/bin/reinstall_chrome_stable_linux.sh +40 -0
- package/bin/reinstall_chrome_stable_mac.sh +12 -0
- package/bin/reinstall_chrome_stable_win.ps1 +23 -0
- package/bin/reinstall_msedge_beta_linux.sh +40 -0
- package/bin/reinstall_msedge_beta_mac.sh +11 -0
- package/bin/reinstall_msedge_beta_win.ps1 +22 -0
- package/bin/reinstall_msedge_dev_linux.sh +40 -0
- package/bin/reinstall_msedge_dev_mac.sh +11 -0
- package/bin/reinstall_msedge_dev_win.ps1 +22 -0
- package/bin/reinstall_msedge_stable_linux.sh +40 -0
- package/bin/reinstall_msedge_stable_mac.sh +11 -0
- package/bin/reinstall_msedge_stable_win.ps1 +23 -0
- package/browsers.json +64 -0
- package/cli.js +17 -0
- package/index.d.ts +17 -0
- package/index.js +33 -0
- package/index.mjs +28 -0
- package/lib/androidServerImpl.js +69 -0
- package/lib/browserServerImpl.js +92 -0
- package/lib/cli/driver.js +97 -0
- package/lib/cli/program.js +582 -0
- package/lib/cli/programWithTestStub.js +67 -0
- package/lib/client/accessibility.js +50 -0
- package/lib/client/android.js +473 -0
- package/lib/client/api.js +272 -0
- package/lib/client/artifact.js +79 -0
- package/lib/client/browser.js +145 -0
- package/lib/client/browserContext.js +509 -0
- package/lib/client/browserType.js +233 -0
- package/lib/client/cdpSession.js +53 -0
- package/lib/client/channelOwner.js +229 -0
- package/lib/client/clientHelper.js +57 -0
- package/lib/client/clientInstrumentation.js +40 -0
- package/lib/client/connection.js +327 -0
- package/lib/client/consoleMessage.js +55 -0
- package/lib/client/coverage.js +41 -0
- package/lib/client/dialog.js +57 -0
- package/lib/client/download.js +62 -0
- package/lib/client/electron.js +130 -0
- package/lib/client/elementHandle.js +291 -0
- package/lib/client/errors.js +77 -0
- package/lib/client/events.js +93 -0
- package/lib/client/fetch.js +343 -0
- package/lib/client/fileChooser.js +45 -0
- package/lib/client/frame.js +506 -0
- package/lib/client/harRouter.js +93 -0
- package/lib/client/input.js +111 -0
- package/lib/client/jsHandle.js +123 -0
- package/lib/client/jsonPipe.js +35 -0
- package/lib/client/localUtils.js +35 -0
- package/lib/client/locator.js +432 -0
- package/lib/client/network.js +601 -0
- package/lib/client/page.js +707 -0
- package/lib/client/playwright.js +74 -0
- package/lib/client/selectors.js +67 -0
- package/lib/client/stream.js +54 -0
- package/lib/client/tracing.js +135 -0
- package/lib/client/types.js +24 -0
- package/lib/client/video.js +51 -0
- package/lib/client/waiter.js +158 -0
- package/lib/client/webError.js +37 -0
- package/lib/client/worker.js +71 -0
- package/lib/client/writableStream.js +54 -0
- package/lib/common/socksProxy.js +569 -0
- package/lib/common/timeoutSettings.js +73 -0
- package/lib/common/types.js +5 -0
- package/lib/generated/consoleApiSource.js +7 -0
- package/lib/generated/injectedScriptSource.js +7 -0
- package/lib/generated/recorderSource.js +7 -0
- package/lib/generated/utilityScriptSource.js +7 -0
- package/lib/image_tools/colorUtils.js +98 -0
- package/lib/image_tools/compare.js +108 -0
- package/lib/image_tools/imageChannel.js +70 -0
- package/lib/image_tools/stats.js +102 -0
- package/lib/inProcessFactory.js +54 -0
- package/lib/inprocess.js +20 -0
- package/lib/outofprocess.js +67 -0
- package/lib/protocol/debug.js +27 -0
- package/lib/protocol/serializers.js +172 -0
- package/lib/protocol/transport.js +82 -0
- package/lib/protocol/validator.js +2599 -0
- package/lib/protocol/validatorPrimitives.js +139 -0
- package/lib/remote/playwrightConnection.js +274 -0
- package/lib/remote/playwrightServer.js +110 -0
- package/lib/server/accessibility.js +62 -0
- package/lib/server/android/android.js +441 -0
- package/lib/server/android/backendAdb.js +172 -0
- package/lib/server/artifact.js +104 -0
- package/lib/server/browser.js +129 -0
- package/lib/server/browserContext.js +609 -0
- package/lib/server/browserType.js +300 -0
- package/lib/server/chromium/appIcon.png +0 -0
- package/lib/server/chromium/chromium.js +346 -0
- package/lib/server/chromium/chromiumSwitches.js +41 -0
- package/lib/server/chromium/crAccessibility.js +237 -0
- package/lib/server/chromium/crBrowser.js +521 -0
- package/lib/server/chromium/crConnection.js +228 -0
- package/lib/server/chromium/crCoverage.js +246 -0
- package/lib/server/chromium/crDevTools.js +104 -0
- package/lib/server/chromium/crDragDrop.js +144 -0
- package/lib/server/chromium/crExecutionContext.js +156 -0
- package/lib/server/chromium/crInput.js +171 -0
- package/lib/server/chromium/crNetworkManager.js +723 -0
- package/lib/server/chromium/crPage.js +1173 -0
- package/lib/server/chromium/crPdf.js +147 -0
- package/lib/server/chromium/crProtocolHelper.js +131 -0
- package/lib/server/chromium/crServiceWorker.js +115 -0
- package/lib/server/chromium/defaultFontFamilies.js +145 -0
- package/lib/server/chromium/videoRecorder.js +155 -0
- package/lib/server/console.js +59 -0
- package/lib/server/cookieStore.js +112 -0
- package/lib/server/debugController.js +236 -0
- package/lib/server/debugger.js +132 -0
- package/lib/server/deviceDescriptors.js +21 -0
- package/lib/server/deviceDescriptorsSource.json +1549 -0
- package/lib/server/dialog.js +70 -0
- package/lib/server/dispatchers/androidDispatcher.js +193 -0
- package/lib/server/dispatchers/artifactDispatcher.js +118 -0
- package/lib/server/dispatchers/browserContextDispatcher.js +306 -0
- package/lib/server/dispatchers/browserDispatcher.js +170 -0
- package/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
- package/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
- package/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
- package/lib/server/dispatchers/dialogDispatcher.js +44 -0
- package/lib/server/dispatchers/dispatcher.js +400 -0
- package/lib/server/dispatchers/electronDispatcher.js +80 -0
- package/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
- package/lib/server/dispatchers/frameDispatcher.js +287 -0
- package/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
- package/lib/server/dispatchers/jsonPipeDispatcher.js +61 -0
- package/lib/server/dispatchers/localUtilsDispatcher.js +399 -0
- package/lib/server/dispatchers/networkDispatchers.js +221 -0
- package/lib/server/dispatchers/pageDispatcher.js +363 -0
- package/lib/server/dispatchers/playwrightDispatcher.js +105 -0
- package/lib/server/dispatchers/selectorsDispatcher.js +36 -0
- package/lib/server/dispatchers/streamDispatcher.js +62 -0
- package/lib/server/dispatchers/tracingDispatcher.js +54 -0
- package/lib/server/dispatchers/writableStreamDispatcher.js +55 -0
- package/lib/server/dom.js +808 -0
- package/lib/server/download.js +53 -0
- package/lib/server/electron/electron.js +254 -0
- package/lib/server/electron/loader.js +57 -0
- package/lib/server/errors.js +68 -0
- package/lib/server/fetch.js +611 -0
- package/lib/server/fileChooser.js +42 -0
- package/lib/server/fileUploadUtils.js +71 -0
- package/lib/server/firefox/ffAccessibility.js +215 -0
- package/lib/server/firefox/ffBrowser.js +447 -0
- package/lib/server/firefox/ffConnection.js +168 -0
- package/lib/server/firefox/ffExecutionContext.js +138 -0
- package/lib/server/firefox/ffInput.js +150 -0
- package/lib/server/firefox/ffNetworkManager.js +231 -0
- package/lib/server/firefox/ffPage.js +558 -0
- package/lib/server/firefox/firefox.js +91 -0
- package/lib/server/formData.js +75 -0
- package/lib/server/frameSelectors.js +171 -0
- package/lib/server/frames.js +1597 -0
- package/lib/server/har/harRecorder.js +139 -0
- package/lib/server/har/harTracer.js +539 -0
- package/lib/server/helper.js +103 -0
- package/lib/server/index.js +96 -0
- package/lib/server/input.js +301 -0
- package/lib/server/instrumentation.js +74 -0
- package/lib/server/isomorphic/utilityScriptSerializers.js +212 -0
- package/lib/server/javascript.js +305 -0
- package/lib/server/launchApp.js +90 -0
- package/lib/server/macEditingCommands.js +139 -0
- package/lib/server/network.js +607 -0
- package/lib/server/page.js +793 -0
- package/lib/server/pipeTransport.js +85 -0
- package/lib/server/playwright.js +82 -0
- package/lib/server/progress.js +102 -0
- package/lib/server/protocolError.js +49 -0
- package/lib/server/recorder/codeGenerator.js +153 -0
- package/lib/server/recorder/csharp.js +310 -0
- package/lib/server/recorder/java.js +216 -0
- package/lib/server/recorder/javascript.js +229 -0
- package/lib/server/recorder/jsonl.js +47 -0
- package/lib/server/recorder/language.js +44 -0
- package/lib/server/recorder/python.js +275 -0
- package/lib/server/recorder/recorderActions.js +5 -0
- package/lib/server/recorder/recorderApp.js +181 -0
- package/lib/server/recorder/recorderUtils.js +48 -0
- package/lib/server/recorder/utils.js +45 -0
- package/lib/server/recorder.js +700 -0
- package/lib/server/registry/browserFetcher.js +168 -0
- package/lib/server/registry/dependencies.js +322 -0
- package/lib/server/registry/index.js +925 -0
- package/lib/server/registry/nativeDeps.js +383 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +138 -0
- package/lib/server/screenshotter.js +354 -0
- package/lib/server/selectors.js +73 -0
- package/lib/server/socksInterceptor.js +100 -0
- package/lib/server/trace/recorder/snapshotter.js +168 -0
- package/lib/server/trace/recorder/snapshotterInjected.js +493 -0
- package/lib/server/trace/recorder/tracing.js +552 -0
- package/lib/server/trace/test/inMemorySnapshotter.js +93 -0
- package/lib/server/trace/viewer/traceViewer.js +229 -0
- package/lib/server/transport.js +191 -0
- package/lib/server/types.js +24 -0
- package/lib/server/usKeyboardLayout.js +555 -0
- package/lib/server/webkit/webkit.js +87 -0
- package/lib/server/webkit/wkAccessibility.js +194 -0
- package/lib/server/webkit/wkBrowser.js +328 -0
- package/lib/server/webkit/wkConnection.js +173 -0
- package/lib/server/webkit/wkExecutionContext.js +146 -0
- package/lib/server/webkit/wkInput.js +169 -0
- package/lib/server/webkit/wkInterceptableRequest.js +158 -0
- package/lib/server/webkit/wkPage.js +1198 -0
- package/lib/server/webkit/wkProvisionalPage.js +59 -0
- package/lib/server/webkit/wkWorkers.js +104 -0
- package/lib/third_party/diff_match_patch.js +2222 -0
- package/lib/third_party/pixelmatch.js +255 -0
- package/lib/utils/ascii.js +31 -0
- package/lib/utils/comparators.js +171 -0
- package/lib/utils/crypto.js +33 -0
- package/lib/utils/debug.js +46 -0
- package/lib/utils/debugLogger.js +89 -0
- package/lib/utils/env.js +47 -0
- package/lib/utils/eventsHelper.js +38 -0
- package/lib/utils/fileUtils.js +66 -0
- package/lib/utils/glob.js +83 -0
- package/lib/utils/happy-eyeballs.js +154 -0
- package/lib/utils/headers.js +52 -0
- package/lib/utils/hostPlatform.js +124 -0
- package/lib/utils/httpServer.js +195 -0
- package/lib/utils/index.js +324 -0
- package/lib/utils/isomorphic/cssParser.js +250 -0
- package/lib/utils/isomorphic/cssTokenizer.js +979 -0
- package/lib/utils/isomorphic/locatorGenerators.js +651 -0
- package/lib/utils/isomorphic/locatorParser.js +179 -0
- package/lib/utils/isomorphic/locatorUtils.js +62 -0
- package/lib/utils/isomorphic/selectorParser.js +397 -0
- package/lib/utils/isomorphic/stringUtils.js +107 -0
- package/lib/utils/isomorphic/traceUtils.js +39 -0
- package/lib/utils/linuxUtils.js +78 -0
- package/lib/utils/manualPromise.js +109 -0
- package/lib/utils/mimeType.js +29 -0
- package/lib/utils/multimap.js +75 -0
- package/lib/utils/network.js +189 -0
- package/lib/utils/processLauncher.js +248 -0
- package/lib/utils/profiler.js +53 -0
- package/lib/utils/rtti.js +41 -0
- package/lib/utils/semaphore.js +51 -0
- package/lib/utils/spawnAsync.js +45 -0
- package/lib/utils/stackTrace.js +123 -0
- package/lib/utils/task.js +58 -0
- package/lib/utils/time.js +37 -0
- package/lib/utils/timeoutRunner.js +131 -0
- package/lib/utils/traceUtils.js +44 -0
- package/lib/utils/userAgent.js +105 -0
- package/lib/utils/wsServer.js +125 -0
- package/lib/utils/zipFile.js +75 -0
- package/lib/utils/zones.js +99 -0
- package/lib/utilsBundle.js +81 -0
- package/lib/utilsBundleImpl/index.js +51 -0
- package/lib/utilsBundleImpl/xdg-open +1066 -0
- package/lib/vite/htmlReport/index.html +66 -0
- package/lib/vite/recorder/assets/codeMirrorModule-Hs9-1ZG4.css +1 -0
- package/lib/vite/recorder/assets/codeMirrorModule-I9ks4y7D.js +24 -0
- package/lib/vite/recorder/assets/codicon-zGuYmc9o.ttf +0 -0
- package/lib/vite/recorder/assets/index-ljsTwXtJ.css +1 -0
- package/lib/vite/recorder/assets/index-yg8ypzl6.js +47 -0
- package/lib/vite/recorder/index.html +29 -0
- package/lib/vite/recorder/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-fqJB1XDu.js +24 -0
- package/lib/vite/traceViewer/assets/codeMirrorModule-y3M3aAqy.js +24 -0
- package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +69 -0
- package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +69 -0
- package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +69 -0
- package/lib/vite/traceViewer/assets/xtermModule-Yt6xwiJ_.js +9 -0
- package/lib/vite/traceViewer/codeMirrorModule.Hs9-1ZG4.css +1 -0
- package/lib/vite/traceViewer/codicon.zGuYmc9o.ttf +0 -0
- package/lib/vite/traceViewer/index.-g_5lMbJ.css +1 -0
- package/lib/vite/traceViewer/index.4X7zDysg.js +2 -0
- package/lib/vite/traceViewer/index.HkJgzlGy.js +2 -0
- package/lib/vite/traceViewer/index.html +26 -0
- package/lib/vite/traceViewer/index.kRjx5sAJ.js +2 -0
- package/lib/vite/traceViewer/playwright-logo.svg +9 -0
- package/lib/vite/traceViewer/snapshot.html +21 -0
- package/lib/vite/traceViewer/sw.bundle.js +4 -0
- package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +10 -0
- package/lib/vite/traceViewer/uiMode.GTNzARcV.js +10 -0
- package/lib/vite/traceViewer/uiMode.html +17 -0
- package/lib/vite/traceViewer/uiMode.pWy0Re7G.css +1 -0
- package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +10 -0
- package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +1 -0
- package/lib/vite/traceViewer/xtermModule.0lwXJFHT.css +32 -0
- package/lib/zipBundle.js +25 -0
- package/lib/zipBundleImpl.js +5 -0
- package/package.json +43 -0
- package/types/protocol.d.ts +20304 -0
- package/types/structs.d.ts +45 -0
- package/types/types.d.ts +20626 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Dialog = void 0;
|
|
7
|
+
var _utils = require("../utils");
|
|
8
|
+
var _instrumentation = require("./instrumentation");
|
|
9
|
+
/**
|
|
10
|
+
* Copyright 2017 Google Inc. All rights reserved.
|
|
11
|
+
* Modifications copyright (c) Microsoft Corporation.
|
|
12
|
+
*
|
|
13
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
14
|
+
* you may not use this file except in compliance with the License.
|
|
15
|
+
* You may obtain a copy of the License at
|
|
16
|
+
*
|
|
17
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
20
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
21
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
22
|
+
* See the License for the specific language governing permissions and
|
|
23
|
+
* limitations under the License.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
class Dialog extends _instrumentation.SdkObject {
|
|
27
|
+
constructor(page, type, message, onHandle, defaultValue) {
|
|
28
|
+
super(page, 'dialog');
|
|
29
|
+
this._page = void 0;
|
|
30
|
+
this._type = void 0;
|
|
31
|
+
this._message = void 0;
|
|
32
|
+
this._onHandle = void 0;
|
|
33
|
+
this._handled = false;
|
|
34
|
+
this._defaultValue = void 0;
|
|
35
|
+
this._page = page;
|
|
36
|
+
this._type = type;
|
|
37
|
+
this._message = message;
|
|
38
|
+
this._onHandle = onHandle;
|
|
39
|
+
this._defaultValue = defaultValue || '';
|
|
40
|
+
this._page._frameManager.dialogDidOpen(this);
|
|
41
|
+
}
|
|
42
|
+
page() {
|
|
43
|
+
return this._page;
|
|
44
|
+
}
|
|
45
|
+
type() {
|
|
46
|
+
return this._type;
|
|
47
|
+
}
|
|
48
|
+
message() {
|
|
49
|
+
return this._message;
|
|
50
|
+
}
|
|
51
|
+
defaultValue() {
|
|
52
|
+
return this._defaultValue;
|
|
53
|
+
}
|
|
54
|
+
async accept(promptText) {
|
|
55
|
+
(0, _utils.assert)(!this._handled, 'Cannot accept dialog which is already handled!');
|
|
56
|
+
this._handled = true;
|
|
57
|
+
this._page._frameManager.dialogWillClose(this);
|
|
58
|
+
await this._onHandle(true, promptText);
|
|
59
|
+
}
|
|
60
|
+
async dismiss() {
|
|
61
|
+
(0, _utils.assert)(!this._handled, 'Cannot dismiss dialog which is already handled!');
|
|
62
|
+
this._handled = true;
|
|
63
|
+
this._page._frameManager.dialogWillClose(this);
|
|
64
|
+
await this._onHandle(false);
|
|
65
|
+
}
|
|
66
|
+
async close() {
|
|
67
|
+
if (this._type === 'beforeunload') await this.accept();else await this.dismiss();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.Dialog = Dialog;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.AndroidSocketDispatcher = exports.AndroidDispatcher = exports.AndroidDeviceDispatcher = void 0;
|
|
7
|
+
var _dispatcher = require("./dispatcher");
|
|
8
|
+
var _android = require("../android/android");
|
|
9
|
+
var _browserContextDispatcher = require("./browserContextDispatcher");
|
|
10
|
+
/**
|
|
11
|
+
* Copyright (c) Microsoft Corporation.
|
|
12
|
+
*
|
|
13
|
+
* Licensed under the Apache License, Version 2.0 (the 'License");
|
|
14
|
+
* you may not use this file except in compliance with the License.
|
|
15
|
+
* You may obtain a copy of the License at
|
|
16
|
+
*
|
|
17
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
20
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
21
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
22
|
+
* See the License for the specific language governing permissions and
|
|
23
|
+
* limitations under the License.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
class AndroidDispatcher extends _dispatcher.Dispatcher {
|
|
27
|
+
constructor(scope, android) {
|
|
28
|
+
super(scope, android, 'Android', {});
|
|
29
|
+
this._type_Android = true;
|
|
30
|
+
}
|
|
31
|
+
async devices(params) {
|
|
32
|
+
const devices = await this._object.devices(params);
|
|
33
|
+
return {
|
|
34
|
+
devices: devices.map(d => AndroidDeviceDispatcher.from(this, d))
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
async setDefaultTimeoutNoReply(params) {
|
|
38
|
+
this._object.setDefaultTimeout(params.timeout);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.AndroidDispatcher = AndroidDispatcher;
|
|
42
|
+
class AndroidDeviceDispatcher extends _dispatcher.Dispatcher {
|
|
43
|
+
static from(scope, device) {
|
|
44
|
+
const result = (0, _dispatcher.existingDispatcher)(device);
|
|
45
|
+
return result || new AndroidDeviceDispatcher(scope, device);
|
|
46
|
+
}
|
|
47
|
+
constructor(scope, device) {
|
|
48
|
+
super(scope, device, 'AndroidDevice', {
|
|
49
|
+
model: device.model,
|
|
50
|
+
serial: device.serial
|
|
51
|
+
});
|
|
52
|
+
this._type_EventTarget = true;
|
|
53
|
+
this._type_AndroidDevice = true;
|
|
54
|
+
for (const webView of device.webViews()) this._dispatchEvent('webViewAdded', {
|
|
55
|
+
webView
|
|
56
|
+
});
|
|
57
|
+
this.addObjectListener(_android.AndroidDevice.Events.WebViewAdded, webView => this._dispatchEvent('webViewAdded', {
|
|
58
|
+
webView
|
|
59
|
+
}));
|
|
60
|
+
this.addObjectListener(_android.AndroidDevice.Events.WebViewRemoved, socketName => this._dispatchEvent('webViewRemoved', {
|
|
61
|
+
socketName
|
|
62
|
+
}));
|
|
63
|
+
this.addObjectListener(_android.AndroidDevice.Events.Close, socketName => this._dispatchEvent('close'));
|
|
64
|
+
}
|
|
65
|
+
async wait(params) {
|
|
66
|
+
await this._object.send('wait', params);
|
|
67
|
+
}
|
|
68
|
+
async fill(params) {
|
|
69
|
+
await this._object.send('click', {
|
|
70
|
+
selector: params.selector
|
|
71
|
+
});
|
|
72
|
+
await this._object.send('fill', params);
|
|
73
|
+
}
|
|
74
|
+
async tap(params) {
|
|
75
|
+
await this._object.send('click', params);
|
|
76
|
+
}
|
|
77
|
+
async drag(params) {
|
|
78
|
+
await this._object.send('drag', params);
|
|
79
|
+
}
|
|
80
|
+
async fling(params) {
|
|
81
|
+
await this._object.send('fling', params);
|
|
82
|
+
}
|
|
83
|
+
async longTap(params) {
|
|
84
|
+
await this._object.send('longClick', params);
|
|
85
|
+
}
|
|
86
|
+
async pinchClose(params) {
|
|
87
|
+
await this._object.send('pinchClose', params);
|
|
88
|
+
}
|
|
89
|
+
async pinchOpen(params) {
|
|
90
|
+
await this._object.send('pinchOpen', params);
|
|
91
|
+
}
|
|
92
|
+
async scroll(params) {
|
|
93
|
+
await this._object.send('scroll', params);
|
|
94
|
+
}
|
|
95
|
+
async swipe(params) {
|
|
96
|
+
await this._object.send('swipe', params);
|
|
97
|
+
}
|
|
98
|
+
async info(params) {
|
|
99
|
+
return {
|
|
100
|
+
info: await this._object.send('info', params)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async inputType(params) {
|
|
104
|
+
const text = params.text;
|
|
105
|
+
const keyCodes = [];
|
|
106
|
+
for (let i = 0; i < text.length; ++i) {
|
|
107
|
+
const code = keyMap.get(text[i].toUpperCase());
|
|
108
|
+
if (code === undefined) throw new Error('No mapping for ' + text[i] + ' found');
|
|
109
|
+
keyCodes.push(code);
|
|
110
|
+
}
|
|
111
|
+
await Promise.all(keyCodes.map(keyCode => this._object.send('inputPress', {
|
|
112
|
+
keyCode
|
|
113
|
+
})));
|
|
114
|
+
}
|
|
115
|
+
async inputPress(params) {
|
|
116
|
+
if (!keyMap.has(params.key)) throw new Error('Unknown key: ' + params.key);
|
|
117
|
+
await this._object.send('inputPress', {
|
|
118
|
+
keyCode: keyMap.get(params.key)
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async inputTap(params) {
|
|
122
|
+
await this._object.send('inputClick', params);
|
|
123
|
+
}
|
|
124
|
+
async inputSwipe(params) {
|
|
125
|
+
await this._object.send('inputSwipe', params);
|
|
126
|
+
}
|
|
127
|
+
async inputDrag(params) {
|
|
128
|
+
await this._object.send('inputDrag', params);
|
|
129
|
+
}
|
|
130
|
+
async screenshot(params) {
|
|
131
|
+
return {
|
|
132
|
+
binary: await this._object.screenshot()
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
async shell(params) {
|
|
136
|
+
return {
|
|
137
|
+
result: await this._object.shell(params.command)
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
async open(params, metadata) {
|
|
141
|
+
const socket = await this._object.open(params.command);
|
|
142
|
+
return {
|
|
143
|
+
socket: new AndroidSocketDispatcher(this, socket)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async installApk(params) {
|
|
147
|
+
await this._object.installApk(params.file, {
|
|
148
|
+
args: params.args
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async push(params) {
|
|
152
|
+
await this._object.push(params.file, params.path, params.mode);
|
|
153
|
+
}
|
|
154
|
+
async launchBrowser(params) {
|
|
155
|
+
const context = await this._object.launchBrowser(params.pkg, params);
|
|
156
|
+
return {
|
|
157
|
+
context: new _browserContextDispatcher.BrowserContextDispatcher(this, context)
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async close(params) {
|
|
161
|
+
await this._object.close();
|
|
162
|
+
}
|
|
163
|
+
async setDefaultTimeoutNoReply(params) {
|
|
164
|
+
this._object.setDefaultTimeout(params.timeout);
|
|
165
|
+
}
|
|
166
|
+
async connectToWebView(params) {
|
|
167
|
+
return {
|
|
168
|
+
context: new _browserContextDispatcher.BrowserContextDispatcher(this, await this._object.connectToWebView(params.socketName))
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
exports.AndroidDeviceDispatcher = AndroidDeviceDispatcher;
|
|
173
|
+
class AndroidSocketDispatcher extends _dispatcher.Dispatcher {
|
|
174
|
+
constructor(scope, socket) {
|
|
175
|
+
super(scope, socket, 'AndroidSocket', {});
|
|
176
|
+
this._type_AndroidSocket = true;
|
|
177
|
+
this.addObjectListener('data', data => this._dispatchEvent('data', {
|
|
178
|
+
data
|
|
179
|
+
}));
|
|
180
|
+
this.addObjectListener('close', () => {
|
|
181
|
+
this._dispatchEvent('close');
|
|
182
|
+
this._dispose();
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
async write(params, metadata) {
|
|
186
|
+
await this._object.write(params.data);
|
|
187
|
+
}
|
|
188
|
+
async close(params, metadata) {
|
|
189
|
+
this._object.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.AndroidSocketDispatcher = AndroidSocketDispatcher;
|
|
193
|
+
const keyMap = new Map([['Unknown', 0], ['SoftLeft', 1], ['SoftRight', 2], ['Home', 3], ['Back', 4], ['Call', 5], ['EndCall', 6], ['0', 7], ['1', 8], ['2', 9], ['3', 10], ['4', 11], ['5', 12], ['6', 13], ['7', 14], ['8', 15], ['9', 16], ['Star', 17], ['*', 17], ['Pound', 18], ['#', 18], ['DialUp', 19], ['DialDown', 20], ['DialLeft', 21], ['DialRight', 22], ['DialCenter', 23], ['VolumeUp', 24], ['VolumeDown', 25], ['Power', 26], ['Camera', 27], ['Clear', 28], ['A', 29], ['B', 30], ['C', 31], ['D', 32], ['E', 33], ['F', 34], ['G', 35], ['H', 36], ['I', 37], ['J', 38], ['K', 39], ['L', 40], ['M', 41], ['N', 42], ['O', 43], ['P', 44], ['Q', 45], ['R', 46], ['S', 47], ['T', 48], ['U', 49], ['V', 50], ['W', 51], ['X', 52], ['Y', 53], ['Z', 54], ['Comma', 55], [',', 55], ['Period', 56], ['.', 56], ['AltLeft', 57], ['AltRight', 58], ['ShiftLeft', 59], ['ShiftRight', 60], ['Tab', 61], ['\t', 61], ['Space', 62], [' ', 62], ['Sym', 63], ['Explorer', 64], ['Envelop', 65], ['Enter', 66], ['Del', 67], ['Grave', 68], ['Minus', 69], ['-', 69], ['Equals', 70], ['=', 70], ['LeftBracket', 71], ['(', 71], ['RightBracket', 72], [')', 72], ['Backslash', 73], ['\\', 73], ['Semicolon', 74], [';', 74], ['Apostrophe', 75], ['`', 75], ['Slash', 76], ['/', 76], ['At', 77], ['@', 77], ['Num', 78], ['HeadsetHook', 79], ['Focus', 80], ['Plus', 81], ['Menu', 82], ['Notification', 83], ['Search', 84], ['AppSwitch', 187], ['Assist', 219], ['Cut', 277], ['Copy', 278], ['Paste', 279]]);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ArtifactDispatcher = void 0;
|
|
7
|
+
var _dispatcher = require("./dispatcher");
|
|
8
|
+
var _streamDispatcher = require("./streamDispatcher");
|
|
9
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
+
var _fileUtils = require("../../utils/fileUtils");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
/**
|
|
13
|
+
* Copyright (c) Microsoft Corporation.
|
|
14
|
+
*
|
|
15
|
+
* Licensed under the Apache License, Version 2.0 (the 'License");
|
|
16
|
+
* you may not use this file except in compliance with the License.
|
|
17
|
+
* You may obtain a copy of the License at
|
|
18
|
+
*
|
|
19
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
20
|
+
*
|
|
21
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
22
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
23
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24
|
+
* See the License for the specific language governing permissions and
|
|
25
|
+
* limitations under the License.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
class ArtifactDispatcher extends _dispatcher.Dispatcher {
|
|
29
|
+
static from(parentScope, artifact) {
|
|
30
|
+
return ArtifactDispatcher.fromNullable(parentScope, artifact);
|
|
31
|
+
}
|
|
32
|
+
static fromNullable(parentScope, artifact) {
|
|
33
|
+
if (!artifact) return undefined;
|
|
34
|
+
const result = (0, _dispatcher.existingDispatcher)(artifact);
|
|
35
|
+
return result || new ArtifactDispatcher(parentScope, artifact);
|
|
36
|
+
}
|
|
37
|
+
constructor(scope, artifact) {
|
|
38
|
+
super(scope, artifact, 'Artifact', {
|
|
39
|
+
absolutePath: artifact.localPath()
|
|
40
|
+
});
|
|
41
|
+
this._type_Artifact = true;
|
|
42
|
+
}
|
|
43
|
+
async pathAfterFinished() {
|
|
44
|
+
const path = await this._object.localPathAfterFinished();
|
|
45
|
+
return {
|
|
46
|
+
value: path
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async saveAs(params) {
|
|
50
|
+
return await new Promise((resolve, reject) => {
|
|
51
|
+
this._object.saveAs(async (localPath, error) => {
|
|
52
|
+
if (error) {
|
|
53
|
+
reject(error);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
await (0, _fileUtils.mkdirIfNeeded)(params.path);
|
|
58
|
+
await _fs.default.promises.copyFile(localPath, params.path);
|
|
59
|
+
resolve();
|
|
60
|
+
} catch (e) {
|
|
61
|
+
reject(e);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async saveAsStream() {
|
|
67
|
+
return await new Promise((resolve, reject) => {
|
|
68
|
+
this._object.saveAs(async (localPath, error) => {
|
|
69
|
+
if (error) {
|
|
70
|
+
reject(error);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
const readable = _fs.default.createReadStream(localPath, {
|
|
75
|
+
highWaterMark: 1024 * 1024
|
|
76
|
+
});
|
|
77
|
+
const stream = new _streamDispatcher.StreamDispatcher(this, readable);
|
|
78
|
+
// Resolve with a stream, so that client starts saving the data.
|
|
79
|
+
resolve({
|
|
80
|
+
stream
|
|
81
|
+
});
|
|
82
|
+
// Block the Artifact until the stream is consumed.
|
|
83
|
+
await new Promise(resolve => {
|
|
84
|
+
readable.on('close', resolve);
|
|
85
|
+
readable.on('end', resolve);
|
|
86
|
+
readable.on('error', resolve);
|
|
87
|
+
});
|
|
88
|
+
} catch (e) {
|
|
89
|
+
reject(e);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
async stream() {
|
|
95
|
+
const fileName = await this._object.localPathAfterFinished();
|
|
96
|
+
const readable = _fs.default.createReadStream(fileName, {
|
|
97
|
+
highWaterMark: 1024 * 1024
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
stream: new _streamDispatcher.StreamDispatcher(this, readable)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async failure() {
|
|
104
|
+
const error = await this._object.failureError();
|
|
105
|
+
return {
|
|
106
|
+
error: error || undefined
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
async cancel() {
|
|
110
|
+
await this._object.cancel();
|
|
111
|
+
}
|
|
112
|
+
async delete(_, metadata) {
|
|
113
|
+
metadata.potentiallyClosesScope = true;
|
|
114
|
+
await this._object.delete();
|
|
115
|
+
this._dispose();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.ArtifactDispatcher = ArtifactDispatcher;
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BrowserContextDispatcher = void 0;
|
|
7
|
+
var _browserContext = require("../browserContext");
|
|
8
|
+
var _dispatcher = require("./dispatcher");
|
|
9
|
+
var _pageDispatcher = require("./pageDispatcher");
|
|
10
|
+
var _networkDispatchers = require("./networkDispatchers");
|
|
11
|
+
var _crBrowser = require("../chromium/crBrowser");
|
|
12
|
+
var _cdpSessionDispatcher = require("./cdpSessionDispatcher");
|
|
13
|
+
var _recorder = require("../recorder");
|
|
14
|
+
var _artifactDispatcher = require("./artifactDispatcher");
|
|
15
|
+
var _tracingDispatcher = require("./tracingDispatcher");
|
|
16
|
+
var fs = _interopRequireWildcard(require("fs"));
|
|
17
|
+
var path = _interopRequireWildcard(require("path"));
|
|
18
|
+
var _utils = require("../../utils");
|
|
19
|
+
var _writableStreamDispatcher = require("./writableStreamDispatcher");
|
|
20
|
+
var _dialogDispatcher = require("./dialogDispatcher");
|
|
21
|
+
var _errors = require("../errors");
|
|
22
|
+
var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
|
|
23
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
24
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
25
|
+
/**
|
|
26
|
+
* Copyright (c) Microsoft Corporation.
|
|
27
|
+
*
|
|
28
|
+
* Licensed under the Apache License, Version 2.0 (the 'License");
|
|
29
|
+
* you may not use this file except in compliance with the License.
|
|
30
|
+
* You may obtain a copy of the License at
|
|
31
|
+
*
|
|
32
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
33
|
+
*
|
|
34
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
35
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
36
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
37
|
+
* See the License for the specific language governing permissions and
|
|
38
|
+
* limitations under the License.
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
class BrowserContextDispatcher extends _dispatcher.Dispatcher {
|
|
42
|
+
constructor(parentScope, context) {
|
|
43
|
+
// We will reparent these to the context below.
|
|
44
|
+
const requestContext = _networkDispatchers.APIRequestContextDispatcher.from(parentScope, context.fetchRequest);
|
|
45
|
+
const tracing = _tracingDispatcher.TracingDispatcher.from(parentScope, context.tracing);
|
|
46
|
+
super(parentScope, context, 'BrowserContext', {
|
|
47
|
+
isChromium: context._browser.options.isChromium,
|
|
48
|
+
isLocalBrowserOnServer: context._browser._isCollocatedWithServer,
|
|
49
|
+
requestContext,
|
|
50
|
+
tracing
|
|
51
|
+
});
|
|
52
|
+
this._type_EventTarget = true;
|
|
53
|
+
this._type_BrowserContext = true;
|
|
54
|
+
this._context = void 0;
|
|
55
|
+
this._subscriptions = new Set();
|
|
56
|
+
this.adopt(requestContext);
|
|
57
|
+
this.adopt(tracing);
|
|
58
|
+
this._context = context;
|
|
59
|
+
// Note: when launching persistent context, dispatcher is created very late,
|
|
60
|
+
// so we can already have pages, videos and everything else.
|
|
61
|
+
|
|
62
|
+
const onVideo = artifact => {
|
|
63
|
+
// Note: Video must outlive Page and BrowserContext, so that client can saveAs it
|
|
64
|
+
// after closing the context. We use |scope| for it.
|
|
65
|
+
const artifactDispatcher = _artifactDispatcher.ArtifactDispatcher.from(parentScope, artifact);
|
|
66
|
+
this._dispatchEvent('video', {
|
|
67
|
+
artifact: artifactDispatcher
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.VideoStarted, onVideo);
|
|
71
|
+
for (const video of context._browser._idToVideo.values()) {
|
|
72
|
+
if (video.context === context) onVideo(video.artifact);
|
|
73
|
+
}
|
|
74
|
+
for (const page of context.pages()) this._dispatchEvent('page', {
|
|
75
|
+
page: _pageDispatcher.PageDispatcher.from(this, page)
|
|
76
|
+
});
|
|
77
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Page, page => {
|
|
78
|
+
this._dispatchEvent('page', {
|
|
79
|
+
page: _pageDispatcher.PageDispatcher.from(this, page)
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Close, () => {
|
|
83
|
+
this._dispatchEvent('close');
|
|
84
|
+
this._dispose();
|
|
85
|
+
});
|
|
86
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.PageError, (error, page) => {
|
|
87
|
+
this._dispatchEvent('pageError', {
|
|
88
|
+
error: (0, _errors.serializeError)(error),
|
|
89
|
+
page: _pageDispatcher.PageDispatcher.from(this, page)
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Console, message => {
|
|
93
|
+
if (this._shouldDispatchEvent(message.page(), 'console')) {
|
|
94
|
+
const pageDispatcher = _pageDispatcher.PageDispatcher.from(this, message.page());
|
|
95
|
+
this._dispatchEvent('console', {
|
|
96
|
+
page: pageDispatcher,
|
|
97
|
+
type: message.type(),
|
|
98
|
+
text: message.text(),
|
|
99
|
+
args: message.args().map(a => _elementHandlerDispatcher.ElementHandleDispatcher.fromJSHandle(pageDispatcher, a)),
|
|
100
|
+
location: message.location()
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Dialog, dialog => {
|
|
105
|
+
if (this._shouldDispatchEvent(dialog.page(), 'dialog')) this._dispatchEvent('dialog', {
|
|
106
|
+
dialog: new _dialogDispatcher.DialogDispatcher(this, dialog)
|
|
107
|
+
});else dialog.close().catch(() => {});
|
|
108
|
+
});
|
|
109
|
+
if (context._browser.options.name === 'chromium') {
|
|
110
|
+
for (const page of context.backgroundPages()) this._dispatchEvent('backgroundPage', {
|
|
111
|
+
page: _pageDispatcher.PageDispatcher.from(this, page)
|
|
112
|
+
});
|
|
113
|
+
this.addObjectListener(_crBrowser.CRBrowserContext.CREvents.BackgroundPage, page => this._dispatchEvent('backgroundPage', {
|
|
114
|
+
page: _pageDispatcher.PageDispatcher.from(this, page)
|
|
115
|
+
}));
|
|
116
|
+
for (const serviceWorker of context.serviceWorkers()) this._dispatchEvent('serviceWorker', {
|
|
117
|
+
worker: new _pageDispatcher.WorkerDispatcher(this, serviceWorker)
|
|
118
|
+
});
|
|
119
|
+
this.addObjectListener(_crBrowser.CRBrowserContext.CREvents.ServiceWorker, serviceWorker => this._dispatchEvent('serviceWorker', {
|
|
120
|
+
worker: new _pageDispatcher.WorkerDispatcher(this, serviceWorker)
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Request, request => {
|
|
124
|
+
var _request$frame;
|
|
125
|
+
// Create dispatcher, if:
|
|
126
|
+
// - There are listeners to the requests.
|
|
127
|
+
// - We are redirected from a reported request so that redirectedTo was updated on client.
|
|
128
|
+
// - We are a navigation request and dispatcher will be reported as a part of the goto return value and newDocument param anyways.
|
|
129
|
+
// By the time requestFinished is triggered to update the request, we should have a request on the client already.
|
|
130
|
+
const redirectFromDispatcher = request.redirectedFrom() && (0, _dispatcher.existingDispatcher)(request.redirectedFrom());
|
|
131
|
+
if (!redirectFromDispatcher && !this._shouldDispatchNetworkEvent(request, 'request') && !request.isNavigationRequest()) return;
|
|
132
|
+
const requestDispatcher = _networkDispatchers.RequestDispatcher.from(this, request);
|
|
133
|
+
this._dispatchEvent('request', {
|
|
134
|
+
request: requestDispatcher,
|
|
135
|
+
page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame = request.frame()) === null || _request$frame === void 0 ? void 0 : _request$frame._page.initializedOrUndefined())
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.Response, response => {
|
|
139
|
+
var _response$frame;
|
|
140
|
+
const requestDispatcher = (0, _dispatcher.existingDispatcher)(response.request());
|
|
141
|
+
if (!requestDispatcher && !this._shouldDispatchNetworkEvent(response.request(), 'response')) return;
|
|
142
|
+
this._dispatchEvent('response', {
|
|
143
|
+
response: _networkDispatchers.ResponseDispatcher.from(this, response),
|
|
144
|
+
page: _pageDispatcher.PageDispatcher.fromNullable(this, (_response$frame = response.frame()) === null || _response$frame === void 0 ? void 0 : _response$frame._page.initializedOrUndefined())
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.RequestFailed, request => {
|
|
148
|
+
var _request$frame2;
|
|
149
|
+
const requestDispatcher = (0, _dispatcher.existingDispatcher)(request);
|
|
150
|
+
if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFailed')) return;
|
|
151
|
+
this._dispatchEvent('requestFailed', {
|
|
152
|
+
request: _networkDispatchers.RequestDispatcher.from(this, request),
|
|
153
|
+
failureText: request._failureText || undefined,
|
|
154
|
+
responseEndTiming: request._responseEndTiming,
|
|
155
|
+
page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame2 = request.frame()) === null || _request$frame2 === void 0 ? void 0 : _request$frame2._page.initializedOrUndefined())
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
this.addObjectListener(_browserContext.BrowserContext.Events.RequestFinished, ({
|
|
159
|
+
request,
|
|
160
|
+
response
|
|
161
|
+
}) => {
|
|
162
|
+
var _request$frame3;
|
|
163
|
+
const requestDispatcher = (0, _dispatcher.existingDispatcher)(request);
|
|
164
|
+
if (!requestDispatcher && !this._shouldDispatchNetworkEvent(request, 'requestFinished')) return;
|
|
165
|
+
this._dispatchEvent('requestFinished', {
|
|
166
|
+
request: _networkDispatchers.RequestDispatcher.from(this, request),
|
|
167
|
+
response: _networkDispatchers.ResponseDispatcher.fromNullable(this, response),
|
|
168
|
+
responseEndTiming: request._responseEndTiming,
|
|
169
|
+
page: _pageDispatcher.PageDispatcher.fromNullable(this, (_request$frame3 = request.frame()) === null || _request$frame3 === void 0 ? void 0 : _request$frame3._page.initializedOrUndefined())
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
_shouldDispatchNetworkEvent(request, event) {
|
|
174
|
+
var _request$frame4;
|
|
175
|
+
return this._shouldDispatchEvent((_request$frame4 = request.frame()) === null || _request$frame4 === void 0 || (_request$frame4 = _request$frame4._page) === null || _request$frame4 === void 0 ? void 0 : _request$frame4.initializedOrUndefined(), event);
|
|
176
|
+
}
|
|
177
|
+
_shouldDispatchEvent(page, event) {
|
|
178
|
+
if (this._subscriptions.has(event)) return true;
|
|
179
|
+
const pageDispatcher = page ? (0, _dispatcher.existingDispatcher)(page) : undefined;
|
|
180
|
+
if (pageDispatcher !== null && pageDispatcher !== void 0 && pageDispatcher._subscriptions.has(event)) return true;
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
async createTempFile(params) {
|
|
184
|
+
const dir = this._context._browser.options.artifactsDir;
|
|
185
|
+
const tmpDir = path.join(dir, 'upload-' + (0, _utils.createGuid)());
|
|
186
|
+
await fs.promises.mkdir(tmpDir);
|
|
187
|
+
this._context._tempDirs.push(tmpDir);
|
|
188
|
+
const file = fs.createWriteStream(path.join(tmpDir, params.name));
|
|
189
|
+
return {
|
|
190
|
+
writableStream: new _writableStreamDispatcher.WritableStreamDispatcher(this, file, params.lastModifiedMs)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async setDefaultNavigationTimeoutNoReply(params) {
|
|
194
|
+
this._context.setDefaultNavigationTimeout(params.timeout);
|
|
195
|
+
}
|
|
196
|
+
async setDefaultTimeoutNoReply(params) {
|
|
197
|
+
this._context.setDefaultTimeout(params.timeout);
|
|
198
|
+
}
|
|
199
|
+
async exposeBinding(params) {
|
|
200
|
+
await this._context.exposeBinding(params.name, !!params.needsHandle, (source, ...args) => {
|
|
201
|
+
// When reusing the context, we might have some bindings called late enough,
|
|
202
|
+
// after context and page dispatchers have been disposed.
|
|
203
|
+
if (this._disposed) return;
|
|
204
|
+
const pageDispatcher = _pageDispatcher.PageDispatcher.from(this, source.page);
|
|
205
|
+
const binding = new _pageDispatcher.BindingCallDispatcher(pageDispatcher, params.name, !!params.needsHandle, source, args);
|
|
206
|
+
this._dispatchEvent('bindingCall', {
|
|
207
|
+
binding
|
|
208
|
+
});
|
|
209
|
+
return binding.promise();
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async newPage(params, metadata) {
|
|
213
|
+
return {
|
|
214
|
+
page: _pageDispatcher.PageDispatcher.from(this, await this._context.newPage(metadata))
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async cookies(params) {
|
|
218
|
+
return {
|
|
219
|
+
cookies: await this._context.cookies(params.urls)
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
async addCookies(params) {
|
|
223
|
+
await this._context.addCookies(params.cookies);
|
|
224
|
+
}
|
|
225
|
+
async clearCookies() {
|
|
226
|
+
await this._context.clearCookies();
|
|
227
|
+
}
|
|
228
|
+
async grantPermissions(params) {
|
|
229
|
+
await this._context.grantPermissions(params.permissions, params.origin);
|
|
230
|
+
}
|
|
231
|
+
async clearPermissions() {
|
|
232
|
+
await this._context.clearPermissions();
|
|
233
|
+
}
|
|
234
|
+
async setGeolocation(params) {
|
|
235
|
+
await this._context.setGeolocation(params.geolocation);
|
|
236
|
+
}
|
|
237
|
+
async setExtraHTTPHeaders(params) {
|
|
238
|
+
await this._context.setExtraHTTPHeaders(params.headers);
|
|
239
|
+
}
|
|
240
|
+
async setOffline(params) {
|
|
241
|
+
await this._context.setOffline(params.offline);
|
|
242
|
+
}
|
|
243
|
+
async setHTTPCredentials(params) {
|
|
244
|
+
await this._context.setHTTPCredentials(params.httpCredentials);
|
|
245
|
+
}
|
|
246
|
+
async addInitScript(params) {
|
|
247
|
+
await this._context.addInitScript(params.source);
|
|
248
|
+
}
|
|
249
|
+
async setNetworkInterceptionPatterns(params) {
|
|
250
|
+
if (!params.patterns.length) {
|
|
251
|
+
await this._context.setRequestInterceptor(undefined);
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
const urlMatchers = params.patterns.map(pattern => pattern.regexSource ? new RegExp(pattern.regexSource, pattern.regexFlags) : pattern.glob);
|
|
255
|
+
await this._context.setRequestInterceptor((route, request) => {
|
|
256
|
+
const matchesSome = urlMatchers.some(urlMatch => (0, _utils.urlMatches)(this._context._options.baseURL, request.url(), urlMatch));
|
|
257
|
+
if (!matchesSome) return false;
|
|
258
|
+
this._dispatchEvent('route', {
|
|
259
|
+
route: _networkDispatchers.RouteDispatcher.from(_networkDispatchers.RequestDispatcher.from(this, request), route)
|
|
260
|
+
});
|
|
261
|
+
return true;
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
async storageState(params, metadata) {
|
|
265
|
+
return await this._context.storageState();
|
|
266
|
+
}
|
|
267
|
+
async close(params, metadata) {
|
|
268
|
+
metadata.potentiallyClosesScope = true;
|
|
269
|
+
await this._context.close(params);
|
|
270
|
+
}
|
|
271
|
+
async recorderSupplementEnable(params) {
|
|
272
|
+
await _recorder.Recorder.show(this._context, params);
|
|
273
|
+
}
|
|
274
|
+
async pause(params, metadata) {
|
|
275
|
+
// Debugger will take care of this.
|
|
276
|
+
}
|
|
277
|
+
async newCDPSession(params) {
|
|
278
|
+
if (!this._object._browser.options.isChromium) throw new Error(`CDP session is only available in Chromium`);
|
|
279
|
+
if (!params.page && !params.frame || params.page && params.frame) throw new Error(`CDP session must be initiated with either Page or Frame, not none or both`);
|
|
280
|
+
const crBrowserContext = this._object;
|
|
281
|
+
return {
|
|
282
|
+
session: new _cdpSessionDispatcher.CDPSessionDispatcher(this, await crBrowserContext.newCDPSession((params.page ? params.page : params.frame)._object))
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
async harStart(params) {
|
|
286
|
+
const harId = await this._context._harStart(params.page ? params.page._object : null, params.options);
|
|
287
|
+
return {
|
|
288
|
+
harId
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
async harExport(params) {
|
|
292
|
+
const artifact = await this._context._harExport(params.harId);
|
|
293
|
+
if (!artifact) throw new Error('No HAR artifact. Ensure record.harPath is set.');
|
|
294
|
+
return {
|
|
295
|
+
artifact: _artifactDispatcher.ArtifactDispatcher.from(this, artifact)
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
async updateSubscription(params) {
|
|
299
|
+
if (params.enabled) this._subscriptions.add(params.event);else this._subscriptions.delete(params.event);
|
|
300
|
+
}
|
|
301
|
+
_onDispose() {
|
|
302
|
+
// Avoid protocol calls for the closed context.
|
|
303
|
+
if (!this._context.isClosingOrClosed()) this._context.setRequestInterceptor(undefined).catch(() => {});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
exports.BrowserContextDispatcher = BrowserContextDispatcher;
|