@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,400 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.dispatcherSymbol = exports.RootDispatcher = exports.DispatcherConnection = exports.Dispatcher = void 0;
|
|
7
|
+
exports.existingDispatcher = existingDispatcher;
|
|
8
|
+
exports.setMaxDispatchersForTest = setMaxDispatchersForTest;
|
|
9
|
+
var _events = require("events");
|
|
10
|
+
var _validator = require("../../protocol/validator");
|
|
11
|
+
var _utils = require("../../utils");
|
|
12
|
+
var _errors = require("../errors");
|
|
13
|
+
var _instrumentation = require("../instrumentation");
|
|
14
|
+
var _eventsHelper = require("../..//utils/eventsHelper");
|
|
15
|
+
var _protocolError = require("../protocolError");
|
|
16
|
+
/**
|
|
17
|
+
* Copyright (c) Microsoft Corporation.
|
|
18
|
+
*
|
|
19
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
20
|
+
* you may not use this file except in compliance with the License.
|
|
21
|
+
* You may obtain a copy of the License at
|
|
22
|
+
*
|
|
23
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
24
|
+
*
|
|
25
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
26
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
27
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
28
|
+
* See the License for the specific language governing permissions and
|
|
29
|
+
* limitations under the License.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
const dispatcherSymbol = exports.dispatcherSymbol = Symbol('dispatcher');
|
|
33
|
+
const metadataValidator = (0, _validator.createMetadataValidator)();
|
|
34
|
+
function existingDispatcher(object) {
|
|
35
|
+
return object[dispatcherSymbol];
|
|
36
|
+
}
|
|
37
|
+
let maxDispatchersOverride;
|
|
38
|
+
function setMaxDispatchersForTest(value) {
|
|
39
|
+
maxDispatchersOverride = value;
|
|
40
|
+
}
|
|
41
|
+
function maxDispatchersForBucket(gcBucket) {
|
|
42
|
+
var _ref, _maxDispatchersOverri;
|
|
43
|
+
return (_ref = (_maxDispatchersOverri = maxDispatchersOverride) !== null && _maxDispatchersOverri !== void 0 ? _maxDispatchersOverri : {
|
|
44
|
+
'JSHandle': 100000,
|
|
45
|
+
'ElementHandle': 100000
|
|
46
|
+
}[gcBucket]) !== null && _ref !== void 0 ? _ref : 10000;
|
|
47
|
+
}
|
|
48
|
+
class Dispatcher extends _events.EventEmitter {
|
|
49
|
+
constructor(parent, object, type, initializer, gcBucket) {
|
|
50
|
+
super();
|
|
51
|
+
this._connection = void 0;
|
|
52
|
+
// Parent is always "isScope".
|
|
53
|
+
this._parent = void 0;
|
|
54
|
+
// Only "isScope" channel owners have registered dispatchers inside.
|
|
55
|
+
this._dispatchers = new Map();
|
|
56
|
+
this._disposed = false;
|
|
57
|
+
this._eventListeners = [];
|
|
58
|
+
this._guid = void 0;
|
|
59
|
+
this._type = void 0;
|
|
60
|
+
this._gcBucket = void 0;
|
|
61
|
+
this._object = void 0;
|
|
62
|
+
this._openScope = new _utils.LongStandingScope();
|
|
63
|
+
this._connection = parent instanceof DispatcherConnection ? parent : parent._connection;
|
|
64
|
+
this._parent = parent instanceof DispatcherConnection ? undefined : parent;
|
|
65
|
+
const guid = object.guid;
|
|
66
|
+
this._guid = guid;
|
|
67
|
+
this._type = type;
|
|
68
|
+
this._object = object;
|
|
69
|
+
this._gcBucket = gcBucket !== null && gcBucket !== void 0 ? gcBucket : type;
|
|
70
|
+
object[dispatcherSymbol] = this;
|
|
71
|
+
this._connection.registerDispatcher(this);
|
|
72
|
+
if (this._parent) {
|
|
73
|
+
(0, _utils.assert)(!this._parent._dispatchers.has(guid));
|
|
74
|
+
this._parent._dispatchers.set(guid, this);
|
|
75
|
+
}
|
|
76
|
+
if (this._parent) this._connection.sendCreate(this._parent, type, guid, initializer, this._parent._object);
|
|
77
|
+
this._connection.maybeDisposeStaleDispatchers(this._gcBucket);
|
|
78
|
+
}
|
|
79
|
+
parentScope() {
|
|
80
|
+
return this._parent;
|
|
81
|
+
}
|
|
82
|
+
addObjectListener(eventName, handler) {
|
|
83
|
+
this._eventListeners.push(_eventsHelper.eventsHelper.addEventListener(this._object, eventName, handler));
|
|
84
|
+
}
|
|
85
|
+
adopt(child) {
|
|
86
|
+
if (child._parent === this) return;
|
|
87
|
+
const oldParent = child._parent;
|
|
88
|
+
oldParent._dispatchers.delete(child._guid);
|
|
89
|
+
this._dispatchers.set(child._guid, child);
|
|
90
|
+
child._parent = this;
|
|
91
|
+
this._connection.sendAdopt(this, child);
|
|
92
|
+
}
|
|
93
|
+
async _handleCommand(callMetadata, method, validParams) {
|
|
94
|
+
const commandPromise = this[method](validParams, callMetadata);
|
|
95
|
+
try {
|
|
96
|
+
return await this._openScope.race(commandPromise);
|
|
97
|
+
} catch (e) {
|
|
98
|
+
if (callMetadata.potentiallyClosesScope && (0, _errors.isTargetClosedError)(e)) return await commandPromise;
|
|
99
|
+
throw e;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_dispatchEvent(method, params) {
|
|
103
|
+
if (this._disposed) {
|
|
104
|
+
if ((0, _utils.isUnderTest)()) throw new Error(`${this._guid} is sending "${String(method)}" event after being disposed`);
|
|
105
|
+
// Just ignore this event outside of tests.
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const sdkObject = this._object instanceof _instrumentation.SdkObject ? this._object : undefined;
|
|
109
|
+
this._connection.sendEvent(this, method, params, sdkObject);
|
|
110
|
+
}
|
|
111
|
+
_dispose(reason) {
|
|
112
|
+
this._disposeRecursively(new _errors.TargetClosedError());
|
|
113
|
+
this._connection.sendDispose(this, reason);
|
|
114
|
+
}
|
|
115
|
+
_onDispose() {}
|
|
116
|
+
_disposeRecursively(error) {
|
|
117
|
+
var _this$_parent;
|
|
118
|
+
(0, _utils.assert)(!this._disposed, `${this._guid} is disposed more than once`);
|
|
119
|
+
this._onDispose();
|
|
120
|
+
this._disposed = true;
|
|
121
|
+
_eventsHelper.eventsHelper.removeEventListeners(this._eventListeners);
|
|
122
|
+
|
|
123
|
+
// Clean up from parent and connection.
|
|
124
|
+
(_this$_parent = this._parent) === null || _this$_parent === void 0 || _this$_parent._dispatchers.delete(this._guid);
|
|
125
|
+
const list = this._connection._dispatchersByBucket.get(this._gcBucket);
|
|
126
|
+
list === null || list === void 0 || list.delete(this._guid);
|
|
127
|
+
this._connection._dispatchers.delete(this._guid);
|
|
128
|
+
|
|
129
|
+
// Dispose all children.
|
|
130
|
+
for (const dispatcher of [...this._dispatchers.values()]) dispatcher._disposeRecursively(error);
|
|
131
|
+
this._dispatchers.clear();
|
|
132
|
+
delete this._object[dispatcherSymbol];
|
|
133
|
+
this._openScope.close(error);
|
|
134
|
+
}
|
|
135
|
+
_debugScopeState() {
|
|
136
|
+
return {
|
|
137
|
+
_guid: this._guid,
|
|
138
|
+
objects: Array.from(this._dispatchers.values()).map(o => o._debugScopeState())
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
async waitForEventInfo() {
|
|
142
|
+
// Instrumentation takes care of this.
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.Dispatcher = Dispatcher;
|
|
146
|
+
class RootDispatcher extends Dispatcher {
|
|
147
|
+
constructor(connection, createPlaywright) {
|
|
148
|
+
super(connection, {
|
|
149
|
+
guid: ''
|
|
150
|
+
}, 'Root', {});
|
|
151
|
+
this._initialized = false;
|
|
152
|
+
this.createPlaywright = createPlaywright;
|
|
153
|
+
}
|
|
154
|
+
async initialize(params) {
|
|
155
|
+
(0, _utils.assert)(this.createPlaywright);
|
|
156
|
+
(0, _utils.assert)(!this._initialized);
|
|
157
|
+
this._initialized = true;
|
|
158
|
+
return {
|
|
159
|
+
playwright: await this.createPlaywright(this, params)
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.RootDispatcher = RootDispatcher;
|
|
164
|
+
class DispatcherConnection {
|
|
165
|
+
constructor(isLocal) {
|
|
166
|
+
this._dispatchers = new Map();
|
|
167
|
+
this._dispatchersByBucket = new Map();
|
|
168
|
+
this.onmessage = message => {};
|
|
169
|
+
this._waitOperations = new Map();
|
|
170
|
+
this._isLocal = void 0;
|
|
171
|
+
this._isLocal = !!isLocal;
|
|
172
|
+
}
|
|
173
|
+
sendEvent(dispatcher, event, params, sdkObject) {
|
|
174
|
+
const validator = (0, _validator.findValidator)(dispatcher._type, event, 'Event');
|
|
175
|
+
params = validator(params, '', {
|
|
176
|
+
tChannelImpl: this._tChannelImplToWire.bind(this),
|
|
177
|
+
binary: this._isLocal ? 'buffer' : 'toBase64'
|
|
178
|
+
});
|
|
179
|
+
this._sendMessageToClient(dispatcher._guid, dispatcher._type, event, params, sdkObject);
|
|
180
|
+
}
|
|
181
|
+
sendCreate(parent, type, guid, initializer, sdkObject) {
|
|
182
|
+
const validator = (0, _validator.findValidator)(type, '', 'Initializer');
|
|
183
|
+
initializer = validator(initializer, '', {
|
|
184
|
+
tChannelImpl: this._tChannelImplToWire.bind(this),
|
|
185
|
+
binary: this._isLocal ? 'buffer' : 'toBase64'
|
|
186
|
+
});
|
|
187
|
+
this._sendMessageToClient(parent._guid, type, '__create__', {
|
|
188
|
+
type,
|
|
189
|
+
initializer,
|
|
190
|
+
guid
|
|
191
|
+
}, sdkObject);
|
|
192
|
+
}
|
|
193
|
+
sendAdopt(parent, dispatcher) {
|
|
194
|
+
this._sendMessageToClient(parent._guid, dispatcher._type, '__adopt__', {
|
|
195
|
+
guid: dispatcher._guid
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
sendDispose(dispatcher, reason) {
|
|
199
|
+
this._sendMessageToClient(dispatcher._guid, dispatcher._type, '__dispose__', {
|
|
200
|
+
reason
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
_sendMessageToClient(guid, type, method, params, sdkObject) {
|
|
204
|
+
if (sdkObject) {
|
|
205
|
+
var _sdkObject$attributio, _sdkObject$instrument;
|
|
206
|
+
const event = {
|
|
207
|
+
type: 'event',
|
|
208
|
+
class: type,
|
|
209
|
+
method,
|
|
210
|
+
params: params || {},
|
|
211
|
+
time: (0, _utils.monotonicTime)(),
|
|
212
|
+
pageId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio = sdkObject.attribution) === null || _sdkObject$attributio === void 0 || (_sdkObject$attributio = _sdkObject$attributio.page) === null || _sdkObject$attributio === void 0 ? void 0 : _sdkObject$attributio.guid
|
|
213
|
+
};
|
|
214
|
+
(_sdkObject$instrument = sdkObject.instrumentation) === null || _sdkObject$instrument === void 0 || _sdkObject$instrument.onEvent(sdkObject, event);
|
|
215
|
+
}
|
|
216
|
+
this.onmessage({
|
|
217
|
+
guid,
|
|
218
|
+
method,
|
|
219
|
+
params
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
_tChannelImplFromWire(names, arg, path, context) {
|
|
223
|
+
if (arg && typeof arg === 'object' && typeof arg.guid === 'string') {
|
|
224
|
+
const guid = arg.guid;
|
|
225
|
+
const dispatcher = this._dispatchers.get(guid);
|
|
226
|
+
if (!dispatcher) throw new _validator.ValidationError(`${path}: no object with guid ${guid}`);
|
|
227
|
+
if (names !== '*' && !names.includes(dispatcher._type)) throw new _validator.ValidationError(`${path}: object with guid ${guid} has type ${dispatcher._type}, expected ${names.toString()}`);
|
|
228
|
+
return dispatcher;
|
|
229
|
+
}
|
|
230
|
+
throw new _validator.ValidationError(`${path}: expected guid for ${names.toString()}`);
|
|
231
|
+
}
|
|
232
|
+
_tChannelImplToWire(names, arg, path, context) {
|
|
233
|
+
if (arg instanceof Dispatcher) {
|
|
234
|
+
if (names !== '*' && !names.includes(arg._type)) throw new _validator.ValidationError(`${path}: dispatcher with guid ${arg._guid} has type ${arg._type}, expected ${names.toString()}`);
|
|
235
|
+
return {
|
|
236
|
+
guid: arg._guid
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
throw new _validator.ValidationError(`${path}: expected dispatcher ${names.toString()}`);
|
|
240
|
+
}
|
|
241
|
+
registerDispatcher(dispatcher) {
|
|
242
|
+
(0, _utils.assert)(!this._dispatchers.has(dispatcher._guid));
|
|
243
|
+
this._dispatchers.set(dispatcher._guid, dispatcher);
|
|
244
|
+
let list = this._dispatchersByBucket.get(dispatcher._gcBucket);
|
|
245
|
+
if (!list) {
|
|
246
|
+
list = new Set();
|
|
247
|
+
this._dispatchersByBucket.set(dispatcher._gcBucket, list);
|
|
248
|
+
}
|
|
249
|
+
list.add(dispatcher._guid);
|
|
250
|
+
}
|
|
251
|
+
maybeDisposeStaleDispatchers(gcBucket) {
|
|
252
|
+
const maxDispatchers = maxDispatchersForBucket(gcBucket);
|
|
253
|
+
const list = this._dispatchersByBucket.get(gcBucket);
|
|
254
|
+
if (!list || list.size <= maxDispatchers) return;
|
|
255
|
+
const dispatchersArray = [...list];
|
|
256
|
+
const disposeCount = maxDispatchers / 10 | 0;
|
|
257
|
+
this._dispatchersByBucket.set(gcBucket, new Set(dispatchersArray.slice(disposeCount)));
|
|
258
|
+
for (let i = 0; i < disposeCount; ++i) {
|
|
259
|
+
const d = this._dispatchers.get(dispatchersArray[i]);
|
|
260
|
+
if (!d) continue;
|
|
261
|
+
d._dispose('gc');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
async dispatch(message) {
|
|
265
|
+
var _sdkObject$attributio2, _sdkObject$attributio3, _params$info;
|
|
266
|
+
const {
|
|
267
|
+
id,
|
|
268
|
+
guid,
|
|
269
|
+
method,
|
|
270
|
+
params,
|
|
271
|
+
metadata
|
|
272
|
+
} = message;
|
|
273
|
+
const dispatcher = this._dispatchers.get(guid);
|
|
274
|
+
if (!dispatcher) {
|
|
275
|
+
this.onmessage({
|
|
276
|
+
id,
|
|
277
|
+
error: (0, _errors.serializeError)(new _errors.TargetClosedError())
|
|
278
|
+
});
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
let validParams;
|
|
282
|
+
let validMetadata;
|
|
283
|
+
try {
|
|
284
|
+
const validator = (0, _validator.findValidator)(dispatcher._type, method, 'Params');
|
|
285
|
+
validParams = validator(params, '', {
|
|
286
|
+
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
287
|
+
binary: this._isLocal ? 'buffer' : 'fromBase64'
|
|
288
|
+
});
|
|
289
|
+
validMetadata = metadataValidator(metadata, '', {
|
|
290
|
+
tChannelImpl: this._tChannelImplFromWire.bind(this),
|
|
291
|
+
binary: this._isLocal ? 'buffer' : 'fromBase64'
|
|
292
|
+
});
|
|
293
|
+
if (typeof dispatcher[method] !== 'function') throw new Error(`Mismatching dispatcher: "${dispatcher._type}" does not implement "${method}"`);
|
|
294
|
+
} catch (e) {
|
|
295
|
+
this.onmessage({
|
|
296
|
+
id,
|
|
297
|
+
error: (0, _errors.serializeError)(e)
|
|
298
|
+
});
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const sdkObject = dispatcher._object instanceof _instrumentation.SdkObject ? dispatcher._object : undefined;
|
|
302
|
+
const callMetadata = {
|
|
303
|
+
id: `call@${id}`,
|
|
304
|
+
wallTime: validMetadata.wallTime || Date.now(),
|
|
305
|
+
location: validMetadata.location,
|
|
306
|
+
apiName: validMetadata.apiName,
|
|
307
|
+
internal: validMetadata.internal,
|
|
308
|
+
objectId: sdkObject === null || sdkObject === void 0 ? void 0 : sdkObject.guid,
|
|
309
|
+
pageId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio2 = sdkObject.attribution) === null || _sdkObject$attributio2 === void 0 || (_sdkObject$attributio2 = _sdkObject$attributio2.page) === null || _sdkObject$attributio2 === void 0 ? void 0 : _sdkObject$attributio2.guid,
|
|
310
|
+
frameId: sdkObject === null || sdkObject === void 0 || (_sdkObject$attributio3 = sdkObject.attribution) === null || _sdkObject$attributio3 === void 0 || (_sdkObject$attributio3 = _sdkObject$attributio3.frame) === null || _sdkObject$attributio3 === void 0 ? void 0 : _sdkObject$attributio3.guid,
|
|
311
|
+
startTime: (0, _utils.monotonicTime)(),
|
|
312
|
+
endTime: 0,
|
|
313
|
+
type: dispatcher._type,
|
|
314
|
+
method,
|
|
315
|
+
params: params || {},
|
|
316
|
+
log: []
|
|
317
|
+
};
|
|
318
|
+
if (sdkObject && params !== null && params !== void 0 && (_params$info = params.info) !== null && _params$info !== void 0 && _params$info.waitId) {
|
|
319
|
+
// Process logs for waitForNavigation/waitForLoadState/etc.
|
|
320
|
+
const info = params.info;
|
|
321
|
+
switch (info.phase) {
|
|
322
|
+
case 'before':
|
|
323
|
+
{
|
|
324
|
+
this._waitOperations.set(info.waitId, callMetadata);
|
|
325
|
+
await sdkObject.instrumentation.onBeforeCall(sdkObject, callMetadata);
|
|
326
|
+
this.onmessage({
|
|
327
|
+
id
|
|
328
|
+
});
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
case 'log':
|
|
332
|
+
{
|
|
333
|
+
const originalMetadata = this._waitOperations.get(info.waitId);
|
|
334
|
+
originalMetadata.log.push(info.message);
|
|
335
|
+
sdkObject.instrumentation.onCallLog(sdkObject, originalMetadata, 'api', info.message);
|
|
336
|
+
this.onmessage({
|
|
337
|
+
id
|
|
338
|
+
});
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
case 'after':
|
|
342
|
+
{
|
|
343
|
+
const originalMetadata = this._waitOperations.get(info.waitId);
|
|
344
|
+
originalMetadata.endTime = (0, _utils.monotonicTime)();
|
|
345
|
+
originalMetadata.error = info.error ? {
|
|
346
|
+
error: {
|
|
347
|
+
name: 'Error',
|
|
348
|
+
message: info.error
|
|
349
|
+
}
|
|
350
|
+
} : undefined;
|
|
351
|
+
this._waitOperations.delete(info.waitId);
|
|
352
|
+
await sdkObject.instrumentation.onAfterCall(sdkObject, originalMetadata);
|
|
353
|
+
this.onmessage({
|
|
354
|
+
id
|
|
355
|
+
});
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
await (sdkObject === null || sdkObject === void 0 ? void 0 : sdkObject.instrumentation.onBeforeCall(sdkObject, callMetadata));
|
|
361
|
+
try {
|
|
362
|
+
const result = await dispatcher._handleCommand(callMetadata, method, validParams);
|
|
363
|
+
const validator = (0, _validator.findValidator)(dispatcher._type, method, 'Result');
|
|
364
|
+
callMetadata.result = validator(result, '', {
|
|
365
|
+
tChannelImpl: this._tChannelImplToWire.bind(this),
|
|
366
|
+
binary: this._isLocal ? 'buffer' : 'toBase64'
|
|
367
|
+
});
|
|
368
|
+
} catch (e) {
|
|
369
|
+
if ((0, _errors.isTargetClosedError)(e) && sdkObject) {
|
|
370
|
+
const reason = closeReason(sdkObject);
|
|
371
|
+
if (reason) (0, _utils.rewriteErrorMessage)(e, reason);
|
|
372
|
+
} else if ((0, _protocolError.isProtocolError)(e)) {
|
|
373
|
+
if (e.type === 'closed') {
|
|
374
|
+
const reason = sdkObject ? closeReason(sdkObject) : undefined;
|
|
375
|
+
e = new _errors.TargetClosedError(reason, e.browserLogMessage());
|
|
376
|
+
} else if (e.type === 'crashed') {
|
|
377
|
+
(0, _utils.rewriteErrorMessage)(e, 'Target crashed ' + e.browserLogMessage());
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
callMetadata.error = (0, _errors.serializeError)(e);
|
|
381
|
+
} finally {
|
|
382
|
+
callMetadata.endTime = (0, _utils.monotonicTime)();
|
|
383
|
+
await (sdkObject === null || sdkObject === void 0 ? void 0 : sdkObject.instrumentation.onAfterCall(sdkObject, callMetadata));
|
|
384
|
+
}
|
|
385
|
+
const response = {
|
|
386
|
+
id
|
|
387
|
+
};
|
|
388
|
+
if (callMetadata.result) response.result = callMetadata.result;
|
|
389
|
+
if (callMetadata.error) {
|
|
390
|
+
response.error = callMetadata.error;
|
|
391
|
+
response.log = callMetadata.log;
|
|
392
|
+
}
|
|
393
|
+
this.onmessage(response);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
exports.DispatcherConnection = DispatcherConnection;
|
|
397
|
+
function closeReason(sdkObject) {
|
|
398
|
+
var _sdkObject$attributio4, _sdkObject$attributio5, _sdkObject$attributio6;
|
|
399
|
+
return ((_sdkObject$attributio4 = sdkObject.attribution.page) === null || _sdkObject$attributio4 === void 0 ? void 0 : _sdkObject$attributio4._closeReason) || ((_sdkObject$attributio5 = sdkObject.attribution.context) === null || _sdkObject$attributio5 === void 0 ? void 0 : _sdkObject$attributio5._closeReason) || ((_sdkObject$attributio6 = sdkObject.attribution.browser) === null || _sdkObject$attributio6 === void 0 ? void 0 : _sdkObject$attributio6._closeReason);
|
|
400
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ElectronDispatcher = exports.ElectronApplicationDispatcher = void 0;
|
|
7
|
+
var _dispatcher = require("./dispatcher");
|
|
8
|
+
var _electron = require("../electron/electron");
|
|
9
|
+
var _browserContextDispatcher = require("./browserContextDispatcher");
|
|
10
|
+
var _jsHandleDispatcher = require("./jsHandleDispatcher");
|
|
11
|
+
var _elementHandlerDispatcher = require("./elementHandlerDispatcher");
|
|
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 ElectronDispatcher extends _dispatcher.Dispatcher {
|
|
29
|
+
constructor(scope, electron) {
|
|
30
|
+
super(scope, electron, 'Electron', {});
|
|
31
|
+
this._type_Electron = true;
|
|
32
|
+
}
|
|
33
|
+
async launch(params) {
|
|
34
|
+
const electronApplication = await this._object.launch(params);
|
|
35
|
+
return {
|
|
36
|
+
electronApplication: new ElectronApplicationDispatcher(this, electronApplication)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.ElectronDispatcher = ElectronDispatcher;
|
|
41
|
+
class ElectronApplicationDispatcher extends _dispatcher.Dispatcher {
|
|
42
|
+
constructor(scope, electronApplication) {
|
|
43
|
+
super(scope, electronApplication, 'ElectronApplication', {
|
|
44
|
+
context: new _browserContextDispatcher.BrowserContextDispatcher(scope, electronApplication.context())
|
|
45
|
+
});
|
|
46
|
+
this._type_EventTarget = true;
|
|
47
|
+
this._type_ElectronApplication = true;
|
|
48
|
+
this.addObjectListener(_electron.ElectronApplication.Events.Close, () => {
|
|
49
|
+
this._dispatchEvent('close');
|
|
50
|
+
this._dispose();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
async browserWindow(params) {
|
|
54
|
+
const handle = await this._object.browserWindow(params.page.page());
|
|
55
|
+
return {
|
|
56
|
+
handle: _elementHandlerDispatcher.ElementHandleDispatcher.fromJSHandle(this, handle)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async evaluateExpression(params) {
|
|
60
|
+
const handle = await this._object._nodeElectronHandlePromise;
|
|
61
|
+
return {
|
|
62
|
+
value: (0, _jsHandleDispatcher.serializeResult)(await handle.evaluateExpression(params.expression, {
|
|
63
|
+
isFunction: params.isFunction
|
|
64
|
+
}, (0, _jsHandleDispatcher.parseArgument)(params.arg)))
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
async evaluateExpressionHandle(params) {
|
|
68
|
+
const handle = await this._object._nodeElectronHandlePromise;
|
|
69
|
+
const result = await handle.evaluateExpressionHandle(params.expression, {
|
|
70
|
+
isFunction: params.isFunction
|
|
71
|
+
}, (0, _jsHandleDispatcher.parseArgument)(params.arg));
|
|
72
|
+
return {
|
|
73
|
+
handle: _elementHandlerDispatcher.ElementHandleDispatcher.fromJSHandle(this, result)
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async close() {
|
|
77
|
+
await this._object.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ElectronApplicationDispatcher = ElectronApplicationDispatcher;
|