patchright-core 1.52.5 → 1.55.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/bin/reinstall_chrome_beta_mac.sh +1 -1
- package/bin/reinstall_chrome_stable_mac.sh +1 -1
- package/bin/reinstall_msedge_beta_mac.sh +1 -1
- package/bin/reinstall_msedge_dev_mac.sh +1 -1
- package/bin/reinstall_msedge_stable_mac.sh +1 -1
- package/browsers.json +14 -14
- package/index.js +1 -1
- package/lib/androidServerImpl.js +4 -2
- package/lib/browserServerImpl.js +47 -12
- package/lib/cli/program.js +116 -50
- package/lib/cli/programWithTestStub.js +1 -1
- package/lib/client/android.js +30 -34
- package/lib/client/browser.js +54 -17
- package/lib/client/browserContext.js +67 -71
- package/lib/client/browserType.js +25 -34
- package/lib/client/channelOwner.js +20 -24
- package/lib/client/connection.js +6 -10
- package/lib/client/electron.js +8 -3
- package/lib/client/elementHandle.js +18 -21
- package/lib/client/fetch.js +5 -3
- package/lib/client/frame.js +54 -32
- package/lib/client/input.js +3 -1
- package/lib/client/jsHandle.js +4 -0
- package/lib/client/localUtils.js +0 -1
- package/lib/client/locator.js +30 -26
- package/lib/client/network.js +5 -12
- package/lib/client/page.js +32 -32
- package/lib/client/playwright.js +6 -16
- package/lib/client/selectors.js +18 -38
- package/lib/client/timeoutSettings.js +12 -8
- package/lib/client/tracing.js +24 -20
- package/lib/client/waiter.js +2 -2
- package/lib/client/webSocket.js +4 -22
- package/lib/generated/bindingsControllerSource.js +28 -0
- package/lib/generated/clockSource.js +1 -1
- package/lib/generated/injectedScriptSource.js +1 -1
- package/lib/generated/pollingRecorderSource.js +1 -1
- package/lib/generated/storageScriptSource.js +28 -0
- package/lib/generated/utilityScriptSource.js +1 -1
- package/lib/generated/webSocketMockSource.js +12 -50
- package/lib/inProcessFactory.js +9 -6
- package/lib/outofprocess.js +0 -2
- package/lib/protocol/validator.js +421 -345
- package/lib/protocol/validatorPrimitives.js +18 -4
- package/lib/remote/playwrightConnection.js +29 -166
- package/lib/remote/playwrightServer.js +233 -35
- package/lib/server/android/android.js +97 -83
- package/lib/server/android/backendAdb.js +0 -2
- package/lib/server/bidi/bidiBrowser.js +139 -73
- package/lib/server/bidi/bidiChromium.js +23 -22
- package/lib/server/bidi/bidiExecutionContext.js +2 -1
- package/lib/server/bidi/bidiFirefox.js +17 -14
- package/lib/server/bidi/bidiInput.js +22 -22
- package/lib/server/bidi/bidiNetworkManager.js +8 -11
- package/lib/server/bidi/bidiPage.js +42 -86
- package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
- package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
- package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
- package/lib/server/browser.js +30 -21
- package/lib/server/browserContext.js +203 -165
- package/lib/server/browserType.js +109 -107
- package/lib/server/chromium/chromium.js +84 -69
- package/lib/server/chromium/chromiumSwitches.js +13 -20
- package/lib/server/chromium/crBrowser.js +74 -40
- package/lib/server/chromium/crConnection.js +8 -9
- package/lib/server/chromium/crCoverage.js +11 -8
- package/lib/server/chromium/crDragDrop.js +25 -20
- package/lib/server/chromium/crExecutionContext.js +2 -1
- package/lib/server/chromium/crInput.js +32 -29
- package/lib/server/chromium/crNetworkManager.js +43 -31
- package/lib/server/chromium/crPage.js +98 -72
- package/lib/server/chromium/crServiceWorker.js +13 -18
- package/lib/server/chromium/videoRecorder.js +10 -18
- package/lib/server/clock.js +51 -39
- package/lib/server/codegen/csharp.js +10 -5
- package/lib/server/codegen/java.js +1 -1
- package/lib/server/codegen/javascript.js +1 -1
- package/lib/server/codegen/jsonl.js +2 -1
- package/lib/server/codegen/language.js +22 -1
- package/lib/server/codegen/languages.js +4 -4
- package/lib/server/codegen/python.js +1 -1
- package/lib/server/cookieStore.js +3 -1
- package/lib/server/debugController.js +105 -71
- package/lib/server/debugger.js +6 -23
- package/lib/server/deviceDescriptorsSource.json +237 -127
- package/lib/server/dialog.js +50 -6
- package/lib/server/dispatchers/androidDispatcher.js +77 -62
- package/lib/server/dispatchers/artifactDispatcher.js +18 -18
- package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
- package/lib/server/dispatchers/browserDispatcher.js +55 -88
- package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
- package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
- package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
- package/lib/server/dispatchers/dialogDispatcher.js +4 -4
- package/lib/server/dispatchers/dispatcher.js +78 -53
- package/lib/server/dispatchers/electronDispatcher.js +19 -20
- package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
- package/lib/server/dispatchers/frameDispatcher.js +98 -101
- package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
- package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
- package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
- package/lib/server/dispatchers/networkDispatchers.js +41 -35
- package/lib/server/dispatchers/pageDispatcher.js +156 -107
- package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
- package/lib/server/dispatchers/streamDispatcher.js +15 -8
- package/lib/server/dispatchers/tracingDispatcher.js +22 -13
- package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
- package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
- package/lib/server/dom.js +198 -266
- package/lib/server/download.js +3 -3
- package/lib/server/electron/electron.js +96 -103
- package/lib/server/electron/loader.js +1 -1
- package/lib/server/fetch.js +22 -41
- package/lib/server/fileUploadUtils.js +1 -1
- package/lib/server/firefox/ffBrowser.js +79 -55
- package/lib/server/firefox/ffExecutionContext.js +2 -1
- package/lib/server/firefox/ffInput.js +23 -23
- package/lib/server/firefox/ffNetworkManager.js +8 -6
- package/lib/server/firefox/ffPage.js +39 -36
- package/lib/server/firefox/firefox.js +9 -10
- package/lib/server/frameSelectors.js +63 -20
- package/lib/server/frames.js +495 -555
- package/lib/server/har/harRecorder.js +1 -1
- package/lib/server/har/harTracer.js +4 -2
- package/lib/server/helper.js +3 -7
- package/lib/server/index.js +0 -3
- package/lib/server/input.js +47 -54
- package/lib/server/instrumentation.js +8 -14
- package/lib/server/javascript.js +8 -16
- package/lib/server/launchApp.js +48 -30
- package/lib/server/localUtils.js +45 -38
- package/lib/server/network.js +44 -10
- package/lib/server/page.js +232 -177
- package/lib/server/pageBinding.js +6 -7
- package/lib/server/playwright.js +4 -14
- package/lib/server/progress.js +57 -49
- package/lib/server/recorder/recorderApp.js +298 -95
- package/lib/server/recorder/recorderRunner.js +23 -24
- package/lib/server/recorder/recorderSignalProcessor.js +83 -0
- package/lib/server/recorder/recorderUtils.js +67 -10
- package/lib/server/recorder.js +284 -146
- package/lib/server/registry/index.js +83 -48
- package/lib/server/registry/nativeDeps.js +175 -0
- package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
- package/lib/server/screenshotter.js +84 -83
- package/lib/server/selectors.js +12 -12
- package/lib/server/socksClientCertificatesInterceptor.js +198 -136
- package/lib/server/trace/recorder/snapshotter.js +12 -19
- package/lib/server/trace/recorder/tracing.js +36 -27
- package/lib/server/trace/viewer/traceViewer.js +11 -20
- package/lib/server/transport.js +20 -22
- package/lib/server/utils/comparators.js +2 -2
- package/lib/server/utils/debug.js +3 -8
- package/lib/server/utils/debugLogger.js +8 -0
- package/lib/server/utils/hostPlatform.js +3 -1
- package/lib/server/utils/network.js +35 -25
- package/lib/server/utils/nodePlatform.js +1 -1
- package/lib/server/utils/processLauncher.js +4 -1
- package/lib/server/utils/wsServer.js +11 -17
- package/lib/server/webkit/webkit.js +5 -2
- package/lib/server/webkit/wkBrowser.js +51 -28
- package/lib/server/webkit/wkExecutionContext.js +2 -1
- package/lib/server/webkit/wkInput.js +25 -25
- package/lib/server/webkit/wkInterceptableRequest.js +1 -1
- package/lib/server/webkit/wkPage.js +80 -59
- package/lib/server/webkit/wkProvisionalPage.js +1 -1
- package/lib/server/webkit/wkWorkers.js +7 -7
- package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
- package/lib/utils/isomorphic/cssParser.js +1 -2
- package/lib/utils/isomorphic/locatorGenerators.js +18 -0
- package/lib/utils/isomorphic/manualPromise.js +1 -2
- package/lib/utils/isomorphic/mimeType.js +1 -2
- package/lib/utils/isomorphic/multimap.js +1 -2
- package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
- package/lib/utils/isomorphic/protocolFormatter.js +78 -0
- package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
- package/lib/utils/isomorphic/selectorParser.js +3 -4
- package/lib/utils/isomorphic/stringUtils.js +3 -24
- package/lib/utils/isomorphic/time.js +9 -4
- package/lib/utils/isomorphic/timeoutRunner.js +3 -4
- package/lib/utils/isomorphic/traceUtils.js +2 -3
- package/lib/utils/isomorphic/urlMatch.js +21 -7
- package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
- package/lib/utils.js +8 -2
- package/lib/utilsBundleImpl/index.js +160 -150
- package/lib/vite/htmlReport/index.html +17 -17
- package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
- package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
- package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
- package/lib/vite/recorder/index.html +3 -3
- package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
- package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
- package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
- package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
- package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
- package/lib/vite/traceViewer/index.html +6 -6
- package/lib/vite/traceViewer/sw.bundle.js +3 -3
- package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
- package/lib/vite/traceViewer/uiMode.html +4 -4
- package/lib/zipBundleImpl.js +4 -4
- package/package.json +1 -1
- package/types/protocol.d.ts +712 -107
- package/types/types.d.ts +128 -17
- package/lib/generated/consoleApiSource.js +0 -28
- package/lib/protocol/debug.js +0 -211
- package/lib/server/recorder/contextRecorder.js +0 -286
- package/lib/server/recorder/recorderCollection.js +0 -116
- package/lib/server/recorder/recorderFrontend.js +0 -16
- package/lib/server/storageScript.js +0 -154
- package/lib/server/timeoutSettings.js +0 -89
- package/lib/utils/isomorphic/builtins.js +0 -86
- package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
- package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
- package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
- package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
- package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
- package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
|
@@ -29,8 +29,8 @@ class FrameSelectors {
|
|
|
29
29
|
this.frame = frame;
|
|
30
30
|
}
|
|
31
31
|
_parseSelector(selector, options) {
|
|
32
|
-
const strict = typeof options?.strict === "boolean" ? options.strict : !!this.frame._page.
|
|
33
|
-
return this.frame._page.
|
|
32
|
+
const strict = typeof options?.strict === "boolean" ? options.strict : !!this.frame._page.browserContext._options.strictSelectors;
|
|
33
|
+
return this.frame._page.browserContext.selectors().parseSelector(selector, strict);
|
|
34
34
|
}
|
|
35
35
|
async query(selector, options, scope) {
|
|
36
36
|
const resolved = await this.resolveInjectedForSelector(selector, options, scope);
|
|
@@ -54,10 +54,11 @@ class FrameSelectors {
|
|
|
54
54
|
return injected.querySelectorAll(info.parsed, scope2 || document);
|
|
55
55
|
}, { info: resolved.info, scope: resolved.scope });
|
|
56
56
|
}
|
|
57
|
-
async queryCount(selector) {
|
|
57
|
+
async queryCount(selector, options) {
|
|
58
58
|
const resolved = await this.resolveInjectedForSelector(selector);
|
|
59
59
|
if (!resolved)
|
|
60
60
|
throw new Error(`Failed to find frame for selector "${selector}"`);
|
|
61
|
+
await options.__testHookBeforeQuery?.();
|
|
61
62
|
return await resolved.injected.evaluate((injected, { info }) => {
|
|
62
63
|
return injected.querySelectorAll(info.parsed, document).length;
|
|
63
64
|
}, { info: resolved.info });
|
|
@@ -82,19 +83,35 @@ class FrameSelectors {
|
|
|
82
83
|
}
|
|
83
84
|
return Promise.all(result);
|
|
84
85
|
}
|
|
86
|
+
_jumpToAriaRefFrameIfNeeded(selector, info, frame) {
|
|
87
|
+
if (info.parsed.parts[0].name !== "aria-ref")
|
|
88
|
+
return frame;
|
|
89
|
+
const body = info.parsed.parts[0].body;
|
|
90
|
+
const match = body.match(/^f(\d+)e\d+$/);
|
|
91
|
+
if (!match)
|
|
92
|
+
return frame;
|
|
93
|
+
const frameIndex = +match[1];
|
|
94
|
+
const page = this.frame._page;
|
|
95
|
+
const frameId = page.lastSnapshotFrameIds[frameIndex - 1];
|
|
96
|
+
const jumptToFrame = frameId ? page.frameManager.frame(frameId) : null;
|
|
97
|
+
if (!jumptToFrame)
|
|
98
|
+
throw new import_selectorParser.InvalidSelectorError(`Invalid frame in aria-ref selector "${selector}"`);
|
|
99
|
+
return jumptToFrame;
|
|
100
|
+
}
|
|
85
101
|
async resolveFrameForSelector(selector, options = {}, scope) {
|
|
86
102
|
let frame = this.frame;
|
|
87
103
|
const frameChunks = (0, import_selectorParser.splitSelectorByFrame)(selector);
|
|
88
104
|
for (const chunk of frameChunks) {
|
|
89
105
|
(0, import_selectorParser.visitAllSelectorParts)(chunk, (part, nested) => {
|
|
90
106
|
if (nested && part.name === "internal:control" && part.body === "enter-frame") {
|
|
91
|
-
const locator = (0, import_utils.asLocator)(this.frame._page.
|
|
107
|
+
const locator = (0, import_utils.asLocator)(this.frame._page.browserContext._browser.sdkLanguage(), selector);
|
|
92
108
|
throw new import_selectorParser.InvalidSelectorError(`Frame locators are not allowed inside composite locators, while querying "${locator}"`);
|
|
93
109
|
}
|
|
94
110
|
});
|
|
95
111
|
}
|
|
96
112
|
for (let i = 0; i < frameChunks.length - 1; ++i) {
|
|
97
113
|
const info = this._parseSelector(frameChunks[i], options);
|
|
114
|
+
frame = this._jumpToAriaRefFrameIfNeeded(selector, info, frame);
|
|
98
115
|
const context = await frame._context(info.world);
|
|
99
116
|
const injectedScript = await context.injectedScript();
|
|
100
117
|
const handle = await injectedScript.evaluateHandle((injected, { info: info2, scope: scope2, selectorString }) => {
|
|
@@ -106,9 +123,9 @@ class FrameSelectors {
|
|
|
106
123
|
let element = handle.asElement();
|
|
107
124
|
if (!element) {
|
|
108
125
|
try {
|
|
109
|
-
var client = frame._page.
|
|
126
|
+
var client = frame._page.delegate._sessionForFrame(frame)._client;
|
|
110
127
|
} catch (e) {
|
|
111
|
-
var client = frame._page.
|
|
128
|
+
var client = frame._page.delegate._mainFrameSession._client;
|
|
112
129
|
}
|
|
113
130
|
var mainContext = await frame._context("main");
|
|
114
131
|
const documentNode = await client.send("Runtime.evaluate", {
|
|
@@ -126,7 +143,7 @@ class FrameSelectors {
|
|
|
126
143
|
return null;
|
|
127
144
|
}
|
|
128
145
|
}
|
|
129
|
-
const maybeFrame = await frame._page.
|
|
146
|
+
const maybeFrame = await frame._page.delegate.getContentFrame(element);
|
|
130
147
|
element.dispose();
|
|
131
148
|
if (!maybeFrame)
|
|
132
149
|
return null;
|
|
@@ -134,7 +151,9 @@ class FrameSelectors {
|
|
|
134
151
|
}
|
|
135
152
|
if (frame !== this.frame)
|
|
136
153
|
scope = void 0;
|
|
137
|
-
|
|
154
|
+
const lastChunk = frame.selectors._parseSelector(frameChunks[frameChunks.length - 1], options);
|
|
155
|
+
frame = this._jumpToAriaRefFrameIfNeeded(selector, lastChunk, frame);
|
|
156
|
+
return { frame, info: lastChunk, scope };
|
|
138
157
|
}
|
|
139
158
|
async resolveInjectedForSelector(selector, options, scope) {
|
|
140
159
|
const resolved = await this.resolveFrameForSelector(selector, options, scope);
|
|
@@ -240,31 +259,55 @@ class FrameSelectors {
|
|
|
240
259
|
depth: -1
|
|
241
260
|
});
|
|
242
261
|
elementToCheck.backendNodeId = resolvedElement.node.backendNodeId;
|
|
262
|
+
elementToCheck.nodePosition = this._findElementPositionInDomTree(elementToCheck, describedScope.node, context, "");
|
|
243
263
|
elements.push(elementToCheck);
|
|
244
264
|
}
|
|
245
265
|
}
|
|
246
266
|
}
|
|
247
267
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
elementsIndexes.splice(elemPos, 0, elemIndex);
|
|
268
|
+
const getParts = (pos) => (pos?.match(/../g) || []).map(Number);
|
|
269
|
+
elements.sort((a, b) => {
|
|
270
|
+
const partA = getParts(a.nodePosition);
|
|
271
|
+
const partB = getParts(b.nodePosition);
|
|
272
|
+
const maxLength = Math.max(partA.length, partB.length);
|
|
273
|
+
for (let i2 = 0; i2 < maxLength; i2++) {
|
|
274
|
+
const aVal = partA[i2] ?? -1;
|
|
275
|
+
const bVal = partB[i2] ?? -1;
|
|
276
|
+
if (aVal !== bVal) return aVal - bVal;
|
|
258
277
|
}
|
|
259
|
-
|
|
278
|
+
return 0;
|
|
279
|
+
});
|
|
280
|
+
currentScopingElements = Array.from(
|
|
281
|
+
new Map(elements.map((e) => [e.nodePosition, e])).values()
|
|
282
|
+
);
|
|
260
283
|
}
|
|
261
284
|
return currentScopingElements;
|
|
262
285
|
}
|
|
286
|
+
_findElementPositionInDomTree(element, queryingElement, documentScope, currentIndex) {
|
|
287
|
+
if (element.backendNodeId === queryingElement.backendNodeId) {
|
|
288
|
+
return currentIndex;
|
|
289
|
+
}
|
|
290
|
+
for (const child of queryingElement.children || []) {
|
|
291
|
+
const childrenNodeIndex = queryingElement.children.indexOf(child);
|
|
292
|
+
const childIndex = this._findElementPositionInDomTree(element, child, documentScope, currentIndex + childrenNodeIndex.toString());
|
|
293
|
+
if (childIndex !== null) return childIndex;
|
|
294
|
+
}
|
|
295
|
+
if (queryingElement.shadowRoots && Array.isArray(queryingElement.shadowRoots)) {
|
|
296
|
+
for (const shadowRoot of queryingElement.shadowRoots) {
|
|
297
|
+
if (shadowRoot.shadowRootType === "closed" && shadowRoot.backendNodeId) {
|
|
298
|
+
const shadowRootHandle = new import_dom.ElementHandle(documentScope, shadowRoot.backendNodeId);
|
|
299
|
+
const childIndex = this._findElementPositionInDomTree(element, shadowRootHandle, documentScope, currentIndex);
|
|
300
|
+
if (childIndex !== null) return childIndex;
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
263
306
|
}
|
|
264
307
|
async function adoptIfNeeded(handle, context) {
|
|
265
308
|
if (handle._context === context)
|
|
266
309
|
return handle;
|
|
267
|
-
const adopted = await handle._page.
|
|
310
|
+
const adopted = await handle._page.delegate.adoptElementHandle(handle, context);
|
|
268
311
|
handle.dispose();
|
|
269
312
|
return adopted;
|
|
270
313
|
}
|