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