@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,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.serializeAsCallArgument = exports.parseEvaluationResultValue = void 0;
|
|
7
|
+
exports.source = source;
|
|
8
|
+
/**
|
|
9
|
+
* Copyright (c) Microsoft Corporation.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
function source() {
|
|
25
|
+
function isRegExp(obj) {
|
|
26
|
+
try {
|
|
27
|
+
return obj instanceof RegExp || Object.prototype.toString.call(obj) === '[object RegExp]';
|
|
28
|
+
} catch (error) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function isDate(obj) {
|
|
33
|
+
try {
|
|
34
|
+
return obj instanceof Date || Object.prototype.toString.call(obj) === '[object Date]';
|
|
35
|
+
} catch (error) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function isURL(obj) {
|
|
40
|
+
try {
|
|
41
|
+
return obj instanceof URL || Object.prototype.toString.call(obj) === '[object URL]';
|
|
42
|
+
} catch (error) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function isError(obj) {
|
|
47
|
+
try {
|
|
48
|
+
var _Object$getPrototypeO;
|
|
49
|
+
return obj instanceof Error || obj && ((_Object$getPrototypeO = Object.getPrototypeOf(obj)) === null || _Object$getPrototypeO === void 0 ? void 0 : _Object$getPrototypeO.name) === 'Error';
|
|
50
|
+
} catch (error) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function parseEvaluationResultValue(value, handles = [], refs = new Map()) {
|
|
55
|
+
if (Object.is(value, undefined)) return undefined;
|
|
56
|
+
if (typeof value === 'object' && value) {
|
|
57
|
+
if ('ref' in value) return refs.get(value.ref);
|
|
58
|
+
if ('v' in value) {
|
|
59
|
+
if (value.v === 'undefined') return undefined;
|
|
60
|
+
if (value.v === 'null') return null;
|
|
61
|
+
if (value.v === 'NaN') return NaN;
|
|
62
|
+
if (value.v === 'Infinity') return Infinity;
|
|
63
|
+
if (value.v === '-Infinity') return -Infinity;
|
|
64
|
+
if (value.v === '-0') return -0;
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
if ('d' in value) return new Date(value.d);
|
|
68
|
+
if ('u' in value) return new URL(value.u);
|
|
69
|
+
if ('bi' in value) return BigInt(value.bi);
|
|
70
|
+
if ('r' in value) return new RegExp(value.r.p, value.r.f);
|
|
71
|
+
if ('a' in value) {
|
|
72
|
+
const result = [];
|
|
73
|
+
refs.set(value.id, result);
|
|
74
|
+
for (const a of value.a) result.push(parseEvaluationResultValue(a, handles, refs));
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
if ('o' in value) {
|
|
78
|
+
const result = {};
|
|
79
|
+
refs.set(value.id, result);
|
|
80
|
+
for (const {
|
|
81
|
+
k,
|
|
82
|
+
v
|
|
83
|
+
} of value.o) result[k] = parseEvaluationResultValue(v, handles, refs);
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
if ('h' in value) return handles[value.h];
|
|
87
|
+
}
|
|
88
|
+
return value;
|
|
89
|
+
}
|
|
90
|
+
function serializeAsCallArgument(value, handleSerializer) {
|
|
91
|
+
return serialize(value, handleSerializer, {
|
|
92
|
+
visited: new Map(),
|
|
93
|
+
lastId: 0
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
function serialize(value, handleSerializer, visitorInfo) {
|
|
97
|
+
if (value && typeof value === 'object') {
|
|
98
|
+
if (typeof globalThis.Window === 'function' && value instanceof globalThis.Window) return 'ref: <Window>';
|
|
99
|
+
if (typeof globalThis.Document === 'function' && value instanceof globalThis.Document) return 'ref: <Document>';
|
|
100
|
+
if (typeof globalThis.Node === 'function' && value instanceof globalThis.Node) return 'ref: <Node>';
|
|
101
|
+
}
|
|
102
|
+
return innerSerialize(value, handleSerializer, visitorInfo);
|
|
103
|
+
}
|
|
104
|
+
function innerSerialize(value, handleSerializer, visitorInfo) {
|
|
105
|
+
const result = handleSerializer(value);
|
|
106
|
+
if ('fallThrough' in result) value = result.fallThrough;else return result;
|
|
107
|
+
if (typeof value === 'symbol') return {
|
|
108
|
+
v: 'undefined'
|
|
109
|
+
};
|
|
110
|
+
if (Object.is(value, undefined)) return {
|
|
111
|
+
v: 'undefined'
|
|
112
|
+
};
|
|
113
|
+
if (Object.is(value, null)) return {
|
|
114
|
+
v: 'null'
|
|
115
|
+
};
|
|
116
|
+
if (Object.is(value, NaN)) return {
|
|
117
|
+
v: 'NaN'
|
|
118
|
+
};
|
|
119
|
+
if (Object.is(value, Infinity)) return {
|
|
120
|
+
v: 'Infinity'
|
|
121
|
+
};
|
|
122
|
+
if (Object.is(value, -Infinity)) return {
|
|
123
|
+
v: '-Infinity'
|
|
124
|
+
};
|
|
125
|
+
if (Object.is(value, -0)) return {
|
|
126
|
+
v: '-0'
|
|
127
|
+
};
|
|
128
|
+
if (typeof value === 'boolean') return value;
|
|
129
|
+
if (typeof value === 'number') return value;
|
|
130
|
+
if (typeof value === 'string') return value;
|
|
131
|
+
if (typeof value === 'bigint') return {
|
|
132
|
+
bi: value.toString()
|
|
133
|
+
};
|
|
134
|
+
if (isError(value)) {
|
|
135
|
+
var _error$stack;
|
|
136
|
+
const error = value;
|
|
137
|
+
if ((_error$stack = error.stack) !== null && _error$stack !== void 0 && _error$stack.startsWith(error.name + ': ' + error.message)) {
|
|
138
|
+
// v8
|
|
139
|
+
return error.stack;
|
|
140
|
+
}
|
|
141
|
+
return `${error.name}: ${error.message}\n${error.stack}`;
|
|
142
|
+
}
|
|
143
|
+
if (isDate(value)) return {
|
|
144
|
+
d: value.toJSON()
|
|
145
|
+
};
|
|
146
|
+
if (isURL(value)) return {
|
|
147
|
+
u: value.toJSON()
|
|
148
|
+
};
|
|
149
|
+
if (isRegExp(value)) return {
|
|
150
|
+
r: {
|
|
151
|
+
p: value.source,
|
|
152
|
+
f: value.flags
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const id = visitorInfo.visited.get(value);
|
|
156
|
+
if (id) return {
|
|
157
|
+
ref: id
|
|
158
|
+
};
|
|
159
|
+
if (Array.isArray(value)) {
|
|
160
|
+
const a = [];
|
|
161
|
+
const id = ++visitorInfo.lastId;
|
|
162
|
+
visitorInfo.visited.set(value, id);
|
|
163
|
+
for (let i = 0; i < value.length; ++i) a.push(serialize(value[i], handleSerializer, visitorInfo));
|
|
164
|
+
return {
|
|
165
|
+
a,
|
|
166
|
+
id
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (typeof value === 'object') {
|
|
170
|
+
const o = [];
|
|
171
|
+
const id = ++visitorInfo.lastId;
|
|
172
|
+
visitorInfo.visited.set(value, id);
|
|
173
|
+
for (const name of Object.keys(value)) {
|
|
174
|
+
let item;
|
|
175
|
+
try {
|
|
176
|
+
item = value[name];
|
|
177
|
+
} catch (e) {
|
|
178
|
+
continue; // native bindings will throw sometimes
|
|
179
|
+
}
|
|
180
|
+
if (name === 'toJSON' && typeof item === 'function') o.push({
|
|
181
|
+
k: name,
|
|
182
|
+
v: {
|
|
183
|
+
o: [],
|
|
184
|
+
id: 0
|
|
185
|
+
}
|
|
186
|
+
});else o.push({
|
|
187
|
+
k: name,
|
|
188
|
+
v: serialize(item, handleSerializer, visitorInfo)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
let jsonWrapper;
|
|
192
|
+
try {
|
|
193
|
+
// If Object.keys().length === 0 we fall back to toJSON if it exists
|
|
194
|
+
if (o.length === 0 && value.toJSON && typeof value.toJSON === 'function') jsonWrapper = {
|
|
195
|
+
value: value.toJSON()
|
|
196
|
+
};
|
|
197
|
+
} catch (e) {}
|
|
198
|
+
if (jsonWrapper) return innerSerialize(jsonWrapper.value, handleSerializer, visitorInfo);
|
|
199
|
+
return {
|
|
200
|
+
o,
|
|
201
|
+
id
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
parseEvaluationResultValue,
|
|
207
|
+
serializeAsCallArgument
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
const result = source();
|
|
211
|
+
const parseEvaluationResultValue = exports.parseEvaluationResultValue = result.parseEvaluationResultValue;
|
|
212
|
+
const serializeAsCallArgument = exports.serializeAsCallArgument = result.serializeAsCallArgument;
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.JavaScriptErrorInEvaluate = exports.JSHandle = exports.ExecutionContext = void 0;
|
|
7
|
+
exports.evaluate = evaluate;
|
|
8
|
+
exports.evaluateExpression = evaluateExpression;
|
|
9
|
+
exports.isJavaScriptErrorInEvaluate = isJavaScriptErrorInEvaluate;
|
|
10
|
+
exports.normalizeEvaluationExpression = normalizeEvaluationExpression;
|
|
11
|
+
exports.parseUnserializableValue = parseUnserializableValue;
|
|
12
|
+
exports.sparseArrayToString = sparseArrayToString;
|
|
13
|
+
var utilityScriptSource = _interopRequireWildcard(require("../generated/utilityScriptSource"));
|
|
14
|
+
var _utilityScriptSerializers = require("./isomorphic/utilityScriptSerializers");
|
|
15
|
+
var _instrumentation = require("./instrumentation");
|
|
16
|
+
var _manualPromise = require("../utils/manualPromise");
|
|
17
|
+
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); }
|
|
18
|
+
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; }
|
|
19
|
+
/**
|
|
20
|
+
* Copyright (c) Microsoft Corporation.
|
|
21
|
+
*
|
|
22
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
23
|
+
* you may not use this file except in compliance with the License.
|
|
24
|
+
* You may obtain a copy of the License at
|
|
25
|
+
*
|
|
26
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
27
|
+
*
|
|
28
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
29
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
30
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
31
|
+
* See the License for the specific language governing permissions and
|
|
32
|
+
* limitations under the License.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
class ExecutionContext extends _instrumentation.SdkObject {
|
|
36
|
+
constructor(parent, delegate, worldNameForTest) {
|
|
37
|
+
super(parent, 'execution-context');
|
|
38
|
+
this._delegate = void 0;
|
|
39
|
+
this._utilityScriptPromise = void 0;
|
|
40
|
+
this._contextDestroyedScope = new _manualPromise.LongStandingScope();
|
|
41
|
+
this.worldNameForTest = void 0;
|
|
42
|
+
this.worldNameForTest = worldNameForTest;
|
|
43
|
+
this._delegate = delegate;
|
|
44
|
+
}
|
|
45
|
+
contextDestroyed(reason) {
|
|
46
|
+
this._contextDestroyedScope.close(new Error(reason));
|
|
47
|
+
}
|
|
48
|
+
async _raceAgainstContextDestroyed(promise) {
|
|
49
|
+
return this._contextDestroyedScope.race(promise);
|
|
50
|
+
}
|
|
51
|
+
rawEvaluateJSON(expression) {
|
|
52
|
+
return this._raceAgainstContextDestroyed(this._delegate.rawEvaluateJSON(expression));
|
|
53
|
+
}
|
|
54
|
+
rawEvaluateHandle(expression) {
|
|
55
|
+
return this._raceAgainstContextDestroyed(this._delegate.rawEvaluateHandle(expression));
|
|
56
|
+
}
|
|
57
|
+
rawCallFunctionNoReply(func, ...args) {
|
|
58
|
+
this._delegate.rawCallFunctionNoReply(func, ...args);
|
|
59
|
+
}
|
|
60
|
+
evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds) {
|
|
61
|
+
return this._raceAgainstContextDestroyed(this._delegate.evaluateWithArguments(expression, returnByValue, utilityScript, values, objectIds));
|
|
62
|
+
}
|
|
63
|
+
getProperties(context, objectId) {
|
|
64
|
+
return this._raceAgainstContextDestroyed(this._delegate.getProperties(context, objectId));
|
|
65
|
+
}
|
|
66
|
+
createHandle(remoteObject) {
|
|
67
|
+
return this._delegate.createHandle(this, remoteObject);
|
|
68
|
+
}
|
|
69
|
+
releaseHandle(objectId) {
|
|
70
|
+
return this._delegate.releaseHandle(objectId);
|
|
71
|
+
}
|
|
72
|
+
adoptIfNeeded(handle) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
utilityScript() {
|
|
76
|
+
if (!this._utilityScriptPromise) {
|
|
77
|
+
const source = `
|
|
78
|
+
(() => {
|
|
79
|
+
const module = {};
|
|
80
|
+
${utilityScriptSource.source}
|
|
81
|
+
return new (module.exports.UtilityScript())();
|
|
82
|
+
})();`;
|
|
83
|
+
this._utilityScriptPromise = this._raceAgainstContextDestroyed(this._delegate.rawEvaluateHandle(source).then(objectId => new JSHandle(this, 'object', 'UtilityScript', objectId)));
|
|
84
|
+
}
|
|
85
|
+
return this._utilityScriptPromise;
|
|
86
|
+
}
|
|
87
|
+
async objectCount(objectId) {
|
|
88
|
+
return this._delegate.objectCount(objectId);
|
|
89
|
+
}
|
|
90
|
+
async doSlowMo() {
|
|
91
|
+
// overridden in FrameExecutionContext
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.ExecutionContext = ExecutionContext;
|
|
95
|
+
class JSHandle extends _instrumentation.SdkObject {
|
|
96
|
+
constructor(context, type, preview, objectId, value) {
|
|
97
|
+
super(context, 'handle');
|
|
98
|
+
this.__jshandle = true;
|
|
99
|
+
this._context = void 0;
|
|
100
|
+
this._disposed = false;
|
|
101
|
+
this._objectId = void 0;
|
|
102
|
+
this._value = void 0;
|
|
103
|
+
this._objectType = void 0;
|
|
104
|
+
this._preview = void 0;
|
|
105
|
+
this._previewCallback = void 0;
|
|
106
|
+
this._context = context;
|
|
107
|
+
this._objectId = objectId;
|
|
108
|
+
this._value = value;
|
|
109
|
+
this._objectType = type;
|
|
110
|
+
this._preview = this._objectId ? preview || `JSHandle@${this._objectType}` : String(value);
|
|
111
|
+
if (this._objectId && globalThis.leakedJSHandles) globalThis.leakedJSHandles.set(this, new Error('Leaked JSHandle'));
|
|
112
|
+
}
|
|
113
|
+
callFunctionNoReply(func, arg) {
|
|
114
|
+
this._context.rawCallFunctionNoReply(func, this, arg);
|
|
115
|
+
}
|
|
116
|
+
async evaluate(pageFunction, arg) {
|
|
117
|
+
return evaluate(this._context, true /* returnByValue */, pageFunction, this, arg);
|
|
118
|
+
}
|
|
119
|
+
async evaluateHandle(pageFunction, arg) {
|
|
120
|
+
return evaluate(this._context, false /* returnByValue */, pageFunction, this, arg);
|
|
121
|
+
}
|
|
122
|
+
async evaluateExpression(expression, options, arg) {
|
|
123
|
+
const value = await evaluateExpression(this._context, expression, {
|
|
124
|
+
...options,
|
|
125
|
+
returnByValue: true
|
|
126
|
+
}, this, arg);
|
|
127
|
+
await this._context.doSlowMo();
|
|
128
|
+
return value;
|
|
129
|
+
}
|
|
130
|
+
async evaluateExpressionHandle(expression, options, arg) {
|
|
131
|
+
const value = await evaluateExpression(this._context, expression, {
|
|
132
|
+
...options,
|
|
133
|
+
returnByValue: false
|
|
134
|
+
}, this, arg);
|
|
135
|
+
await this._context.doSlowMo();
|
|
136
|
+
return value;
|
|
137
|
+
}
|
|
138
|
+
async getProperty(propertyName) {
|
|
139
|
+
const objectHandle = await this.evaluateHandle((object, propertyName) => {
|
|
140
|
+
const result = {
|
|
141
|
+
__proto__: null
|
|
142
|
+
};
|
|
143
|
+
result[propertyName] = object[propertyName];
|
|
144
|
+
return result;
|
|
145
|
+
}, propertyName);
|
|
146
|
+
const properties = await objectHandle.getProperties();
|
|
147
|
+
const result = properties.get(propertyName);
|
|
148
|
+
objectHandle.dispose();
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
async getProperties() {
|
|
152
|
+
if (!this._objectId) return new Map();
|
|
153
|
+
return this._context.getProperties(this._context, this._objectId);
|
|
154
|
+
}
|
|
155
|
+
rawValue() {
|
|
156
|
+
return this._value;
|
|
157
|
+
}
|
|
158
|
+
async jsonValue() {
|
|
159
|
+
if (!this._objectId) return this._value;
|
|
160
|
+
const utilityScript = await this._context.utilityScript();
|
|
161
|
+
const script = `(utilityScript, ...args) => utilityScript.jsonValue(...args)`;
|
|
162
|
+
return this._context.evaluateWithArguments(script, true, utilityScript, [true], [this._objectId]);
|
|
163
|
+
}
|
|
164
|
+
asElement() {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
dispose() {
|
|
168
|
+
if (this._disposed) return;
|
|
169
|
+
this._disposed = true;
|
|
170
|
+
if (this._objectId) {
|
|
171
|
+
this._context.releaseHandle(this._objectId).catch(e => {});
|
|
172
|
+
if (globalThis.leakedJSHandles) globalThis.leakedJSHandles.delete(this);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
toString() {
|
|
176
|
+
return this._preview;
|
|
177
|
+
}
|
|
178
|
+
_setPreviewCallback(callback) {
|
|
179
|
+
this._previewCallback = callback;
|
|
180
|
+
}
|
|
181
|
+
preview() {
|
|
182
|
+
return this._preview;
|
|
183
|
+
}
|
|
184
|
+
worldNameForTest() {
|
|
185
|
+
return this._context.worldNameForTest;
|
|
186
|
+
}
|
|
187
|
+
_setPreview(preview) {
|
|
188
|
+
this._preview = preview;
|
|
189
|
+
if (this._previewCallback) this._previewCallback(preview);
|
|
190
|
+
}
|
|
191
|
+
async objectCount() {
|
|
192
|
+
if (!this._objectId) throw new Error('Can only count objects for a handle that points to the constructor prototype');
|
|
193
|
+
return this._context.objectCount(this._objectId);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.JSHandle = JSHandle;
|
|
197
|
+
async function evaluate(context, returnByValue, pageFunction, ...args) {
|
|
198
|
+
return evaluateExpression(context, String(pageFunction), {
|
|
199
|
+
returnByValue,
|
|
200
|
+
isFunction: typeof pageFunction === 'function'
|
|
201
|
+
}, ...args);
|
|
202
|
+
}
|
|
203
|
+
async function evaluateExpression(context, expression, options, ...args) {
|
|
204
|
+
const utilityScript = await context.utilityScript();
|
|
205
|
+
expression = normalizeEvaluationExpression(expression, options.isFunction);
|
|
206
|
+
const handles = [];
|
|
207
|
+
const toDispose = [];
|
|
208
|
+
const pushHandle = handle => {
|
|
209
|
+
handles.push(handle);
|
|
210
|
+
return handles.length - 1;
|
|
211
|
+
};
|
|
212
|
+
args = args.map(arg => (0, _utilityScriptSerializers.serializeAsCallArgument)(arg, handle => {
|
|
213
|
+
if (handle instanceof JSHandle) {
|
|
214
|
+
if (!handle._objectId) return {
|
|
215
|
+
fallThrough: handle._value
|
|
216
|
+
};
|
|
217
|
+
if (handle._disposed) throw new JavaScriptErrorInEvaluate('JSHandle is disposed!');
|
|
218
|
+
const adopted = context.adoptIfNeeded(handle);
|
|
219
|
+
if (adopted === null) return {
|
|
220
|
+
h: pushHandle(Promise.resolve(handle))
|
|
221
|
+
};
|
|
222
|
+
toDispose.push(adopted);
|
|
223
|
+
return {
|
|
224
|
+
h: pushHandle(adopted)
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
fallThrough: handle
|
|
229
|
+
};
|
|
230
|
+
}));
|
|
231
|
+
const utilityScriptObjectIds = [];
|
|
232
|
+
for (const handle of await Promise.all(handles)) {
|
|
233
|
+
if (handle._context !== context) throw new JavaScriptErrorInEvaluate('JSHandles can be evaluated only in the context they were created!');
|
|
234
|
+
utilityScriptObjectIds.push(handle._objectId);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// See UtilityScript for arguments.
|
|
238
|
+
const utilityScriptValues = [options.isFunction, options.returnByValue, options.exposeUtilityScript, expression, args.length, ...args];
|
|
239
|
+
const script = `(utilityScript, ...args) => utilityScript.evaluate(...args)`;
|
|
240
|
+
try {
|
|
241
|
+
return await context.evaluateWithArguments(script, options.returnByValue || false, utilityScript, utilityScriptValues, utilityScriptObjectIds);
|
|
242
|
+
} finally {
|
|
243
|
+
toDispose.map(handlePromise => handlePromise.then(handle => handle.dispose()));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function parseUnserializableValue(unserializableValue) {
|
|
247
|
+
if (unserializableValue === 'NaN') return NaN;
|
|
248
|
+
if (unserializableValue === 'Infinity') return Infinity;
|
|
249
|
+
if (unserializableValue === '-Infinity') return -Infinity;
|
|
250
|
+
if (unserializableValue === '-0') return -0;
|
|
251
|
+
}
|
|
252
|
+
function normalizeEvaluationExpression(expression, isFunction) {
|
|
253
|
+
expression = expression.trim();
|
|
254
|
+
if (isFunction) {
|
|
255
|
+
try {
|
|
256
|
+
new Function('(' + expression + ')');
|
|
257
|
+
} catch (e1) {
|
|
258
|
+
// This means we might have a function shorthand. Try another
|
|
259
|
+
// time prefixing 'function '.
|
|
260
|
+
if (expression.startsWith('async ')) expression = 'async function ' + expression.substring('async '.length);else expression = 'function ' + expression;
|
|
261
|
+
try {
|
|
262
|
+
new Function('(' + expression + ')');
|
|
263
|
+
} catch (e2) {
|
|
264
|
+
// We tried hard to serialize, but there's a weird beast here.
|
|
265
|
+
throw new Error('Passed function is not well-serializable!');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (/^(async)?\s*function(\s|\()/.test(expression)) expression = '(' + expression + ')';
|
|
270
|
+
return expression;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
// Error inside the expression evaluation as opposed to a protocol error.
|
|
274
|
+
class JavaScriptErrorInEvaluate extends Error {}
|
|
275
|
+
exports.JavaScriptErrorInEvaluate = JavaScriptErrorInEvaluate;
|
|
276
|
+
function isJavaScriptErrorInEvaluate(error) {
|
|
277
|
+
return error instanceof JavaScriptErrorInEvaluate;
|
|
278
|
+
}
|
|
279
|
+
function sparseArrayToString(entries) {
|
|
280
|
+
const arrayEntries = [];
|
|
281
|
+
for (const {
|
|
282
|
+
name,
|
|
283
|
+
value
|
|
284
|
+
} of entries) {
|
|
285
|
+
const index = +name;
|
|
286
|
+
if (isNaN(index) || index < 0) continue;
|
|
287
|
+
arrayEntries.push({
|
|
288
|
+
index,
|
|
289
|
+
value
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
arrayEntries.sort((a, b) => a.index - b.index);
|
|
293
|
+
let lastIndex = -1;
|
|
294
|
+
const tokens = [];
|
|
295
|
+
for (const {
|
|
296
|
+
index,
|
|
297
|
+
value
|
|
298
|
+
} of arrayEntries) {
|
|
299
|
+
const emptyItems = index - lastIndex - 1;
|
|
300
|
+
if (emptyItems === 1) tokens.push(`empty`);else if (emptyItems > 1) tokens.push(`empty x ${emptyItems}`);
|
|
301
|
+
tokens.push(String(value));
|
|
302
|
+
lastIndex = index;
|
|
303
|
+
}
|
|
304
|
+
return '[' + tokens.join(', ') + ']';
|
|
305
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.launchApp = launchApp;
|
|
7
|
+
exports.syncLocalStorageWithSettings = syncLocalStorageWithSettings;
|
|
8
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _registry = require("./registry");
|
|
11
|
+
var _utils = require("../utils");
|
|
12
|
+
var _instrumentation = require("./instrumentation");
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
+
/**
|
|
15
|
+
* Copyright (c) Microsoft Corporation.
|
|
16
|
+
*
|
|
17
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
* you may not use this file except in compliance with the License.
|
|
19
|
+
* You may obtain a copy of the License at
|
|
20
|
+
*
|
|
21
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
*
|
|
23
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
24
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
25
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
26
|
+
* See the License for the specific language governing permissions and
|
|
27
|
+
* limitations under the License.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
async function launchApp(browserType, options) {
|
|
31
|
+
var _options$persistentCo, _options$persistentCo2;
|
|
32
|
+
const args = [...((_options$persistentCo = (_options$persistentCo2 = options.persistentContextOptions) === null || _options$persistentCo2 === void 0 ? void 0 : _options$persistentCo2.args) !== null && _options$persistentCo !== void 0 ? _options$persistentCo : [])];
|
|
33
|
+
if (browserType.name() === 'chromium') {
|
|
34
|
+
args.push('--app=data:text/html,', `--window-size=${options.windowSize.width},${options.windowSize.height}`, ...(options.windowPosition ? [`--window-position=${options.windowPosition.x},${options.windowPosition.y}`] : []), '--test-type=');
|
|
35
|
+
}
|
|
36
|
+
const context = await browserType.launchPersistentContext((0, _instrumentation.serverSideCallMetadata)(), '', {
|
|
37
|
+
channel: (0, _registry.findChromiumChannel)(options.sdkLanguage),
|
|
38
|
+
noDefaultViewport: true,
|
|
39
|
+
ignoreDefaultArgs: ['--enable-automation'],
|
|
40
|
+
colorScheme: 'no-override',
|
|
41
|
+
acceptDownloads: (0, _utils.isUnderTest)() ? 'accept' : 'internal-browser-default',
|
|
42
|
+
...(options === null || options === void 0 ? void 0 : options.persistentContextOptions),
|
|
43
|
+
args
|
|
44
|
+
});
|
|
45
|
+
const [page] = context.pages();
|
|
46
|
+
// Chromium on macOS opens a new tab when clicking on the dock icon.
|
|
47
|
+
// See https://github.com/microsoft/playwright/issues/9434
|
|
48
|
+
if (browserType.name() === 'chromium' && process.platform === 'darwin') {
|
|
49
|
+
context.on('page', async newPage => {
|
|
50
|
+
if (newPage.mainFrame().url() === 'chrome://new-tab-page/') {
|
|
51
|
+
await page.bringToFront();
|
|
52
|
+
await newPage.close((0, _instrumentation.serverSideCallMetadata)());
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (browserType.name() === 'chromium') await installAppIcon(page);
|
|
57
|
+
return {
|
|
58
|
+
context,
|
|
59
|
+
page
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
async function installAppIcon(page) {
|
|
63
|
+
const icon = await _fs.default.promises.readFile(require.resolve('./chromium/appIcon.png'));
|
|
64
|
+
const crPage = page._delegate;
|
|
65
|
+
await crPage._mainFrameSession._client.send('Browser.setDockTile', {
|
|
66
|
+
image: icon.toString('base64')
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async function syncLocalStorageWithSettings(page, appName) {
|
|
70
|
+
if ((0, _utils.isUnderTest)()) return;
|
|
71
|
+
const settingsFile = _path.default.join(_registry.registryDirectory, '.settings', `${appName}.json`);
|
|
72
|
+
await page.exposeBinding('_saveSerializedSettings', false, (_, settings) => {
|
|
73
|
+
_fs.default.mkdirSync(_path.default.dirname(settingsFile), {
|
|
74
|
+
recursive: true
|
|
75
|
+
});
|
|
76
|
+
_fs.default.writeFileSync(settingsFile, settings);
|
|
77
|
+
});
|
|
78
|
+
const settings = await _fs.default.promises.readFile(settingsFile, 'utf-8').catch(() => '{}');
|
|
79
|
+
await page.addInitScript(`(${String(settings => {
|
|
80
|
+
// iframes w/ snapshots, etc.
|
|
81
|
+
if (location && location.protocol === 'data:') return;
|
|
82
|
+
Object.entries(settings).map(([k, v]) => localStorage[k] = v);
|
|
83
|
+
window.saveSettings = () => {
|
|
84
|
+
window._saveSerializedSettings(JSON.stringify({
|
|
85
|
+
...localStorage
|
|
86
|
+
}));
|
|
87
|
+
};
|
|
88
|
+
})})(${settings});
|
|
89
|
+
`);
|
|
90
|
+
}
|