@checkly/playwright-core 1.41.26 → 1.42.12

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 (164) hide show
  1. package/ThirdPartyNotices.txt +3 -3
  2. package/bin/reinstall_chrome_beta_win.ps1 +2 -1
  3. package/bin/reinstall_chrome_stable_win.ps1 +2 -1
  4. package/bin/reinstall_msedge_beta_win.ps1 +2 -1
  5. package/bin/reinstall_msedge_dev_win.ps1 +2 -1
  6. package/bin/reinstall_msedge_stable_win.ps1 +2 -1
  7. package/browsers.json +14 -15
  8. package/cli.js +2 -1
  9. package/lib/checkly/fetch.js +28 -1
  10. package/lib/cli/driver.js +9 -1
  11. package/lib/cli/program.js +12 -4
  12. package/lib/client/browserContext.js +1 -1
  13. package/lib/client/channelOwner.js +1 -1
  14. package/lib/client/clientHelper.js +5 -1
  15. package/lib/client/connection.js +1 -1
  16. package/lib/client/consoleMessage.js +1 -1
  17. package/lib/client/electron.js +3 -0
  18. package/lib/client/events.js +1 -0
  19. package/lib/client/frame.js +2 -1
  20. package/lib/client/harRouter.js +7 -1
  21. package/lib/client/page.js +25 -6
  22. package/lib/common/socksProxy.js +1 -1
  23. package/lib/generated/consoleApiSource.js +1 -1
  24. package/lib/generated/injectedScriptSource.js +1 -1
  25. package/lib/generated/recorderSource.js +1 -1
  26. package/lib/outofprocess.js +1 -1
  27. package/lib/protocol/validator.js +60 -30
  28. package/lib/remote/playwrightConnection.js +1 -1
  29. package/lib/remote/playwrightServer.js +72 -166
  30. package/lib/server/android/android.js +1 -1
  31. package/lib/server/browserType.js +2 -2
  32. package/lib/server/chromium/chromium.js +5 -4
  33. package/lib/server/chromium/crConnection.js +1 -1
  34. package/lib/server/chromium/crNetworkManager.js +1 -3
  35. package/lib/server/chromium/crPage.js +45 -2
  36. package/lib/server/chromium/crPdf.js +8 -2
  37. package/lib/server/console.js +1 -3
  38. package/lib/server/debugController.js +0 -3
  39. package/lib/server/deviceDescriptorsSource.json +50 -50
  40. package/lib/server/dispatchers/browserContextDispatcher.js +3 -2
  41. package/lib/server/dispatchers/dispatcher.js +9 -10
  42. package/lib/server/dispatchers/electronDispatcher.js +13 -0
  43. package/lib/server/dispatchers/frameDispatcher.js +0 -6
  44. package/lib/server/dispatchers/networkDispatchers.js +1 -0
  45. package/lib/server/dispatchers/pageDispatcher.js +14 -10
  46. package/lib/server/dom.js +130 -167
  47. package/lib/server/electron/electron.js +38 -12
  48. package/lib/server/electron/loader.js +4 -2
  49. package/lib/server/fetch.js +1 -0
  50. package/lib/server/firefox/ffAccessibility.js +2 -1
  51. package/lib/server/firefox/ffConnection.js +1 -1
  52. package/lib/server/firefox/ffPage.js +1 -1
  53. package/lib/server/frames.js +39 -20
  54. package/lib/server/helper.js +1 -1
  55. package/lib/server/page.js +49 -5
  56. package/lib/server/pipeTransport.js +1 -1
  57. package/lib/server/playwright.js +1 -1
  58. package/lib/server/progress.js +3 -11
  59. package/lib/server/recorder/csharp.js +1 -1
  60. package/lib/server/recorder/java.js +36 -4
  61. package/lib/server/recorder.js +2 -2
  62. package/lib/server/registry/browserFetcher.js +1 -1
  63. package/lib/server/registry/dependencies.js +5 -4
  64. package/lib/server/registry/index.js +48 -30
  65. package/lib/server/registry/nativeDeps.js +0 -94
  66. package/lib/server/trace/recorder/snapshotter.js +1 -1
  67. package/lib/server/trace/recorder/tracing.js +5 -2
  68. package/lib/server/trace/viewer/traceViewer.js +1 -1
  69. package/lib/server/transport.js +4 -2
  70. package/lib/server/webkit/wkConnection.js +1 -1
  71. package/lib/server/webkit/wkPage.js +2 -2
  72. package/lib/utils/comparators.js +4 -4
  73. package/lib/utils/fileUtils.js +4 -0
  74. package/lib/utils/hostPlatform.js +1 -1
  75. package/lib/utils/index.js +33 -0
  76. package/lib/utils/isomorphic/locatorParser.js +6 -4
  77. package/lib/utils/isomorphic/stringUtils.js +5 -0
  78. package/lib/utils/network.js +32 -0
  79. package/lib/utils/processLauncher.js +7 -0
  80. package/lib/utils/rtti.js +7 -4
  81. package/lib/utils/wsServer.js +5 -3
  82. package/lib/utilsBundleImpl/index.js +4 -4
  83. package/lib/vite/htmlReport/index.html +11 -11
  84. package/lib/vite/traceViewer/assets/{codeMirrorModule-2ImvVqMb.js → codeMirrorModule-BK3t1EEu.js} +1 -1
  85. package/lib/vite/traceViewer/assets/codeMirrorModule-V7N6ppkd.js +15585 -0
  86. package/lib/vite/traceViewer/assets/{codeMirrorModule-y3M3aAqy.js → codeMirrorModule-Vg1kIqMp.js} +1 -1
  87. package/lib/vite/traceViewer/assets/{codeMirrorModule-fqJB1XDu.js → codeMirrorModule-wLpsbIhd.js} +13 -13
  88. package/lib/vite/traceViewer/assets/{wsPort-L8WBvZfK.js → wsPort-964mA9MZ.js} +18 -18
  89. package/lib/vite/traceViewer/assets/wsPort-EUvw-dwH.js +18540 -0
  90. package/lib/vite/traceViewer/assets/{wsPort-uVqol1LI.js → wsPort-RIoVGhlT.js} +18 -18
  91. package/lib/vite/traceViewer/assets/wsPort-f2dAQL4I.js +69 -0
  92. package/lib/vite/traceViewer/assets/xtermModule-_6TC5FYT.js +6529 -0
  93. package/lib/vite/traceViewer/codeMirrorModule.svF_VrcJ.css +344 -0
  94. package/lib/vite/traceViewer/{index.LR1HufLs.js → index.-_8-eHEE.js} +1 -1
  95. package/lib/vite/traceViewer/index.5mge2rY_.css +124 -0
  96. package/lib/vite/traceViewer/index.6KJ-JQ0L.js +180 -0
  97. package/lib/vite/traceViewer/{index.4X7zDysg.js → index.cbtHmFgM.js} +1 -1
  98. package/lib/vite/traceViewer/index.html +3 -3
  99. package/lib/vite/traceViewer/{index.4xhUWj1f.js → index.qOFdH9Ja.js} +1 -1
  100. package/lib/vite/traceViewer/sw.bundle.js +4 -4
  101. package/lib/vite/traceViewer/{uiMode.PlLkrJDI.js → uiMode.9CwNsWc6.js} +1 -1
  102. package/lib/vite/traceViewer/{uiMode.qpn6w4df.js → uiMode.fcU_T5Nf.js} +1 -1
  103. package/lib/vite/traceViewer/uiMode.html +3 -3
  104. package/lib/vite/traceViewer/{uiMode.GTNzARcV.js → uiMode.iNIhieBM.js} +1 -1
  105. package/lib/vite/traceViewer/uiMode.iq7CyYy7.js +1490 -0
  106. package/lib/vite/traceViewer/uiMode.xvJHbkzl.css +1324 -0
  107. package/lib/vite/traceViewer/wsPort.p5jUwABW.css +3450 -0
  108. package/lib/vite/traceViewer/xtermModule.OKEVRlkP.css +209 -0
  109. package/package.json +6 -5
  110. package/types/protocol.d.ts +367 -53
  111. package/types/types.d.ts +220 -50
  112. package/LICENSE +0 -202
  113. package/NOTICE +0 -5
  114. package/lib/cli/cli.js +0 -61
  115. package/lib/common/debugLogger.js +0 -89
  116. package/lib/vite/traceViewer/assets/codeMirrorModule-2mdjgmqe.js +0 -24
  117. package/lib/vite/traceViewer/assets/codeMirrorModule-56536a77.js +0 -24
  118. package/lib/vite/traceViewer/assets/codeMirrorModule-75b0ca4f.js +0 -24
  119. package/lib/vite/traceViewer/assets/codeMirrorModule-A2_PGeGB.js +0 -24
  120. package/lib/vite/traceViewer/assets/codeMirrorModule-GJA8DRmd.js +0 -24
  121. package/lib/vite/traceViewer/assets/codeMirrorModule-GluP1cQ1.js +0 -24
  122. package/lib/vite/traceViewer/assets/codeMirrorModule-aUzO-LID.js +0 -24
  123. package/lib/vite/traceViewer/assets/codeMirrorModule-b361a51f.js +0 -24
  124. package/lib/vite/traceViewer/assets/codeMirrorModule-c1454a2e.js +0 -24
  125. package/lib/vite/traceViewer/assets/codeMirrorModule-f333a775.js +0 -24
  126. package/lib/vite/traceViewer/assets/wsPort-722747dc.js +0 -64
  127. package/lib/vite/traceViewer/assets/wsPort-762c6840.js +0 -64
  128. package/lib/vite/traceViewer/assets/wsPort-93o0i57c.js +0 -69
  129. package/lib/vite/traceViewer/assets/wsPort-98e00a94.js +0 -64
  130. package/lib/vite/traceViewer/assets/wsPort-Rvwd4WC-.js +0 -69
  131. package/lib/vite/traceViewer/assets/wsPort-db501ca9.js +0 -64
  132. package/lib/vite/traceViewer/assets/wsPort-dlD7vDkY.js +0 -69
  133. package/lib/vite/traceViewer/assets/wsPort-ee2830d7.js +0 -64
  134. package/lib/vite/traceViewer/assets/wsPort-qI0zJPR7.js +0 -69
  135. package/lib/vite/traceViewer/assets/wsPort-qOE2NWrO.js +0 -69
  136. package/lib/vite/traceViewer/assets/wsPort-sh0wpjYp.js +0 -69
  137. package/lib/vite/traceViewer/assets/xtermModule-443332e6.js +0 -9
  138. package/lib/vite/traceViewer/codeMirrorModule.5d0f417c.css +0 -1
  139. package/lib/vite/traceViewer/codicon.79f233d0.ttf +0 -0
  140. package/lib/vite/traceViewer/index.0d08c336.js +0 -2
  141. package/lib/vite/traceViewer/index.1a1fe659.css +0 -1
  142. package/lib/vite/traceViewer/index.HkJgzlGy.js +0 -2
  143. package/lib/vite/traceViewer/index.Ox-CymYJ.js +0 -2
  144. package/lib/vite/traceViewer/index.a265fbdb.js +0 -2
  145. package/lib/vite/traceViewer/index.d05939c9.js +0 -2
  146. package/lib/vite/traceViewer/index.decad628.js +0 -2
  147. package/lib/vite/traceViewer/index.ed9a3c58.js +0 -2
  148. package/lib/vite/traceViewer/index.kRjx5sAJ.js +0 -2
  149. package/lib/vite/traceViewer/index.krETyIB_.js +0 -2
  150. package/lib/vite/traceViewer/index.o6j3Cv4u.js +0 -2
  151. package/lib/vite/traceViewer/uiMode.08ab2d90.js +0 -4
  152. package/lib/vite/traceViewer/uiMode.0d0d667b.js +0 -4
  153. package/lib/vite/traceViewer/uiMode.1Wcp_Kto.js +0 -10
  154. package/lib/vite/traceViewer/uiMode.3ff70f7d.js +0 -4
  155. package/lib/vite/traceViewer/uiMode.8b41a49d.css +0 -1
  156. package/lib/vite/traceViewer/uiMode.8e0454c4.js +0 -4
  157. package/lib/vite/traceViewer/uiMode.Rcwfn0db.js +0 -10
  158. package/lib/vite/traceViewer/uiMode.YGPXSUMv.js +0 -10
  159. package/lib/vite/traceViewer/uiMode.YYFJGvtV.js +0 -10
  160. package/lib/vite/traceViewer/uiMode.c1ebfc43.js +0 -4
  161. package/lib/vite/traceViewer/uiMode.zV-7Lf9v.js +0 -10
  162. package/lib/vite/traceViewer/wsPort.9c9a6767.css +0 -1
  163. package/lib/vite/traceViewer/wsPort.kSgQKQ0y.css +0 -1
  164. package/lib/vite/traceViewer/xtermModule.6428296b.css +0 -32
@@ -248,6 +248,17 @@ _validatorPrimitives.scheme.APIResponse = (0, _validatorPrimitives.tObject)({
248
248
  headers: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue')),
249
249
  requestHeaders: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue')),
250
250
  responseHeaders: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue')),
251
+ requestBody: (0, _validatorPrimitives.tObject)({
252
+ data: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny),
253
+ failOnStatusCode: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
254
+ formData: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue'))),
255
+ //form
256
+ ignoreHTTPSErrors: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
257
+ maxRedirects: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
258
+ multipart: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue'))),
259
+ params: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tType)('NameValue'))),
260
+ timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber)
261
+ }),
251
262
  body: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tAny),
252
263
  method: _validatorPrimitives.tString,
253
264
  tokenizedURL: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
@@ -429,13 +440,6 @@ _validatorPrimitives.scheme.DebugControllerSourceChangedEvent = (0, _validatorPr
429
440
  _validatorPrimitives.scheme.DebugControllerPausedEvent = (0, _validatorPrimitives.tObject)({
430
441
  paused: _validatorPrimitives.tBoolean
431
442
  });
432
- _validatorPrimitives.scheme.DebugControllerBrowsersChangedEvent = (0, _validatorPrimitives.tObject)({
433
- browsers: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({
434
- contexts: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({
435
- pages: (0, _validatorPrimitives.tArray)(_validatorPrimitives.tString)
436
- }))
437
- }))
438
- });
439
443
  _validatorPrimitives.scheme.DebugControllerInitializeParams = (0, _validatorPrimitives.tObject)({
440
444
  codegenId: _validatorPrimitives.tString,
441
445
  sdkLanguage: (0, _validatorPrimitives.tEnum)(['javascript', 'python', 'java', 'csharp'])
@@ -819,7 +823,6 @@ _validatorPrimitives.scheme.BrowserContextBindingCallEvent = (0, _validatorPrimi
819
823
  binding: (0, _validatorPrimitives.tChannel)(['BindingCall'])
820
824
  });
821
825
  _validatorPrimitives.scheme.BrowserContextConsoleEvent = (0, _validatorPrimitives.tObject)({
822
- page: (0, _validatorPrimitives.tChannel)(['Page']),
823
826
  type: _validatorPrimitives.tString,
824
827
  text: _validatorPrimitives.tString,
825
828
  args: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tChannel)(['ElementHandle', 'JSHandle'])),
@@ -827,7 +830,8 @@ _validatorPrimitives.scheme.BrowserContextConsoleEvent = (0, _validatorPrimitive
827
830
  url: _validatorPrimitives.tString,
828
831
  lineNumber: _validatorPrimitives.tNumber,
829
832
  columnNumber: _validatorPrimitives.tNumber
830
- })
833
+ }),
834
+ page: (0, _validatorPrimitives.tChannel)(['Page'])
831
835
  });
832
836
  _validatorPrimitives.scheme.BrowserContextCloseEvent = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
833
837
  _validatorPrimitives.scheme.BrowserContextDialogEvent = (0, _validatorPrimitives.tObject)({
@@ -1030,6 +1034,9 @@ _validatorPrimitives.scheme.PageFrameAttachedEvent = (0, _validatorPrimitives.tO
1030
1034
  _validatorPrimitives.scheme.PageFrameDetachedEvent = (0, _validatorPrimitives.tObject)({
1031
1035
  frame: (0, _validatorPrimitives.tChannel)(['Frame'])
1032
1036
  });
1037
+ _validatorPrimitives.scheme.PageLocatorHandlerTriggeredEvent = (0, _validatorPrimitives.tObject)({
1038
+ uid: _validatorPrimitives.tNumber
1039
+ });
1033
1040
  _validatorPrimitives.scheme.PageRouteEvent = (0, _validatorPrimitives.tObject)({
1034
1041
  route: (0, _validatorPrimitives.tChannel)(['Route'])
1035
1042
  });
@@ -1085,6 +1092,16 @@ _validatorPrimitives.scheme.PageGoForwardParams = (0, _validatorPrimitives.tObje
1085
1092
  _validatorPrimitives.scheme.PageGoForwardResult = (0, _validatorPrimitives.tObject)({
1086
1093
  response: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tChannel)(['Response']))
1087
1094
  });
1095
+ _validatorPrimitives.scheme.PageRegisterLocatorHandlerParams = (0, _validatorPrimitives.tObject)({
1096
+ selector: _validatorPrimitives.tString
1097
+ });
1098
+ _validatorPrimitives.scheme.PageRegisterLocatorHandlerResult = (0, _validatorPrimitives.tObject)({
1099
+ uid: _validatorPrimitives.tNumber
1100
+ });
1101
+ _validatorPrimitives.scheme.PageResolveLocatorHandlerNoReplyParams = (0, _validatorPrimitives.tObject)({
1102
+ uid: _validatorPrimitives.tNumber
1103
+ });
1104
+ _validatorPrimitives.scheme.PageResolveLocatorHandlerNoReplyResult = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
1088
1105
  _validatorPrimitives.scheme.PageReloadParams = (0, _validatorPrimitives.tObject)({
1089
1106
  timeout: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1090
1107
  waitUntil: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tType)('LifecycleEvent'))
@@ -1100,26 +1117,22 @@ _validatorPrimitives.scheme.PageExpectScreenshotParams = (0, _validatorPrimitive
1100
1117
  frame: (0, _validatorPrimitives.tChannel)(['Frame']),
1101
1118
  selector: _validatorPrimitives.tString
1102
1119
  })),
1103
- comparatorOptions: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({
1104
- comparator: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1105
- maxDiffPixels: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1106
- maxDiffPixelRatio: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1107
- threshold: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber)
1108
- })),
1109
- screenshotOptions: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({
1110
- fullPage: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
1111
- clip: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tType)('Rect')),
1112
- omitBackground: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
1113
- caret: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['hide', 'initial'])),
1114
- animations: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['disabled', 'allow'])),
1115
- scale: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['css', 'device'])),
1116
- mask: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({
1117
- frame: (0, _validatorPrimitives.tChannel)(['Frame']),
1118
- selector: _validatorPrimitives.tString
1119
- }))),
1120
- maskColor: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1121
- style: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString)
1122
- }))
1120
+ comparator: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1121
+ maxDiffPixels: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1122
+ maxDiffPixelRatio: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1123
+ threshold: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tNumber),
1124
+ fullPage: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
1125
+ clip: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tType)('Rect')),
1126
+ omitBackground: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
1127
+ caret: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['hide', 'initial'])),
1128
+ animations: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['disabled', 'allow'])),
1129
+ scale: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tEnum)(['css', 'device'])),
1130
+ mask: (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tObject)({
1131
+ frame: (0, _validatorPrimitives.tChannel)(['Frame']),
1132
+ selector: _validatorPrimitives.tString
1133
+ }))),
1134
+ maskColor: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1135
+ style: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString)
1123
1136
  });
1124
1137
  _validatorPrimitives.scheme.PageExpectScreenshotResult = (0, _validatorPrimitives.tObject)({
1125
1138
  diff: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBinary),
@@ -1247,7 +1260,9 @@ _validatorPrimitives.scheme.PagePdfParams = (0, _validatorPrimitives.tObject)({
1247
1260
  bottom: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1248
1261
  left: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString),
1249
1262
  right: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tString)
1250
- }))
1263
+ })),
1264
+ tagged: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean),
1265
+ outline: (0, _validatorPrimitives.tOptional)(_validatorPrimitives.tBoolean)
1251
1266
  });
1252
1267
  _validatorPrimitives.scheme.PagePdfResult = (0, _validatorPrimitives.tObject)({
1253
1268
  pdf: _validatorPrimitives.tBinary
@@ -2299,6 +2314,16 @@ _validatorPrimitives.scheme.ElectronApplicationInitializer = (0, _validatorPrimi
2299
2314
  context: (0, _validatorPrimitives.tChannel)(['BrowserContext'])
2300
2315
  });
2301
2316
  _validatorPrimitives.scheme.ElectronApplicationCloseEvent = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
2317
+ _validatorPrimitives.scheme.ElectronApplicationConsoleEvent = (0, _validatorPrimitives.tObject)({
2318
+ type: _validatorPrimitives.tString,
2319
+ text: _validatorPrimitives.tString,
2320
+ args: (0, _validatorPrimitives.tArray)((0, _validatorPrimitives.tChannel)(['ElementHandle', 'JSHandle'])),
2321
+ location: (0, _validatorPrimitives.tObject)({
2322
+ url: _validatorPrimitives.tString,
2323
+ lineNumber: _validatorPrimitives.tNumber,
2324
+ columnNumber: _validatorPrimitives.tNumber
2325
+ })
2326
+ });
2302
2327
  _validatorPrimitives.scheme.ElectronApplicationBrowserWindowParams = (0, _validatorPrimitives.tObject)({
2303
2328
  page: (0, _validatorPrimitives.tChannel)(['Page'])
2304
2329
  });
@@ -2321,6 +2346,11 @@ _validatorPrimitives.scheme.ElectronApplicationEvaluateExpressionHandleParams =
2321
2346
  _validatorPrimitives.scheme.ElectronApplicationEvaluateExpressionHandleResult = (0, _validatorPrimitives.tObject)({
2322
2347
  handle: (0, _validatorPrimitives.tChannel)(['ElementHandle', 'JSHandle'])
2323
2348
  });
2349
+ _validatorPrimitives.scheme.ElectronApplicationUpdateSubscriptionParams = (0, _validatorPrimitives.tObject)({
2350
+ event: (0, _validatorPrimitives.tEnum)(['console']),
2351
+ enabled: _validatorPrimitives.tBoolean
2352
+ });
2353
+ _validatorPrimitives.scheme.ElectronApplicationUpdateSubscriptionResult = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
2324
2354
  _validatorPrimitives.scheme.ElectronApplicationCloseParams = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
2325
2355
  _validatorPrimitives.scheme.ElectronApplicationCloseResult = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
2326
2356
  _validatorPrimitives.scheme.AndroidInitializer = (0, _validatorPrimitives.tOptional)((0, _validatorPrimitives.tObject)({}));
@@ -11,7 +11,7 @@ var _socksProxy = require("../common/socksProxy");
11
11
  var _utils = require("../utils");
12
12
  var _android = require("../server/android/android");
13
13
  var _debugControllerDispatcher = require("../server/dispatchers/debugControllerDispatcher");
14
- var _debugLogger = require("../common/debugLogger");
14
+ var _debugLogger = require("../utils/debugLogger");
15
15
  /**
16
16
  * Copyright (c) Microsoft Corporation.
17
17
  *
@@ -3,14 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.Semaphore = exports.PlaywrightServer = void 0;
7
- var _utilsBundle = require("../utilsBundle");
6
+ exports.PlaywrightServer = void 0;
8
7
  var _playwright = require("../server/playwright");
9
8
  var _playwrightConnection = require("./playwrightConnection");
10
- var _manualPromise = require("../utils/manualPromise");
11
- var _debugLogger = require("../common/debugLogger");
9
+ var _semaphore = require("../utils/semaphore");
10
+ var _debugLogger = require("../utils/debugLogger");
12
11
  var _utils = require("../utils");
13
- var _transport = require("../server/transport");
12
+ var _wsServer = require("../utils/wsServer");
14
13
  /**
15
14
  * Copyright (c) Microsoft Corporation.
16
15
  *
@@ -27,178 +26,85 @@ var _transport = require("../server/transport");
27
26
  * limitations under the License.
28
27
  */
29
28
 
30
- let lastConnectionId = 0;
31
- const kConnectionSymbol = Symbol('kConnection');
32
29
  class PlaywrightServer {
33
30
  constructor(options) {
34
31
  this._preLaunchedPlaywright = void 0;
35
- this._wsServer = void 0;
36
- this._server = void 0;
37
32
  this._options = void 0;
33
+ this._wsServer = void 0;
38
34
  this._options = options;
39
35
  if (options.preLaunchedBrowser) this._preLaunchedPlaywright = options.preLaunchedBrowser.attribution.playwright;
40
36
  if (options.preLaunchedAndroidDevice) this._preLaunchedPlaywright = options.preLaunchedAndroidDevice._android.attribution.playwright;
41
- }
42
- async listen(port = 0, hostname) {
43
- _debugLogger.debugLogger.log('server', `Server started at ${new Date()}`);
44
- const server = (0, _utils.createHttpServer)((request, response) => {
45
- if (request.method === 'GET' && request.url === '/json') {
46
- response.setHeader('Content-Type', 'application/json');
47
- response.end(JSON.stringify({
48
- wsEndpointPath: this._options.path
49
- }));
50
- return;
51
- }
52
- response.end('Running');
53
- });
54
- server.on('error', error => _debugLogger.debugLogger.log('server', String(error)));
55
- this._server = server;
56
- const wsEndpoint = await new Promise((resolve, reject) => {
57
- server.listen(port, hostname, () => {
58
- const address = server.address();
59
- if (!address) {
60
- reject(new Error('Could not bind server socket'));
61
- return;
62
- }
63
- const wsEndpoint = typeof address === 'string' ? `${address}${this._options.path}` : `ws://${hostname || 'localhost'}:${address.port}${this._options.path}`;
64
- resolve(wsEndpoint);
65
- }).on('error', reject);
66
- });
67
- _debugLogger.debugLogger.log('server', 'Listening at ' + wsEndpoint);
68
- this._wsServer = new _utilsBundle.wsServer({
69
- noServer: true,
70
- perMessageDeflate: _transport.perMessageDeflate
71
- });
72
- const browserSemaphore = new Semaphore(this._options.maxConnections);
73
- const controllerSemaphore = new Semaphore(1);
74
- const reuseBrowserSemaphore = new Semaphore(1);
75
- if (process.env.PWTEST_SERVER_WS_HEADERS) {
76
- this._wsServer.on('headers', (headers, request) => {
77
- headers.push(process.env.PWTEST_SERVER_WS_HEADERS);
78
- });
79
- }
80
- server.on('upgrade', (request, socket, head) => {
81
- var _this$_wsServer;
82
- const pathname = new URL('http://localhost' + request.url).pathname;
83
- if (pathname !== this._options.path) {
84
- socket.write(`HTTP/${request.httpVersion} 400 Bad Request\r\n\r\n`);
85
- socket.destroy();
86
- return;
87
- }
88
- const uaError = (0, _utils.userAgentVersionMatchesErrorMessage)(request.headers['user-agent'] || '');
89
- if (uaError) {
90
- socket.write(`HTTP/${request.httpVersion} 428 Precondition Required\r\n\r\n${uaError}`);
91
- socket.destroy();
92
- return;
93
- }
94
- (_this$_wsServer = this._wsServer) === null || _this$_wsServer === void 0 || _this$_wsServer.handleUpgrade(request, socket, head, ws => {
95
- var _this$_wsServer2;
96
- return (_this$_wsServer2 = this._wsServer) === null || _this$_wsServer2 === void 0 ? void 0 : _this$_wsServer2.emit('connection', ws, request);
97
- });
98
- });
99
- this._wsServer.on('connection', (ws, request) => {
100
- _debugLogger.debugLogger.log('server', 'Connected client ws.extension=' + ws.extensions);
101
- const url = new URL('http://localhost' + (request.url || ''));
102
- const browserHeader = request.headers['x-playwright-browser'];
103
- const browserName = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader) || null;
104
- const proxyHeader = request.headers['x-playwright-proxy'];
105
- const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
106
- const launchOptionsHeader = request.headers['x-playwright-launch-options'] || '';
107
- const launchOptionsHeaderValue = Array.isArray(launchOptionsHeader) ? launchOptionsHeader[0] : launchOptionsHeader;
108
- const launchOptionsParam = url.searchParams.get('launch-options');
109
- let launchOptions = {};
110
- try {
111
- launchOptions = JSON.parse(launchOptionsParam || launchOptionsHeaderValue);
112
- } catch (e) {}
113
- const id = String(++lastConnectionId);
114
- _debugLogger.debugLogger.log('server', `[${id}] serving connection: ${request.url}`);
37
+ const browserSemaphore = new _semaphore.Semaphore(this._options.maxConnections);
38
+ const controllerSemaphore = new _semaphore.Semaphore(1);
39
+ const reuseBrowserSemaphore = new _semaphore.Semaphore(1);
40
+ this._wsServer = new _wsServer.WSServer({
41
+ onUpgrade: (request, socket) => {
42
+ const uaError = (0, _utils.userAgentVersionMatchesErrorMessage)(request.headers['user-agent'] || '');
43
+ if (uaError) return {
44
+ error: `HTTP/${request.httpVersion} 428 Precondition Required\r\n\r\n${uaError}`
45
+ };
46
+ },
47
+ onHeaders: headers => {
48
+ if (process.env.PWTEST_SERVER_WS_HEADERS) headers.push(process.env.PWTEST_SERVER_WS_HEADERS);
49
+ },
50
+ onConnection: (request, url, ws, id) => {
51
+ const browserHeader = request.headers['x-playwright-browser'];
52
+ const browserName = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader) || null;
53
+ const proxyHeader = request.headers['x-playwright-proxy'];
54
+ const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
55
+ const launchOptionsHeader = request.headers['x-playwright-launch-options'] || '';
56
+ const launchOptionsHeaderValue = Array.isArray(launchOptionsHeader) ? launchOptionsHeader[0] : launchOptionsHeader;
57
+ const launchOptionsParam = url.searchParams.get('launch-options');
58
+ let launchOptions = {};
59
+ try {
60
+ launchOptions = JSON.parse(launchOptionsParam || launchOptionsHeaderValue);
61
+ } catch (e) {}
115
62
 
116
- // Instantiate playwright for the extension modes.
117
- const isExtension = this._options.mode === 'extension';
118
- if (isExtension) {
119
- if (!this._preLaunchedPlaywright) this._preLaunchedPlaywright = (0, _playwright.createPlaywright)({
120
- sdkLanguage: 'javascript',
121
- isServer: true
122
- });
123
- }
124
- let clientType = 'launch-browser';
125
- let semaphore = browserSemaphore;
126
- if (isExtension && url.searchParams.has('debug-controller')) {
127
- clientType = 'controller';
128
- semaphore = controllerSemaphore;
129
- } else if (isExtension) {
130
- clientType = 'reuse-browser';
131
- semaphore = reuseBrowserSemaphore;
132
- } else if (this._options.mode === 'launchServer') {
133
- clientType = 'pre-launched-browser-or-android';
134
- semaphore = browserSemaphore;
63
+ // Instantiate playwright for the extension modes.
64
+ const isExtension = this._options.mode === 'extension';
65
+ if (isExtension) {
66
+ if (!this._preLaunchedPlaywright) this._preLaunchedPlaywright = (0, _playwright.createPlaywright)({
67
+ sdkLanguage: 'javascript',
68
+ isServer: true
69
+ });
70
+ }
71
+ let clientType = 'launch-browser';
72
+ let semaphore = browserSemaphore;
73
+ if (isExtension && url.searchParams.has('debug-controller')) {
74
+ clientType = 'controller';
75
+ semaphore = controllerSemaphore;
76
+ } else if (isExtension) {
77
+ clientType = 'reuse-browser';
78
+ semaphore = reuseBrowserSemaphore;
79
+ } else if (this._options.mode === 'launchServer') {
80
+ clientType = 'pre-launched-browser-or-android';
81
+ semaphore = browserSemaphore;
82
+ }
83
+ return new _playwrightConnection.PlaywrightConnection(semaphore.acquire(), clientType, ws, {
84
+ socksProxyPattern: proxyValue,
85
+ browserName,
86
+ launchOptions
87
+ }, {
88
+ playwright: this._preLaunchedPlaywright,
89
+ browser: this._options.preLaunchedBrowser,
90
+ androidDevice: this._options.preLaunchedAndroidDevice,
91
+ socksProxy: this._options.preLaunchedSocksProxy
92
+ }, id, () => semaphore.release());
93
+ },
94
+ onClose: async () => {
95
+ _debugLogger.debugLogger.log('server', 'closing browsers');
96
+ if (this._preLaunchedPlaywright) await Promise.all(this._preLaunchedPlaywright.allBrowsers().map(browser => browser.close({
97
+ reason: 'Playwright Server stopped'
98
+ })));
99
+ _debugLogger.debugLogger.log('server', 'closed browsers');
135
100
  }
136
- const connection = new _playwrightConnection.PlaywrightConnection(semaphore.acquire(), clientType, ws, {
137
- socksProxyPattern: proxyValue,
138
- browserName,
139
- launchOptions
140
- }, {
141
- playwright: this._preLaunchedPlaywright,
142
- browser: this._options.preLaunchedBrowser,
143
- androidDevice: this._options.preLaunchedAndroidDevice,
144
- socksProxy: this._options.preLaunchedSocksProxy
145
- }, id, () => semaphore.release());
146
- ws[kConnectionSymbol] = connection;
147
101
  });
148
- return wsEndpoint;
149
102
  }
150
- async close() {
151
- const server = this._wsServer;
152
- if (!server) return;
153
- _debugLogger.debugLogger.log('server', 'closing websocket server');
154
- const waitForClose = new Promise(f => server.close(f));
155
- // First disconnect all remaining clients.
156
- await Promise.all(Array.from(server.clients).map(async ws => {
157
- const connection = ws[kConnectionSymbol];
158
- if (connection) await connection.close();
159
- try {
160
- ws.terminate();
161
- } catch (e) {}
162
- }));
163
- await waitForClose;
164
- _debugLogger.debugLogger.log('server', 'closing http server');
165
- if (this._server) await new Promise(f => this._server.close(f));
166
- this._wsServer = undefined;
167
- this._server = undefined;
168
- _debugLogger.debugLogger.log('server', 'closed server');
169
- _debugLogger.debugLogger.log('server', 'closing browsers');
170
- if (this._preLaunchedPlaywright) await Promise.all(this._preLaunchedPlaywright.allBrowsers().map(browser => browser.close({
171
- reason: 'Playwright Server stopped'
172
- })));
173
- _debugLogger.debugLogger.log('server', 'closed browsers');
174
- }
175
- }
176
- exports.PlaywrightServer = PlaywrightServer;
177
- class Semaphore {
178
- constructor(max) {
179
- this._max = void 0;
180
- this._acquired = 0;
181
- this._queue = [];
182
- this._max = max;
183
- }
184
- setMax(max) {
185
- this._max = max;
186
- }
187
- acquire() {
188
- const lock = new _manualPromise.ManualPromise();
189
- this._queue.push(lock);
190
- this._flush();
191
- return lock;
192
- }
193
- release() {
194
- --this._acquired;
195
- this._flush();
103
+ async listen(port = 0, hostname) {
104
+ return this._wsServer.listen(port, hostname, this._options.path);
196
105
  }
197
- _flush() {
198
- while (this._acquired < this._max && this._queue.length) {
199
- ++this._acquired;
200
- this._queue.shift().resolve();
201
- }
106
+ async close() {
107
+ await this._wsServer.close();
202
108
  }
203
109
  }
204
- exports.Semaphore = Semaphore;
110
+ exports.PlaywrightServer = PlaywrightServer;
@@ -16,7 +16,7 @@ var _progress = require("../progress");
16
16
  var _crBrowser = require("../chromium/crBrowser");
17
17
  var _helper = require("../helper");
18
18
  var _transport = require("../../protocol/transport");
19
- var _debugLogger = require("../../common/debugLogger");
19
+ var _debugLogger = require("../../utils/debugLogger");
20
20
  var _processLauncher = require("../../utils/processLauncher");
21
21
  var _timeoutSettings = require("../../common/timeoutSettings");
22
22
  var _instrumentation = require("../instrumentation");
@@ -17,7 +17,7 @@ var _timeoutSettings = require("../common/timeoutSettings");
17
17
  var _utils = require("../utils");
18
18
  var _fileUtils = require("../utils/fileUtils");
19
19
  var _helper = require("./helper");
20
- var _debugLogger = require("../common/debugLogger");
20
+ var _debugLogger = require("../utils/debugLogger");
21
21
  var _instrumentation = require("./instrumentation");
22
22
  var _manualPromise = require("../utils/manualPromise");
23
23
  var _protocolError = require("./protocolError");
@@ -164,7 +164,7 @@ class BrowserType extends _instrumentation.SdkObject {
164
164
  const registryExecutable = _registry.registry.findExecutable(options.channel || this._name);
165
165
  if (!registryExecutable || registryExecutable.browserName !== this._name) throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
166
166
  executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);
167
- await registryExecutable.validateHostRequirements(this.attribution.playwright.options.sdkLanguage);
167
+ await _registry.registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
168
168
  }
169
169
  const waitForWSEndpoint = options.useWebSocket || (_options$args = options.args) !== null && _options$args !== void 0 && _options$args.some(a => a.startsWith('--remote-debugging-port')) ? new _manualPromise.ManualPromise() : undefined;
170
170
  const waitForJuggler = this._name === 'firefox' ? new _manualPromise.ManualPromise() : undefined;
@@ -19,7 +19,7 @@ var _userAgent = require("../../utils/userAgent");
19
19
  var _ascii = require("../../utils/ascii");
20
20
  var _utils = require("../../utils");
21
21
  var _fileUtils = require("../../utils/fileUtils");
22
- var _debugLogger = require("../../common/debugLogger");
22
+ var _debugLogger = require("../../utils/debugLogger");
23
23
  var _progress = require("../progress");
24
24
  var _timeoutSettings = require("../../common/timeoutSettings");
25
25
  var _helper = require("../helper");
@@ -68,7 +68,7 @@ class Chromium extends _browserType.BrowserType {
68
68
  'User-Agent': (0, _userAgent.getUserAgent)()
69
69
  };else if (headersMap && !Object.keys(headersMap).some(key => key.toLowerCase() === 'user-agent')) headersMap['User-Agent'] = (0, _userAgent.getUserAgent)();
70
70
  const artifactsDir = await _fs.default.promises.mkdtemp(ARTIFACTS_FOLDER);
71
- const wsEndpoint = await urlToWSEndpoint(progress, endpointURL);
71
+ const wsEndpoint = await urlToWSEndpoint(progress, endpointURL, headersMap);
72
72
  progress.throwIfAborted();
73
73
  const chromeTransport = await _transport.WebSocketTransport.connect(progress, wsEndpoint, headersMap);
74
74
  const cleanedUp = new _manualPromise.ManualPromise();
@@ -305,12 +305,13 @@ class Chromium extends _browserType.BrowserType {
305
305
  }
306
306
  }
307
307
  exports.Chromium = Chromium;
308
- async function urlToWSEndpoint(progress, endpointURL) {
308
+ async function urlToWSEndpoint(progress, endpointURL, headers) {
309
309
  if (endpointURL.startsWith('ws')) return endpointURL;
310
310
  progress.log(`<ws preparing> retrieving websocket url from ${endpointURL}`);
311
311
  const httpURL = endpointURL.endsWith('/') ? `${endpointURL}json/version/` : `${endpointURL}/json/version/`;
312
312
  const json = await (0, _network.fetchData)({
313
- url: httpURL
313
+ url: httpURL,
314
+ headers
314
315
  }, async (_, resp) => new Error(`Unexpected status ${resp.statusCode} when connecting to ${httpURL}.\n` + `This does not look like a DevTools server, try connecting via ws://.`));
315
316
  return JSON.parse(json).webSocketDebuggerUrl;
316
317
  }
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.kBrowserCloseMessageId = exports.ConnectionEvents = exports.CRSession = exports.CRConnection = exports.CDPSession = void 0;
7
7
  var _utils = require("../../utils");
8
8
  var _events = require("events");
9
- var _debugLogger = require("../../common/debugLogger");
9
+ var _debugLogger = require("../../utils/debugLogger");
10
10
  var _helper = require("../helper");
11
11
  var _protocolError = require("../protocolError");
12
12
  /**
@@ -268,10 +268,8 @@ class CRNetworkManager {
268
268
  // We do not support intercepting redirects.
269
269
  if (redirectedFrom || !this._userRequestInterceptionEnabled && this._protocolRequestInterceptionEnabled) {
270
270
  var _redirectedFrom;
271
- let headers = undefined;
272
- const previousHeaderOverrides = (_redirectedFrom = redirectedFrom) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._originalRequestRoute) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._alreadyContinuedParams) === null || _redirectedFrom === void 0 ? void 0 : _redirectedFrom.headers;
273
271
  // Chromium does not preserve header overrides between redirects, so we have to do it ourselves.
274
- if (previousHeaderOverrides) headers = network.mergeHeaders([(0, _utils.headersObjectToArray)(requestPausedEvent.request.headers, '\n'), previousHeaderOverrides]);
272
+ const headers = (_redirectedFrom = redirectedFrom) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._originalRequestRoute) === null || _redirectedFrom === void 0 || (_redirectedFrom = _redirectedFrom._alreadyContinuedParams) === null || _redirectedFrom === void 0 ? void 0 : _redirectedFrom.headers;
275
273
  this._session._sendMayFail('Fetch.continueRequest', {
276
274
  requestId: requestPausedEvent.requestId,
277
275
  headers
@@ -970,7 +970,8 @@ class FrameSession {
970
970
  const options = this._crPage._browserContext._options;
971
971
  await this._client.send('Emulation.setUserAgentOverride', {
972
972
  userAgent: options.userAgent || '',
973
- acceptLanguage: options.locale
973
+ acceptLanguage: options.locale,
974
+ userAgentMetadata: calculateUserAgentMetadata(options)
974
975
  });
975
976
  }
976
977
  async _setDefaultFontFamilies(session) {
@@ -1127,4 +1128,46 @@ async function emulateTimezone(session, timezoneId) {
1127
1128
  throw exception;
1128
1129
  }
1129
1130
  }
1130
- const contextDelegateSymbol = Symbol('delegate');
1131
+ const contextDelegateSymbol = Symbol('delegate');
1132
+
1133
+ // Chromium reference: https://source.chromium.org/chromium/chromium/src/+/main:components/embedder_support/user_agent_utils.cc;l=434;drc=70a6711e08e9f9e0d8e4c48e9ba5cab62eb010c2
1134
+ function calculateUserAgentMetadata(options) {
1135
+ const ua = options.userAgent;
1136
+ if (!ua) return undefined;
1137
+ const metadata = {
1138
+ mobile: !!options.isMobile,
1139
+ model: '',
1140
+ architecture: 'x64',
1141
+ platform: 'Windows',
1142
+ platformVersion: ''
1143
+ };
1144
+ const androidMatch = ua.match(/Android (\d+(\.\d+)?(\.\d+)?)/);
1145
+ const iPhoneMatch = ua.match(/iPhone OS (\d+(_\d+)?)/);
1146
+ const iPadMatch = ua.match(/iPad; CPU OS (\d+(_\d+)?)/);
1147
+ const macOSMatch = ua.match(/Mac OS X (\d+(_\d+)?(_\d+)?)/);
1148
+ const windowsMatch = ua.match(/Windows\D+(\d+(\.\d+)?(\.\d+)?)/);
1149
+ if (androidMatch) {
1150
+ metadata.platform = 'Android';
1151
+ metadata.platformVersion = androidMatch[1];
1152
+ metadata.architecture = 'arm';
1153
+ } else if (iPhoneMatch) {
1154
+ metadata.platform = 'iOS';
1155
+ metadata.platformVersion = iPhoneMatch[1];
1156
+ metadata.architecture = 'arm';
1157
+ } else if (iPadMatch) {
1158
+ metadata.platform = 'iOS';
1159
+ metadata.platformVersion = iPadMatch[1];
1160
+ metadata.architecture = 'arm';
1161
+ } else if (macOSMatch) {
1162
+ metadata.platform = 'macOS';
1163
+ metadata.platformVersion = macOSMatch[1];
1164
+ if (!ua.includes('Intel')) metadata.architecture = 'arm';
1165
+ } else if (windowsMatch) {
1166
+ metadata.platform = 'Windows';
1167
+ metadata.platformVersion = windowsMatch[1];
1168
+ } else if (ua.toLowerCase().includes('linux')) {
1169
+ metadata.platform = 'Linux';
1170
+ }
1171
+ if (ua.includes('ARM')) metadata.architecture = 'arm';
1172
+ return metadata;
1173
+ }
@@ -107,7 +107,9 @@ class CRPDF {
107
107
  landscape = false,
108
108
  pageRanges = '',
109
109
  preferCSSPageSize = false,
110
- margin = {}
110
+ margin = {},
111
+ tagged = false,
112
+ outline = false
111
113
  } = options;
112
114
  let paperWidth = 8.5;
113
115
  let paperHeight = 11;
@@ -124,6 +126,8 @@ class CRPDF {
124
126
  const marginLeft = convertPrintParameterToInches(margin.left) || 0;
125
127
  const marginBottom = convertPrintParameterToInches(margin.bottom) || 0;
126
128
  const marginRight = convertPrintParameterToInches(margin.right) || 0;
129
+ const generateDocumentOutline = outline;
130
+ const generateTaggedPDF = tagged;
127
131
  const result = await this._client.send('Page.printToPDF', {
128
132
  transferMode: 'ReturnAsStream',
129
133
  landscape,
@@ -139,7 +143,9 @@ class CRPDF {
139
143
  marginLeft,
140
144
  marginRight,
141
145
  pageRanges,
142
- preferCSSPageSize
146
+ preferCSSPageSize,
147
+ generateTaggedPDF,
148
+ generateDocumentOutline
143
149
  });
144
150
  return await (0, _crProtocolHelper.readProtocolStream)(this._client, result.stream);
145
151
  }
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ConsoleMessage = void 0;
7
- var _instrumentation = require("./instrumentation");
8
7
  /**
9
8
  * Copyright (c) Microsoft Corporation.
10
9
  *
@@ -21,9 +20,8 @@ var _instrumentation = require("./instrumentation");
21
20
  * limitations under the License.
22
21
  */
23
22
 
24
- class ConsoleMessage extends _instrumentation.SdkObject {
23
+ class ConsoleMessage {
25
24
  constructor(page, type, text, args, location) {
26
- super(page, 'console-message');
27
25
  this._type = void 0;
28
26
  this._text = void 0;
29
27
  this._args = void 0;