@checkly/playwright-core 1.51.17-beta.2 → 1.54.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ThirdPartyNotices.txt +65 -123
- package/browsers.json +16 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +47 -50
- package/lib/browserServerImpl.js +89 -69
- package/lib/checkly/escapeRegExp.js +23 -27
- package/lib/checkly/fetch.js +64 -46
- package/lib/checkly/secretsFilter.js +49 -35
- package/lib/cli/driver.js +71 -69
- package/lib/cli/program.js +400 -359
- package/lib/cli/programWithTestStub.js +51 -45
- package/lib/client/accessibility.js +31 -32
- package/lib/client/android.js +151 -242
- package/lib/client/api.js +135 -283
- package/lib/client/artifact.js +39 -36
- package/lib/client/browser.js +96 -71
- package/lib/client/browserContext.js +314 -345
- package/lib/client/browserType.js +103 -127
- package/lib/client/cdpSession.js +29 -31
- package/lib/client/channelOwner.js +89 -112
- package/lib/client/clientHelper.js +48 -39
- package/lib/client/clientInstrumentation.js +40 -37
- package/lib/client/clientStackTrace.js +41 -37
- package/lib/client/clock.js +36 -36
- package/lib/client/connection.js +188 -214
- package/lib/client/consoleMessage.js +31 -28
- package/lib/client/coverage.js +25 -22
- package/lib/client/dialog.js +30 -31
- package/lib/client/download.js +25 -25
- package/lib/client/electron.js +80 -77
- package/lib/client/elementHandle.js +120 -159
- package/lib/client/errors.js +53 -53
- package/lib/client/eventEmitter.js +124 -121
- package/lib/client/events.js +72 -68
- package/lib/client/fetch.js +166 -190
- package/lib/client/fileChooser.js +25 -24
- package/lib/client/fileUtils.js +31 -28
- package/lib/client/frame.js +207 -306
- package/lib/client/harRouter.js +42 -52
- package/lib/client/input.js +42 -69
- package/lib/client/jsHandle.js +54 -69
- package/lib/client/jsonPipe.js +27 -23
- package/lib/client/localUtils.js +29 -29
- package/lib/client/locator.js +145 -237
- package/lib/client/network.js +282 -307
- package/lib/client/page.js +269 -318
- package/lib/client/platform.js +46 -43
- package/lib/client/playwright.js +51 -76
- package/lib/client/selectors.js +45 -63
- package/lib/client/stream.js +29 -25
- package/lib/client/timeoutSettings.js +55 -41
- package/lib/client/tracing.js +49 -96
- package/lib/client/types.js +26 -22
- package/lib/client/video.js +35 -27
- package/lib/client/waiter.js +69 -88
- package/lib/client/webError.js +25 -23
- package/lib/client/webSocket.js +43 -56
- package/lib/client/worker.js +48 -56
- package/lib/client/writableStream.js +27 -23
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +26 -6
- package/lib/generated/consoleApiSource.js +26 -6
- package/lib/generated/injectedScriptSource.js +26 -6
- package/lib/generated/pollingRecorderSource.js +26 -6
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +26 -6
- package/lib/generated/webSocketMockSource.js +333 -5
- package/lib/inProcessFactory.js +51 -53
- package/lib/inprocess.js +2 -19
- package/lib/outofprocess.js +51 -46
- package/lib/protocol/serializers.js +153 -134
- package/lib/protocol/validator.js +2807 -2739
- package/lib/protocol/validatorPrimitives.js +114 -73
- package/lib/remote/playwrightConnection.js +88 -242
- package/lib/remote/playwrightServer.js +305 -92
- package/lib/server/accessibility.js +44 -37
- package/lib/server/android/android.js +251 -241
- package/lib/server/android/backendAdb.js +87 -82
- package/lib/server/artifact.js +78 -55
- package/lib/server/bidi/bidiBrowser.js +297 -158
- package/lib/server/bidi/bidiChromium.js +119 -89
- package/lib/server/bidi/bidiConnection.js +66 -83
- package/lib/server/bidi/bidiExecutionContext.js +129 -113
- package/lib/server/bidi/bidiFirefox.js +86 -76
- package/lib/server/bidi/bidiInput.js +106 -117
- package/lib/server/bidi/bidiNetworkManager.js +142 -159
- package/lib/server/bidi/bidiOverCdp.js +57 -58
- package/lib/server/bidi/bidiPage.js +260 -260
- package/lib/server/bidi/bidiPdf.js +52 -86
- package/lib/server/bidi/third_party/bidiCommands.d.js +22 -0
- package/lib/server/bidi/third_party/bidiDeserializer.js +55 -50
- package/lib/server/bidi/third_party/bidiKeyboard.js +236 -220
- package/lib/server/bidi/third_party/bidiProtocol.js +22 -137
- package/lib/server/bidi/third_party/bidiProtocolCore.js +152 -0
- package/lib/server/bidi/third_party/bidiProtocolPermissions.js +42 -0
- package/lib/server/bidi/third_party/bidiSerializer.js +67 -63
- package/lib/server/bidi/third_party/firefoxPrefs.js +141 -119
- package/lib/server/browser.js +93 -95
- package/lib/server/browserContext.js +419 -429
- package/lib/server/browserType.js +186 -216
- package/lib/server/callLog.js +47 -44
- package/lib/server/chromium/chromium.js +235 -203
- package/lib/server/chromium/chromiumSwitches.js +100 -67
- package/lib/server/chromium/crAccessibility.js +157 -131
- package/lib/server/chromium/crBrowser.js +310 -292
- package/lib/server/chromium/crConnection.js +95 -121
- package/lib/server/chromium/crCoverage.js +121 -131
- package/lib/server/chromium/crDevTools.js +60 -51
- package/lib/server/chromium/crDragDrop.js +68 -84
- package/lib/server/chromium/crExecutionContext.js +89 -83
- package/lib/server/chromium/crInput.js +118 -113
- package/lib/server/chromium/crNetworkManager.js +274 -375
- package/lib/server/chromium/crPage.js +536 -593
- package/lib/server/chromium/crPdf.js +54 -86
- package/lib/server/chromium/crProtocolHelper.js +92 -80
- package/lib/server/chromium/crServiceWorker.js +84 -73
- package/lib/server/chromium/defaultFontFamilies.js +152 -135
- package/lib/server/chromium/protocol.d.js +16 -0
- package/lib/server/chromium/videoRecorder.js +66 -99
- package/lib/server/clock.js +107 -83
- package/lib/server/codegen/csharp.js +192 -162
- package/lib/server/codegen/java.js +156 -129
- package/lib/server/codegen/javascript.js +163 -148
- package/lib/server/codegen/jsonl.js +32 -28
- package/lib/server/codegen/language.js +75 -52
- package/lib/server/codegen/languages.js +65 -27
- package/lib/server/codegen/python.js +141 -126
- package/lib/server/codegen/types.js +15 -4
- package/lib/server/console.js +28 -32
- package/lib/server/cookieStore.js +108 -86
- package/lib/server/debugController.js +147 -151
- package/lib/server/debugger.js +86 -78
- package/lib/server/deviceDescriptors.js +37 -24
- package/lib/server/deviceDescriptorsSource.json +238 -128
- package/lib/server/dialog.js +84 -39
- package/lib/server/dispatchers/androidDispatcher.js +257 -148
- package/lib/server/dispatchers/artifactDispatcher.js +79 -79
- package/lib/server/dispatchers/browserContextDispatcher.js +289 -259
- package/lib/server/dispatchers/browserDispatcher.js +96 -148
- package/lib/server/dispatchers/browserTypeDispatcher.js +50 -41
- package/lib/server/dispatchers/cdpSessionDispatcher.js +35 -39
- package/lib/server/dispatchers/debugControllerDispatcher.js +65 -83
- package/lib/server/dispatchers/dialogDispatcher.js +34 -31
- package/lib/server/dispatchers/dispatcher.js +208 -248
- package/lib/server/dispatchers/electronDispatcher.js +66 -70
- package/lib/server/dispatchers/elementHandlerDispatcher.js +164 -216
- package/lib/server/dispatchers/frameDispatcher.js +211 -272
- package/lib/server/dispatchers/jsHandleDispatcher.js +63 -75
- package/lib/server/dispatchers/jsonPipeDispatcher.js +37 -38
- package/lib/server/dispatchers/localUtilsDispatcher.js +121 -119
- package/lib/server/dispatchers/networkDispatchers.js +117 -128
- package/lib/server/dispatchers/pageDispatcher.js +256 -248
- package/lib/server/dispatchers/playwrightDispatcher.js +92 -87
- package/lib/server/dispatchers/streamDispatcher.js +52 -48
- package/lib/server/dispatchers/tracingDispatcher.js +47 -52
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +126 -150
- package/lib/server/dispatchers/writableStreamDispatcher.js +65 -43
- package/lib/server/dom.js +485 -582
- package/lib/server/download.js +47 -37
- package/lib/server/electron/electron.js +216 -243
- package/lib/server/electron/loader.js +9 -37
- package/lib/server/errors.js +47 -46
- package/lib/server/fetch.js +317 -360
- package/lib/server/fileChooser.js +25 -24
- package/lib/server/fileUploadUtils.js +66 -60
- package/lib/server/firefox/ffAccessibility.js +153 -131
- package/lib/server/firefox/ffBrowser.js +268 -305
- package/lib/server/firefox/ffConnection.js +63 -84
- package/lib/server/firefox/ffExecutionContext.js +92 -73
- package/lib/server/firefox/ffInput.js +82 -84
- package/lib/server/firefox/ffNetworkManager.js +137 -114
- package/lib/server/firefox/ffPage.js +261 -293
- package/lib/server/firefox/firefox.js +80 -72
- package/lib/server/firefox/protocol.d.js +16 -0
- package/lib/server/formData.js +107 -35
- package/lib/server/frameSelectors.js +98 -114
- package/lib/server/frames.js +845 -1055
- package/lib/server/har/harRecorder.js +85 -77
- package/lib/server/har/harTracer.js +290 -223
- package/lib/server/harBackend.js +80 -80
- package/lib/server/helper.js +55 -59
- package/lib/server/index.js +59 -99
- package/lib/server/input.js +151 -189
- package/lib/server/instrumentation.js +57 -44
- package/lib/server/javascript.js +133 -134
- package/lib/server/launchApp.js +113 -75
- package/lib/server/localUtils.js +150 -142
- package/lib/server/macEditingCommands.js +141 -137
- package/lib/server/network.js +299 -303
- package/lib/server/page.js +513 -544
- package/lib/server/pipeTransport.js +49 -45
- package/lib/server/playwright.js +58 -67
- package/lib/server/progress.js +137 -68
- package/lib/server/protocolError.js +34 -31
- package/lib/server/recorder/chat.js +70 -86
- package/lib/server/recorder/recorderApp.js +341 -176
- package/lib/server/recorder/recorderInTraceViewer.js +65 -94
- package/lib/server/recorder/recorderRunner.js +93 -116
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +104 -47
- package/lib/server/recorder/throttledFile.js +42 -30
- package/lib/server/recorder.js +395 -275
- package/lib/server/registry/browserFetcher.js +106 -101
- package/lib/server/registry/dependencies.js +245 -196
- package/lib/server/registry/index.js +930 -803
- package/lib/server/registry/nativeDeps.js +1073 -464
- package/lib/server/registry/oopDownloadBrowserMain.js +57 -75
- package/lib/server/screenshotter.js +160 -191
- package/lib/server/selectors.js +90 -51
- package/lib/server/socksClientCertificatesInterceptor.js +171 -186
- package/lib/server/socksInterceptor.js +62 -70
- package/lib/server/trace/recorder/snapshotter.js +76 -102
- package/lib/server/trace/recorder/snapshotterInjected.js +238 -217
- package/lib/server/trace/recorder/tracing.js +354 -362
- package/lib/server/trace/test/inMemorySnapshotter.js +46 -52
- package/lib/server/trace/viewer/traceViewer.js +160 -147
- package/lib/server/transport.js +119 -134
- package/lib/server/types.js +26 -22
- package/lib/server/usKeyboardLayout.js +135 -545
- package/lib/server/utils/ascii.js +39 -26
- package/lib/server/utils/comparators.js +105 -103
- package/lib/server/utils/crypto.js +157 -112
- package/lib/server/utils/debug.js +36 -32
- package/lib/server/utils/debugLogger.js +77 -48
- package/lib/server/utils/env.js +52 -37
- package/lib/server/utils/eventsHelper.js +29 -28
- package/lib/server/utils/expectUtils.js +31 -26
- package/lib/server/utils/fileUtils.js +123 -136
- package/lib/server/utils/happyEyeballs.js +141 -126
- package/lib/server/utils/hostPlatform.js +84 -120
- package/lib/server/utils/httpServer.js +106 -121
- package/lib/server/utils/image_tools/colorUtils.js +42 -51
- package/lib/server/utils/image_tools/compare.js +44 -43
- package/lib/server/utils/image_tools/imageChannel.js +38 -30
- package/lib/server/utils/image_tools/stats.js +40 -40
- package/lib/server/utils/linuxUtils.js +50 -37
- package/lib/server/utils/network.js +152 -96
- package/lib/server/utils/nodePlatform.js +87 -79
- package/lib/server/utils/pipeTransport.js +44 -42
- package/lib/server/utils/processLauncher.js +111 -121
- package/lib/server/utils/profiler.js +52 -39
- package/lib/server/utils/socksProxy.js +280 -339
- package/lib/server/utils/spawnAsync.js +37 -41
- package/lib/server/utils/task.js +31 -38
- package/lib/server/utils/userAgent.js +73 -66
- package/lib/server/utils/wsServer.js +68 -75
- package/lib/server/utils/zipFile.js +36 -37
- package/lib/server/utils/zones.js +37 -34
- package/lib/server/webkit/protocol.d.js +16 -0
- package/lib/server/webkit/webkit.js +77 -61
- package/lib/server/webkit/wkAccessibility.js +161 -118
- package/lib/server/webkit/wkBrowser.js +193 -184
- package/lib/server/webkit/wkConnection.js +59 -83
- package/lib/server/webkit/wkExecutionContext.js +85 -70
- package/lib/server/webkit/wkInput.js +97 -95
- package/lib/server/webkit/wkInterceptableRequest.js +102 -95
- package/lib/server/webkit/wkPage.js +568 -667
- package/lib/server/webkit/wkProvisionalPage.js +45 -56
- package/lib/server/webkit/wkWorkers.js +79 -79
- package/lib/utils/expectUtils.js +31 -26
- package/lib/utils/isomorphic/ariaSnapshot.js +149 -152
- package/lib/utils/isomorphic/assert.js +28 -22
- package/lib/utils/isomorphic/colors.js +66 -59
- package/lib/utils/isomorphic/cssParser.js +120 -125
- package/lib/utils/isomorphic/cssTokenizer.js +436 -364
- package/lib/utils/isomorphic/headers.js +38 -37
- package/lib/utils/isomorphic/locatorGenerators.js +358 -357
- package/lib/utils/isomorphic/locatorParser.js +96 -105
- package/lib/utils/isomorphic/locatorUtils.js +63 -44
- package/lib/utils/isomorphic/manualPromise.js +46 -39
- package/lib/utils/isomorphic/mimeType.js +447 -25
- package/lib/utils/isomorphic/multimap.js +34 -27
- package/lib/utils/isomorphic/protocolFormatter.js +68 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +321 -0
- package/lib/utils/isomorphic/recorderUtils.js +140 -181
- package/lib/utils/isomorphic/rtti.js +35 -33
- package/lib/utils/isomorphic/selectorParser.js +182 -193
- package/lib/utils/isomorphic/semaphore.js +27 -24
- package/lib/utils/isomorphic/stackTrace.js +87 -98
- package/lib/utils/isomorphic/stringUtils.js +98 -112
- package/lib/utils/isomorphic/time.js +46 -22
- package/lib/utils/isomorphic/timeoutRunner.js +53 -53
- package/lib/utils/isomorphic/traceUtils.js +37 -41
- package/lib/utils/isomorphic/types.js +15 -4
- package/lib/utils/isomorphic/urlMatch.js +113 -67
- package/lib/utils/isomorphic/utilityScriptSerializers.js +251 -0
- package/lib/utils.js +101 -443
- package/lib/utilsBundle.js +101 -52
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/zipBundle.js +32 -23
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +1267 -1057
- package/types/types.d.ts +131 -29
- package/lib/common/socksProxy.js +0 -569
- package/lib/common/timeoutSettings.js +0 -73
- package/lib/common/types.js +0 -5
- package/lib/image_tools/colorUtils.js +0 -98
- package/lib/image_tools/compare.js +0 -108
- package/lib/image_tools/imageChannel.js +0 -70
- package/lib/image_tools/stats.js +0 -102
- package/lib/protocol/debug.js +0 -27
- package/lib/protocol/transport.js +0 -82
- package/lib/server/dispatchers/selectorsDispatcher.js +0 -36
- package/lib/server/isomorphic/utilityScriptSerializers.js +0 -229
- package/lib/server/recorder/contextRecorder.js +0 -290
- package/lib/server/recorder/recorderCollection.js +0 -104
- package/lib/server/recorder/recorderFrontend.js +0 -5
- package/lib/server/storageScript.js +0 -160
- package/lib/server/timeoutSettings.js +0 -74
- package/lib/third_party/diff_match_patch.js +0 -2222
- package/lib/utils/ascii.js +0 -31
- package/lib/utils/comparators.js +0 -171
- package/lib/utils/crypto.js +0 -174
- package/lib/utils/debug.js +0 -46
- package/lib/utils/debugLogger.js +0 -91
- package/lib/utils/env.js +0 -49
- package/lib/utils/eventsHelper.js +0 -38
- package/lib/utils/fileUtils.js +0 -205
- package/lib/utils/happy-eyeballs.js +0 -210
- package/lib/utils/headers.js +0 -52
- package/lib/utils/hostPlatform.js +0 -133
- package/lib/utils/httpServer.js +0 -237
- package/lib/utils/index.js +0 -368
- package/lib/utils/linuxUtils.js +0 -78
- package/lib/utils/manualPromise.js +0 -109
- package/lib/utils/multimap.js +0 -75
- package/lib/utils/network.js +0 -160
- package/lib/utils/processLauncher.js +0 -248
- package/lib/utils/profiler.js +0 -53
- package/lib/utils/rtti.js +0 -44
- package/lib/utils/semaphore.js +0 -51
- package/lib/utils/spawnAsync.js +0 -45
- package/lib/utils/stackTrace.js +0 -121
- package/lib/utils/task.js +0 -58
- package/lib/utils/time.js +0 -37
- package/lib/utils/timeoutRunner.js +0 -66
- package/lib/utils/traceUtils.js +0 -44
- package/lib/utils/userAgent.js +0 -105
- package/lib/utils/wsServer.js +0 -127
- package/lib/utils/zipFile.js +0 -75
- package/lib/utils/zones.js +0 -62
- package/lib/vite/htmlReport/index.html +0 -69
- package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +0 -24
- package/lib/vite/recorder/assets/codeMirrorModule-C3UTv-Ge.css +0 -1
- package/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- package/lib/vite/recorder/assets/index-ELPgmkwA.js +0 -184
- package/lib/vite/recorder/assets/index-eHBmevrY.css +0 -1
- package/lib/vite/recorder/index.html +0 -29
- package/lib/vite/recorder/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/assets/codeMirrorModule-gU1OOCQO.js +0 -24
- package/lib/vite/traceViewer/assets/defaultSettingsView-B5n_FjMx.js +0 -1
- package/lib/vite/traceViewer/assets/inspectorTab-6Tru8Mn_.js +0 -235
- package/lib/vite/traceViewer/assets/workbench-B_Nj4NA2.js +0 -25
- package/lib/vite/traceViewer/assets/xtermModule-BoAIEibi.js +0 -9
- package/lib/vite/traceViewer/codeMirrorModule.C3UTv-Ge.css +0 -1
- package/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- package/lib/vite/traceViewer/defaultSettingsView.CO3FR0CX.css +0 -1
- package/lib/vite/traceViewer/embedded.DpNPH6mk.js +0 -2
- package/lib/vite/traceViewer/embedded.html +0 -18
- package/lib/vite/traceViewer/embedded.mLhjB5IF.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.CuE3SYGw.js +0 -2
- package/lib/vite/traceViewer/index.html +0 -47
- package/lib/vite/traceViewer/inspectorTab.CXDulcFG.css +0 -1
- package/lib/vite/traceViewer/playwright-logo.svg +0 -9
- package/lib/vite/traceViewer/recorder.BD-uZJs7.js +0 -2
- package/lib/vite/traceViewer/recorder.html +0 -17
- package/lib/vite/traceViewer/recorder.tn0RQdqM.css +0 -0
- package/lib/vite/traceViewer/snapshot.html +0 -21
- package/lib/vite/traceViewer/sw.bundle.js +0 -3
- package/lib/vite/traceViewer/uiMode.BatfzHMG.css +0 -1
- package/lib/vite/traceViewer/uiMode.DHrNgddz.js +0 -5
- package/lib/vite/traceViewer/uiMode.html +0 -21
- package/lib/vite/traceViewer/workbench.B9vIAzH9.css +0 -1
- package/lib/vite/traceViewer/xtermModule.Beg8tuEN.css +0 -32
|
@@ -1,58 +1,57 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var snapshotterInjected_exports = {};
|
|
20
|
+
__export(snapshotterInjected_exports, {
|
|
21
|
+
frameSnapshotStreamer: () => frameSnapshotStreamer
|
|
5
22
|
});
|
|
6
|
-
exports
|
|
7
|
-
/**
|
|
8
|
-
* Copyright (c) Microsoft Corporation.
|
|
9
|
-
*
|
|
10
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
11
|
-
* you may not use this file except in compliance with the License.
|
|
12
|
-
* You may obtain a copy of the License at
|
|
13
|
-
*
|
|
14
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
15
|
-
*
|
|
16
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
17
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
18
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
19
|
-
* See the License for the specific language governing permissions and
|
|
20
|
-
* limitations under the License.
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
+
module.exports = __toCommonJS(snapshotterInjected_exports);
|
|
23
24
|
function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const kSnapshotFrameId = Symbol('__playwright_snapshot_frameid_');
|
|
43
|
-
const kCachedData = Symbol('__playwright_snapshot_cache_');
|
|
44
|
-
const kEndOfList = Symbol('__playwright_end_of_list_');
|
|
25
|
+
if (window[snapshotStreamer])
|
|
26
|
+
return;
|
|
27
|
+
const kShadowAttribute = "__playwright_shadow_root_";
|
|
28
|
+
const kValueAttribute = "__playwright_value_";
|
|
29
|
+
const kCheckedAttribute = "__playwright_checked_";
|
|
30
|
+
const kSelectedAttribute = "__playwright_selected_";
|
|
31
|
+
const kScrollTopAttribute = "__playwright_scroll_top_";
|
|
32
|
+
const kScrollLeftAttribute = "__playwright_scroll_left_";
|
|
33
|
+
const kStyleSheetAttribute = "__playwright_style_sheet_";
|
|
34
|
+
const kTargetAttribute = "__playwright_target__";
|
|
35
|
+
const kCustomElementsAttribute = "__playwright_custom_elements__";
|
|
36
|
+
const kCurrentSrcAttribute = "__playwright_current_src__";
|
|
37
|
+
const kBoundingRectAttribute = "__playwright_bounding_rect__";
|
|
38
|
+
const kPopoverOpenAttribute = "__playwright_popover_open_";
|
|
39
|
+
const kDialogOpenAttribute = "__playwright_dialog_open_";
|
|
40
|
+
const kSnapshotFrameId = Symbol("__playwright_snapshot_frameid_");
|
|
41
|
+
const kCachedData = Symbol("__playwright_snapshot_cache_");
|
|
42
|
+
const kEndOfList = Symbol("__playwright_end_of_list_");
|
|
45
43
|
function resetCachedData(obj) {
|
|
46
44
|
delete obj[kCachedData];
|
|
47
45
|
}
|
|
48
46
|
function ensureCachedData(obj) {
|
|
49
|
-
if (!obj[kCachedData])
|
|
47
|
+
if (!obj[kCachedData])
|
|
48
|
+
obj[kCachedData] = {};
|
|
50
49
|
return obj[kCachedData];
|
|
51
50
|
}
|
|
52
51
|
function removeHash(url) {
|
|
53
52
|
try {
|
|
54
53
|
const u = new URL(url);
|
|
55
|
-
u.hash =
|
|
54
|
+
u.hash = "";
|
|
56
55
|
return u.toString();
|
|
57
56
|
} catch (e) {
|
|
58
57
|
return url;
|
|
@@ -61,74 +60,68 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
61
60
|
class Streamer {
|
|
62
61
|
constructor() {
|
|
63
62
|
this._lastSnapshotNumber = 0;
|
|
64
|
-
this._staleStyleSheets = new Set();
|
|
63
|
+
this._staleStyleSheets = /* @__PURE__ */ new Set();
|
|
65
64
|
this._readingStyleSheet = false;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const invalidateCSSGroupingRule = rule => {
|
|
70
|
-
if (rule.parentStyleSheet) this._invalidateStyleSheet(rule.parentStyleSheet);
|
|
71
|
-
};
|
|
72
|
-
this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'insertRule', sheet => this._invalidateStyleSheet(sheet));
|
|
73
|
-
this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'deleteRule', sheet => this._invalidateStyleSheet(sheet));
|
|
74
|
-
this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'addRule', sheet => this._invalidateStyleSheet(sheet));
|
|
75
|
-
this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'removeRule', sheet => this._invalidateStyleSheet(sheet));
|
|
76
|
-
this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'rules', sheet => this._invalidateStyleSheet(sheet));
|
|
77
|
-
this._interceptNativeGetter(window.CSSStyleSheet.prototype, 'cssRules', sheet => this._invalidateStyleSheet(sheet));
|
|
78
|
-
this._interceptNativeMethod(window.CSSStyleSheet.prototype, 'replaceSync', sheet => this._invalidateStyleSheet(sheet));
|
|
79
|
-
this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'insertRule', invalidateCSSGroupingRule);
|
|
80
|
-
this._interceptNativeMethod(window.CSSGroupingRule.prototype, 'deleteRule', invalidateCSSGroupingRule);
|
|
81
|
-
this._interceptNativeGetter(window.CSSGroupingRule.prototype, 'cssRules', invalidateCSSGroupingRule);
|
|
82
|
-
this._interceptNativeAsyncMethod(window.CSSStyleSheet.prototype, 'replace', sheet => this._invalidateStyleSheet(sheet));
|
|
83
|
-
this._fakeBase = document.createElement('base');
|
|
84
|
-
this._observer = new MutationObserver(list => this._handleMutations(list));
|
|
85
|
-
const observerConfig = {
|
|
86
|
-
attributes: true,
|
|
87
|
-
subtree: true
|
|
65
|
+
const invalidateCSSGroupingRule = (rule) => {
|
|
66
|
+
if (rule.parentStyleSheet)
|
|
67
|
+
this._invalidateStyleSheet(rule.parentStyleSheet);
|
|
88
68
|
};
|
|
69
|
+
this._interceptNativeMethod(window.CSSStyleSheet.prototype, "insertRule", (sheet) => this._invalidateStyleSheet(sheet));
|
|
70
|
+
this._interceptNativeMethod(window.CSSStyleSheet.prototype, "deleteRule", (sheet) => this._invalidateStyleSheet(sheet));
|
|
71
|
+
this._interceptNativeMethod(window.CSSStyleSheet.prototype, "addRule", (sheet) => this._invalidateStyleSheet(sheet));
|
|
72
|
+
this._interceptNativeMethod(window.CSSStyleSheet.prototype, "removeRule", (sheet) => this._invalidateStyleSheet(sheet));
|
|
73
|
+
this._interceptNativeGetter(window.CSSStyleSheet.prototype, "rules", (sheet) => this._invalidateStyleSheet(sheet));
|
|
74
|
+
this._interceptNativeGetter(window.CSSStyleSheet.prototype, "cssRules", (sheet) => this._invalidateStyleSheet(sheet));
|
|
75
|
+
this._interceptNativeMethod(window.CSSStyleSheet.prototype, "replaceSync", (sheet) => this._invalidateStyleSheet(sheet));
|
|
76
|
+
this._interceptNativeMethod(window.CSSGroupingRule.prototype, "insertRule", invalidateCSSGroupingRule);
|
|
77
|
+
this._interceptNativeMethod(window.CSSGroupingRule.prototype, "deleteRule", invalidateCSSGroupingRule);
|
|
78
|
+
this._interceptNativeGetter(window.CSSGroupingRule.prototype, "cssRules", invalidateCSSGroupingRule);
|
|
79
|
+
this._interceptNativeAsyncMethod(window.CSSStyleSheet.prototype, "replace", (sheet) => this._invalidateStyleSheet(sheet));
|
|
80
|
+
this._fakeBase = document.createElement("base");
|
|
81
|
+
this._observer = new MutationObserver((list) => this._handleMutations(list));
|
|
82
|
+
const observerConfig = { attributes: true, subtree: true };
|
|
89
83
|
this._observer.observe(document, observerConfig);
|
|
90
84
|
this._refreshListenersWhenNeeded();
|
|
91
85
|
}
|
|
92
86
|
_refreshListenersWhenNeeded() {
|
|
93
87
|
this._refreshListeners();
|
|
94
|
-
const customEventName =
|
|
88
|
+
const customEventName = "__playwright_snapshotter_global_listeners_check__";
|
|
95
89
|
let seenEvent = false;
|
|
96
90
|
const handleCustomEvent = () => seenEvent = true;
|
|
97
91
|
window.addEventListener(customEventName, handleCustomEvent);
|
|
98
|
-
const observer = new MutationObserver(entries => {
|
|
99
|
-
|
|
100
|
-
const newDocumentElement = entries.some(entry => Array.from(entry.addedNodes).includes(document.documentElement));
|
|
92
|
+
const observer = new MutationObserver((entries) => {
|
|
93
|
+
const newDocumentElement = entries.some((entry) => Array.from(entry.addedNodes).includes(document.documentElement));
|
|
101
94
|
if (newDocumentElement) {
|
|
102
|
-
// New documentElement - let's check whether listeners are still here.
|
|
103
95
|
seenEvent = false;
|
|
104
96
|
window.dispatchEvent(new CustomEvent(customEventName));
|
|
105
97
|
if (!seenEvent) {
|
|
106
|
-
// Listener did not fire. Reattach the listener and notify.
|
|
107
98
|
window.addEventListener(customEventName, handleCustomEvent);
|
|
108
99
|
this._refreshListeners();
|
|
109
100
|
}
|
|
110
101
|
}
|
|
111
102
|
});
|
|
112
|
-
observer.observe(document, {
|
|
113
|
-
childList: true
|
|
114
|
-
});
|
|
103
|
+
observer.observe(document, { childList: true });
|
|
115
104
|
}
|
|
116
105
|
_refreshListeners() {
|
|
117
|
-
document.addEventListener(
|
|
118
|
-
if (!event.detail)
|
|
106
|
+
document.addEventListener("__playwright_mark_target__", (event) => {
|
|
107
|
+
if (!event.detail)
|
|
108
|
+
return;
|
|
119
109
|
const callId = event.detail;
|
|
120
110
|
event.composedPath()[0].__playwright_target__ = callId;
|
|
121
111
|
});
|
|
122
|
-
document.addEventListener(
|
|
123
|
-
if (!event.detail)
|
|
112
|
+
document.addEventListener("__playwright_unmark_target__", (event) => {
|
|
113
|
+
if (!event.detail)
|
|
114
|
+
return;
|
|
124
115
|
const callId = event.detail;
|
|
125
|
-
if (event.composedPath()[0].__playwright_target__ === callId)
|
|
116
|
+
if (event.composedPath()[0].__playwright_target__ === callId)
|
|
117
|
+
delete event.composedPath()[0].__playwright_target__;
|
|
126
118
|
});
|
|
127
119
|
}
|
|
128
120
|
_interceptNativeMethod(obj, method, cb) {
|
|
129
121
|
const native = obj[method];
|
|
130
|
-
if (!native)
|
|
131
|
-
|
|
122
|
+
if (!native)
|
|
123
|
+
return;
|
|
124
|
+
obj[method] = function(...args) {
|
|
132
125
|
const result = native.call(this, ...args);
|
|
133
126
|
cb(this, result);
|
|
134
127
|
return result;
|
|
@@ -136,8 +129,9 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
136
129
|
}
|
|
137
130
|
_interceptNativeAsyncMethod(obj, method, cb) {
|
|
138
131
|
const native = obj[method];
|
|
139
|
-
if (!native)
|
|
140
|
-
|
|
132
|
+
if (!native)
|
|
133
|
+
return;
|
|
134
|
+
obj[method] = async function(...args) {
|
|
141
135
|
const result = await native.call(this, ...args);
|
|
142
136
|
cb(this, result);
|
|
143
137
|
return result;
|
|
@@ -147,7 +141,7 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
147
141
|
const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
148
142
|
Object.defineProperty(obj, prop, {
|
|
149
143
|
...descriptor,
|
|
150
|
-
get: function
|
|
144
|
+
get: function() {
|
|
151
145
|
const result = descriptor.get.call(this);
|
|
152
146
|
cb(this, result);
|
|
153
147
|
return result;
|
|
@@ -155,26 +149,26 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
155
149
|
});
|
|
156
150
|
}
|
|
157
151
|
_handleMutations(list) {
|
|
158
|
-
for (const mutation of list)
|
|
152
|
+
for (const mutation of list)
|
|
153
|
+
ensureCachedData(mutation.target).attributesCached = void 0;
|
|
159
154
|
}
|
|
160
155
|
_invalidateStyleSheet(sheet) {
|
|
161
|
-
if (this._readingStyleSheet)
|
|
156
|
+
if (this._readingStyleSheet)
|
|
157
|
+
return;
|
|
162
158
|
this._staleStyleSheets.add(sheet);
|
|
163
159
|
}
|
|
164
160
|
_updateStyleElementStyleSheetTextIfNeeded(sheet, forceText) {
|
|
165
161
|
const data = ensureCachedData(sheet);
|
|
166
|
-
if (this._staleStyleSheets.has(sheet) || forceText && data.cssText ===
|
|
162
|
+
if (this._staleStyleSheets.has(sheet) || forceText && data.cssText === void 0) {
|
|
167
163
|
this._staleStyleSheets.delete(sheet);
|
|
168
164
|
try {
|
|
169
165
|
data.cssText = this._getSheetText(sheet);
|
|
170
166
|
} catch (e) {
|
|
171
|
-
|
|
172
|
-
data.cssText = '';
|
|
167
|
+
data.cssText = "";
|
|
173
168
|
}
|
|
174
169
|
}
|
|
175
170
|
return data.cssText;
|
|
176
171
|
}
|
|
177
|
-
|
|
178
172
|
// Returns either content, ref, or no override.
|
|
179
173
|
_updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber) {
|
|
180
174
|
const data = ensureCachedData(sheet);
|
|
@@ -185,50 +179,58 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
185
179
|
data.cssRef = snapshotNumber;
|
|
186
180
|
return data.cssText;
|
|
187
181
|
} catch (e) {
|
|
188
|
-
// Sometimes we cannot access cross-origin stylesheets.
|
|
189
182
|
}
|
|
190
183
|
}
|
|
191
|
-
return data.cssRef ===
|
|
184
|
+
return data.cssRef === void 0 ? void 0 : snapshotNumber - data.cssRef;
|
|
192
185
|
}
|
|
193
186
|
markIframe(iframeElement, frameId) {
|
|
194
187
|
iframeElement[kSnapshotFrameId] = frameId;
|
|
195
188
|
}
|
|
196
189
|
reset() {
|
|
197
190
|
this._staleStyleSheets.clear();
|
|
198
|
-
const visitNode = node => {
|
|
191
|
+
const visitNode = (node) => {
|
|
199
192
|
resetCachedData(node);
|
|
200
193
|
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
201
194
|
const element = node;
|
|
202
|
-
if (element.shadowRoot)
|
|
195
|
+
if (element.shadowRoot)
|
|
196
|
+
visitNode(element.shadowRoot);
|
|
203
197
|
}
|
|
204
|
-
for (let child = node.firstChild; child; child = child.nextSibling)
|
|
198
|
+
for (let child = node.firstChild; child; child = child.nextSibling)
|
|
199
|
+
visitNode(child);
|
|
205
200
|
};
|
|
206
201
|
visitNode(document.documentElement);
|
|
207
202
|
visitNode(this._fakeBase);
|
|
208
203
|
}
|
|
209
204
|
__sanitizeMetaAttribute(name, value, httpEquiv) {
|
|
210
|
-
if (name ===
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
|
|
205
|
+
if (name === "charset")
|
|
206
|
+
return "utf-8";
|
|
207
|
+
if (httpEquiv.toLowerCase() !== "content-type" || name !== "content")
|
|
208
|
+
return value;
|
|
209
|
+
const [type, ...params] = value.split(";");
|
|
210
|
+
if (type !== "text/html" || params.length <= 0)
|
|
211
|
+
return value;
|
|
212
|
+
const charsetParamIdx = params.findIndex((param) => param.trim().startsWith("charset="));
|
|
213
|
+
if (charsetParamIdx > -1)
|
|
214
|
+
params[charsetParamIdx] = "charset=utf-8";
|
|
215
|
+
return `${type}; ${params.join("; ")}`;
|
|
217
216
|
}
|
|
218
217
|
_sanitizeUrl(url) {
|
|
219
|
-
if (url.startsWith(
|
|
218
|
+
if (url.startsWith("javascript:") || url.startsWith("vbscript:"))
|
|
219
|
+
return "";
|
|
220
220
|
return url;
|
|
221
221
|
}
|
|
222
222
|
_sanitizeSrcSet(srcset) {
|
|
223
|
-
return srcset.split(
|
|
223
|
+
return srcset.split(",").map((src) => {
|
|
224
224
|
src = src.trim();
|
|
225
|
-
const spaceIndex = src.lastIndexOf(
|
|
226
|
-
if (spaceIndex === -1)
|
|
225
|
+
const spaceIndex = src.lastIndexOf(" ");
|
|
226
|
+
if (spaceIndex === -1)
|
|
227
|
+
return this._sanitizeUrl(src);
|
|
227
228
|
return this._sanitizeUrl(src.substring(0, spaceIndex).trim()) + src.substring(spaceIndex);
|
|
228
|
-
}).join(
|
|
229
|
+
}).join(", ");
|
|
229
230
|
}
|
|
230
231
|
_resolveUrl(base, url) {
|
|
231
|
-
if (url ===
|
|
232
|
+
if (url === "")
|
|
233
|
+
return "";
|
|
232
234
|
try {
|
|
233
235
|
return new URL(url, base).href;
|
|
234
236
|
} catch (e) {
|
|
@@ -237,16 +239,19 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
237
239
|
}
|
|
238
240
|
_getSheetBase(sheet) {
|
|
239
241
|
let rootSheet = sheet;
|
|
240
|
-
while (rootSheet.parentStyleSheet)
|
|
241
|
-
|
|
242
|
+
while (rootSheet.parentStyleSheet)
|
|
243
|
+
rootSheet = rootSheet.parentStyleSheet;
|
|
244
|
+
if (rootSheet.ownerNode)
|
|
245
|
+
return rootSheet.ownerNode.baseURI;
|
|
242
246
|
return document.baseURI;
|
|
243
247
|
}
|
|
244
248
|
_getSheetText(sheet) {
|
|
245
249
|
this._readingStyleSheet = true;
|
|
246
250
|
try {
|
|
247
251
|
const rules = [];
|
|
248
|
-
for (const rule of sheet.cssRules)
|
|
249
|
-
|
|
252
|
+
for (const rule of sheet.cssRules)
|
|
253
|
+
rules.push(rule.cssText);
|
|
254
|
+
return rules.join("\n");
|
|
250
255
|
} finally {
|
|
251
256
|
this._readingStyleSheet = false;
|
|
252
257
|
}
|
|
@@ -257,105 +262,101 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
257
262
|
let nodeCounter = 0;
|
|
258
263
|
let shadowDomNesting = 0;
|
|
259
264
|
let headNesting = 0;
|
|
260
|
-
|
|
261
|
-
// Ensure we are up to date.
|
|
262
265
|
this._handleMutations(this._observer.takeRecords());
|
|
263
|
-
const definedCustomElements = new Set();
|
|
264
|
-
const visitNode = node => {
|
|
266
|
+
const definedCustomElements = /* @__PURE__ */ new Set();
|
|
267
|
+
const visitNode = (node) => {
|
|
265
268
|
const nodeType = node.nodeType;
|
|
266
|
-
const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ?
|
|
267
|
-
if (nodeType !== Node.ELEMENT_NODE && nodeType !== Node.DOCUMENT_FRAGMENT_NODE && nodeType !== Node.TEXT_NODE)
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
const rel =
|
|
273
|
-
if (rel ===
|
|
269
|
+
const nodeName = nodeType === Node.DOCUMENT_FRAGMENT_NODE ? "template" : node.nodeName;
|
|
270
|
+
if (nodeType !== Node.ELEMENT_NODE && nodeType !== Node.DOCUMENT_FRAGMENT_NODE && nodeType !== Node.TEXT_NODE)
|
|
271
|
+
return;
|
|
272
|
+
if (nodeName === "SCRIPT")
|
|
273
|
+
return;
|
|
274
|
+
if (nodeName === "LINK" && nodeType === Node.ELEMENT_NODE) {
|
|
275
|
+
const rel = node.getAttribute("rel")?.toLowerCase();
|
|
276
|
+
if (rel === "preload" || rel === "prefetch")
|
|
277
|
+
return;
|
|
274
278
|
}
|
|
275
|
-
if (removeNoScript && nodeName ===
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
if ((nodeName ===
|
|
279
|
+
if (removeNoScript && nodeName === "NOSCRIPT")
|
|
280
|
+
return;
|
|
281
|
+
if (nodeName === "META" && node.httpEquiv.toLowerCase() === "content-security-policy")
|
|
282
|
+
return;
|
|
283
|
+
if ((nodeName === "IFRAME" || nodeName === "FRAME") && headNesting)
|
|
284
|
+
return;
|
|
280
285
|
const data = ensureCachedData(node);
|
|
281
286
|
const values = [];
|
|
282
287
|
let equals = !!data.cached;
|
|
283
288
|
let extraNodes = 0;
|
|
284
|
-
const expectValue = value => {
|
|
289
|
+
const expectValue = (value) => {
|
|
285
290
|
equals = equals && data.cached[values.length] === value;
|
|
286
291
|
values.push(value);
|
|
287
292
|
};
|
|
288
|
-
const checkAndReturn = n => {
|
|
293
|
+
const checkAndReturn = (n) => {
|
|
289
294
|
data.attributesCached = true;
|
|
290
|
-
if (equals)
|
|
291
|
-
equals: true,
|
|
292
|
-
n: [[snapshotNumber - data.ref[0], data.ref[1]]]
|
|
293
|
-
};
|
|
295
|
+
if (equals)
|
|
296
|
+
return { equals: true, n: [[snapshotNumber - data.ref[0], data.ref[1]]] };
|
|
294
297
|
nodeCounter += extraNodes;
|
|
295
298
|
data.ref = [snapshotNumber, nodeCounter++];
|
|
296
299
|
data.cached = values;
|
|
297
|
-
return {
|
|
298
|
-
equals: false,
|
|
299
|
-
n
|
|
300
|
-
};
|
|
300
|
+
return { equals: false, n };
|
|
301
301
|
};
|
|
302
302
|
if (nodeType === Node.TEXT_NODE) {
|
|
303
|
-
const value = node.nodeValue ||
|
|
303
|
+
const value = node.nodeValue || "";
|
|
304
304
|
expectValue(value);
|
|
305
305
|
return checkAndReturn(value);
|
|
306
306
|
}
|
|
307
|
-
if (nodeName ===
|
|
307
|
+
if (nodeName === "STYLE") {
|
|
308
308
|
const sheet = node.sheet;
|
|
309
309
|
let cssText;
|
|
310
|
-
if (sheet)
|
|
311
|
-
|
|
310
|
+
if (sheet)
|
|
311
|
+
cssText = this._updateStyleElementStyleSheetTextIfNeeded(sheet);
|
|
312
|
+
cssText = cssText || node.textContent || "";
|
|
312
313
|
expectValue(cssText);
|
|
313
|
-
// Compensate for the extra 'cssText' text node.
|
|
314
314
|
extraNodes++;
|
|
315
315
|
return checkAndReturn([nodeName, {}, cssText]);
|
|
316
316
|
}
|
|
317
317
|
const attrs = {};
|
|
318
|
-
const
|
|
319
|
-
const visitChild = child => {
|
|
318
|
+
const result2 = [nodeName, attrs];
|
|
319
|
+
const visitChild = (child) => {
|
|
320
320
|
const snapshot = visitNode(child);
|
|
321
321
|
if (snapshot) {
|
|
322
|
-
|
|
322
|
+
result2.push(snapshot.n);
|
|
323
323
|
expectValue(child);
|
|
324
324
|
equals = equals && snapshot.equals;
|
|
325
325
|
}
|
|
326
326
|
};
|
|
327
|
-
const visitChildStyleSheet = child => {
|
|
327
|
+
const visitChildStyleSheet = (child) => {
|
|
328
328
|
const snapshot = visitStyleSheet(child);
|
|
329
329
|
if (snapshot) {
|
|
330
|
-
|
|
330
|
+
result2.push(snapshot.n);
|
|
331
331
|
expectValue(child);
|
|
332
332
|
equals = equals && snapshot.equals;
|
|
333
333
|
}
|
|
334
334
|
};
|
|
335
|
-
if (nodeType === Node.DOCUMENT_FRAGMENT_NODE)
|
|
335
|
+
if (nodeType === Node.DOCUMENT_FRAGMENT_NODE)
|
|
336
|
+
attrs[kShadowAttribute] = "open";
|
|
336
337
|
if (nodeType === Node.ELEMENT_NODE) {
|
|
337
|
-
var _window$customElement;
|
|
338
338
|
const element = node;
|
|
339
|
-
if (element.localName.includes(
|
|
340
|
-
|
|
339
|
+
if (element.localName.includes("-") && window.customElements?.get(element.localName))
|
|
340
|
+
definedCustomElements.add(element.localName);
|
|
341
|
+
if (nodeName === "INPUT" || nodeName === "TEXTAREA") {
|
|
341
342
|
const value = element.value;
|
|
342
343
|
expectValue(kValueAttribute);
|
|
343
344
|
expectValue(value);
|
|
344
345
|
attrs[kValueAttribute] = value;
|
|
345
346
|
}
|
|
346
|
-
if (nodeName ===
|
|
347
|
-
const value = element.checked ?
|
|
347
|
+
if (nodeName === "INPUT" && ["checkbox", "radio"].includes(element.type)) {
|
|
348
|
+
const value = element.checked ? "true" : "false";
|
|
348
349
|
expectValue(kCheckedAttribute);
|
|
349
350
|
expectValue(value);
|
|
350
351
|
attrs[kCheckedAttribute] = value;
|
|
351
352
|
}
|
|
352
|
-
if (nodeName ===
|
|
353
|
-
const value = element.selected ?
|
|
353
|
+
if (nodeName === "OPTION") {
|
|
354
|
+
const value = element.selected ? "true" : "false";
|
|
354
355
|
expectValue(kSelectedAttribute);
|
|
355
356
|
expectValue(value);
|
|
356
357
|
attrs[kSelectedAttribute] = value;
|
|
357
358
|
}
|
|
358
|
-
if (nodeName ===
|
|
359
|
+
if (nodeName === "CANVAS" || nodeName === "IFRAME" || nodeName === "FRAME") {
|
|
359
360
|
const boundingRect = element.getBoundingClientRect();
|
|
360
361
|
const value = JSON.stringify({
|
|
361
362
|
left: boundingRect.left,
|
|
@@ -367,125 +368,145 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
367
368
|
expectValue(value);
|
|
368
369
|
attrs[kBoundingRectAttribute] = value;
|
|
369
370
|
}
|
|
370
|
-
if (element.popover && element.matches && element.matches(
|
|
371
|
-
const value =
|
|
371
|
+
if (element.popover && element.matches && element.matches(":popover-open")) {
|
|
372
|
+
const value = "true";
|
|
372
373
|
expectValue(kPopoverOpenAttribute);
|
|
373
374
|
expectValue(value);
|
|
374
375
|
attrs[kPopoverOpenAttribute] = value;
|
|
375
376
|
}
|
|
377
|
+
if (nodeName === "DIALOG" && element.open) {
|
|
378
|
+
const value = element.matches(":modal") ? "modal" : "true";
|
|
379
|
+
expectValue(kDialogOpenAttribute);
|
|
380
|
+
expectValue(value);
|
|
381
|
+
attrs[kDialogOpenAttribute] = value;
|
|
382
|
+
}
|
|
376
383
|
if (element.scrollTop) {
|
|
377
384
|
expectValue(kScrollTopAttribute);
|
|
378
385
|
expectValue(element.scrollTop);
|
|
379
|
-
attrs[kScrollTopAttribute] =
|
|
386
|
+
attrs[kScrollTopAttribute] = "" + element.scrollTop;
|
|
380
387
|
}
|
|
381
388
|
if (element.scrollLeft) {
|
|
382
389
|
expectValue(kScrollLeftAttribute);
|
|
383
390
|
expectValue(element.scrollLeft);
|
|
384
|
-
attrs[kScrollLeftAttribute] =
|
|
391
|
+
attrs[kScrollLeftAttribute] = "" + element.scrollLeft;
|
|
385
392
|
}
|
|
386
393
|
if (element.shadowRoot) {
|
|
387
394
|
++shadowDomNesting;
|
|
388
395
|
visitChild(element.shadowRoot);
|
|
389
396
|
--shadowDomNesting;
|
|
390
397
|
}
|
|
391
|
-
if (
|
|
398
|
+
if ("__playwright_target__" in element) {
|
|
392
399
|
expectValue(kTargetAttribute);
|
|
393
|
-
expectValue(element[
|
|
394
|
-
attrs[kTargetAttribute] = element[
|
|
400
|
+
expectValue(element["__playwright_target__"]);
|
|
401
|
+
attrs[kTargetAttribute] = element["__playwright_target__"];
|
|
395
402
|
}
|
|
396
403
|
}
|
|
397
|
-
if (nodeName ===
|
|
404
|
+
if (nodeName === "HEAD") {
|
|
398
405
|
++headNesting;
|
|
399
|
-
|
|
400
|
-
this._fakeBase.setAttribute('href', document.baseURI);
|
|
406
|
+
this._fakeBase.setAttribute("href", document.baseURI);
|
|
401
407
|
visitChild(this._fakeBase);
|
|
402
408
|
}
|
|
403
|
-
for (let child = node.firstChild; child; child = child.nextSibling)
|
|
404
|
-
|
|
409
|
+
for (let child = node.firstChild; child; child = child.nextSibling)
|
|
410
|
+
visitChild(child);
|
|
411
|
+
if (nodeName === "HEAD")
|
|
412
|
+
--headNesting;
|
|
405
413
|
expectValue(kEndOfList);
|
|
406
414
|
let documentOrShadowRoot = null;
|
|
407
|
-
if (node.ownerDocument.documentElement === node)
|
|
415
|
+
if (node.ownerDocument.documentElement === node)
|
|
416
|
+
documentOrShadowRoot = node.ownerDocument;
|
|
417
|
+
else if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE)
|
|
418
|
+
documentOrShadowRoot = node;
|
|
408
419
|
if (documentOrShadowRoot) {
|
|
409
|
-
for (const sheet of documentOrShadowRoot.adoptedStyleSheets || [])
|
|
420
|
+
for (const sheet of documentOrShadowRoot.adoptedStyleSheets || [])
|
|
421
|
+
visitChildStyleSheet(sheet);
|
|
410
422
|
expectValue(kEndOfList);
|
|
411
423
|
}
|
|
412
|
-
|
|
413
|
-
// Process iframe src attribute before bailing out since it depends on a symbol, not the DOM.
|
|
414
|
-
if (nodeName === 'IFRAME' || nodeName === 'FRAME') {
|
|
424
|
+
if (nodeName === "IFRAME" || nodeName === "FRAME") {
|
|
415
425
|
const element = node;
|
|
416
426
|
const frameId = element[kSnapshotFrameId];
|
|
417
|
-
const name =
|
|
418
|
-
const value = frameId ? `/snapshot/${frameId}` :
|
|
427
|
+
const name = "src";
|
|
428
|
+
const value = frameId ? `/snapshot/${frameId}` : "";
|
|
419
429
|
expectValue(name);
|
|
420
430
|
expectValue(value);
|
|
421
431
|
attrs[name] = value;
|
|
422
432
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
if (nodeName === 'BODY' && definedCustomElements.size) {
|
|
426
|
-
const value = [...definedCustomElements].join(',');
|
|
433
|
+
if (nodeName === "BODY" && definedCustomElements.size) {
|
|
434
|
+
const value = [...definedCustomElements].join(",");
|
|
427
435
|
expectValue(kCustomElementsAttribute);
|
|
428
436
|
expectValue(value);
|
|
429
437
|
attrs[kCustomElementsAttribute] = value;
|
|
430
438
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
if (nodeName === 'IMG' || nodeName === 'PICTURE') {
|
|
434
|
-
const value = nodeName === 'PICTURE' ? '' : this._sanitizeUrl(node.currentSrc);
|
|
439
|
+
if (nodeName === "IMG" || nodeName === "PICTURE") {
|
|
440
|
+
const value = nodeName === "PICTURE" ? "" : this._sanitizeUrl(node.currentSrc);
|
|
435
441
|
expectValue(kCurrentSrcAttribute);
|
|
436
442
|
expectValue(value);
|
|
437
443
|
attrs[kCurrentSrcAttribute] = value;
|
|
438
444
|
}
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
// and mutation observer didn't tell us about the attributes.
|
|
442
|
-
if (equals && data.attributesCached && !shadowDomNesting) return checkAndReturn(result);
|
|
445
|
+
if (equals && data.attributesCached && !shadowDomNesting)
|
|
446
|
+
return checkAndReturn(result2);
|
|
443
447
|
if (nodeType === Node.ELEMENT_NODE) {
|
|
444
448
|
const element = node;
|
|
445
449
|
for (let i = 0; i < element.attributes.length; i++) {
|
|
446
450
|
const name = element.attributes[i].name;
|
|
447
|
-
if (nodeName ===
|
|
448
|
-
|
|
449
|
-
if (nodeName ===
|
|
451
|
+
if (nodeName === "LINK" && name === "integrity")
|
|
452
|
+
continue;
|
|
453
|
+
if (nodeName === "IFRAME" && (name === "src" || name === "srcdoc" || name === "sandbox"))
|
|
454
|
+
continue;
|
|
455
|
+
if (nodeName === "FRAME" && name === "src")
|
|
456
|
+
continue;
|
|
457
|
+
if (nodeName === "DIALOG" && name === "open")
|
|
458
|
+
continue;
|
|
450
459
|
let value = element.attributes[i].value;
|
|
451
|
-
if (nodeName ===
|
|
460
|
+
if (nodeName === "META")
|
|
461
|
+
value = this.__sanitizeMetaAttribute(name, value, node.httpEquiv);
|
|
462
|
+
else if (name === "src" && nodeName === "IMG")
|
|
463
|
+
value = this._sanitizeUrl(value);
|
|
464
|
+
else if (name === "srcset" && nodeName === "IMG")
|
|
465
|
+
value = this._sanitizeSrcSet(value);
|
|
466
|
+
else if (name === "srcset" && nodeName === "SOURCE")
|
|
467
|
+
value = this._sanitizeSrcSet(value);
|
|
468
|
+
else if (name === "href" && nodeName === "LINK")
|
|
469
|
+
value = this._sanitizeUrl(value);
|
|
470
|
+
else if (name.startsWith("on"))
|
|
471
|
+
value = "";
|
|
452
472
|
expectValue(name);
|
|
453
473
|
expectValue(value);
|
|
454
474
|
attrs[name] = value;
|
|
455
475
|
}
|
|
456
476
|
expectValue(kEndOfList);
|
|
457
477
|
}
|
|
458
|
-
if (
|
|
459
|
-
|
|
478
|
+
if (result2.length === 2 && !Object.keys(attrs).length)
|
|
479
|
+
result2.pop();
|
|
480
|
+
return checkAndReturn(result2);
|
|
460
481
|
};
|
|
461
|
-
const visitStyleSheet = sheet => {
|
|
482
|
+
const visitStyleSheet = (sheet) => {
|
|
462
483
|
const data = ensureCachedData(sheet);
|
|
463
484
|
const oldCSSText = data.cssText;
|
|
464
|
-
const cssText = this._updateStyleElementStyleSheetTextIfNeeded(
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
485
|
+
const cssText = this._updateStyleElementStyleSheetTextIfNeeded(
|
|
486
|
+
sheet,
|
|
487
|
+
true
|
|
488
|
+
/* forceText */
|
|
489
|
+
);
|
|
490
|
+
if (cssText === oldCSSText)
|
|
491
|
+
return { equals: true, n: [[snapshotNumber - data.ref[0], data.ref[1]]] };
|
|
469
492
|
data.ref = [snapshotNumber, nodeCounter++];
|
|
470
493
|
return {
|
|
471
494
|
equals: false,
|
|
472
|
-
n: [
|
|
495
|
+
n: ["template", {
|
|
473
496
|
[kStyleSheetAttribute]: cssText
|
|
474
497
|
}]
|
|
475
498
|
};
|
|
476
499
|
};
|
|
477
500
|
let html;
|
|
478
501
|
if (document.documentElement) {
|
|
479
|
-
const {
|
|
480
|
-
n
|
|
481
|
-
} = visitNode(document.documentElement);
|
|
502
|
+
const { n } = visitNode(document.documentElement);
|
|
482
503
|
html = n;
|
|
483
504
|
} else {
|
|
484
|
-
html = [
|
|
505
|
+
html = ["html"];
|
|
485
506
|
}
|
|
486
507
|
const result = {
|
|
487
508
|
html,
|
|
488
|
-
doctype: document.doctype ? document.doctype.name :
|
|
509
|
+
doctype: document.doctype ? document.doctype.name : void 0,
|
|
489
510
|
resourceOverrides: [],
|
|
490
511
|
viewport: {
|
|
491
512
|
width: window.innerWidth,
|
|
@@ -496,23 +517,23 @@ function frameSnapshotStreamer(snapshotStreamer, removeNoScript) {
|
|
|
496
517
|
collectionTime: 0
|
|
497
518
|
};
|
|
498
519
|
for (const sheet of this._staleStyleSheets) {
|
|
499
|
-
if (sheet.href === null)
|
|
520
|
+
if (sheet.href === null)
|
|
521
|
+
continue;
|
|
500
522
|
const content = this._updateLinkStyleSheetTextIfNeeded(sheet, snapshotNumber);
|
|
501
|
-
if (content ===
|
|
502
|
-
// Unable to capture stylesheet contents.
|
|
523
|
+
if (content === void 0) {
|
|
503
524
|
continue;
|
|
504
525
|
}
|
|
505
526
|
const base = this._getSheetBase(sheet);
|
|
506
527
|
const url = removeHash(this._resolveUrl(base, sheet.href));
|
|
507
|
-
result.resourceOverrides.push({
|
|
508
|
-
url,
|
|
509
|
-
content,
|
|
510
|
-
contentType: 'text/css'
|
|
511
|
-
});
|
|
528
|
+
result.resourceOverrides.push({ url, content, contentType: "text/css" });
|
|
512
529
|
}
|
|
513
530
|
result.collectionTime = performance.now() - timestamp;
|
|
514
531
|
return result;
|
|
515
532
|
}
|
|
516
533
|
}
|
|
517
534
|
window[snapshotStreamer] = new Streamer();
|
|
518
|
-
}
|
|
535
|
+
}
|
|
536
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
537
|
+
0 && (module.exports = {
|
|
538
|
+
frameSnapshotStreamer
|
|
539
|
+
});
|