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.
Files changed (218) hide show
  1. package/ThirdPartyNotices.txt +65 -123
  2. package/bin/reinstall_chrome_beta_mac.sh +1 -1
  3. package/bin/reinstall_chrome_stable_mac.sh +1 -1
  4. package/bin/reinstall_msedge_beta_mac.sh +1 -1
  5. package/bin/reinstall_msedge_dev_mac.sh +1 -1
  6. package/bin/reinstall_msedge_stable_mac.sh +1 -1
  7. package/browsers.json +14 -14
  8. package/index.js +1 -1
  9. package/lib/androidServerImpl.js +4 -2
  10. package/lib/browserServerImpl.js +47 -12
  11. package/lib/cli/program.js +116 -50
  12. package/lib/cli/programWithTestStub.js +1 -1
  13. package/lib/client/android.js +30 -34
  14. package/lib/client/browser.js +54 -17
  15. package/lib/client/browserContext.js +67 -71
  16. package/lib/client/browserType.js +25 -34
  17. package/lib/client/channelOwner.js +20 -24
  18. package/lib/client/connection.js +6 -10
  19. package/lib/client/electron.js +8 -3
  20. package/lib/client/elementHandle.js +18 -21
  21. package/lib/client/fetch.js +5 -3
  22. package/lib/client/frame.js +54 -32
  23. package/lib/client/input.js +3 -1
  24. package/lib/client/jsHandle.js +4 -0
  25. package/lib/client/localUtils.js +0 -1
  26. package/lib/client/locator.js +30 -26
  27. package/lib/client/network.js +5 -12
  28. package/lib/client/page.js +32 -32
  29. package/lib/client/playwright.js +6 -16
  30. package/lib/client/selectors.js +18 -38
  31. package/lib/client/timeoutSettings.js +12 -8
  32. package/lib/client/tracing.js +24 -20
  33. package/lib/client/waiter.js +2 -2
  34. package/lib/client/webSocket.js +4 -22
  35. package/lib/generated/bindingsControllerSource.js +28 -0
  36. package/lib/generated/clockSource.js +1 -1
  37. package/lib/generated/injectedScriptSource.js +1 -1
  38. package/lib/generated/pollingRecorderSource.js +1 -1
  39. package/lib/generated/storageScriptSource.js +28 -0
  40. package/lib/generated/utilityScriptSource.js +1 -1
  41. package/lib/generated/webSocketMockSource.js +12 -50
  42. package/lib/inProcessFactory.js +9 -6
  43. package/lib/outofprocess.js +0 -2
  44. package/lib/protocol/validator.js +421 -345
  45. package/lib/protocol/validatorPrimitives.js +18 -4
  46. package/lib/remote/playwrightConnection.js +29 -166
  47. package/lib/remote/playwrightServer.js +233 -35
  48. package/lib/server/android/android.js +97 -83
  49. package/lib/server/android/backendAdb.js +0 -2
  50. package/lib/server/bidi/bidiBrowser.js +139 -73
  51. package/lib/server/bidi/bidiChromium.js +23 -22
  52. package/lib/server/bidi/bidiExecutionContext.js +2 -1
  53. package/lib/server/bidi/bidiFirefox.js +17 -14
  54. package/lib/server/bidi/bidiInput.js +22 -22
  55. package/lib/server/bidi/bidiNetworkManager.js +8 -11
  56. package/lib/server/bidi/bidiPage.js +42 -86
  57. package/lib/server/bidi/third_party/bidiProtocol.js +5 -133
  58. package/lib/server/bidi/third_party/bidiProtocolCore.js +179 -0
  59. package/lib/server/{dispatchers/selectorsDispatcher.js → bidi/third_party/bidiProtocolPermissions.js} +20 -18
  60. package/lib/server/browser.js +30 -21
  61. package/lib/server/browserContext.js +203 -165
  62. package/lib/server/browserType.js +109 -107
  63. package/lib/server/chromium/chromium.js +84 -69
  64. package/lib/server/chromium/chromiumSwitches.js +13 -20
  65. package/lib/server/chromium/crBrowser.js +74 -40
  66. package/lib/server/chromium/crConnection.js +8 -9
  67. package/lib/server/chromium/crCoverage.js +11 -8
  68. package/lib/server/chromium/crDragDrop.js +25 -20
  69. package/lib/server/chromium/crExecutionContext.js +2 -1
  70. package/lib/server/chromium/crInput.js +32 -29
  71. package/lib/server/chromium/crNetworkManager.js +43 -31
  72. package/lib/server/chromium/crPage.js +98 -72
  73. package/lib/server/chromium/crServiceWorker.js +13 -18
  74. package/lib/server/chromium/videoRecorder.js +10 -18
  75. package/lib/server/clock.js +51 -39
  76. package/lib/server/codegen/csharp.js +10 -5
  77. package/lib/server/codegen/java.js +1 -1
  78. package/lib/server/codegen/javascript.js +1 -1
  79. package/lib/server/codegen/jsonl.js +2 -1
  80. package/lib/server/codegen/language.js +22 -1
  81. package/lib/server/codegen/languages.js +4 -4
  82. package/lib/server/codegen/python.js +1 -1
  83. package/lib/server/cookieStore.js +3 -1
  84. package/lib/server/debugController.js +105 -71
  85. package/lib/server/debugger.js +6 -23
  86. package/lib/server/deviceDescriptorsSource.json +237 -127
  87. package/lib/server/dialog.js +50 -6
  88. package/lib/server/dispatchers/androidDispatcher.js +77 -62
  89. package/lib/server/dispatchers/artifactDispatcher.js +18 -18
  90. package/lib/server/dispatchers/browserContextDispatcher.js +141 -91
  91. package/lib/server/dispatchers/browserDispatcher.js +55 -88
  92. package/lib/server/dispatchers/browserTypeDispatcher.js +18 -9
  93. package/lib/server/dispatchers/cdpSessionDispatcher.js +4 -4
  94. package/lib/server/dispatchers/debugControllerDispatcher.js +12 -21
  95. package/lib/server/dispatchers/dialogDispatcher.js +4 -4
  96. package/lib/server/dispatchers/dispatcher.js +78 -53
  97. package/lib/server/dispatchers/electronDispatcher.js +19 -20
  98. package/lib/server/dispatchers/elementHandlerDispatcher.js +83 -93
  99. package/lib/server/dispatchers/frameDispatcher.js +98 -101
  100. package/lib/server/dispatchers/jsHandleDispatcher.js +21 -16
  101. package/lib/server/dispatchers/jsonPipeDispatcher.js +4 -4
  102. package/lib/server/dispatchers/localUtilsDispatcher.js +53 -59
  103. package/lib/server/dispatchers/networkDispatchers.js +41 -35
  104. package/lib/server/dispatchers/pageDispatcher.js +156 -107
  105. package/lib/server/dispatchers/playwrightDispatcher.js +37 -25
  106. package/lib/server/dispatchers/streamDispatcher.js +15 -8
  107. package/lib/server/dispatchers/tracingDispatcher.js +22 -13
  108. package/lib/server/dispatchers/webSocketRouteDispatcher.js +46 -35
  109. package/lib/server/dispatchers/writableStreamDispatcher.js +16 -10
  110. package/lib/server/dom.js +198 -266
  111. package/lib/server/download.js +3 -3
  112. package/lib/server/electron/electron.js +96 -103
  113. package/lib/server/electron/loader.js +1 -1
  114. package/lib/server/fetch.js +22 -41
  115. package/lib/server/fileUploadUtils.js +1 -1
  116. package/lib/server/firefox/ffBrowser.js +79 -55
  117. package/lib/server/firefox/ffExecutionContext.js +2 -1
  118. package/lib/server/firefox/ffInput.js +23 -23
  119. package/lib/server/firefox/ffNetworkManager.js +8 -6
  120. package/lib/server/firefox/ffPage.js +39 -36
  121. package/lib/server/firefox/firefox.js +9 -10
  122. package/lib/server/frameSelectors.js +63 -20
  123. package/lib/server/frames.js +495 -555
  124. package/lib/server/har/harRecorder.js +1 -1
  125. package/lib/server/har/harTracer.js +4 -2
  126. package/lib/server/helper.js +3 -7
  127. package/lib/server/index.js +0 -3
  128. package/lib/server/input.js +47 -54
  129. package/lib/server/instrumentation.js +8 -14
  130. package/lib/server/javascript.js +8 -16
  131. package/lib/server/launchApp.js +48 -30
  132. package/lib/server/localUtils.js +45 -38
  133. package/lib/server/network.js +44 -10
  134. package/lib/server/page.js +232 -177
  135. package/lib/server/pageBinding.js +6 -7
  136. package/lib/server/playwright.js +4 -14
  137. package/lib/server/progress.js +57 -49
  138. package/lib/server/recorder/recorderApp.js +298 -95
  139. package/lib/server/recorder/recorderRunner.js +23 -24
  140. package/lib/server/recorder/recorderSignalProcessor.js +83 -0
  141. package/lib/server/recorder/recorderUtils.js +67 -10
  142. package/lib/server/recorder.js +284 -146
  143. package/lib/server/registry/index.js +83 -48
  144. package/lib/server/registry/nativeDeps.js +175 -0
  145. package/lib/server/registry/oopDownloadBrowserMain.js +1 -1
  146. package/lib/server/screenshotter.js +84 -83
  147. package/lib/server/selectors.js +12 -12
  148. package/lib/server/socksClientCertificatesInterceptor.js +198 -136
  149. package/lib/server/trace/recorder/snapshotter.js +12 -19
  150. package/lib/server/trace/recorder/tracing.js +36 -27
  151. package/lib/server/trace/viewer/traceViewer.js +11 -20
  152. package/lib/server/transport.js +20 -22
  153. package/lib/server/utils/comparators.js +2 -2
  154. package/lib/server/utils/debug.js +3 -8
  155. package/lib/server/utils/debugLogger.js +8 -0
  156. package/lib/server/utils/hostPlatform.js +3 -1
  157. package/lib/server/utils/network.js +35 -25
  158. package/lib/server/utils/nodePlatform.js +1 -1
  159. package/lib/server/utils/processLauncher.js +4 -1
  160. package/lib/server/utils/wsServer.js +11 -17
  161. package/lib/server/webkit/webkit.js +5 -2
  162. package/lib/server/webkit/wkBrowser.js +51 -28
  163. package/lib/server/webkit/wkExecutionContext.js +2 -1
  164. package/lib/server/webkit/wkInput.js +25 -25
  165. package/lib/server/webkit/wkInterceptableRequest.js +1 -1
  166. package/lib/server/webkit/wkPage.js +80 -59
  167. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  168. package/lib/server/webkit/wkWorkers.js +7 -7
  169. package/lib/utils/isomorphic/ariaSnapshot.js +13 -7
  170. package/lib/utils/isomorphic/cssParser.js +1 -2
  171. package/lib/utils/isomorphic/locatorGenerators.js +18 -0
  172. package/lib/utils/isomorphic/manualPromise.js +1 -2
  173. package/lib/utils/isomorphic/mimeType.js +1 -2
  174. package/lib/utils/isomorphic/multimap.js +1 -2
  175. package/lib/utils/isomorphic/oldUtilityScriptSerializers.js +248 -0
  176. package/lib/utils/isomorphic/protocolFormatter.js +78 -0
  177. package/lib/utils/isomorphic/protocolMetainfo.js +318 -0
  178. package/lib/utils/isomorphic/selectorParser.js +3 -4
  179. package/lib/utils/isomorphic/stringUtils.js +3 -24
  180. package/lib/utils/isomorphic/time.js +9 -4
  181. package/lib/utils/isomorphic/timeoutRunner.js +3 -4
  182. package/lib/utils/isomorphic/traceUtils.js +2 -3
  183. package/lib/utils/isomorphic/urlMatch.js +21 -7
  184. package/lib/utils/isomorphic/utilityScriptSerializers.js +208 -205
  185. package/lib/utils.js +8 -2
  186. package/lib/utilsBundleImpl/index.js +160 -150
  187. package/lib/vite/htmlReport/index.html +17 -17
  188. package/lib/vite/recorder/assets/{codeMirrorModule-CXVeovup.js → codeMirrorModule-DzQ0k89p.js} +1 -1
  189. package/lib/vite/recorder/assets/{index-eHBmevrY.css → index-CI4HQ-Zb.css} +1 -1
  190. package/lib/vite/recorder/assets/index-D7C7daHH.js +184 -0
  191. package/lib/vite/recorder/index.html +3 -3
  192. package/lib/vite/traceViewer/assets/{codeMirrorModule-_GLjJL-7.js → codeMirrorModule-Di48jgWx.js} +1 -1
  193. package/lib/vite/traceViewer/assets/defaultSettingsView-szBn8781.js +256 -0
  194. package/lib/vite/traceViewer/defaultSettingsView.DVJHpiGt.css +1 -0
  195. package/lib/vite/traceViewer/index.BFsek2M6.css +1 -0
  196. package/lib/vite/traceViewer/index.DQvXoPLL.js +2 -0
  197. package/lib/vite/traceViewer/index.html +6 -6
  198. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  199. package/lib/vite/traceViewer/uiMode.dBV3oN9h.js +5 -0
  200. package/lib/vite/traceViewer/uiMode.html +4 -4
  201. package/lib/zipBundleImpl.js +4 -4
  202. package/package.json +1 -1
  203. package/types/protocol.d.ts +712 -107
  204. package/types/types.d.ts +128 -17
  205. package/lib/generated/consoleApiSource.js +0 -28
  206. package/lib/protocol/debug.js +0 -211
  207. package/lib/server/recorder/contextRecorder.js +0 -286
  208. package/lib/server/recorder/recorderCollection.js +0 -116
  209. package/lib/server/recorder/recorderFrontend.js +0 -16
  210. package/lib/server/storageScript.js +0 -154
  211. package/lib/server/timeoutSettings.js +0 -89
  212. package/lib/utils/isomorphic/builtins.js +0 -86
  213. package/lib/vite/recorder/assets/index-BsWQsSGl.js +0 -184
  214. package/lib/vite/traceViewer/assets/defaultSettingsView-DtCQiGHe.js +0 -265
  215. package/lib/vite/traceViewer/defaultSettingsView.QdHITyLI.css +0 -1
  216. package/lib/vite/traceViewer/index.CFOW-Ezb.css +0 -1
  217. package/lib/vite/traceViewer/index.cFZzK9RN.js +0 -2
  218. package/lib/vite/traceViewer/uiMode.XVPIqBeS.js +0 -5
@@ -34,13 +34,13 @@ module.exports = __toCommonJS(webSocketRouteDispatcher_exports);
34
34
  var import_page = require("../page");
35
35
  var import_dispatcher = require("./dispatcher");
36
36
  var import_pageDispatcher = require("./pageDispatcher");
37
- var webSocketMockSource = __toESM(require("../../generated/webSocketMockSource"));
38
- var import_crypto = require("../utils/crypto");
37
+ var rawWebSocketMockSource = __toESM(require("../../generated/webSocketMockSource"));
38
+ var import_instrumentation = require("../instrumentation");
39
39
  var import_urlMatch = require("../../utils/isomorphic/urlMatch");
40
40
  var import_eventsHelper = require("../utils/eventsHelper");
41
41
  class WebSocketRouteDispatcher extends import_dispatcher.Dispatcher {
42
42
  constructor(scope, id, url, frame) {
43
- super(scope, { guid: "webSocketRoute@" + (0, import_crypto.createGuid)() }, "WebSocketRoute", { url });
43
+ super(scope, new import_instrumentation.SdkObject(scope._object, "webSocketRoute"), "WebSocketRoute", { url });
44
44
  this._type_WebSocketRoute = true;
45
45
  this._id = id;
46
46
  this._frame = frame;
@@ -64,13 +64,16 @@ class WebSocketRouteDispatcher extends import_dispatcher.Dispatcher {
64
64
  static {
65
65
  this._idToDispatcher = /* @__PURE__ */ new Map();
66
66
  }
67
- static async installIfNeeded(target) {
68
- const kBindingName = "__pwWebSocketBinding";
69
- const context = target instanceof import_page.Page ? target.context() : target;
70
- if (!context.hasBinding(kBindingName)) {
71
- await context.exposeBinding(kBindingName, false, (source, payload) => {
67
+ static async install(progress, connection, target) {
68
+ const context = target instanceof import_page.Page ? target.browserContext : target;
69
+ let data = context.getBindingClient(kBindingName);
70
+ if (data && data.connection !== connection)
71
+ throw new Error("Another client is already routing WebSockets");
72
+ if (!data) {
73
+ data = { counter: 0, connection, binding: null };
74
+ data.binding = await context.exposeBinding(progress, kBindingName, false, (source, payload) => {
72
75
  if (payload.type === "onCreate") {
73
- const contextDispatcher = (0, import_dispatcher.existingDispatcher)(context);
76
+ const contextDispatcher = connection.existingDispatcher(context);
74
77
  const pageDispatcher = contextDispatcher ? import_pageDispatcher.PageDispatcher.fromNullable(contextDispatcher, source.page) : void 0;
75
78
  let scope;
76
79
  if (pageDispatcher && matchesPattern(pageDispatcher, context._options.baseURL, payload.url))
@@ -95,40 +98,47 @@ class WebSocketRouteDispatcher extends import_dispatcher.Dispatcher {
95
98
  dispatcher?._dispatchEvent("closePage", { code: payload.code, reason: payload.reason, wasClean: payload.wasClean });
96
99
  if (payload.type === "onCloseServer")
97
100
  dispatcher?._dispatchEvent("closeServer", { code: payload.code, reason: payload.reason, wasClean: payload.wasClean });
98
- });
99
- }
100
- const kInitScriptName = "webSocketMockSource";
101
- if (!target.initScripts.find((s) => s.name === kInitScriptName)) {
102
- await target.addInitScript(`
103
- (() => {
104
- const module = {};
105
- ${webSocketMockSource.source}
106
- (module.exports.inject())(globalThis);
107
- })();
108
- `, kInitScriptName);
101
+ }, data);
109
102
  }
103
+ ++data.counter;
104
+ return await target.addInitScript(progress, `
105
+ (() => {
106
+ const module = {};
107
+ ${rawWebSocketMockSource.source}
108
+ (module.exports.inject())(globalThis);
109
+ })();
110
+ `);
111
+ }
112
+ static async uninstall(connection, target, initScript) {
113
+ const context = target instanceof import_page.Page ? target.browserContext : target;
114
+ const data = context.getBindingClient(kBindingName);
115
+ if (!data || data.connection !== connection)
116
+ return;
117
+ if (--data.counter <= 0)
118
+ await context.removeExposedBindings([data.binding]);
119
+ await target.removeInitScripts([initScript]);
110
120
  }
111
- async connect(params) {
112
- await this._evaluateAPIRequest({ id: this._id, type: "connect" });
121
+ async connect(params, progress) {
122
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "connect" });
113
123
  }
114
- async ensureOpened(params) {
115
- await this._evaluateAPIRequest({ id: this._id, type: "ensureOpened" });
124
+ async ensureOpened(params, progress) {
125
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "ensureOpened" });
116
126
  }
117
- async sendToPage(params) {
118
- await this._evaluateAPIRequest({ id: this._id, type: "sendToPage", data: { data: params.message, isBase64: params.isBase64 } });
127
+ async sendToPage(params, progress) {
128
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "sendToPage", data: { data: params.message, isBase64: params.isBase64 } });
119
129
  }
120
- async sendToServer(params) {
121
- await this._evaluateAPIRequest({ id: this._id, type: "sendToServer", data: { data: params.message, isBase64: params.isBase64 } });
130
+ async sendToServer(params, progress) {
131
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "sendToServer", data: { data: params.message, isBase64: params.isBase64 } });
122
132
  }
123
- async closePage(params) {
124
- await this._evaluateAPIRequest({ id: this._id, type: "closePage", code: params.code, reason: params.reason, wasClean: params.wasClean });
133
+ async closePage(params, progress) {
134
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "closePage", code: params.code, reason: params.reason, wasClean: params.wasClean });
125
135
  }
126
- async closeServer(params) {
127
- await this._evaluateAPIRequest({ id: this._id, type: "closeServer", code: params.code, reason: params.reason, wasClean: params.wasClean });
136
+ async closeServer(params, progress) {
137
+ await this._evaluateAPIRequest(progress, { id: this._id, type: "closeServer", code: params.code, reason: params.reason, wasClean: params.wasClean });
128
138
  }
129
- async _evaluateAPIRequest(request) {
130
- await this._frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {
131
- });
139
+ async _evaluateAPIRequest(progress, request) {
140
+ await progress.race(this._frame.evaluateExpression(`globalThis.__pwWebSocketDispatch(${JSON.stringify(request)})`).catch(() => {
141
+ }));
132
142
  }
133
143
  _onDispose() {
134
144
  WebSocketRouteDispatcher._idToDispatcher.delete(this._id);
@@ -148,6 +158,7 @@ function matchesPattern(dispatcher, baseURL, url) {
148
158
  }
149
159
  return false;
150
160
  }
161
+ const kBindingName = "__pwWebSocketBinding";
151
162
  // Annotate the CommonJS export names for ESM import in node:
152
163
  0 && (module.exports = {
153
164
  WebSocketRouteDispatcher
@@ -33,33 +33,39 @@ __export(writableStreamDispatcher_exports, {
33
33
  module.exports = __toCommonJS(writableStreamDispatcher_exports);
34
34
  var import_fs = __toESM(require("fs"));
35
35
  var import_dispatcher = require("./dispatcher");
36
- var import_crypto = require("../utils/crypto");
36
+ var import_instrumentation = require("../instrumentation");
37
+ class WritableStreamSdkObject extends import_instrumentation.SdkObject {
38
+ constructor(parent, streamOrDirectory, lastModifiedMs) {
39
+ super(parent, "stream");
40
+ this.streamOrDirectory = streamOrDirectory;
41
+ this.lastModifiedMs = lastModifiedMs;
42
+ }
43
+ }
37
44
  class WritableStreamDispatcher extends import_dispatcher.Dispatcher {
38
45
  constructor(scope, streamOrDirectory, lastModifiedMs) {
39
- super(scope, { guid: "writableStream@" + (0, import_crypto.createGuid)(), streamOrDirectory }, "WritableStream", {});
46
+ super(scope, new WritableStreamSdkObject(scope._object, streamOrDirectory, lastModifiedMs), "WritableStream", {});
40
47
  this._type_WritableStream = true;
41
- this._lastModifiedMs = lastModifiedMs;
42
48
  }
43
- async write(params) {
49
+ async write(params, progress) {
44
50
  if (typeof this._object.streamOrDirectory === "string")
45
51
  throw new Error("Cannot write to a directory");
46
52
  const stream = this._object.streamOrDirectory;
47
- await new Promise((fulfill, reject) => {
53
+ await progress.race(new Promise((fulfill, reject) => {
48
54
  stream.write(params.binary, (error) => {
49
55
  if (error)
50
56
  reject(error);
51
57
  else
52
58
  fulfill();
53
59
  });
54
- });
60
+ }));
55
61
  }
56
- async close() {
62
+ async close(params, progress) {
57
63
  if (typeof this._object.streamOrDirectory === "string")
58
64
  throw new Error("Cannot close a directory");
59
65
  const stream = this._object.streamOrDirectory;
60
- await new Promise((fulfill) => stream.end(fulfill));
61
- if (this._lastModifiedMs)
62
- await import_fs.default.promises.utimes(this.path(), new Date(this._lastModifiedMs), new Date(this._lastModifiedMs));
66
+ await progress.race(new Promise((fulfill) => stream.end(fulfill)));
67
+ if (this._object.lastModifiedMs)
68
+ await progress.race(import_fs.default.promises.utimes(this.path(), new Date(this._object.lastModifiedMs), new Date(this._object.lastModifiedMs)));
63
69
  }
64
70
  path() {
65
71
  if (typeof this._object.streamOrDirectory === "string")