chrome-devtools-frontend 1.0.1690116 → 1.0.1695017

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 (421) hide show
  1. package/.agents/skills/devtools-model-management/SKILL.md +3 -3
  2. package/.agents/skills/foundation-test-migration/SKILL.md +2 -2
  3. package/.agents/skills/merging-devtools-module/SKILL.md +5 -5
  4. package/AUTHORS +3 -0
  5. package/config/typescript/tsconfig.base.json +1 -0
  6. package/docs/get_the_code.md +4 -9
  7. package/front_end/Images/src/comment-mode-cursor.svg +23 -0
  8. package/front_end/Tests.js +1 -1
  9. package/front_end/application_tokens.css +5 -0
  10. package/front_end/core/common/ColorConverter.ts +3 -3
  11. package/front_end/core/host/UserMetrics.ts +27 -0
  12. package/front_end/core/protocol_client/DevToolsCDPConnection.ts +0 -46
  13. package/front_end/core/protocol_client/InspectorBackend.ts +6 -6
  14. package/front_end/core/root/Runtime.ts +1 -0
  15. package/front_end/core/sdk/CSSLocation.ts +32 -0
  16. package/front_end/core/sdk/CSSModel.ts +2 -22
  17. package/front_end/core/sdk/CSSQuery.ts +2 -1
  18. package/front_end/core/sdk/CSSRule.ts +29 -0
  19. package/front_end/core/sdk/DebuggerModel.ts +5 -1
  20. package/front_end/core/sdk/NetworkManager.ts +2 -0
  21. package/front_end/core/sdk/NetworkRequest.ts +63 -4
  22. package/front_end/core/sdk/NetworkRequestAccess.ts +191 -0
  23. package/front_end/core/sdk/ResourceTreeModel.ts +72 -23
  24. package/front_end/core/sdk/SecurityOrigin.ts +97 -12
  25. package/front_end/core/sdk/Target.ts +18 -0
  26. package/front_end/core/sdk/sdk.ts +4 -0
  27. package/front_end/entrypoints/main/MainImpl.ts +8 -1
  28. package/front_end/foundation/Universe.ts +14 -11
  29. package/front_end/generated/Deprecation.ts +8 -0
  30. package/front_end/generated/InspectorBackendCommands.ts +9 -8
  31. package/front_end/generated/SupportedCSSProperties.ts +14 -4
  32. package/front_end/generated/protocol.ts +24 -0
  33. package/front_end/models/ai_assistance/AiAgent2.ts +46 -10
  34. package/front_end/models/ai_assistance/AiConversation.ts +35 -24
  35. package/front_end/models/ai_assistance/README.md +5 -3
  36. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +1 -0
  37. package/front_end/models/ai_assistance/agents/AiAgent.ts +28 -34
  38. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +13 -17
  39. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +5 -3
  40. package/front_end/models/ai_assistance/agents/StorageAgent.ts +16 -10
  41. package/front_end/models/ai_assistance/agents/StylingAgent.ts +3 -4
  42. package/front_end/models/ai_assistance/ai_assistance.ts +0 -2
  43. package/front_end/models/ai_assistance/contexts/AccessibilityContext.ts +11 -2
  44. package/front_end/models/ai_assistance/contexts/DOMNodeContext.ts +17 -5
  45. package/front_end/models/ai_assistance/contexts/FileContext.ts +13 -6
  46. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +52 -25
  47. package/front_end/models/ai_assistance/contexts/RequestContext.ts +18 -34
  48. package/front_end/models/ai_assistance/contexts/StorageContext.ts +14 -3
  49. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +2 -5
  50. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +135 -58
  51. package/front_end/models/ai_assistance/tools/CookieUtils.ts +25 -35
  52. package/front_end/models/ai_assistance/tools/DOMStorageUtils.ts +6 -3
  53. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +9 -2
  54. package/front_end/models/ai_assistance/tools/GetCookieValues.ts +1 -1
  55. package/front_end/models/ai_assistance/tools/GetElementAccessibilityDetails.ts +3 -2
  56. package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +3 -5
  57. package/front_end/models/ai_assistance/tools/GetInsightDetails.ts +1 -1
  58. package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +8 -11
  59. package/front_end/models/ai_assistance/tools/GetResourceContent.ts +2 -4
  60. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +6 -13
  61. package/front_end/models/ai_assistance/tools/GetStorageBreakdown.ts +1 -1
  62. package/front_end/models/ai_assistance/tools/GetStorageValues.ts +9 -9
  63. package/front_end/models/ai_assistance/tools/GetStyles.ts +3 -2
  64. package/front_end/models/ai_assistance/tools/ListCookies.ts +1 -1
  65. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +6 -14
  66. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +10 -15
  67. package/front_end/models/ai_assistance/tools/ListSources.ts +5 -7
  68. package/front_end/models/ai_assistance/tools/ListStorageKeys.ts +9 -9
  69. package/front_end/models/ai_assistance/tools/README.md +4 -2
  70. package/front_end/models/ai_assistance/tools/ResolveDevtoolsNodePath.ts +3 -2
  71. package/front_end/models/ai_assistance/tools/Tool.ts +27 -3
  72. package/front_end/models/comment_manager/CD4ABridge.ts +128 -0
  73. package/front_end/models/comment_manager/CommentManager.ts +50 -8
  74. package/front_end/models/comment_manager/comment_manager.ts +2 -0
  75. package/front_end/models/emulation/DeviceModeModel.ts +37 -47
  76. package/front_end/models/javascript_metadata/NativeFunctions.ts +9 -1
  77. package/front_end/models/live-metrics/web-vitals-injected/README.md +1 -1
  78. package/front_end/models/source_map_scopes/NamesResolver.ts +9 -7
  79. package/front_end/models/trace/ModelImpl.ts +2 -0
  80. package/front_end/models/trace/Processor.ts +6 -4
  81. package/front_end/models/trace/handlers/LayerTreeHandler.ts +3 -3
  82. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +1 -1
  83. package/front_end/models/trace/helpers/SyntheticEvents.ts +23 -1
  84. package/front_end/models/trace/types/Configuration.ts +7 -0
  85. package/front_end/models/trace/types/TraceEvents.ts +20 -4
  86. package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -0
  87. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingListView.ts +177 -0
  88. package/front_end/panels/accessibility/accessibility.ts +2 -0
  89. package/front_end/panels/accessibility/accessibilityAnnouncementRecordingListView.css +33 -0
  90. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +25 -15
  91. package/front_end/panels/ai_assistance/components/ChatMessage.ts +6 -35
  92. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +4 -3
  93. package/front_end/panels/ai_assistance/components/chatMessage.css +3 -1
  94. package/front_end/panels/animation/AnimationTimeline.ts +1 -0
  95. package/front_end/panels/application/CrashReportContextView.ts +0 -1
  96. package/front_end/panels/application/FrameDetailsView.ts +5 -4
  97. package/front_end/panels/application/IndexedDBViews.ts +4 -4
  98. package/front_end/panels/application/components/BackForwardCacheView.ts +1 -1
  99. package/front_end/panels/application/components/EndpointsGrid.ts +2 -1
  100. package/front_end/panels/application/components/PermissionsPolicySection.ts +1 -1
  101. package/front_end/panels/application/components/ServiceWorkerRouterView.ts +1 -1
  102. package/front_end/panels/application/components/TrustTokensView.ts +1 -1
  103. package/front_end/panels/application/indexedDBViews.css +0 -14
  104. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +2 -1
  105. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -1
  106. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +1 -1
  107. package/front_end/panels/common/CPUThrottlingOption.ts +12 -6
  108. package/front_end/panels/common/DOMLinkifier.ts +1 -1
  109. package/front_end/panels/common/ExtensionView.ts +2 -1
  110. package/front_end/panels/console/ConsoleContextSelector.ts +12 -5
  111. package/front_end/panels/console/ConsolePinPane.ts +4 -2
  112. package/front_end/panels/console/ConsoleSidebar.ts +6 -2
  113. package/front_end/panels/console/ConsoleViewMessage.ts +12 -8
  114. package/front_end/panels/console/PromptBuilder.ts +1 -1
  115. package/front_end/panels/coverage/CoverageListView.ts +1 -1
  116. package/front_end/panels/coverage/CoverageModel.ts +6 -4
  117. package/front_end/panels/coverage/coverageView.css +8 -8
  118. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +13 -14
  119. package/front_end/panels/css_overview/CSSOverviewPanel.ts +3 -3
  120. package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +2 -2
  121. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
  122. package/front_end/panels/css_overview/CSSOverviewStartView.ts +3 -3
  123. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  124. package/front_end/panels/developer_resources/developerResourcesView.css +3 -3
  125. package/front_end/panels/elements/ComputedStyleWidget.ts +1 -1
  126. package/front_end/panels/elements/ElementsTreeElement.ts +43 -15
  127. package/front_end/panels/elements/ElementsTreeOutline.ts +185 -109
  128. package/front_end/panels/elements/MetricsSidebarPane.ts +1 -1
  129. package/front_end/panels/elements/PropertyNameCategories.ts +1 -1
  130. package/front_end/panels/elements/ShortcutTreeElement.ts +6 -1
  131. package/front_end/panels/elements/StandaloneStylesContainer.ts +1 -1
  132. package/front_end/panels/elements/StylePropertiesSection.ts +2 -35
  133. package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
  134. package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +5 -4
  135. package/front_end/panels/elements/components/StylePropertyEditor.ts +161 -148
  136. package/front_end/panels/elements/components/computedStyleProperty.css +5 -5
  137. package/front_end/panels/elements/components/computedStyleTrace.css +5 -5
  138. package/front_end/panels/elements/components/cssHintDetailsView.css +1 -1
  139. package/front_end/panels/elements/components/cssPropertyDocsView.css +3 -3
  140. package/front_end/panels/elements/components/cssVariableValueView.css +4 -4
  141. package/front_end/panels/elements/components/elementsBreadcrumbs.css +3 -3
  142. package/front_end/panels/elements/components/elementsTreeExpandButton.css +5 -5
  143. package/front_end/panels/elements/components/queryContainer.css +2 -2
  144. package/front_end/panels/elements/elementsTreeOutline.css +20 -4
  145. package/front_end/panels/emulation/MediaQueryInspector.ts +2 -1
  146. package/front_end/panels/event_listeners/eventListenersView.css +1 -1
  147. package/front_end/panels/issues/AffectedElementsView.ts +3 -0
  148. package/front_end/panels/issues/AffectedLazyLoadImagesView.ts +1 -1
  149. package/front_end/panels/issues/issues.ts +2 -0
  150. package/front_end/panels/layer_viewer/LayerDetailsView.ts +12 -10
  151. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +1 -0
  152. package/front_end/panels/layer_viewer/Layers3DView.ts +13 -11
  153. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +1 -1
  154. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspectorUtils.ts +2 -2
  155. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
  156. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  157. package/front_end/panels/linear_memory_inspector/components/linearMemoryHighlightChipList.css +11 -11
  158. package/front_end/panels/linear_memory_inspector/components/linearMemoryInspector.css +2 -2
  159. package/front_end/panels/linear_memory_inspector/components/linearMemoryNavigator.css +1 -1
  160. package/front_end/panels/linear_memory_inspector/components/linearMemoryValueInterpreter.css +5 -5
  161. package/front_end/panels/linear_memory_inspector/components/linearMemoryViewer.css +6 -6
  162. package/front_end/panels/linear_memory_inspector/components/valueInterpreterDisplay.css +6 -6
  163. package/front_end/panels/linear_memory_inspector/components/valueInterpreterSettings.css +2 -2
  164. package/front_end/panels/media/PlayerPropertiesView.ts +1 -1
  165. package/front_end/panels/media/TickingFlameChart.ts +3 -2
  166. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +2 -1
  167. package/front_end/panels/mobile_throttling/ThrottlingManager.ts +1 -1
  168. package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +2 -1
  169. package/front_end/panels/network/NetworkDataGridNode.ts +11 -9
  170. package/front_end/panels/network/NetworkLogView.ts +4 -1
  171. package/front_end/panels/network/NetworkLogViewColumns.ts +5 -2
  172. package/front_end/panels/network/RequestConditionsDrawer.ts +2 -2
  173. package/front_end/panels/network/RequestHeadersView.ts +47 -11
  174. package/front_end/panels/network/RequestPayloadView.ts +1 -1
  175. package/front_end/panels/network/RequestResponseView.ts +1 -1
  176. package/front_end/panels/network/RequestTimingView.ts +1 -1
  177. package/front_end/panels/network/ShowMoreDetailsWidget.ts +1 -1
  178. package/front_end/panels/network/components/RequestHeadersView.css +12 -0
  179. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  180. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +3 -3
  181. package/front_end/panels/profiler/HeapProfileView.ts +1 -1
  182. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +1 -1
  183. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  184. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +3 -3
  185. package/front_end/panels/recorder/RecordingListView.ts +0 -6
  186. package/front_end/panels/recorder/RecordingView.ts +0 -6
  187. package/front_end/panels/recorder/controlButton.css +10 -10
  188. package/front_end/panels/recorder/startView.css +1 -1
  189. package/front_end/panels/screencast/ScreencastView.ts +4 -2
  190. package/front_end/panels/search/SearchView.ts +1 -1
  191. package/front_end/panels/security/SecurityPanel.ts +46 -35
  192. package/front_end/panels/sources/BreakpointEditDialog.ts +1 -1
  193. package/front_end/panels/sources/CallStackSidebarPane.ts +1 -1
  194. package/front_end/panels/sources/DebuggerPausedMessage.ts +8 -6
  195. package/front_end/panels/sources/ProfilePlugin.ts +2 -1
  196. package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
  197. package/front_end/panels/timeline/IsolateSelector.ts +1 -1
  198. package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +1 -1
  199. package/front_end/panels/timeline/NetworkTrackAppender.ts +1 -1
  200. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +1 -1
  201. package/front_end/panels/timeline/TimelineFlameChartView.ts +0 -32
  202. package/front_end/panels/timeline/TimelineHistoryManager.ts +1 -1
  203. package/front_end/panels/timeline/TimelinePaintProfilerView.ts +7 -3
  204. package/front_end/panels/timeline/TimelinePanel.ts +3 -20
  205. package/front_end/panels/timeline/TimelineTreeView.ts +1 -1
  206. package/front_end/panels/timeline/TimelineUIUtils.ts +4 -4
  207. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +4 -3
  208. package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
  209. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +25 -24
  210. package/front_end/panels/timeline/components/RelatedInsightChips.ts +4 -3
  211. package/front_end/panels/timeline/components/Sidebar.ts +1 -1
  212. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +4 -3
  213. package/front_end/panels/timeline/components/cwvMetrics.css +2 -2
  214. package/front_end/panels/timeline/components/insights/checklist.css +1 -1
  215. package/front_end/panels/timeline/components/insights/table.css +3 -3
  216. package/front_end/panels/timeline/overlays/components/entriesLinkOverlay.css +4 -4
  217. package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +4 -4
  218. package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -2
  219. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +4 -4
  220. package/front_end/panels/timeline/timelinePanel.css +0 -74
  221. package/front_end/panels/timeline/utils/Helpers.ts +1 -1
  222. package/front_end/panels/timeline/utils/ImageCache.ts +5 -3
  223. package/front_end/panels/web_audio/WebAudioView.ts +3 -3
  224. package/front_end/panels/web_audio/webAudio.css +5 -5
  225. package/front_end/panels/webauthn/WebauthnPane.ts +5 -11
  226. package/front_end/third_party/acorn/acorn.ts +3 -3
  227. package/front_end/third_party/chromium/README.chromium +1 -1
  228. package/front_end/third_party/chromium/ahem/ahem.d.ts +1 -0
  229. package/front_end/third_party/csp_evaluator/package/csp.ts +4 -4
  230. package/front_end/third_party/csp_evaluator/package/parser.ts +3 -1
  231. package/front_end/third_party/csp_evaluator/package/tsconfig.json +1 -0
  232. package/front_end/third_party/csp_evaluator/package/utils.ts +1 -1
  233. package/front_end/third_party/diff/DiffWrapper.ts +1 -8
  234. package/front_end/third_party/diff/diff_match_patch.d.ts +10 -0
  235. package/front_end/third_party/json5/json5.ts +2 -2
  236. package/front_end/third_party/puppeteer/README.chromium +2 -2
  237. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +183 -4
  238. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +708 -122
  239. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +85 -3
  240. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  241. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +84 -11
  242. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  243. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/ScreenRecording.d.ts +75 -0
  244. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/ScreenRecording.d.ts.map +1 -0
  245. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/ScreenRecording.js +102 -0
  246. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/ScreenRecording.js.map +1 -0
  247. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/api.d.ts +1 -0
  248. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/api.d.ts.map +1 -1
  249. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/api.js +1 -0
  250. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/api.js.map +1 -1
  251. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +6 -1
  252. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
  253. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +7 -0
  254. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
  255. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ScreenRecording.d.ts +31 -0
  256. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ScreenRecording.d.ts.map +1 -0
  257. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ScreenRecording.js +138 -0
  258. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/ScreenRecording.js.map +1 -0
  259. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/bidi.d.ts +1 -0
  260. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/bidi.d.ts.map +1 -1
  261. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/bidi.js +1 -0
  262. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/bidi.js.map +1 -1
  263. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.d.ts +6 -0
  264. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  265. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.js +23 -0
  266. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  267. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +6 -1
  268. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
  269. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +7 -0
  270. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
  271. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts +31 -0
  272. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts.map +1 -0
  273. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js +131 -0
  274. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js.map +1 -0
  275. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/cdp.d.ts +1 -0
  276. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/cdp.d.ts.map +1 -1
  277. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/cdp.js +1 -0
  278. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/cdp.js.map +1 -1
  279. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +7 -4
  280. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
  281. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts +4 -1
  282. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -1
  283. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +5 -1
  284. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
  285. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +42 -0
  286. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  287. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Device.d.ts +2 -2
  288. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Device.d.ts.map +1 -1
  289. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Device.js +265 -1
  290. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Device.js.map +1 -1
  291. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts +4 -0
  292. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  293. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +24 -3
  294. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
  295. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts +23 -2
  296. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  297. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +49 -3
  298. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  299. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  300. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  301. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  302. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts.map +1 -1
  303. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  304. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js.map +1 -1
  305. package/front_end/third_party/puppeteer/package/lib/types.d.ts +183 -4
  306. package/front_end/third_party/puppeteer/package/package.json +4 -4
  307. package/front_end/third_party/puppeteer/package/src/api/Page.ts +143 -11
  308. package/front_end/third_party/puppeteer/package/src/api/ScreenRecording.ts +145 -0
  309. package/front_end/third_party/puppeteer/package/src/api/api.ts +1 -0
  310. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +11 -0
  311. package/front_end/third_party/puppeteer/package/src/bidi/ScreenRecording.ts +106 -0
  312. package/front_end/third_party/puppeteer/package/src/bidi/bidi.ts +1 -0
  313. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +41 -0
  314. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +11 -0
  315. package/front_end/third_party/puppeteer/package/src/cdp/ScreenRecording.ts +101 -0
  316. package/front_end/third_party/puppeteer/package/src/cdp/cdp.ts +1 -0
  317. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +17 -9
  318. package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +4 -0
  319. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +46 -0
  320. package/front_end/third_party/puppeteer/package/src/common/Device.ts +287 -1
  321. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +30 -1
  322. package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +73 -2
  323. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  324. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  325. package/front_end/third_party/puppeteer/puppeteer-tsconfig.json +3 -0
  326. package/front_end/tsconfig.json +1 -2
  327. package/front_end/ui/comments/CommentAnchorResolver.ts +8 -3
  328. package/front_end/ui/comments/CommentOverlayManager.ts +53 -12
  329. package/front_end/ui/comments/CommentsOverlayWidget.ts +3 -3
  330. package/front_end/ui/comments/CommentsStatusBarPill.ts +96 -0
  331. package/front_end/ui/comments/comments-meta.ts +21 -0
  332. package/front_end/ui/comments/comments.ts +2 -0
  333. package/front_end/ui/comments/commentsOverlay.css +22 -3
  334. package/front_end/ui/components/buttons/floatingButton.css +25 -0
  335. package/front_end/ui/components/markdown_view/MarkdownView.ts +31 -1
  336. package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +1 -1
  337. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +45 -25
  338. package/front_end/ui/kit/icons/Icon.ts +0 -1
  339. package/front_end/ui/kit/link/Link.ts +8 -1
  340. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  341. package/front_end/ui/legacy/DropTarget.ts +6 -1
  342. package/front_end/ui/legacy/EmptyWidget.ts +1 -1
  343. package/front_end/ui/legacy/GlassPane.ts +1 -1
  344. package/front_end/ui/legacy/InspectorView.ts +17 -1
  345. package/front_end/ui/legacy/ShortcutRegistry.ts +2 -2
  346. package/front_end/ui/legacy/SplitWidget.ts +18 -3
  347. package/front_end/ui/legacy/StackedPane.ts +1 -1
  348. package/front_end/ui/legacy/StatusBar.ts +78 -0
  349. package/front_end/ui/legacy/TargetCrashedScreen.ts +1 -1
  350. package/front_end/ui/legacy/TextPrompt.ts +2 -1
  351. package/front_end/ui/legacy/Toolbar.ts +5 -1
  352. package/front_end/ui/legacy/Treeoutline.ts +91 -48
  353. package/front_end/ui/legacy/UIUtils.ts +8 -4
  354. package/front_end/ui/legacy/ViewManager.ts +1 -1
  355. package/front_end/ui/legacy/ViewRegistration.ts +1 -0
  356. package/front_end/ui/legacy/Widget.ts +1 -1
  357. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +7 -1
  358. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
  359. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +3 -2
  360. package/front_end/ui/legacy/components/data_grid/dataGrid.css +23 -23
  361. package/front_end/ui/legacy/components/inline_editor/AnimationTimingModel.ts +1 -1
  362. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +48 -44
  363. package/front_end/ui/legacy/components/inline_editor/CSSAngleUtils.ts +1 -1
  364. package/front_end/ui/legacy/components/inline_editor/PositionAreaEditor.docs.ts +83 -0
  365. package/front_end/ui/legacy/components/inline_editor/PositionAreaEditor.ts +600 -0
  366. package/front_end/ui/legacy/components/inline_editor/animationNameSwatch.css +1 -1
  367. package/front_end/ui/legacy/components/inline_editor/colorMixSwatch.css +4 -4
  368. package/front_end/ui/legacy/components/inline_editor/cssAngleSwatch.css +3 -3
  369. package/front_end/ui/legacy/components/inline_editor/inline_editor.ts +2 -0
  370. package/front_end/ui/legacy/components/inline_editor/linkSwatch.css +1 -1
  371. package/front_end/ui/legacy/components/inline_editor/positionAreaEditor.css +154 -0
  372. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +224 -127
  373. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +10 -7
  374. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +25 -106
  375. package/front_end/ui/legacy/components/object_ui/customPreviewComponent.css +7 -3
  376. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +1 -1
  377. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +0 -66
  378. package/front_end/ui/legacy/components/perf_ui/perf_ui.ts +0 -2
  379. package/front_end/ui/legacy/components/perf_ui/pieChart.css +7 -5
  380. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +8 -5
  381. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +1 -1
  382. package/front_end/ui/legacy/components/utils/Linkifier.ts +5 -5
  383. package/front_end/ui/legacy/inspectorCommon.css +41 -6
  384. package/front_end/ui/legacy/legacy.ts +2 -0
  385. package/front_end/ui/legacy/statusBar.css +18 -0
  386. package/front_end/ui/visual_logging/Debugging.ts +2 -1
  387. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -1
  388. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -3
  389. package/front_end/ui/visual_logging/LoggingEvents.ts +5 -5
  390. package/front_end/ui/visual_logging/LoggingState.ts +1 -1
  391. package/front_end/ui/visual_logging/visual_logging.ts +67 -56
  392. package/inspector_overlay/main.ts +8 -8
  393. package/mcp/mcp.ts +5 -0
  394. package/package.json +2 -8
  395. package/front_end/Images/generate-css-vars.js +0 -52
  396. package/front_end/Images/rollup.config.mjs +0 -36
  397. package/front_end/models/ai_assistance/AiOrigins.ts +0 -107
  398. package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +0 -20
  399. package/front_end/panels/recorder/injected/rollup.config.mjs +0 -20
  400. package/front_end/panels/timeline/EasterEgg.d.ts +0 -6
  401. package/front_end/panels/timeline/easter-egg-tsconfig.json +0 -8
  402. package/front_end/panels/timeline/enable-easter-egg.js +0 -20
  403. package/front_end/third_party/acorn/acorn-tsconfig.json +0 -12
  404. package/front_end/third_party/acorn/estree-tsconfig.json +0 -8
  405. package/front_end/third_party/chromium/client-variations/client-variations-tsconfig.json +0 -8
  406. package/front_end/third_party/codemirror/codemirror-legacy-types-tsconfig.json +0 -8
  407. package/front_end/third_party/codemirror/codemirror-tsconfig.json +0 -15
  408. package/front_end/third_party/codemirror.next/bundle-tsconfig.json +0 -24
  409. package/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +0 -16
  410. package/front_end/third_party/json5/json5-tsconfig.json +0 -8
  411. package/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +0 -8
  412. package/front_end/third_party/lighthouse/lighthouse-tsconfig.json +0 -11
  413. package/front_end/third_party/lighthouse/report/bundle-tsconfig.json +0 -8
  414. package/front_end/third_party/lit/lit-tsconfig.json +0 -15
  415. package/front_end/third_party/marked/marked-tsconfig.json +0 -8
  416. package/front_end/third_party/puppeteer-replay/puppeteer-replay-tsconfig.json +0 -8
  417. package/front_end/third_party/third-party-web/third-party-web-tsconfig.json +0 -8
  418. package/front_end/third_party/wasmparser/wasmparser-tsconfig.json +0 -9
  419. package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +0 -47
  420. package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +0 -606
  421. package/inspector_overlay/loadCSS.rollup.js +0 -29
@@ -94,13 +94,10 @@ export async function _connectToBrowser(
94
94
  async function getConnectionTransport(
95
95
  options: ConnectOptions & {logger: Logger},
96
96
  ): Promise<{connectionTransport: ConnectionTransport; endpointUrl: string}> {
97
- const {
98
- browserWSEndpoint,
99
- browserURL,
100
- channel,
101
- transport,
102
- headers = {},
103
- } = options;
97
+ const {browserWSEndpoint, browserURL, channel, transport} = options;
98
+ // `wsOptions.headers` supersedes the deprecated top-level `headers`.
99
+ const headers = options.wsOptions?.headers ?? options.headers ?? {};
100
+ const wsOptions = options.wsOptions ?? {};
104
101
 
105
102
  assert(
106
103
  Number(!!browserWSEndpoint) +
@@ -116,7 +113,12 @@ async function getConnectionTransport(
116
113
  } else if (browserWSEndpoint) {
117
114
  const WebSocketClass = await getWebSocketTransportClass();
118
115
  const connectionTransport: ConnectionTransport =
119
- await WebSocketClass.create(browserWSEndpoint, headers, options.logger);
116
+ await WebSocketClass.create(
117
+ browserWSEndpoint,
118
+ headers,
119
+ options.logger,
120
+ wsOptions,
121
+ );
120
122
  return {
121
123
  connectionTransport: connectionTransport,
122
124
  endpointUrl: browserWSEndpoint,
@@ -125,7 +127,12 @@ async function getConnectionTransport(
125
127
  const connectionURL = await getWSEndpoint(browserURL, headers);
126
128
  const WebSocketClass = await getWebSocketTransportClass();
127
129
  const connectionTransport: ConnectionTransport =
128
- await WebSocketClass.create(connectionURL, headers, options.logger);
130
+ await WebSocketClass.create(
131
+ connectionURL,
132
+ headers,
133
+ options.logger,
134
+ wsOptions,
135
+ );
129
136
  return {
130
137
  connectionTransport: connectionTransport,
131
138
  endpointUrl: connectionURL,
@@ -169,6 +176,7 @@ async function getConnectionTransport(
169
176
  browserWSEndpoint,
170
177
  headers,
171
178
  options.logger,
179
+ wsOptions,
172
180
  );
173
181
  return {
174
182
  connectionTransport: connectionTransport,
@@ -14,6 +14,10 @@ export class BrowserWebSocketTransport implements ConnectionTransport {
14
14
  url: string,
15
15
  _headers: Record<string, string> | undefined,
16
16
  logger: Logger,
17
+ // Accepted so this stays call-compatible with NodeWebSocketTransport, which
18
+ // BrowserConnector picks between at runtime. The keep-alive options are
19
+ // Node-only: the browser WebSocket API exposes no ping frame.
20
+ _options?: {keepAlive?: boolean; keepAliveIntervalMs?: number},
17
21
  ): Promise<BrowserWebSocketTransport> {
18
22
  return new Promise((resolve, reject) => {
19
23
  const ws = new WebSocket(url);
@@ -45,6 +45,39 @@ export interface SupportedWebDriverCapabilities {
45
45
  export type ChromeReleaseChannel =
46
46
  'chrome' | 'chrome-beta' | 'chrome-canary' | 'chrome-dev';
47
47
 
48
+ /**
49
+ * Options for the WebSocket connection to the browser.
50
+ *
51
+ * @remarks
52
+ * Only used in the Node.js environment.
53
+ *
54
+ * @public
55
+ */
56
+ export interface WsOptions {
57
+ /**
58
+ * Headers to use for the web socket connection.
59
+ */
60
+ headers?: Record<string, string>;
61
+
62
+ /**
63
+ * Whether to send WebSocket pings and drop the connection when a pong does
64
+ * not come back within the same interval. Detects a connection that died
65
+ * without a close frame, which otherwise leaves calls hanging until
66
+ * `protocolTimeout`.
67
+ *
68
+ * @defaultValue `false`
69
+ */
70
+ keepAlive?: boolean;
71
+
72
+ /**
73
+ * Ping period in milliseconds. Only used when {@link WsOptions.keepAlive} is
74
+ * set.
75
+ *
76
+ * @defaultValue `30_000`
77
+ */
78
+ keepAliveIntervalMs?: number;
79
+ }
80
+
48
81
  /**
49
82
  * Generic browser options that can be passed when launching any browser or when
50
83
  * connecting to an existing browser instance.
@@ -134,6 +167,15 @@ export interface ConnectOptions {
134
167
  */
135
168
  protocolTimeout?: number;
136
169
 
170
+ /**
171
+ * Options for the WebSocket connection to the browser.
172
+ *
173
+ * @remarks
174
+ * Only used in the Node.js environment. The browser build has no ping frame
175
+ * API, so the keep-alive options are ignored there.
176
+ */
177
+ wsOptions?: WsOptions;
178
+
137
179
  browserWSEndpoint?: string;
138
180
  browserURL?: string;
139
181
  transport?: ConnectionTransport;
@@ -149,6 +191,10 @@ export interface ConnectOptions {
149
191
  * Headers to use for the web socket connection.
150
192
  * @remarks
151
193
  * Only works in the Node.js environment.
194
+ *
195
+ * @deprecated Use {@link WsOptions.headers} via
196
+ * {@link ConnectOptions.wsOptions} instead. When both are set,
197
+ * `wsOptions.headers` wins.
152
198
  */
153
199
  headers?: Record<string, string>;
154
200
 
@@ -639,6 +639,32 @@ const knownDevices = [
639
639
  isLandscape: true,
640
640
  },
641
641
  },
642
+ {
643
+ name: 'iPhone SE (3rd gen)',
644
+ userAgent:
645
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/26.5 Mobile/19E241 Safari/602.1',
646
+ viewport: {
647
+ width: 375,
648
+ height: 667,
649
+ deviceScaleFactor: 2,
650
+ isMobile: true,
651
+ hasTouch: true,
652
+ isLandscape: false,
653
+ },
654
+ },
655
+ {
656
+ name: 'iPhone SE (3rd gen) landscape',
657
+ userAgent:
658
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/26.5 Mobile/19E241 Safari/602.1',
659
+ viewport: {
660
+ width: 667,
661
+ height: 375,
662
+ deviceScaleFactor: 2,
663
+ isMobile: true,
664
+ hasTouch: true,
665
+ isLandscape: true,
666
+ },
667
+ },
642
668
  {
643
669
  name: 'iPhone X',
644
670
  userAgent:
@@ -1185,6 +1211,266 @@ const knownDevices = [
1185
1211
  isLandscape: true,
1186
1212
  },
1187
1213
  },
1214
+ {
1215
+ name: 'iPhone 16',
1216
+ userAgent:
1217
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1218
+ viewport: {
1219
+ width: 393,
1220
+ height: 659,
1221
+ deviceScaleFactor: 3,
1222
+ isMobile: true,
1223
+ hasTouch: true,
1224
+ isLandscape: false,
1225
+ },
1226
+ },
1227
+ {
1228
+ name: 'iPhone 16 landscape',
1229
+ userAgent:
1230
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1231
+ viewport: {
1232
+ width: 734,
1233
+ height: 343,
1234
+ deviceScaleFactor: 3,
1235
+ isMobile: true,
1236
+ hasTouch: true,
1237
+ isLandscape: true,
1238
+ },
1239
+ },
1240
+ {
1241
+ name: 'iPhone 16 Plus',
1242
+ userAgent:
1243
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1244
+ viewport: {
1245
+ width: 430,
1246
+ height: 739,
1247
+ deviceScaleFactor: 3,
1248
+ isMobile: true,
1249
+ hasTouch: true,
1250
+ isLandscape: false,
1251
+ },
1252
+ },
1253
+ {
1254
+ name: 'iPhone 16 Plus landscape',
1255
+ userAgent:
1256
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1257
+ viewport: {
1258
+ width: 814,
1259
+ height: 380,
1260
+ deviceScaleFactor: 3,
1261
+ isMobile: true,
1262
+ hasTouch: true,
1263
+ isLandscape: true,
1264
+ },
1265
+ },
1266
+ {
1267
+ name: 'iPhone 16 Pro',
1268
+ userAgent:
1269
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1270
+ viewport: {
1271
+ width: 402,
1272
+ height: 681,
1273
+ deviceScaleFactor: 3,
1274
+ isMobile: true,
1275
+ hasTouch: true,
1276
+ isLandscape: false,
1277
+ },
1278
+ },
1279
+ {
1280
+ name: 'iPhone 16 Pro landscape',
1281
+ userAgent:
1282
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1283
+ viewport: {
1284
+ width: 756,
1285
+ height: 352,
1286
+ deviceScaleFactor: 3,
1287
+ isMobile: true,
1288
+ hasTouch: true,
1289
+ isLandscape: true,
1290
+ },
1291
+ },
1292
+ {
1293
+ name: 'iPhone 16 Pro Max',
1294
+ userAgent:
1295
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1296
+ viewport: {
1297
+ width: 440,
1298
+ height: 763,
1299
+ deviceScaleFactor: 3,
1300
+ isMobile: true,
1301
+ hasTouch: true,
1302
+ isLandscape: false,
1303
+ },
1304
+ },
1305
+ {
1306
+ name: 'iPhone 16 Pro Max landscape',
1307
+ userAgent:
1308
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1309
+ viewport: {
1310
+ width: 838,
1311
+ height: 390,
1312
+ deviceScaleFactor: 3,
1313
+ isMobile: true,
1314
+ hasTouch: true,
1315
+ isLandscape: true,
1316
+ },
1317
+ },
1318
+ {
1319
+ name: 'iPhone 16e',
1320
+ userAgent:
1321
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1322
+ viewport: {
1323
+ width: 390,
1324
+ height: 651,
1325
+ deviceScaleFactor: 3,
1326
+ isMobile: true,
1327
+ hasTouch: true,
1328
+ isLandscape: false,
1329
+ },
1330
+ },
1331
+ {
1332
+ name: 'iPhone 16e landscape',
1333
+ userAgent:
1334
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1335
+ viewport: {
1336
+ width: 726,
1337
+ height: 340,
1338
+ deviceScaleFactor: 3,
1339
+ isMobile: true,
1340
+ hasTouch: true,
1341
+ isLandscape: true,
1342
+ },
1343
+ },
1344
+ {
1345
+ name: 'iPhone 17',
1346
+ userAgent:
1347
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1348
+ viewport: {
1349
+ width: 402,
1350
+ height: 681,
1351
+ deviceScaleFactor: 3,
1352
+ isMobile: true,
1353
+ hasTouch: true,
1354
+ isLandscape: false,
1355
+ },
1356
+ },
1357
+ {
1358
+ name: 'iPhone 17 landscape',
1359
+ userAgent:
1360
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1361
+ viewport: {
1362
+ width: 756,
1363
+ height: 352,
1364
+ deviceScaleFactor: 3,
1365
+ isMobile: true,
1366
+ hasTouch: true,
1367
+ isLandscape: true,
1368
+ },
1369
+ },
1370
+ {
1371
+ name: 'iPhone Air',
1372
+ userAgent:
1373
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1374
+ viewport: {
1375
+ width: 420,
1376
+ height: 719,
1377
+ deviceScaleFactor: 3,
1378
+ isMobile: true,
1379
+ hasTouch: true,
1380
+ isLandscape: false,
1381
+ },
1382
+ },
1383
+ {
1384
+ name: 'iPhone Air landscape',
1385
+ userAgent:
1386
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1387
+ viewport: {
1388
+ width: 794,
1389
+ height: 370,
1390
+ deviceScaleFactor: 3,
1391
+ isMobile: true,
1392
+ hasTouch: true,
1393
+ isLandscape: true,
1394
+ },
1395
+ },
1396
+ {
1397
+ name: 'iPhone 17 Pro',
1398
+ userAgent:
1399
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1400
+ viewport: {
1401
+ width: 402,
1402
+ height: 681,
1403
+ deviceScaleFactor: 3,
1404
+ isMobile: true,
1405
+ hasTouch: true,
1406
+ isLandscape: false,
1407
+ },
1408
+ },
1409
+ {
1410
+ name: 'iPhone 17 Pro landscape',
1411
+ userAgent:
1412
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1413
+ viewport: {
1414
+ width: 756,
1415
+ height: 352,
1416
+ deviceScaleFactor: 3,
1417
+ isMobile: true,
1418
+ hasTouch: true,
1419
+ isLandscape: true,
1420
+ },
1421
+ },
1422
+ {
1423
+ name: 'iPhone 17 Pro Max',
1424
+ userAgent:
1425
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1426
+ viewport: {
1427
+ width: 440,
1428
+ height: 763,
1429
+ deviceScaleFactor: 3,
1430
+ isMobile: true,
1431
+ hasTouch: true,
1432
+ isLandscape: false,
1433
+ },
1434
+ },
1435
+ {
1436
+ name: 'iPhone 17 Pro Max landscape',
1437
+ userAgent:
1438
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1439
+ viewport: {
1440
+ width: 838,
1441
+ height: 390,
1442
+ deviceScaleFactor: 3,
1443
+ isMobile: true,
1444
+ hasTouch: true,
1445
+ isLandscape: true,
1446
+ },
1447
+ },
1448
+ {
1449
+ name: 'iPhone 17e',
1450
+ userAgent:
1451
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1452
+ viewport: {
1453
+ width: 390,
1454
+ height: 651,
1455
+ deviceScaleFactor: 3,
1456
+ isMobile: true,
1457
+ hasTouch: true,
1458
+ isLandscape: false,
1459
+ },
1460
+ },
1461
+ {
1462
+ name: 'iPhone 17e landscape',
1463
+ userAgent:
1464
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 18_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.5 Mobile/15E148 Safari/604.1',
1465
+ viewport: {
1466
+ width: 726,
1467
+ height: 340,
1468
+ deviceScaleFactor: 3,
1469
+ isMobile: true,
1470
+ hasTouch: true,
1471
+ isLandscape: true,
1472
+ },
1473
+ },
1188
1474
  {
1189
1475
  name: 'JioPhone 2',
1190
1476
  userAgent:
@@ -1736,7 +2022,7 @@ for (const device of knownDevices) {
1736
2022
  *
1737
2023
  * ```ts
1738
2024
  * import {KnownDevices} from 'puppeteer';
1739
- * const iPhone = KnownDevices['iPhone 15 Pro'];
2025
+ * const iPhone = KnownDevices['iPhone 17 Pro'];
1740
2026
  *
1741
2027
  * const browser = await puppeteer.launch();
1742
2028
  * const page = await browser.newPage();
@@ -3,7 +3,7 @@
3
3
  * Copyright 2017 Google Inc.
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import {existsSync} from 'node:fs';
6
+ import {accessSync, constants, existsSync} from 'node:fs';
7
7
  import {tmpdir} from 'node:os';
8
8
  import {join} from 'node:path';
9
9
 
@@ -27,6 +27,7 @@ import type {Browser, BrowserCloseCallback} from '../api/Browser.js';
27
27
  import {CdpBrowser} from '../cdp/Browser.js';
28
28
  import {Connection} from '../cdp/Connection.js';
29
29
  import {assertSupportedUrlRestrictions} from '../common/BrowserConnector.js';
30
+ import type {WsOptions} from '../common/ConnectOptions.js';
30
31
  import {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';
31
32
  import {TimeoutError} from '../common/Errors.js';
32
33
  import type {SupportedBrowser} from '../common/SupportedBrowser.js';
@@ -52,6 +53,21 @@ export interface ResolvedLaunchArgs {
52
53
  args: string[];
53
54
  }
54
55
 
56
+ /**
57
+ * Whether the profile directory exists and the current process can write to it.
58
+ * A missing directory counts as writable: the browser creates it on launch.
59
+ *
60
+ * @internal
61
+ */
62
+ function isWritableDirectory(directory: string): boolean {
63
+ try {
64
+ accessSync(directory, constants.W_OK);
65
+ return true;
66
+ } catch {
67
+ return !existsSync(directory);
68
+ }
69
+ }
70
+
55
71
  /**
56
72
  * @internal
57
73
  */
@@ -291,6 +307,14 @@ export abstract class BrowserLauncher {
291
307
  (process.platform === 'win32' &&
292
308
  existsSync(join(launchArgs.userDataDir, 'lockfile')))
293
309
  ) {
310
+ // The browser reports the same ProcessSingleton failure whether another
311
+ // instance holds the lock or it simply cannot write to the profile
312
+ // directory, so check for the latter before blaming a running browser.
313
+ if (!isWritableDirectory(launchArgs.userDataDir)) {
314
+ throw new Error(
315
+ `The browser cannot write to ${launchArgs.userDataDir}. Make the \`userDataDir\` writable or use a different one.`,
316
+ );
317
+ }
294
318
  throw new Error(
295
319
  `The browser is already running for ${launchArgs.userDataDir}. Use a different \`userDataDir\` or stop the running browser first.`,
296
320
  );
@@ -407,6 +431,7 @@ export abstract class BrowserLauncher {
407
431
  slowMo: number;
408
432
  idGenerator: GetIdFn;
409
433
  logger: Logger;
434
+ wsOptions?: WsOptions;
410
435
  },
411
436
  ): Promise<Connection> {
412
437
  const browserWSEndpoint = await browserProcess.waitForLineOutput(
@@ -417,6 +442,7 @@ export abstract class BrowserLauncher {
417
442
  browserWSEndpoint,
418
443
  undefined,
419
444
  opts.logger,
445
+ opts.wsOptions,
420
446
  );
421
447
  return new Connection(
422
448
  browserWSEndpoint,
@@ -440,6 +466,7 @@ export abstract class BrowserLauncher {
440
466
  slowMo: number;
441
467
  idGenerator: GetIdFn;
442
468
  logger: Logger;
469
+ wsOptions?: WsOptions;
443
470
  },
444
471
  ): Promise<Connection> {
445
472
  // stdio was assigned during start(), and the 'pipe' option there adds the
@@ -513,6 +540,7 @@ export abstract class BrowserLauncher {
513
540
  networkEnabled?: boolean;
514
541
  issuesEnabled?: boolean;
515
542
  logger: Logger;
543
+ wsOptions?: WsOptions;
516
544
  },
517
545
  ): Promise<Browser> {
518
546
  const browserWSEndpoint =
@@ -524,6 +552,7 @@ export abstract class BrowserLauncher {
524
552
  browserWSEndpoint,
525
553
  undefined,
526
554
  opts.logger,
555
+ opts.wsOptions,
527
556
  );
528
557
  const BiDi = await import(/* webpackIgnore: true */ '../bidi/bidi.js');
529
558
  const bidiConnection = new BiDi.BidiConnection(
@@ -9,6 +9,29 @@ import type {ConnectionTransport} from '../common/ConnectionTransport.js';
9
9
  import {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';
10
10
  import {packageVersion} from '../util/version.js';
11
11
 
12
+ /**
13
+ * How often to ping the browser when keep-alive is enabled, and how long to
14
+ * wait for the matching pong before treating the connection as dead.
15
+ *
16
+ * @internal
17
+ */
18
+ export const DEFAULT_KEEP_ALIVE_INTERVAL_MS = 30_000;
19
+
20
+ /**
21
+ * @internal
22
+ */
23
+ export interface NodeWebSocketTransportOptions {
24
+ /**
25
+ * Detect a connection that died without a TCP close by exchanging
26
+ * WebSocket ping/pong frames.
27
+ */
28
+ keepAlive?: boolean;
29
+ /**
30
+ * Ping period in milliseconds. Only used when `keepAlive` is set.
31
+ */
32
+ keepAliveIntervalMs?: number;
33
+ }
34
+
12
35
  /**
13
36
  * @internal
14
37
  */
@@ -17,6 +40,7 @@ export class NodeWebSocketTransport implements ConnectionTransport {
17
40
  url: string,
18
41
  headers: Record<string, string> | undefined,
19
42
  logger: Logger,
43
+ options: NodeWebSocketTransportOptions = {},
20
44
  ): Promise<NodeWebSocketTransport> {
21
45
  return new Promise((resolve, reject) => {
22
46
  const ws = new NodeWebSocket(url, [], {
@@ -31,7 +55,7 @@ export class NodeWebSocketTransport implements ConnectionTransport {
31
55
  });
32
56
 
33
57
  ws.addEventListener('open', () => {
34
- return resolve(new NodeWebSocketTransport(ws, logger));
58
+ return resolve(new NodeWebSocketTransport(ws, logger, options));
35
59
  });
36
60
  ws.addEventListener('error', reject);
37
61
  });
@@ -39,10 +63,15 @@ export class NodeWebSocketTransport implements ConnectionTransport {
39
63
 
40
64
  #ws: NodeWebSocket;
41
65
  #logger: Logger;
66
+ #keepAliveTimer?: NodeJS.Timeout;
42
67
  onmessage?: (message: NodeWebSocket.Data) => void;
43
68
  onclose?: () => void;
44
69
 
45
- constructor(ws: NodeWebSocket, logger: Logger) {
70
+ constructor(
71
+ ws: NodeWebSocket,
72
+ logger: Logger,
73
+ options: NodeWebSocketTransportOptions = {},
74
+ ) {
46
75
  this.#ws = ws;
47
76
  this.#logger = logger;
48
77
  this.#ws.addEventListener('message', event => {
@@ -51,6 +80,7 @@ export class NodeWebSocketTransport implements ConnectionTransport {
51
80
  }
52
81
  });
53
82
  this.#ws.addEventListener('close', () => {
83
+ this.#stopKeepAlive();
54
84
  if (this.onclose) {
55
85
  this.onclose.call(null);
56
86
  }
@@ -59,6 +89,46 @@ export class NodeWebSocketTransport implements ConnectionTransport {
59
89
  this.#ws.addEventListener('error', err => {
60
90
  this.#logger?.(DEBUG_PREFIXES.error)?.(err);
61
91
  });
92
+ if (options.keepAlive) {
93
+ this.#startKeepAlive(
94
+ options.keepAliveIntervalMs ?? DEFAULT_KEEP_ALIVE_INTERVAL_MS,
95
+ );
96
+ }
97
+ }
98
+
99
+ /**
100
+ * The `ws` client only reports a close when the peer sends a TCP FIN. A
101
+ * connection dropped by a proxy, a load balancer reaping an idle socket or a
102
+ * killed remote browser leaves a half-open socket that never emits `close`,
103
+ * so the transport keeps reporting itself as connected until the next
104
+ * command fails. Ping periodically and terminate when the pong for the
105
+ * previous ping never arrived.
106
+ */
107
+ #startKeepAlive(intervalMs: number): void {
108
+ let awaitingPong = false;
109
+ this.#ws.on('pong', () => {
110
+ awaitingPong = false;
111
+ });
112
+ this.#keepAliveTimer = setInterval(() => {
113
+ if (awaitingPong) {
114
+ // terminate() rather than close(): the peer is not answering, so a
115
+ // close handshake would hang. This emits `close` locally, which is
116
+ // what surfaces the dead connection to the rest of Puppeteer.
117
+ this.#ws.terminate();
118
+ return;
119
+ }
120
+ awaitingPong = true;
121
+ this.#ws.ping();
122
+ }, intervalMs);
123
+ // Never hold the process open just to keep pinging.
124
+ this.#keepAliveTimer.unref?.();
125
+ }
126
+
127
+ #stopKeepAlive(): void {
128
+ if (this.#keepAliveTimer !== undefined) {
129
+ clearInterval(this.#keepAliveTimer);
130
+ this.#keepAliveTimer = undefined;
131
+ }
62
132
  }
63
133
 
64
134
  send(message: string): void {
@@ -66,6 +136,7 @@ export class NodeWebSocketTransport implements ConnectionTransport {
66
136
  }
67
137
 
68
138
  close(): void {
139
+ this.#stopKeepAlive();
69
140
  this.#ws.close();
70
141
  }
71
142
  }
@@ -8,7 +8,7 @@
8
8
  * @internal
9
9
  */
10
10
  export const PUPPETEER_REVISIONS = Object.freeze({
11
- chrome: '152.0.7977.54',
12
- 'chrome-headless-shell': '152.0.7977.54',
13
- firefox: 'stable_154.0',
11
+ chrome: '152.0.7977.75',
12
+ 'chrome-headless-shell': '152.0.7977.75',
13
+ firefox: 'stable_155.0',
14
14
  });
@@ -6,5 +6,5 @@
6
6
 
7
7
  // If moved update release-please config
8
8
  // x-release-please-start-version
9
- export const packageVersion = '25.9.0';
9
+ export const packageVersion = '25.10.0';
10
10
  // x-release-please-end
@@ -22,6 +22,7 @@
22
22
  "package/lib/puppeteer/api/JSHandle.js",
23
23
  "package/lib/puppeteer/api/Page.js",
24
24
  "package/lib/puppeteer/api/Realm.js",
25
+ "package/lib/puppeteer/api/ScreenRecording.js",
25
26
  "package/lib/puppeteer/api/Target.js",
26
27
  "package/lib/puppeteer/api/WebWorker.js",
27
28
  "package/lib/puppeteer/api/api.js",
@@ -45,6 +46,7 @@
45
46
  "package/lib/puppeteer/bidi/JSHandle.js",
46
47
  "package/lib/puppeteer/bidi/Page.js",
47
48
  "package/lib/puppeteer/bidi/Realm.js",
49
+ "package/lib/puppeteer/bidi/ScreenRecording.js",
48
50
  "package/lib/puppeteer/bidi/Serializer.js",
49
51
  "package/lib/puppeteer/bidi/Target.js",
50
52
  "package/lib/puppeteer/bidi/WebWorker.js",
@@ -93,6 +95,7 @@
93
95
  "package/lib/puppeteer/cdp/NetworkManager.js",
94
96
  "package/lib/puppeteer/cdp/Page.js",
95
97
  "package/lib/puppeteer/cdp/PredefinedNetworkConditions.js",
98
+ "package/lib/puppeteer/cdp/ScreenRecording.js",
96
99
  "package/lib/puppeteer/cdp/Target.js",
97
100
  "package/lib/puppeteer/cdp/TargetManageEvents.js",
98
101
  "package/lib/puppeteer/cdp/TargetManager.js",