patchright-core 1.50.0 → 1.51.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.
Files changed (249) hide show
  1. package/ThirdPartyNotices.txt +381 -55
  2. package/browsers.json +22 -10
  3. package/index.js +0 -1
  4. package/lib/androidServerImpl.js +4 -4
  5. package/lib/browserServerImpl.js +18 -9
  6. package/lib/cli/driver.js +6 -6
  7. package/lib/cli/program.js +9 -9
  8. package/lib/cli/programWithTestStub.js +2 -1
  9. package/lib/client/android.js +37 -58
  10. package/lib/client/artifact.js +4 -7
  11. package/lib/client/browser.js +10 -15
  12. package/lib/client/browserContext.js +77 -73
  13. package/lib/client/browserType.js +30 -64
  14. package/lib/client/channelOwner.js +23 -20
  15. package/lib/client/clientHelper.js +5 -7
  16. package/lib/client/clientStackTrace.js +65 -0
  17. package/lib/client/connection.js +46 -39
  18. package/lib/client/consoleMessage.js +4 -7
  19. package/lib/client/electron.js +10 -10
  20. package/lib/client/elementHandle.js +32 -33
  21. package/lib/client/errors.js +2 -2
  22. package/lib/client/eventEmitter.js +5 -8
  23. package/lib/client/fetch.js +60 -61
  24. package/lib/client/fileUtils.js +31 -0
  25. package/lib/client/frame.js +30 -29
  26. package/lib/client/harRouter.js +7 -9
  27. package/lib/client/jsHandle.js +3 -4
  28. package/lib/client/localUtils.js +24 -0
  29. package/lib/client/locator.js +37 -18
  30. package/lib/client/network.js +40 -40
  31. package/lib/client/page.js +59 -55
  32. package/lib/client/platform.js +71 -0
  33. package/lib/client/playwright.js +21 -1
  34. package/lib/client/selectors.js +8 -2
  35. package/lib/client/stream.js +2 -21
  36. package/lib/client/timeoutSettings.js +65 -0
  37. package/lib/client/tracing.js +10 -7
  38. package/lib/client/video.js +2 -2
  39. package/lib/client/waiter.js +5 -6
  40. package/lib/client/webSocket.js +106 -0
  41. package/lib/client/worker.js +12 -10
  42. package/lib/client/writableStream.js +2 -21
  43. package/lib/generated/consoleApiSource.js +1 -1
  44. package/lib/generated/injectedScriptSource.js +1 -1
  45. package/lib/generated/pollingRecorderSource.js +1 -1
  46. package/lib/inProcessFactory.js +6 -3
  47. package/lib/outofprocess.js +12 -8
  48. package/lib/protocol/validator.js +64 -13
  49. package/lib/protocol/validatorPrimitives.js +1 -2
  50. package/lib/remote/playwrightConnection.js +18 -10
  51. package/lib/remote/playwrightServer.js +20 -7
  52. package/lib/server/android/android.js +17 -14
  53. package/lib/server/android/backendAdb.js +14 -14
  54. package/lib/server/artifact.js +3 -3
  55. package/lib/server/bidi/bidiBrowser.js +2 -2
  56. package/lib/server/bidi/bidiChromium.js +4 -3
  57. package/lib/server/bidi/bidiConnection.js +1 -1
  58. package/lib/server/bidi/bidiExecutionContext.js +70 -40
  59. package/lib/server/bidi/bidiFirefox.js +4 -3
  60. package/lib/server/bidi/bidiInput.js +5 -8
  61. package/lib/server/bidi/bidiNetworkManager.js +3 -3
  62. package/lib/server/bidi/bidiOverCdp.js +2 -2
  63. package/lib/server/bidi/bidiPage.js +30 -46
  64. package/lib/server/bidi/third_party/firefoxPrefs.js +19 -3
  65. package/lib/server/browser.js +2 -2
  66. package/lib/server/browserContext.js +37 -40
  67. package/lib/server/browserType.js +18 -17
  68. package/lib/{utils/sequence.js → server/callLog.js} +18 -3
  69. package/lib/server/chromium/chromium.js +14 -14
  70. package/lib/server/chromium/chromiumSwitches.js +32 -1
  71. package/lib/server/chromium/crBrowser.js +15 -14
  72. package/lib/server/chromium/crConnection.js +2 -2
  73. package/lib/server/chromium/crCoverage.js +1 -1
  74. package/lib/server/chromium/crDevTools.js +1 -1
  75. package/lib/server/chromium/crDragDrop.js +1 -1
  76. package/lib/server/chromium/crExecutionContext.js +25 -17
  77. package/lib/server/chromium/crInput.js +2 -2
  78. package/lib/server/chromium/crNetworkManager.js +73 -26
  79. package/lib/server/chromium/crPage.js +22 -23
  80. package/lib/server/chromium/crPdf.js +1 -1
  81. package/lib/server/chromium/crProtocolHelper.js +3 -3
  82. package/lib/server/chromium/crServiceWorker.js +2 -2
  83. package/lib/server/chromium/videoRecorder.js +2 -2
  84. package/lib/server/clock.js +1 -1
  85. package/lib/server/codegen/javascript.js +1 -1
  86. package/lib/server/codegen/languages.js +2 -2
  87. package/lib/server/debugController.js +3 -3
  88. package/lib/server/deviceDescriptors.js +1 -1
  89. package/lib/server/deviceDescriptorsSource.json +131 -131
  90. package/lib/server/dispatchers/androidDispatcher.js +1 -1
  91. package/lib/server/dispatchers/artifactDispatcher.js +3 -3
  92. package/lib/server/dispatchers/browserContextDispatcher.js +19 -19
  93. package/lib/server/dispatchers/browserTypeDispatcher.js +1 -1
  94. package/lib/server/dispatchers/cdpSessionDispatcher.js +1 -1
  95. package/lib/server/dispatchers/dispatcher.js +27 -25
  96. package/lib/server/dispatchers/electronDispatcher.js +3 -3
  97. package/lib/server/dispatchers/elementHandlerDispatcher.js +7 -2
  98. package/lib/server/dispatchers/frameDispatcher.js +4 -4
  99. package/lib/server/dispatchers/jsHandleDispatcher.js +2 -2
  100. package/lib/server/dispatchers/jsonPipeDispatcher.js +2 -2
  101. package/lib/server/dispatchers/localUtilsDispatcher.js +25 -298
  102. package/lib/server/dispatchers/networkDispatchers.js +3 -3
  103. package/lib/server/dispatchers/pageDispatcher.js +11 -9
  104. package/lib/server/dispatchers/playwrightDispatcher.js +5 -5
  105. package/lib/server/dispatchers/streamDispatcher.js +4 -3
  106. package/lib/server/dispatchers/webSocketRouteDispatcher.js +8 -7
  107. package/lib/server/dispatchers/writableStreamDispatcher.js +5 -6
  108. package/lib/server/dom.js +18 -12
  109. package/lib/server/download.js +1 -1
  110. package/lib/server/electron/electron.js +17 -16
  111. package/lib/server/errors.js +1 -1
  112. package/lib/server/fetch.js +50 -45
  113. package/lib/server/fileUploadUtils.js +7 -4
  114. package/lib/server/firefox/ffBrowser.js +11 -3
  115. package/lib/server/firefox/ffConnection.js +1 -1
  116. package/lib/server/firefox/ffExecutionContext.js +25 -17
  117. package/lib/server/firefox/ffNetworkManager.js +2 -2
  118. package/lib/server/firefox/ffPage.js +15 -21
  119. package/lib/server/firefox/firefox.js +7 -9
  120. package/lib/server/frameSelectors.js +1 -1
  121. package/lib/server/frames.js +366 -209
  122. package/lib/server/har/harRecorder.js +4 -4
  123. package/lib/server/har/harTracer.js +7 -8
  124. package/lib/server/harBackend.js +157 -0
  125. package/lib/server/helper.js +2 -2
  126. package/lib/server/index.js +1 -8
  127. package/lib/server/input.js +1 -1
  128. package/lib/server/instrumentation.js +2 -2
  129. package/lib/server/isomorphic/utilityScriptSerializers.js +3 -0
  130. package/lib/server/javascript.js +46 -33
  131. package/lib/server/launchApp.js +2 -2
  132. package/lib/server/localUtils.js +203 -0
  133. package/lib/server/network.js +3 -3
  134. package/lib/server/page.js +41 -22
  135. package/lib/server/pipeTransport.js +1 -1
  136. package/lib/server/playwright.js +5 -5
  137. package/lib/server/progress.js +1 -1
  138. package/lib/server/protocolError.js +1 -1
  139. package/lib/server/recorder/contextRecorder.js +3 -3
  140. package/lib/server/recorder/recorderApp.js +18 -12
  141. package/lib/server/recorder/recorderCollection.js +4 -4
  142. package/lib/server/recorder/throttledFile.js +3 -4
  143. package/lib/server/recorder.js +7 -5
  144. package/lib/server/registry/browserFetcher.js +9 -7
  145. package/lib/server/registry/dependencies.js +15 -15
  146. package/lib/server/registry/index.js +38 -44
  147. package/lib/server/registry/oopDownloadBrowserMain.js +3 -3
  148. package/lib/server/screenshotter.js +1 -1
  149. package/lib/server/selectors.js +3 -3
  150. package/lib/server/socksClientCertificatesInterceptor.js +9 -9
  151. package/lib/server/socksInterceptor.js +8 -5
  152. package/lib/server/storageScript.js +160 -0
  153. package/lib/{common → server}/timeoutSettings.js +6 -5
  154. package/lib/server/trace/recorder/snapshotter.js +9 -8
  155. package/lib/server/trace/recorder/tracing.js +40 -31
  156. package/lib/server/trace/test/inMemorySnapshotter.js +4 -4
  157. package/lib/server/trace/viewer/traceViewer.js +13 -5
  158. package/lib/server/transport.js +2 -2
  159. package/lib/{utils → server/utils}/comparators.js +4 -4
  160. package/lib/{utils → server/utils}/crypto.js +4 -4
  161. package/lib/{utils → server/utils}/debug.js +4 -12
  162. package/lib/{utils → server/utils}/debugLogger.js +2 -2
  163. package/lib/{utils → server/utils}/env.js +4 -0
  164. package/lib/{utils → server/utils}/expectUtils.js +1 -1
  165. package/lib/{utils → server/utils}/fileUtils.js +4 -5
  166. package/lib/{utils/happy-eyeballs.js → server/utils/happyEyeballs.js} +22 -24
  167. package/lib/{utils → server/utils}/hostPlatform.js +1 -1
  168. package/lib/{utils → server/utils}/httpServer.js +8 -12
  169. package/lib/{utils → server/utils}/linuxUtils.js +3 -23
  170. package/lib/{utils → server/utils}/network.js +5 -5
  171. package/lib/server/utils/nodePlatform.js +140 -0
  172. package/lib/{protocol/transport.js → server/utils/pipeTransport.js} +2 -2
  173. package/lib/{utils → server/utils}/processLauncher.js +5 -5
  174. package/lib/{utils → server/utils}/profiler.js +5 -6
  175. package/lib/{common → server/utils}/socksProxy.js +10 -9
  176. package/lib/{utils → server/utils}/userAgent.js +2 -16
  177. package/lib/{utils → server/utils}/wsServer.js +3 -3
  178. package/lib/{utils → server/utils}/zipFile.js +1 -1
  179. package/lib/{utils → server/utils}/zones.js +9 -24
  180. package/lib/server/webkit/webkit.js +4 -4
  181. package/lib/server/webkit/wkBrowser.js +4 -4
  182. package/lib/server/webkit/wkConnection.js +1 -1
  183. package/lib/server/webkit/wkExecutionContext.js +25 -17
  184. package/lib/server/webkit/wkInput.js +2 -2
  185. package/lib/server/webkit/wkInterceptableRequest.js +2 -2
  186. package/lib/server/webkit/wkPage.js +41 -40
  187. package/lib/server/webkit/wkProvisionalPage.js +1 -1
  188. package/lib/server/webkit/wkWorkers.js +2 -2
  189. package/lib/utils/isomorphic/ariaSnapshot.js +2 -1
  190. package/lib/utils/isomorphic/assert.js +25 -0
  191. package/lib/utils/isomorphic/colors.js +65 -0
  192. package/lib/utils/isomorphic/cssParser.js +1 -1
  193. package/lib/utils/isomorphic/locatorGenerators.js +13 -1
  194. package/lib/utils/isomorphic/locatorParser.js +2 -2
  195. package/lib/utils/{manualPromise.js → isomorphic/manualPromise.js} +3 -5
  196. package/lib/utils/isomorphic/mimeType.js +11 -3
  197. package/lib/utils/{multimap.js → isomorphic/multimap.js} +1 -3
  198. package/lib/utils/{rtti.js → isomorphic/rtti.js} +2 -5
  199. package/lib/utils/isomorphic/stackTrace.js +169 -0
  200. package/lib/utils/isomorphic/stringUtils.js +1 -1
  201. package/lib/utils/{time.js → isomorphic/time.js} +1 -13
  202. package/lib/utils/{timeoutRunner.js → isomorphic/timeoutRunner.js} +4 -4
  203. package/lib/utils/isomorphic/traceUtils.js +23 -0
  204. package/lib/{utils/index.js → utils.js} +200 -121
  205. package/lib/utilsBundle.js +1 -25
  206. package/lib/utilsBundleImpl/index.js +119 -121
  207. package/lib/vite/htmlReport/index.html +20 -20
  208. package/lib/vite/recorder/assets/codeMirrorModule-B9YMkrwa.js +24 -0
  209. package/lib/vite/recorder/assets/index-ELPgmkwA.js +184 -0
  210. package/lib/vite/recorder/index.html +2 -2
  211. package/lib/vite/traceViewer/assets/codeMirrorModule-DpJ-EmBQ.js +24 -0
  212. package/lib/vite/traceViewer/assets/defaultSettingsView-DTenqiGw.js +259 -0
  213. package/lib/vite/traceViewer/assets/{xtermModule-BeNbaIVa.js → xtermModule-BoAIEibi.js} +7 -7
  214. package/lib/vite/traceViewer/defaultSettingsView.5fN5lw10.css +1 -0
  215. package/lib/vite/traceViewer/index.CUq7VgrV.js +2 -0
  216. package/lib/vite/traceViewer/index.html +4 -4
  217. package/lib/vite/traceViewer/sw.bundle.js +3 -3
  218. package/lib/vite/traceViewer/uiMode.CHJSAD7F.js +5 -0
  219. package/lib/vite/traceViewer/uiMode.html +4 -4
  220. package/lib/zipBundleImpl.js +4 -4
  221. package/package.json +7 -7
  222. package/types/protocol.d.ts +123 -99
  223. package/types/types.d.ts +110 -38
  224. package/lib/utils/stackTrace.js +0 -134
  225. package/lib/utils/traceUtils.js +0 -44
  226. package/lib/vite/recorder/assets/codeMirrorModule-3Qn3tPnZ.js +0 -24
  227. package/lib/vite/recorder/assets/index-Bek6JFv8.js +0 -184
  228. package/lib/vite/traceViewer/assets/codeMirrorModule-aLkSUGpW.js +0 -24
  229. package/lib/vite/traceViewer/assets/defaultSettingsView-CxUo6zd3.js +0 -243
  230. package/lib/vite/traceViewer/defaultSettingsView.DtIkrKWn.css +0 -1
  231. package/lib/vite/traceViewer/index.Bhu5cv5R.js +0 -2
  232. package/lib/vite/traceViewer/uiMode.BBy7FOVd.js +0 -5
  233. /package/lib/{utils → server/utils}/ascii.js +0 -0
  234. /package/lib/{utils → server/utils}/eventsHelper.js +0 -0
  235. /package/lib/{image_tools → server/utils/image_tools}/colorUtils.js +0 -0
  236. /package/lib/{image_tools → server/utils/image_tools}/compare.js +0 -0
  237. /package/lib/{image_tools → server/utils/image_tools}/imageChannel.js +0 -0
  238. /package/lib/{image_tools → server/utils/image_tools}/stats.js +0 -0
  239. /package/lib/{utils → server/utils}/spawnAsync.js +0 -0
  240. /package/lib/{utils → server/utils}/task.js +0 -0
  241. /package/lib/utils/{headers.js → isomorphic/headers.js} +0 -0
  242. /package/lib/utils/{semaphore.js → isomorphic/semaphore.js} +0 -0
  243. /package/lib/{common → utils/isomorphic}/types.js +0 -0
  244. /package/lib/vite/recorder/assets/{codeMirrorModule-ez37Vkbh.css → codeMirrorModule-C3UTv-Ge.css} +0 -0
  245. /package/lib/vite/recorder/assets/{index-CAQewHss.css → index-eHBmevrY.css} +0 -0
  246. /package/lib/vite/traceViewer/{codeMirrorModule.ez37Vkbh.css → codeMirrorModule.C3UTv-Ge.css} +0 -0
  247. /package/lib/vite/traceViewer/{index.CrbWWHbf.css → index.CFOW-Ezb.css} +0 -0
  248. /package/lib/vite/traceViewer/{uiMode.Be_ME-Go.css → uiMode.BatfzHMG.css} +0 -0
  249. /package/lib/vite/traceViewer/{xtermModule.DSXBckUd.css → xtermModule.Beg8tuEN.css} +0 -0
@@ -8,7 +8,6 @@ exports.createMetadataValidator = createMetadataValidator;
8
8
  exports.findValidator = findValidator;
9
9
  exports.maybeFindValidator = maybeFindValidator;
10
10
  exports.tUndefined = exports.tType = exports.tString = exports.tOptional = exports.tObject = exports.tNumber = exports.tEnum = exports.tChannel = exports.tBoolean = exports.tBinary = exports.tArray = exports.tAny = exports.scheme = void 0;
11
- var _utils = require("../utils");
12
11
  /**
13
12
  * Copyright (c) Microsoft Corporation.
14
13
  *
@@ -107,7 +106,7 @@ const tObject = s => {
107
106
  const value = v(arg[key], path ? path + '.' + key : key, context);
108
107
  if (!Object.is(value, undefined)) result[key] = value;
109
108
  }
110
- if ((0, _utils.isUnderTest)()) {
109
+ if (context.isUnderTest()) {
111
110
  for (const [key, value] of Object.entries(arg)) {
112
111
  if (key.startsWith('__testHook')) result[key] = value;
113
112
  }
@@ -4,14 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PlaywrightConnection = void 0;
7
+ var _socksProxy = require("../server/utils/socksProxy");
7
8
  var _server = require("../server");
9
+ var _android = require("../server/android/android");
8
10
  var _browser = require("../server/browser");
11
+ var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
9
12
  var _instrumentation = require("../server/instrumentation");
10
- var _socksProxy = require("../common/socksProxy");
13
+ var _assert = require("../utils/isomorphic/assert");
14
+ var _debug = require("../server/utils/debug");
15
+ var _profiler = require("../server/utils/profiler");
11
16
  var _utils = require("../utils");
12
- var _android = require("../server/android/android");
13
- var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
14
- var _debugLogger = require("../utils/debugLogger");
17
+ var _debugLogger = require("../server/utils/debugLogger");
15
18
  /**
16
19
  * Copyright (c) Microsoft Corporation.
17
20
  *
@@ -44,8 +47,8 @@ class PlaywrightConnection {
44
47
  this._preLaunched = preLaunched;
45
48
  this._options = options;
46
49
  options.launchOptions = filterLaunchOptions(options.launchOptions, options.allowFSPaths);
47
- if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0, _utils.assert)(preLaunched.playwright);
48
- if (clientType === 'pre-launched-browser-or-android') (0, _utils.assert)(preLaunched.browser || preLaunched.androidDevice);
50
+ if (clientType === 'reuse-browser' || clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.playwright);
51
+ if (clientType === 'pre-launched-browser-or-android') (0, _assert.assert)(preLaunched.browser || preLaunched.androidDevice);
49
52
  this._onClose = onClose;
50
53
  this._id = id;
51
54
  this._profileName = `${new Date().toISOString()}-${clientType}`;
@@ -74,7 +77,7 @@ class PlaywrightConnection {
74
77
  return;
75
78
  }
76
79
  this._root = new _server.RootDispatcher(this._dispatcherConnection, async (scope, options) => {
77
- await (0, _utils.startProfiling)();
80
+ await (0, _profiler.startProfiling)();
78
81
  if (clientType === 'reuse-browser') return await this._initReuseBrowsersMode(scope);
79
82
  if (clientType === 'pre-launched-browser-or-android') return this._preLaunched.browser ? await this._initPreLaunchedBrowserMode(scope) : await this._initPreLaunchedAndroidMode(scope);
80
83
  if (clientType === 'launch-browser') return await this._initLaunchBrowserMode(scope, options);
@@ -88,7 +91,12 @@ class PlaywrightConnection {
88
91
  isServer: true
89
92
  });
90
93
  const ownedSocksProxy = await this._createOwnedSocksProxy(playwright);
91
- const browser = await playwright[this._options.browserName].launch((0, _instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
94
+ let browserName = this._options.browserName;
95
+ if ('bidi' === browserName) {
96
+ var _this$_options$launch;
97
+ if ((_this$_options$launch = this._options.launchOptions) !== null && _this$_options$launch !== void 0 && (_this$_options$launch = _this$_options$launch.channel) !== null && _this$_options$launch !== void 0 && _this$_options$launch.toLocaleLowerCase().includes('firefox')) browserName = 'bidiFirefox';else browserName = 'bidiChromium';
98
+ }
99
+ const browser = await playwright[browserName].launch((0, _instrumentation.serverSideCallMetadata)(), this._options.launchOptions);
92
100
  this._cleanups.push(async () => {
93
101
  for (const browser of playwright.allBrowsers()) await browser.close({
94
102
  reason: 'Connection terminated'
@@ -214,7 +222,7 @@ class PlaywrightConnection {
214
222
  this._root._dispose();
215
223
  _debugLogger.debugLogger.log('server', `[${this._id}] starting cleanup`);
216
224
  for (const cleanup of this._cleanups) await cleanup().catch(() => {});
217
- await (0, _utils.stopProfiling)(this._profileName);
225
+ await (0, _profiler.stopProfiling)(this._profileName);
218
226
  this._onClose();
219
227
  _debugLogger.debugLogger.log('server', `[${this._id}] finished cleanup`);
220
228
  }
@@ -260,7 +268,7 @@ function filterLaunchOptions(options, allowFSPaths) {
260
268
  chromiumSandbox: options.chromiumSandbox,
261
269
  firefoxUserPrefs: options.firefoxUserPrefs,
262
270
  slowMo: options.slowMo,
263
- executablePath: (0, _utils.isUnderTest)() || allowFSPaths ? options.executablePath : undefined,
271
+ executablePath: (0, _debug.isUnderTest)() || allowFSPaths ? options.executablePath : undefined,
264
272
  downloadsPath: allowFSPaths ? options.downloadsPath : undefined
265
273
  };
266
274
  }
@@ -4,12 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.PlaywrightServer = void 0;
7
- var _playwright = require("../server/playwright");
8
7
  var _playwrightConnection = require("./playwrightConnection");
9
- var _semaphore = require("../utils/semaphore");
10
- var _debugLogger = require("../utils/debugLogger");
11
- var _utils = require("../utils");
12
- var _wsServer = require("../utils/wsServer");
8
+ var _playwright = require("../server/playwright");
9
+ var _debugLogger = require("../server/utils/debugLogger");
10
+ var _semaphore = require("../utils/isomorphic/semaphore");
11
+ var _wsServer = require("../server/utils/wsServer");
12
+ var _ascii = require("../server/utils/ascii");
13
+ var _userAgent = require("../server/utils/userAgent");
13
14
  /**
14
15
  * Copyright (c) Microsoft Corporation.
15
16
  *
@@ -39,7 +40,7 @@ class PlaywrightServer {
39
40
  const reuseBrowserSemaphore = new _semaphore.Semaphore(1);
40
41
  this._wsServer = new _wsServer.WSServer({
41
42
  onUpgrade: (request, socket) => {
42
- const uaError = (0, _utils.userAgentVersionMatchesErrorMessage)(request.headers['user-agent'] || '');
43
+ const uaError = userAgentVersionMatchesErrorMessage(request.headers['user-agent'] || '');
43
44
  if (uaError) return {
44
45
  error: `HTTP/${request.httpVersion} 428 Precondition Required\r\n\r\n${uaError}`
45
46
  };
@@ -108,4 +109,16 @@ class PlaywrightServer {
108
109
  await this._wsServer.close();
109
110
  }
110
111
  }
111
- exports.PlaywrightServer = PlaywrightServer;
112
+ exports.PlaywrightServer = PlaywrightServer;
113
+ function userAgentVersionMatchesErrorMessage(userAgent) {
114
+ const match = userAgent.match(/^Playwright\/(\d+\.\d+\.\d+)/);
115
+ if (!match) {
116
+ // Cannot parse user agent - be lax.
117
+ return;
118
+ }
119
+ const received = match[1].split('.').slice(0, 2).join('.');
120
+ const expected = (0, _userAgent.getPlaywrightVersion)(true);
121
+ if (received !== expected) {
122
+ return (0, _ascii.wrapInASCIIBox)([`Playwright version mismatch:`, ` - server version: v${expected}`, ` - client version: v${received}`, ``, `If you are using VSCode extension, restart VSCode.`, ``, `If you are connecting to a remote service,`, `keep your local Playwright version in sync`, `with the remote service version.`, ``, `<3 Playwright Team`].join('\n'), 1);
123
+ }
124
+ }
@@ -4,25 +4,28 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AndroidDevice = exports.Android = void 0;
7
- var _utilsBundle = require("../../utilsBundle");
8
7
  var _events = require("events");
9
8
  var _fs = _interopRequireDefault(require("fs"));
10
9
  var _os = _interopRequireDefault(require("os"));
11
10
  var _path = _interopRequireDefault(require("path"));
12
- var _utils = require("../../utils");
13
- var _fileUtils = require("../../utils/fileUtils");
11
+ var _timeoutSettings = require("../timeoutSettings");
12
+ var _pipeTransport = require("../utils/pipeTransport");
13
+ var _crypto = require("../utils/crypto");
14
+ var _debug = require("../utils/debug");
15
+ var _env = require("../utils/env");
16
+ var _task = require("../utils/task");
17
+ var _debugLogger = require("../utils/debugLogger");
18
+ var _utilsBundle = require("../../utilsBundle");
14
19
  var _browserContext = require("../browserContext");
15
- var _progress = require("../progress");
20
+ var _chromiumSwitches = require("../chromium/chromiumSwitches");
16
21
  var _crBrowser = require("../chromium/crBrowser");
22
+ var _fileUtils = require("../utils/fileUtils");
17
23
  var _helper = require("../helper");
18
- var _transport = require("../../protocol/transport");
19
- var _debugLogger = require("../../utils/debugLogger");
20
- var _processLauncher = require("../../utils/processLauncher");
21
- var _timeoutSettings = require("../../common/timeoutSettings");
22
24
  var _instrumentation = require("../instrumentation");
23
- var _chromiumSwitches = require("../chromium/chromiumSwitches");
25
+ var _processLauncher = require("../utils/processLauncher");
26
+ var _progress = require("../progress");
24
27
  var _registry = require("../registry");
25
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
28
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
29
  /**
27
30
  * Copyright Microsoft Corporation. All rights reserved.
28
31
  *
@@ -140,7 +143,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
140
143
  await this.shell(`cmd package uninstall com.microsoft.playwright.androiddriver.test`);
141
144
  (0, _utilsBundle.debug)('pw:android')('Installing the new driver');
142
145
  const executable = _registry.registry.findExecutable('android');
143
- const packageManagerCommand = (0, _utils.getPackageManagerExecCommand)();
146
+ const packageManagerCommand = (0, _env.getPackageManagerExecCommand)();
144
147
  for (const file of ['android-driver.apk', 'android-driver-target.apk']) {
145
148
  const fullName = _path.default.join(executable.directory, file);
146
149
  if (!_fs.default.existsSync(fullName)) throw new Error(`Please install Android driver apk using '${packageManagerCommand} playwright install android'`);
@@ -152,7 +155,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
152
155
  (0, _utilsBundle.debug)('pw:android')('Starting the new driver');
153
156
  this.shell('am instrument -w com.microsoft.playwright.androiddriver.test/androidx.test.runner.AndroidJUnitRunner').catch(e => (0, _utilsBundle.debug)('pw:android')(e));
154
157
  const socket = await this._waitForLocalAbstract('playwright_android_driver_socket');
155
- const transport = new _transport.PipeTransport(socket, socket, socket, 'be');
158
+ const transport = new _pipeTransport.PipeTransport(socket, socket, socket, 'be');
156
159
  transport.onmessage = message => {
157
160
  const response = JSON.parse(message);
158
161
  const {
@@ -213,7 +216,7 @@ class AndroidDevice extends _instrumentation.SdkObject {
213
216
  async launchBrowser(pkg = 'com.android.chrome', options) {
214
217
  (0, _utilsBundle.debug)('pw:android')('Force-stopping', pkg);
215
218
  await this._backend.runCommand(`shell:am force-stop ${pkg}`);
216
- const socketName = (0, _utils.isUnderTest)() ? 'webview_devtools_remote_playwright_test' : 'playwright_' + (0, _utils.createGuid)() + '_devtools_remote';
219
+ const socketName = (0, _debug.isUnderTest)() ? 'webview_devtools_remote_playwright_test' : 'playwright_' + (0, _crypto.createGuid)() + '_devtools_remote';
217
220
  const commandLine = this._defaultArgs(options, socketName).join(' ');
218
221
  (0, _utilsBundle.debug)('pw:android')('Starting', pkg, commandLine);
219
222
  // encode commandLine to base64 to avoid issues (bash encoding) with special characters
@@ -381,7 +384,7 @@ class AndroidBrowser extends _events.EventEmitter {
381
384
  this.device = void 0;
382
385
  this._socket = void 0;
383
386
  this._receiver = void 0;
384
- this._waitForNextTask = (0, _utils.makeWaitForNextTask)();
387
+ this._waitForNextTask = (0, _task.makeWaitForNextTask)();
385
388
  this.onmessage = void 0;
386
389
  this.onclose = void 0;
387
390
  this.setMaxListeners(0);
@@ -4,12 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.AdbBackend = void 0;
7
- var _utilsBundle = require("../../utilsBundle");
8
- var net = _interopRequireWildcard(require("net"));
9
7
  var _events = require("events");
10
- var _utils = require("../../utils");
11
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
12
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
8
+ var _net = _interopRequireDefault(require("net"));
9
+ var _assert = require("../../utils/isomorphic/assert");
10
+ var _crypto = require("../utils/crypto");
11
+ var _utilsBundle = require("../../utilsBundle");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  /**
14
14
  * Copyright Microsoft Corporation. All rights reserved.
15
15
  *
@@ -66,7 +66,7 @@ class AdbDevice {
66
66
  }
67
67
  async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
68
68
  (0, _utilsBundle.debug)('pw:adb:runCommand')(command, serial);
69
- const socket = new BufferedSocketWrapper(command, net.createConnection({
69
+ const socket = new BufferedSocketWrapper(command, _net.default.createConnection({
70
70
  host,
71
71
  port
72
72
  }));
@@ -74,11 +74,11 @@ async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
74
74
  if (serial) {
75
75
  await socket.write(encodeMessage(`host:transport:${serial}`));
76
76
  const status = await socket.read(4);
77
- (0, _utils.assert)(status.toString() === 'OKAY', status.toString());
77
+ (0, _assert.assert)(status.toString() === 'OKAY', status.toString());
78
78
  }
79
79
  await socket.write(encodeMessage(command));
80
80
  const status = await socket.read(4);
81
- (0, _utils.assert)(status.toString() === 'OKAY', status.toString());
81
+ (0, _assert.assert)(status.toString() === 'OKAY', status.toString());
82
82
  let commandOutput;
83
83
  if (!command.startsWith('shell:')) {
84
84
  const remainingLength = parseInt((await socket.read(4)).toString(), 16);
@@ -92,18 +92,18 @@ async function runCommand(command, host = '127.0.0.1', port = 5037, serial) {
92
92
  }
93
93
  }
94
94
  async function open(command, host = '127.0.0.1', port = 5037, serial) {
95
- const socket = new BufferedSocketWrapper(command, net.createConnection({
95
+ const socket = new BufferedSocketWrapper(command, _net.default.createConnection({
96
96
  host,
97
97
  port
98
98
  }));
99
99
  if (serial) {
100
100
  await socket.write(encodeMessage(`host:transport:${serial}`));
101
101
  const status = await socket.read(4);
102
- (0, _utils.assert)(status.toString() === 'OKAY', status.toString());
102
+ (0, _assert.assert)(status.toString() === 'OKAY', status.toString());
103
103
  }
104
104
  await socket.write(encodeMessage(command));
105
105
  const status = await socket.read(4);
106
- (0, _utils.assert)(status.toString() === 'OKAY', status.toString());
106
+ (0, _assert.assert)(status.toString() === 'OKAY', status.toString());
107
107
  return socket;
108
108
  }
109
109
  function encodeMessage(message) {
@@ -114,7 +114,7 @@ function encodeMessage(message) {
114
114
  class BufferedSocketWrapper extends _events.EventEmitter {
115
115
  constructor(command, socket) {
116
116
  super();
117
- this.guid = (0, _utils.createGuid)();
117
+ this.guid = (0, _crypto.createGuid)();
118
118
  this._socket = void 0;
119
119
  this._buffer = Buffer.from([]);
120
120
  this._isSocket = false;
@@ -154,7 +154,7 @@ class BufferedSocketWrapper extends _events.EventEmitter {
154
154
  }
155
155
  async read(length) {
156
156
  await this._connectPromise;
157
- (0, _utils.assert)(!this._isSocket, 'Can not read by length in socket mode');
157
+ (0, _assert.assert)(!this._isSocket, 'Can not read by length in socket mode');
158
158
  while (this._buffer.length < length) await new Promise(f => this._notifyReader = f);
159
159
  const result = this._buffer.slice(0, length);
160
160
  this._buffer = this._buffer.slice(length);
@@ -166,7 +166,7 @@ class BufferedSocketWrapper extends _events.EventEmitter {
166
166
  return this._buffer;
167
167
  }
168
168
  becomeSocket() {
169
- (0, _utils.assert)(!this._buffer.length);
169
+ (0, _assert.assert)(!this._buffer.length);
170
170
  this._isSocket = true;
171
171
  }
172
172
  }
@@ -6,10 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Artifact = void 0;
7
7
  var _fs = _interopRequireDefault(require("fs"));
8
8
  var _utils = require("../utils");
9
- var _manualPromise = require("../utils/manualPromise");
10
- var _instrumentation = require("./instrumentation");
11
9
  var _errors = require("./errors");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ var _instrumentation = require("./instrumentation");
11
+ var _manualPromise = require("../utils/isomorphic/manualPromise");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  /**
14
14
  * Copyright (c) Microsoft Corporation.
15
15
  *
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Network = exports.BidiBrowserContext = exports.BidiBrowser = void 0;
7
- var _eventsHelper = require("../../utils/eventsHelper");
7
+ var _eventsHelper = require("../utils/eventsHelper");
8
8
  var _browser = require("../browser");
9
9
  var _browserContext = require("../browserContext");
10
10
  var network = _interopRequireWildcard(require("../network"));
@@ -13,7 +13,7 @@ var _bidiNetworkManager = require("./bidiNetworkManager");
13
13
  var _bidiPage = require("./bidiPage");
14
14
  var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
15
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
16
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
17
17
  /**
18
18
  * Copyright (c) Microsoft Corporation.
19
19
  *
@@ -6,11 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.BidiChromium = void 0;
7
7
  var _os = _interopRequireDefault(require("os"));
8
8
  var _utils = require("../../utils");
9
+ var _ascii = require("../utils/ascii");
9
10
  var _browserType = require("../browserType");
10
- var _chromiumSwitches = require("../chromium/chromiumSwitches");
11
11
  var _bidiBrowser = require("./bidiBrowser");
12
12
  var _bidiConnection = require("./bidiConnection");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ var _chromiumSwitches = require("../chromium/chromiumSwitches");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
15
  /**
15
16
  * Copyright (c) Microsoft Corporation.
16
17
  *
@@ -42,7 +43,7 @@ class BidiChromium extends _browserType.BrowserType {
42
43
  }
43
44
  doRewriteStartupLog(error) {
44
45
  if (!error.logs) return error;
45
- if (error.logs.includes('Missing X server')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
46
+ if (error.logs.includes('Missing X server')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
46
47
  // These error messages are taken from Chromium source code as of July, 2020:
47
48
  // https://github.com/chromium/chromium/blob/70565f67e79f79e17663ad1337dc6e63ee207ce9/content/browser/zygote_host/zygote_host_impl_linux.cc
48
49
  if (!error.logs.includes('crbug.com/357670') && !error.logs.includes('No usable sandbox!') && !error.logs.includes('crbug.com/638180')) return error;
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.kBrowserCloseMessageId = exports.BidiSession = exports.BidiConnection = void 0;
7
7
  var _events = require("events");
8
- var _debugLogger = require("../../utils/debugLogger");
8
+ var _debugLogger = require("../utils/debugLogger");
9
9
  var _helper = require("../helper");
10
10
  var _protocolError = require("../protocolError");
11
11
  /**
@@ -4,13 +4,16 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BidiExecutionContext = void 0;
7
+ exports.createHandle = createHandle;
8
+ var _utils = require("../../utils");
7
9
  var _utilityScriptSerializers = require("../isomorphic/utilityScriptSerializers");
8
10
  var js = _interopRequireWildcard(require("../javascript"));
11
+ var dom = _interopRequireWildcard(require("../dom"));
9
12
  var _bidiDeserializer = require("./third_party/bidiDeserializer");
10
13
  var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
11
14
  var _bidiSerializer = require("./third_party/bidiSerializer");
12
15
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
17
  /**
15
18
  * Copyright (c) Microsoft Corporation.
16
19
  *
@@ -59,7 +62,7 @@ class BidiExecutionContext {
59
62
  if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
60
63
  throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
61
64
  }
62
- async rawEvaluateHandle(expression) {
65
+ async rawEvaluateHandle(context, expression) {
63
66
  const response = await this._session.send('script.evaluate', {
64
67
  expression,
65
68
  target: this._target,
@@ -73,20 +76,20 @@ class BidiExecutionContext {
73
76
  userActivation: true
74
77
  });
75
78
  if (response.type === 'success') {
76
- if ('handle' in response.result) return response.result.handle;
79
+ if ('handle' in response.result) return createHandle(context, response.result);
77
80
  throw new js.JavaScriptErrorInEvaluate('Cannot get handle: ' + JSON.stringify(response.result));
78
81
  }
79
82
  if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
80
83
  throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
81
84
  }
82
- async evaluateWithArguments(functionDeclaration, returnByValue, utilityScript, values, objectIds) {
85
+ async evaluateWithArguments(functionDeclaration, returnByValue, utilityScript, values, handles) {
83
86
  const response = await this._session.send('script.callFunction', {
84
87
  functionDeclaration,
85
88
  target: this._target,
86
89
  arguments: [{
87
90
  handle: utilityScript._objectId
88
- }, ...values.map(_bidiSerializer.BidiSerializer.serialize), ...objectIds.map(handle => ({
89
- handle
91
+ }, ...values.map(_bidiSerializer.BidiSerializer.serialize), ...handles.map(handle => ({
92
+ handle: handle._objectId
90
93
  }))],
91
94
  resultOwnership: returnByValue ? undefined : bidi.Script.ResultOwnership.Root,
92
95
  // Necessary for the handle to be returned.
@@ -100,53 +103,72 @@ class BidiExecutionContext {
100
103
  if (response.type === 'exception') throw new js.JavaScriptErrorInEvaluate(response.exceptionDetails.text + '\nFull val: ' + JSON.stringify(response.exceptionDetails));
101
104
  if (response.type === 'success') {
102
105
  if (returnByValue) return (0, _utilityScriptSerializers.parseEvaluationResultValue)(_bidiDeserializer.BidiDeserializer.deserialize(response.result));
103
- const objectId = 'handle' in response.result ? response.result.handle : undefined;
104
- return utilityScript._context.createHandle({
105
- objectId,
106
- ...response.result
107
- });
106
+ return createHandle(utilityScript._context, response.result);
108
107
  }
109
108
  throw new js.JavaScriptErrorInEvaluate('Unexpected response type: ' + JSON.stringify(response));
110
109
  }
111
- async getProperties(context, objectId) {
112
- const handle = this.createHandle(context, {
113
- objectId
110
+ async getProperties(handle) {
111
+ const names = await handle.evaluate(object => {
112
+ const names = [];
113
+ const descriptors = Object.getOwnPropertyDescriptors(object);
114
+ for (const name in descriptors) {
115
+ var _descriptors$name;
116
+ if ((_descriptors$name = descriptors[name]) !== null && _descriptors$name !== void 0 && _descriptors$name.enumerable) names.push(name);
117
+ }
118
+ return names;
114
119
  });
115
- try {
116
- const names = await handle.evaluate(object => {
117
- const names = [];
118
- const descriptors = Object.getOwnPropertyDescriptors(object);
119
- for (const name in descriptors) {
120
- var _descriptors$name;
121
- if ((_descriptors$name = descriptors[name]) !== null && _descriptors$name !== void 0 && _descriptors$name.enumerable) names.push(name);
122
- }
123
- return names;
124
- });
125
- const values = await Promise.all(names.map(name => handle.evaluateHandle((object, name) => object[name], name)));
126
- const map = new Map();
127
- for (let i = 0; i < names.length; i++) map.set(names[i], values[i]);
128
- return map;
129
- } finally {
130
- handle.dispose();
131
- }
132
- }
133
- createHandle(context, jsRemoteObject) {
134
- const remoteObject = jsRemoteObject;
135
- return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), jsRemoteObject.objectId, remoteObjectValue(remoteObject));
120
+ const values = await Promise.all(names.map(name => handle.evaluateHandle((object, name) => object[name], name)));
121
+ const map = new Map();
122
+ for (let i = 0; i < names.length; i++) map.set(names[i], values[i]);
123
+ return map;
136
124
  }
137
- async releaseHandle(objectId) {
125
+ async releaseHandle(handle) {
126
+ if (!handle._objectId) return;
138
127
  await this._session.send('script.disown', {
139
128
  target: this._target,
140
- handles: [objectId]
129
+ handles: [handle._objectId]
130
+ });
131
+ }
132
+ async nodeIdForElementHandle(handle) {
133
+ const shared = await this._remoteValueForReference({
134
+ handle: handle._objectId
135
+ });
136
+ // TODO: store sharedId in the handle.
137
+ if (!('sharedId' in shared)) throw new Error('Element is not a node');
138
+ return {
139
+ sharedId: shared.sharedId
140
+ };
141
+ }
142
+ async remoteObjectForNodeId(context, nodeId) {
143
+ const result = await this._remoteValueForReference(nodeId, true);
144
+ if (!('handle' in result)) throw new Error('Can\'t get remote object for nodeId');
145
+ return createHandle(context, result);
146
+ }
147
+ async contentFrameIdForFrame(handle) {
148
+ const contentWindow = await this._rawCallFunction('e => e.contentWindow', {
149
+ handle: handle._objectId
141
150
  });
151
+ if ((contentWindow === null || contentWindow === void 0 ? void 0 : contentWindow.type) === 'window') return contentWindow.value.context;
152
+ return null;
142
153
  }
143
- async rawCallFunction(functionDeclaration, arg) {
154
+ async frameIdForWindowHandle(handle) {
155
+ if (!handle._objectId) throw new Error('JSHandle is not a DOM node handle');
156
+ const contentWindow = await this._remoteValueForReference({
157
+ handle: handle._objectId
158
+ });
159
+ if (contentWindow.type === 'window') return contentWindow.value.context;
160
+ return null;
161
+ }
162
+ async _remoteValueForReference(reference, createHandle) {
163
+ return await this._rawCallFunction('e => e', reference, createHandle);
164
+ }
165
+ async _rawCallFunction(functionDeclaration, arg, createHandle) {
144
166
  const response = await this._session.send('script.callFunction', {
145
167
  functionDeclaration,
146
168
  target: this._target,
147
169
  arguments: [arg],
148
- resultOwnership: bidi.Script.ResultOwnership.Root,
149
- // Necessary for the handle to be returned.
170
+ // "Root" is necessary for the handle to be returned.
171
+ resultOwnership: createHandle ? bidi.Script.ResultOwnership.Root : bidi.Script.ResultOwnership.None,
150
172
  serializationOptions: {
151
173
  maxObjectDepth: 0,
152
174
  maxDomDepth: 0
@@ -172,4 +194,12 @@ function remoteObjectValue(remoteObject) {
172
194
  if (remoteObject.type === 'number' && typeof remoteObject.value === 'string') return js.parseUnserializableValue(remoteObject.value);
173
195
  if ('value' in remoteObject) return remoteObject.value;
174
196
  return undefined;
197
+ }
198
+ function createHandle(context, remoteObject) {
199
+ if (remoteObject.type === 'node') {
200
+ (0, _utils.assert)(context instanceof dom.FrameExecutionContext);
201
+ return new dom.ElementHandle(context, remoteObject.handle);
202
+ }
203
+ const objectId = 'handle' in remoteObject ? remoteObject.handle : undefined;
204
+ return new js.JSHandle(context, remoteObject.type, renderPreview(remoteObject), objectId, remoteObjectValue(remoteObject));
175
205
  }
@@ -7,11 +7,12 @@ exports.BidiFirefox = void 0;
7
7
  var _os = _interopRequireDefault(require("os"));
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _utils = require("../../utils");
10
+ var _ascii = require("../utils/ascii");
10
11
  var _browserType = require("../browserType");
11
12
  var _bidiBrowser = require("./bidiBrowser");
12
13
  var _bidiConnection = require("./bidiConnection");
13
14
  var _firefoxPrefs = require("./third_party/firefoxPrefs");
14
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
16
  /**
16
17
  * Copyright (c) Microsoft Corporation.
17
18
  *
@@ -39,8 +40,8 @@ class BidiFirefox extends _browserType.BrowserType {
39
40
  doRewriteStartupLog(error) {
40
41
  if (!error.logs) return error;
41
42
  // https://github.com/microsoft/playwright/issues/6500
42
- if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
43
- if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _utils.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
43
+ if (error.logs.includes(`as root in a regular user's session is not supported.`)) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(`Firefox is unable to launch if the $HOME folder isn't owned by the current user.\nWorkaround: Set the HOME=/root environment variable${process.env.GITHUB_ACTION ? ' in your GitHub Actions workflow file' : ''} when running Playwright.`, 1);
44
+ if (error.logs.includes('no DISPLAY environment variable specified')) error.logs = '\n' + (0, _ascii.wrapInASCIIBox)(_browserType.kNoXServerRunningError, 1);
44
45
  return error;
45
46
  }
46
47
  amendEnvironment(env, userDataDir, executable, browserArguments) {
@@ -4,11 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RawTouchscreenImpl = exports.RawMouseImpl = exports.RawKeyboardImpl = void 0;
7
- var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
8
- var _bidiKeyboard = require("./third_party/bidiKeyboard");
9
7
  var _input = require("../input");
8
+ var _bidiKeyboard = require("./third_party/bidiKeyboard");
9
+ var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
10
10
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
11
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
12
  /**
13
13
  * Copyright (c) Microsoft Corporation.
14
14
  *
@@ -84,9 +84,6 @@ class RawMouseImpl {
84
84
  this._session = session;
85
85
  }
86
86
  async move(x, y, button, buttons, modifiers, forClick) {
87
- // Bidi throws when x/y are not integers.
88
- x = Math.round(x);
89
- y = Math.round(y);
90
87
  await this._performActions([{
91
88
  type: 'pointerMove',
92
89
  x,
@@ -107,8 +104,8 @@ class RawMouseImpl {
107
104
  }
108
105
  async wheel(x, y, buttons, modifiers, deltaX, deltaY) {
109
106
  // Bidi throws when x/y are not integers.
110
- x = Math.round(x);
111
- y = Math.round(y);
107
+ x = Math.floor(x);
108
+ y = Math.floor(y);
112
109
  await this._session.send('input.performActions', {
113
110
  context: this._session.sessionId,
114
111
  actions: [{
@@ -5,12 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.BidiNetworkManager = void 0;
7
7
  exports.bidiBytesValueToString = bidiBytesValueToString;
8
- var _eventsHelper = require("../../utils/eventsHelper");
8
+ var _eventsHelper = require("../utils/eventsHelper");
9
+ var _cookieStore = require("../cookieStore");
9
10
  var network = _interopRequireWildcard(require("../network"));
10
11
  var bidi = _interopRequireWildcard(require("./third_party/bidiProtocol"));
11
- var _cookieStore = require("../cookieStore");
12
12
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
13
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
13
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
14
  /**
15
15
  * Copyright (c) Microsoft Corporation.
16
16
  *