chrome-devtools-frontend 1.0.1721762 → 1.0.1726686

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 (273) hide show
  1. package/.agents/skills/review-ui-widgets/SKILL.md +7 -7
  2. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +12 -0
  3. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +3 -3
  4. package/.agents/skills/ui-widgets/SKILL.md +2 -1
  5. package/docs/cookbook/dependencies.md +57 -11
  6. package/docs/get_the_code.md +15 -0
  7. package/front_end/core/i18n/collect-ui-strings.js +58 -12
  8. package/front_end/core/i18n/i18nImpl.ts +1 -1
  9. package/front_end/core/root/Runtime.ts +1 -1
  10. package/front_end/core/sdk/ResourceTreeModel.ts +16 -0
  11. package/front_end/core/sdk/WebAuthnModel.ts +17 -10
  12. package/front_end/entrypoints/js_app/js_app.ts +2 -5
  13. package/front_end/entrypoints/node_app/node_app.ts +2 -3
  14. package/front_end/generated/InspectorBackendCommands.ts +3 -3
  15. package/front_end/generated/protocol.ts +17 -0
  16. package/front_end/models/ai_assistance/skills/lighthouse.md +2 -1
  17. package/front_end/models/ai_assistance/skills/network.md +1 -0
  18. package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +26 -2
  19. package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +1 -1
  20. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -7
  21. package/front_end/models/ai_assistance/tools/RunLighthouse.ts +2 -2
  22. package/front_end/models/comment_manager/CD4ABridge.ts +4 -0
  23. package/front_end/models/comment_manager/CommentManager.ts +0 -6
  24. package/front_end/models/comment_manager/CommentThread.ts +39 -19
  25. package/front_end/models/elements/StyleChanges.ts +66 -0
  26. package/front_end/models/trace/EventsSerializer.ts +2 -7
  27. package/front_end/models/trace/ModelImpl.ts +0 -2
  28. package/front_end/models/trace/handlers/FlowsHandler.ts +37 -29
  29. package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +13 -6
  30. package/front_end/models/trace/helpers/SyntheticEvents.ts +10 -37
  31. package/front_end/models/trace/insights/RenderBlocking.ts +3 -1
  32. package/front_end/models/trace/lantern/simulation/Simulator.ts +4 -0
  33. package/front_end/models/trace/lantern/types/Lantern.ts +1 -0
  34. package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +92 -0
  35. package/front_end/panels/accessibility/SourceOrderView.ts +1 -1
  36. package/front_end/panels/accessibility/accessibilityAnnouncementRecordingListView.css +3 -1
  37. package/front_end/panels/accessibility/accessibilityAnnouncementRecordingView.css +12 -1
  38. package/front_end/panels/application/ApplicationPanelSidebar.ts +90 -0
  39. package/front_end/panels/application/StorageView.ts +348 -254
  40. package/front_end/panels/application/SubAppsView.ts +159 -0
  41. package/front_end/panels/application/application.ts +2 -0
  42. package/front_end/panels/application/preloading/PreloadingView.ts +360 -336
  43. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +3 -3
  44. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +6 -3
  45. package/front_end/panels/application/preloading/components/RuleSetGrid.ts +17 -17
  46. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
  47. package/front_end/panels/application/preloading/preloadingView.css +12 -4
  48. package/front_end/panels/application/preloading/preloadingViewDropDown.css +1 -1
  49. package/front_end/panels/application/storageView.css +16 -21
  50. package/front_end/panels/application/subAppsView.css +21 -0
  51. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -2
  52. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +6 -8
  53. package/front_end/panels/comments/CommentsPane.ts +26 -9
  54. package/front_end/panels/comments/commentsPane.css +25 -6
  55. package/front_end/panels/common/CommentThreadWidget.ts +2 -2
  56. package/front_end/panels/common/CommentsOverlayWidget.ts +94 -35
  57. package/front_end/panels/common/commentThreadWidget.css +17 -0
  58. package/front_end/panels/common/commentsOverlay.css +5 -10
  59. package/front_end/panels/common/common-meta.ts +11 -1
  60. package/front_end/panels/elements/ClassesPaneWidget.ts +133 -89
  61. package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +7 -33
  62. package/front_end/panels/elements/DOMTreeElementWidget.ts +3 -1
  63. package/front_end/panels/elements/DOMTreeWidget.ts +19 -3
  64. package/front_end/panels/elements/ElementStatePaneWidget.ts +11 -1
  65. package/front_end/panels/elements/PropertyRenderer.ts +3 -2
  66. package/front_end/panels/elements/StyleEditorWidget.ts +87 -39
  67. package/front_end/panels/elements/StylePropertiesSection.ts +32 -5
  68. package/front_end/panels/elements/StylePropertyTreeElement.ts +227 -162
  69. package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
  70. package/front_end/panels/event_listeners/EventListenersView.ts +11 -8
  71. package/front_end/panels/layer_viewer/Layers3DView.ts +21 -37
  72. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  73. package/front_end/panels/network/NetworkConfigView.ts +12 -10
  74. package/front_end/panels/network/NetworkDataGridNode.ts +3 -1
  75. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  76. package/front_end/panels/network/RequestPayloadView.ts +12 -5
  77. package/front_end/panels/network/networkConfigView.css +8 -8
  78. package/front_end/panels/profiler/HeapProfileView.ts +28 -6
  79. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +7 -3
  80. package/front_end/panels/protocol_monitor/JSONEditor.ts +0 -1
  81. package/front_end/panels/recorder/RecorderPanel.ts +2 -2
  82. package/front_end/panels/screencast/ScreencastView.ts +3 -6
  83. package/front_end/panels/security/SecurityPanelSidebar.ts +0 -31
  84. package/front_end/panels/settings/SettingsScreen.ts +1 -1
  85. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +9 -16
  86. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +358 -345
  87. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +136 -121
  88. package/front_end/panels/sources/NavigatorView.ts +105 -45
  89. package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -5
  90. package/front_end/panels/sources/SourcesNavigator.ts +421 -213
  91. package/front_end/panels/sources/SourcesPanel.ts +9 -5
  92. package/front_end/panels/sources/TabbedEditorContainer.ts +41 -18
  93. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  94. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +10 -5
  95. package/front_end/panels/sources/sources-meta.ts +4 -15
  96. package/front_end/panels/sources/sourcesNavigator.css +5 -0
  97. package/front_end/panels/timeline/ModificationsManager.ts +0 -2
  98. package/front_end/panels/timeline/README.md +2 -0
  99. package/front_end/panels/timeline/TimelineCommentContext.ts +171 -0
  100. package/front_end/panels/timeline/TimelineCommentController.ts +168 -30
  101. package/front_end/panels/timeline/TimelinePanel.ts +4 -0
  102. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  103. package/front_end/panels/timeline/timeline.ts +2 -0
  104. package/front_end/panels/timeline/utils/Treemap.ts +8 -0
  105. package/front_end/panels/webauthn/WebauthnPane.ts +15 -13
  106. package/front_end/third_party/chromium/README.chromium +1 -1
  107. package/front_end/third_party/puppeteer/README.chromium +2 -2
  108. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +113 -3
  109. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +21311 -20981
  110. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +36 -0
  111. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +22 -0
  113. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +20 -18
  116. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts +20 -1
  118. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +2 -2
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +40 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +3 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts +2 -0
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js +41 -5
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts +2 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js +23 -2
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Input.js +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +3 -2
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +13 -1
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts +1 -0
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js +18 -11
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts +2 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js +8 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js.map +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +24 -12
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js +13 -7
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +5 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts +22 -1
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +75 -9
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts +18 -4
  162. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js +8 -4
  164. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +65 -26
  167. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +3 -2
  169. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
  170. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +19 -0
  171. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js +4 -3
  174. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts +1 -0
  176. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js +4 -0
  178. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts +2 -0
  180. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
  181. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +95 -8
  182. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
  183. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts +0 -8
  184. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts.map +1 -1
  185. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +8 -24
  186. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts +1 -0
  188. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -1
  189. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +5 -4
  190. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +9 -0
  192. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
  193. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.d.ts.map +1 -1
  194. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js +10 -0
  195. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js.map +1 -1
  196. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +10 -0
  197. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
  198. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +30 -5
  199. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
  200. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  201. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  202. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  203. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  204. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts +2 -0
  205. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
  206. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +33 -3
  207. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
  208. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  209. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +1 -2
  210. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
  211. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts +4 -0
  212. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
  213. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +1 -0
  214. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
  215. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  216. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  217. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
  218. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts +2 -2
  219. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts.map +1 -1
  220. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  221. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  222. package/front_end/third_party/puppeteer/package/lib/types.d.ts +113 -3
  223. package/front_end/third_party/puppeteer/package/package.json +4 -4
  224. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +42 -0
  225. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +25 -22
  226. package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +22 -2
  227. package/front_end/third_party/puppeteer/package/src/api/Page.ts +45 -2
  228. package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +79 -32
  229. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +32 -12
  230. package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +1 -1
  231. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +18 -2
  232. package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +21 -13
  233. package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +12 -2
  234. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +37 -16
  235. package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +14 -11
  236. package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +7 -1
  237. package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +101 -14
  238. package/front_end/third_party/puppeteer/package/src/cdp/NetworkEventManager.ts +26 -6
  239. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +111 -29
  240. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +37 -1
  241. package/front_end/third_party/puppeteer/package/src/cdp/ScreenRecording.ts +5 -4
  242. package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +5 -0
  243. package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +122 -7
  244. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +13 -33
  245. package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +10 -5
  246. package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +10 -0
  247. package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +12 -0
  248. package/front_end/third_party/puppeteer/package/src/common/util.ts +39 -5
  249. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  250. package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +35 -3
  251. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -2
  252. package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +5 -0
  253. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  254. package/front_end/third_party/puppeteer/package/src/util/encoding.ts +2 -2
  255. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  256. package/front_end/ui/comments/CommentAnchorResolver.ts +3 -0
  257. package/front_end/ui/comments/CommentOverlayManager.ts +2 -4
  258. package/front_end/ui/components/lists/List.ts +14 -1
  259. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  260. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +23 -14
  261. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +3 -0
  262. package/front_end/ui/helpers/OpenInNewTab.ts +8 -0
  263. package/front_end/ui/legacy/LinkContextMenuProvider.ts +1 -1
  264. package/front_end/ui/legacy/ListWidget.ts +14 -18
  265. package/front_end/ui/legacy/TabbedPane.ts +46 -3
  266. package/front_end/ui/legacy/Toolbar.ts +0 -1
  267. package/front_end/ui/legacy/Treeoutline.ts +10 -3
  268. package/front_end/ui/legacy/UIUtils.ts +5 -2
  269. package/front_end/ui/legacy/components/inline_editor/Swatches.ts +19 -6
  270. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +20 -11
  271. package/front_end/ui/legacy/components/source_frame/XMLView.ts +27 -7
  272. package/front_end/ui/visual_logging/KnownContextValues.ts +5 -0
  273. package/package.json +1 -1
@@ -9,9 +9,34 @@ import type * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
9
9
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
10
10
 
11
11
  import * as Overlays from './overlays/overlays.js';
12
- import type {TimelineFlameChartDataProvider} from './TimelineFlameChartDataProvider.js';
12
+ import {agentContextForEntry} from './TimelineCommentContext.js';
13
+ import {
14
+ Events as TimelineFlameChartDataProviderEvents,
15
+ type TimelineFlameChartDataProvider,
16
+ } from './TimelineFlameChartDataProvider.js';
13
17
  import type {TimelineFlameChartNetworkDataProvider} from './TimelineFlameChartNetworkDataProvider.js';
14
18
 
19
+ /**
20
+ * Prefix for keys of entries that EventsSerializer cannot key. The full key is
21
+ * `fc-<chartLocation>-<entryIndex>`.
22
+ */
23
+ const SYNTHETIC_KEY_PREFIX = 'fc-';
24
+
25
+ function entryStartTimeMicro(timelineData: PerfUI.FlameChart.FlameChartTimelineData, entryIndex: number): number {
26
+ return Trace.Helpers.Timing.milliToMicro(Trace.Types.Timing.Milli(timelineData.entryStartTimes[entryIndex]));
27
+ }
28
+
29
+ /**
30
+ * Returns the entry's duration, or undefined for instant entries.
31
+ */
32
+ function entryDurationMicro(timelineData: PerfUI.FlameChart.FlameChartTimelineData, entryIndex: number): number|
33
+ undefined {
34
+ const totalTime = timelineData.entryTotalTimes[entryIndex];
35
+ return !Number.isNaN(totalTime) && totalTime > 0 ?
36
+ Trace.Helpers.Timing.milliToMicro(Trace.Types.Timing.Milli(totalTime)) :
37
+ undefined;
38
+ }
39
+
15
40
  /**
16
41
  * Supplies the flame charts, data providers, overlays and events serializer
17
42
  * that the controller needs to resolve and pin comments.
@@ -44,10 +69,10 @@ interface ResolvedEntry {
44
69
  * flame chart canvas:
45
70
  * - It registers a CustomAnchorResolver that maps a pointer position on a
46
71
  * flame chart canvas to a timeline anchor.
47
- * - It keeps one COMMENT_PIN overlay per thread on the current trace. Overlays
48
- * positions each COMMENT_PIN element over its entry, and the resolver
49
- * returns that element from getAnchorElement() so the shared overlay can
50
- * draw the pin on it.
72
+ * - It keeps one COMMENT_PIN overlay for each thread on the current trace
73
+ * whose entry it finds. Overlays positions each COMMENT_PIN element over its
74
+ * entry, and the resolver returns that element from getAnchorElement() so
75
+ * the shared overlay can draw the pin on it.
51
76
  * - It requests repositioning after every Overlays update, because panning or
52
77
  * zooming the flame chart moves the COMMENT_PIN elements without any DOM
53
78
  * scroll or resize.
@@ -68,6 +93,15 @@ export class TimelineCommentController {
68
93
  this.#syncCommentOverlays();
69
94
  };
70
95
 
96
+ /**
97
+ * The main flame chart rebuilds its entries when entries are hidden or
98
+ * shown from the context menu, or the ignore list changes. Threads with a
99
+ * synthetic key whose entry was missing can then be pinned.
100
+ */
101
+ readonly #onMainDataChanged = (): void => {
102
+ this.#syncCommentOverlays();
103
+ };
104
+
71
105
  // Overlays updates on every pan and zoom, so the notification is skipped
72
106
  // while there are no COMMENT_PIN overlays.
73
107
  readonly #onOverlaysUpdated = (): void => {
@@ -112,13 +146,15 @@ export class TimelineCommentController {
112
146
  }
113
147
 
114
148
  /**
115
- * Starts listening for thread and overlay changes, registers the anchor
116
- * resolver and shows pins for existing threads.
149
+ * Starts listening for thread, overlay and flame chart data changes,
150
+ * registers the anchor resolver and shows pins for existing threads.
117
151
  */
118
152
  wasShown(): void {
119
153
  this.#commentManager.addEventListener(CommentManager.CommentManager.Events.COMMENT_THREADS_CHANGED,
120
154
  this.#onCommentThreadsChanged);
121
155
  this.#delegate.overlays.addEventListener(Overlays.Overlays.OverlaysUpdated.eventName, this.#onOverlaysUpdated);
156
+ this.#delegate.mainDataProvider.addEventListener(TimelineFlameChartDataProviderEvents.DATA_CHANGED,
157
+ this.#onMainDataChanged);
122
158
  Comments.CommentAnchorResolver.registerCustomAnchorResolver(this.#customAnchorResolver);
123
159
  this.#syncCommentOverlays();
124
160
  // COMMENT_PIN overlays that survived while the view was hidden need their
@@ -129,14 +165,16 @@ export class TimelineCommentController {
129
165
  }
130
166
 
131
167
  /**
132
- * Stops listening for thread and overlay changes and unregisters the anchor
133
- * resolver. The final notification removes the shared pins, because the
134
- * resolver no longer supplies their anchor elements.
168
+ * Stops listening for thread, overlay and flame chart data changes and
169
+ * unregisters the anchor resolver. The final notification removes the shared
170
+ * pins, because the resolver no longer supplies their anchor elements.
135
171
  */
136
172
  willHide(): void {
137
173
  this.#commentManager.removeEventListener(CommentManager.CommentManager.Events.COMMENT_THREADS_CHANGED,
138
174
  this.#onCommentThreadsChanged);
139
175
  this.#delegate.overlays.removeEventListener(Overlays.Overlays.OverlaysUpdated.eventName, this.#onOverlaysUpdated);
176
+ this.#delegate.mainDataProvider.removeEventListener(TimelineFlameChartDataProviderEvents.DATA_CHANGED,
177
+ this.#onMainDataChanged);
140
178
  Comments.CommentAnchorResolver.unregisterCustomAnchorResolver(this.#customAnchorResolver);
141
179
  Comments.CommentAnchorResolver.notifyCustomAnchorsMoved();
142
180
  this.#notifiedWithCommentPins = false;
@@ -176,6 +214,67 @@ export class TimelineCommentController {
176
214
  return `trace-${min}-${max}`;
177
215
  }
178
216
 
217
+ #dataProviderFor(chartLocation: 'main'|'network'): TimelineFlameChartDataProvider
218
+ |TimelineFlameChartNetworkDataProvider {
219
+ return chartLocation === 'network' ? this.#delegate.networkDataProvider : this.#delegate.mainDataProvider;
220
+ }
221
+
222
+ /**
223
+ * Returns the event for a thread's timeline anchor, or null if the anchor
224
+ * has a synthetic key and no flame chart entry matches it.
225
+ */
226
+ #eventForTimelineAnchor(anchor: CommentManager.CommentManager.TimelineAnchorSignature,
227
+ parsedTrace: Trace.TraceModel.ParsedTrace): Trace.Types.Events.Event|null {
228
+ if (!anchor.traceEventKey.startsWith(SYNTHETIC_KEY_PREFIX)) {
229
+ // The key was created by EventsSerializer for this trace, because the
230
+ // thread's traceId matches.
231
+ return this.#delegate.eventsSerializer.eventForKey(anchor.traceEventKey as Trace.Types.File.SerializableKey,
232
+ parsedTrace);
233
+ }
234
+ const entryIndex = this.#findEntryIndexForSyntheticKey(anchor);
235
+ if (entryIndex === -1) {
236
+ return null;
237
+ }
238
+ return this.#dataProviderFor(anchor.chartLocation).eventByIndex(entryIndex);
239
+ }
240
+
241
+ /**
242
+ * Returns the index of the flame chart entry with the anchor's start time,
243
+ * duration and title, or -1 if there is none. Duration separates nested
244
+ * entries that share a start time and title, such as recursive calls.
245
+ *
246
+ * Entry indexes change when the flame chart rebuilds its entries, for
247
+ * example after entries are hidden from the context menu. The index encoded
248
+ * in the synthetic key is therefore checked first and used only if that
249
+ * entry still matches. Otherwise every entry is scanned, because
250
+ * `entryStartTimes` concatenates all tracks and is not sorted.
251
+ */
252
+ #findEntryIndexForSyntheticKey(anchor: CommentManager.CommentManager.TimelineAnchorSignature): number {
253
+ const dataProvider = this.#dataProviderFor(anchor.chartLocation);
254
+ const timelineData = dataProvider.timelineData();
255
+ const entryCount = timelineData.entryStartTimes.length;
256
+ const matchesAnchor = (index: number): boolean => {
257
+ // The anchor's times were computed by entryStartTimeMicro() and
258
+ // entryDurationMicro() from the same trace, so exact comparisons are
259
+ // safe.
260
+ return entryStartTimeMicro(timelineData, index) === anchor.startTimeMicro &&
261
+ entryDurationMicro(timelineData, index) === anchor.durationMicro &&
262
+ (dataProvider.entryTitle(index) ?? '') === anchor.entryName;
263
+ };
264
+
265
+ const encodedIndex = Number(anchor.traceEventKey.slice(`${SYNTHETIC_KEY_PREFIX}${anchor.chartLocation}-`.length));
266
+ if (Number.isInteger(encodedIndex) && encodedIndex >= 0 && encodedIndex < entryCount &&
267
+ matchesAnchor(encodedIndex)) {
268
+ return encodedIndex;
269
+ }
270
+ for (let index = 0; index < entryCount; index++) {
271
+ if (matchesAnchor(index)) {
272
+ return index;
273
+ }
274
+ }
275
+ return -1;
276
+ }
277
+
179
278
  #syncCommentOverlays(): void {
180
279
  const existingOverlays = this.#delegate.overlays.overlaysOfType<Trace.Types.Overlays.CommentPin>('COMMENT_PIN');
181
280
  const currentTraceId = this.#traceId();
@@ -202,10 +301,13 @@ export class TimelineCommentController {
202
301
  if (existingOverlays.some(overlay => overlay.commentThreadId === thread.id)) {
203
302
  continue;
204
303
  }
205
- // The key was created by EventsSerializer for this trace, because the
206
- // thread's traceId matches.
207
- const event = this.#delegate.eventsSerializer.eventForKey(
208
- thread.anchor.timeline.traceEventKey as Trace.Types.File.SerializableKey, parsedTrace);
304
+ const event = this.#eventForTimelineAnchor(thread.anchor.timeline, parsedTrace);
305
+ // The entry of a synthetic key can be missing from the flame chart, for
306
+ // example after it is hidden from the context menu. The thread then has
307
+ // no pin until #onMainDataChanged() syncs again and finds the entry.
308
+ if (!event) {
309
+ continue;
310
+ }
209
311
  this.#delegate.overlays.add({
210
312
  type: 'COMMENT_PIN',
211
313
  entry: event,
@@ -223,6 +325,11 @@ export class TimelineCommentController {
223
325
 
224
326
  if (mutationsMade) {
225
327
  void this.#delegate.overlays.update();
328
+ } else {
329
+ // Overlays#reset() clears previous overlays before setParsedTrace() runs.
330
+ // Run #onOverlaysUpdated() so notifyCustomAnchorsMoved() still fires when
331
+ // the new trace adds no comment pins of its own.
332
+ this.#onOverlaysUpdated();
226
333
  }
227
334
  }
228
335
 
@@ -304,27 +411,23 @@ export class TimelineCommentController {
304
411
  if (!traceId) {
305
412
  return null;
306
413
  }
307
- // Events that EventsSerializer cannot key, such as JS samples, cannot be
308
- // found again when the thread is pinned, so they are not commentable.
309
- const traceEventKey = this.#delegate.eventsSerializer.keyForEvent(entry.event);
310
- if (!traceEventKey) {
311
- return null;
312
- }
313
-
314
- const {flameChart, dataProvider, chartLocation, canvas, entryIndex, highlightRect} = entry;
414
+ const {flameChart, dataProvider, chartLocation, canvas, entryIndex, event, highlightRect} = entry;
415
+ // Events that EventsSerializer cannot key, such as JS samples, get a
416
+ // synthetic key that encodes the chart and the entry index.
417
+ // #findEntryIndexForSyntheticKey() uses the stored start time, duration
418
+ // and title to find the entry again if the index has changed.
419
+ const traceEventKey =
420
+ this.#delegate.eventsSerializer.keyForEvent(event) ?? `${SYNTHETIC_KEY_PREFIX}${chartLocation}-${entryIndex}`;
315
421
  const timelineData = flameChart.timelineData();
316
422
  if (!timelineData) {
317
423
  throw new Error('Flame chart resolved an entry index without timeline data.');
318
424
  }
319
- // Store the raw title, even when it is empty. The UI applies its own
320
- // display fallback for untitled entries.
425
+ // Store the raw title, even when it is empty. #findEntryIndexForSyntheticKey()
426
+ // compares against it, and the UI applies its own display fallback for
427
+ // untitled entries.
321
428
  const entryName = dataProvider.entryTitle(entryIndex) ?? '';
322
- const startTimeMicro =
323
- Trace.Helpers.Timing.milliToMicro(Trace.Types.Timing.Milli(timelineData.entryStartTimes[entryIndex]));
324
- const totalTime = timelineData.entryTotalTimes[entryIndex];
325
- const durationMicro = !Number.isNaN(totalTime) && totalTime > 0 ?
326
- Trace.Helpers.Timing.milliToMicro(Trace.Types.Timing.Milli(totalTime)) :
327
- undefined;
429
+ const startTimeMicro = entryStartTimeMicro(timelineData, entryIndex);
430
+ const durationMicro = entryDurationMicro(timelineData, entryIndex);
328
431
 
329
432
  return {
330
433
  anchor: {
@@ -338,9 +441,44 @@ export class TimelineCommentController {
338
441
  durationMicro,
339
442
  chartLocation,
340
443
  },
444
+ agentContext: this.#agentContextFor(entry),
341
445
  },
342
446
  anchorElement: canvas,
343
447
  highlightRect,
344
448
  };
345
449
  }
450
+
451
+ /**
452
+ * Returns the lines that describe the entry to the AI agent, or undefined
453
+ * if no trace is active.
454
+ */
455
+ #agentContextFor(entry: ResolvedEntry): string[]|undefined {
456
+ if (!this.#parsedTrace) {
457
+ return undefined;
458
+ }
459
+ return agentContextForEntry(entry.event, this.#trackNameFor(entry), this.#parsedTrace);
460
+ }
461
+
462
+ /**
463
+ * Returns the name of the track that contains the entry. Groups are stored
464
+ * in level order and nested groups follow their parent, so the entry's
465
+ * track is the last group that starts at or above the entry's level. The
466
+ * data provider's groupForEvent() is not used because it only knows tracks
467
+ * built by track appenders, and not, for example, the Frames track.
468
+ */
469
+ #trackNameFor(entry: ResolvedEntry): string|null {
470
+ const timelineData = entry.flameChart.timelineData();
471
+ if (!timelineData) {
472
+ return null;
473
+ }
474
+ const level = timelineData.entryLevels[entry.entryIndex];
475
+ let trackName: string|null = null;
476
+ for (const group of timelineData.groups) {
477
+ if (group.startLevel > level) {
478
+ break;
479
+ }
480
+ trackName = group.name;
481
+ }
482
+ return trackName;
483
+ }
346
484
  }
@@ -962,6 +962,10 @@ export class TimelinePanel extends TimelinePanelBase implements Client, Timeline
962
962
  // We also hide the sidebar - else if the user is viewing a trace and
963
963
  // then load/record another, the sidebar remains visible.
964
964
  this.#hideSidebar();
965
+ // Hide the SearchableView so Ctrl/Cmd-F cannot search a hidden trace
966
+ // and flame chart overlays (such as comment pins rendered on
967
+ // document.body) do not remain visible above the StatusDialog.
968
+ this.#searchableView.hideWidget();
965
969
  return;
966
970
  }
967
971
  default:
@@ -89,7 +89,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
89
89
  // clang-format off
90
90
  return html`
91
91
  <div class='regex-row'>
92
- <devtools-checkbox title=${helpText} aria-label=${helpText} ?checked=${!regex.disabled}
92
+ <devtools-checkbox title=${helpText} aria-label=${helpText} .checked=${!regex.disabled}
93
93
  @change=${(event: Event) => onExistingRegexEnableToggle(regex, (event.currentTarget as UI.UIUtils.CheckboxLabel).checked)}
94
94
  .jslogContext=${'timeline.ignore-list-pattern'}>${regex.pattern}</devtools-checkbox>
95
95
  <devtools-button
@@ -23,6 +23,7 @@ import * as StatusDialog from './StatusDialog.js';
23
23
  import * as TargetForEvent from './TargetForEvent.js';
24
24
  import * as ThirdPartyTreeView from './ThirdPartyTreeView.js';
25
25
  import * as ThreadAppender from './ThreadAppender.js';
26
+ import * as TimelineCommentContext from './TimelineCommentContext.js';
26
27
  import * as TimelineCommentController from './TimelineCommentController.js';
27
28
  import * as TimelineController from './TimelineController.js';
28
29
  import * as TimelineDetailsView from './TimelineDetailsView.js';
@@ -69,6 +70,7 @@ export {
69
70
  TargetForEvent,
70
71
  ThirdPartyTreeView,
71
72
  ThreadAppender,
73
+ TimelineCommentContext,
72
74
  TimelineCommentController,
73
75
  TimelineController,
74
76
  TimelineDetailsView,
@@ -197,12 +197,20 @@ export function createTreemapData(
197
197
  duplication: Trace.Extras.ScriptDuplication.ScriptDuplication): TreemapData {
198
198
  const nodes: TreemapNode[] = [];
199
199
  const htmlNodesByFrameId = new Map<string, TreemapNode>();
200
+ const seenRequests = new Set<Trace.Types.Events.SyntheticNetworkRequest>();
200
201
 
201
202
  for (const script of scripts.scripts) {
202
203
  if (!script.url) {
203
204
  continue;
204
205
  }
205
206
 
207
+ if (!script.inline && script.request) {
208
+ if (seenRequests.has(script.request)) {
209
+ continue;
210
+ }
211
+ seenRequests.add(script.request);
212
+ }
213
+
206
214
  const name = script.url;
207
215
  const sizes = Trace.Handlers.ModelHandlers.Scripts.getScriptGeneratedSizes(script);
208
216
 
@@ -753,20 +753,22 @@ export class WebauthnPaneImpl extends UI.Panel.Panel implements
753
753
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.VirtualAuthenticatorEnvironmentEnabled);
754
754
  this.#hasBeenEnabled = true;
755
755
  }
756
- if (this.#model) {
757
- await this.#model.setVirtualAuthEnvEnabled(enable);
756
+ try {
757
+ if (this.#model) {
758
+ await this.#model.setVirtualAuthEnvEnabled(enable);
759
+ }
760
+
761
+ if (enable) {
762
+ await this.#loadInitialAuthenticators();
763
+ } else {
764
+ this.#removeAuthenticatorSections();
765
+ }
766
+ this.#enabled = enable;
767
+ } finally {
768
+ this.#isEnabling = undefined;
769
+ this.requestUpdate();
770
+ resolve();
758
771
  }
759
-
760
- if (enable) {
761
- await this.#loadInitialAuthenticators();
762
- } else {
763
- this.#removeAuthenticatorSections();
764
- }
765
-
766
- this.#isEnabling = undefined;
767
- this.#enabled = enable;
768
- this.requestUpdate();
769
- resolve();
770
772
  });
771
773
  }
772
774
 
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: fae02652a5804f15d9defae53943428ceffa617d
4
+ Revision: d4d613355ad137685e4f35deed6a3697cd9d5202
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -1,10 +1,10 @@
1
1
  Name: Puppeteer Core
2
2
  Short Name: Puppeteer Core
3
3
  URL: https://github.com/puppeteer/puppeteer/tree/main/packages/puppeteer-core
4
- Version: 25.14.0
4
+ Version: 25.16.0
5
5
  License: Apache-2.0
6
6
  License File: LICENSE
7
- Revision: d1b9a2162a0113356db5093f055b4a2e1979c6a8
7
+ Revision: a207faf527ce4305b33a6c0f9706b090c21c115e
8
8
  Security Critical: no
9
9
  Shipped: yes
10
10
  Update Mechanism: Autoroll
@@ -439,6 +439,24 @@ export declare abstract class Browser extends EventEmitter<BrowserEvents> {
439
439
  * {@link Browser.defaultBrowserContext | default browser context}).
440
440
  */
441
441
  abstract target(): Target;
442
+ /**
443
+ * Sets the network conditions (blocklist or allowlist) and re-applies the
444
+ * conditions to all targets.
445
+ * To clear all network conditions, omit the argument or pass `null`.
446
+ *
447
+ * @param conditions - The network conditions to apply.
448
+ *
449
+ * @remarks
450
+ * Currently only supported for Chrome and the CDP protocol.
451
+ *
452
+ * Targets that are already on a blocked URL when `restrictNetwork` is called
453
+ * will remain attached and stay on the blocked page. This is a behavior difference
454
+ * compared to launching the browser with network restrictions, where such targets
455
+ * are detached immediately upon initial attach.
456
+ *
457
+ * @experimental
458
+ */
459
+ restrictNetwork(conditions?: NetworkRestrictions | null): Promise<void>;
442
460
  /**
443
461
  * Waits until a {@link Target | target} matching the given `predicate`
444
462
  * appears and returns it.
@@ -4056,9 +4074,28 @@ export declare abstract class HTTPRequest {
4056
4074
  * Fetches the POST data for the request from the browser.
4057
4075
  */
4058
4076
  abstract fetchPostData(): Promise<string | undefined>;
4077
+ /**
4078
+ * Fetches the POST data for the request from the browser as a `Uint8Array`.
4079
+ *
4080
+ * @remarks
4081
+ * If the request has no POST data or fetching the POST data from the browser
4082
+ * fails, this method resolves to `undefined`.
4083
+ *
4084
+ * @returns A promise that resolves to the raw POST data bytes, or
4085
+ * `undefined` when the request has no POST data or fetching it fails.
4086
+ */
4087
+ abstract content(): Promise<Uint8Array | undefined>;
4059
4088
  /**
4060
4089
  * An object with HTTP headers associated with the request. All
4061
4090
  * header names are lower-case.
4091
+ *
4092
+ * @remarks
4093
+ *
4094
+ * Under CDP, `page.on('request')` fires before the browser's network stack
4095
+ * attaches all headers (such as `accept`, `accept-encoding`, `cookie`,
4096
+ * `host`, and `sec-fetch-*`). The full set of headers is populated
4097
+ * asynchronously and is available by the time `page.on('response')` or
4098
+ * `page.on('requestfinished')` fires.
4062
4099
  */
4063
4100
  abstract headers(): Record<string, string>;
4064
4101
  /**
@@ -4068,7 +4105,7 @@ export declare abstract class HTTPRequest {
4068
4105
  *
4069
4106
  * Headers are copied to the new Request instance. The request URL and
4070
4107
  * method are preserved. The body is built from
4071
- * {@link HTTPRequest.fetchPostData} when the request has post data,
4108
+ * {@link HTTPRequest.content} when the request has post data,
4072
4109
  * otherwise the Request is created without a body. For `GET` and
4073
4110
  * `HEAD` requests the body is always omitted, as required by the
4074
4111
  * Fetch API.
@@ -5503,6 +5540,8 @@ export declare abstract class Locator<T> extends EventEmitter<LocatorEvents> {
5503
5540
  * method is chosen based on the type. `contenteditable`, select, textarea and
5504
5541
  * input elements are supported. For checkboxes, radio buttons and switches
5505
5542
  * specify a boolean value.
5543
+ * Read-only elements and values the element does not accept are rejected without
5544
+ * modifying the element.
5506
5545
  */
5507
5546
  fill<ElementType extends Element>(
5508
5547
  this: Locator<ElementType>,
@@ -5992,6 +6031,25 @@ export declare interface NetworkConditions {
5992
6031
  latency?: number;
5993
6032
  }
5994
6033
 
6034
+ /**
6035
+ * @experimental
6036
+ * @public
6037
+ */
6038
+ export declare interface NetworkRestrictions {
6039
+ /**
6040
+ * A list of {@link https://urlpattern.spec.whatwg.org/ | URLPattern} strings to block.
6041
+ * Mutually exclusive with {@link NetworkRestrictions.allowlist}.
6042
+ * Passing `[]` or omitting this option means no restriction.
6043
+ */
6044
+ blocklist?: string[];
6045
+ /**
6046
+ * A list of {@link https://urlpattern.spec.whatwg.org/ | URLPattern} strings to allow.
6047
+ * Mutually exclusive with {@link NetworkRestrictions.blocklist}.
6048
+ * Passing `[]` or omitting this option means no restriction.
6049
+ */
6050
+ allowlist?: string[];
6051
+ }
6052
+
5995
6053
  /**
5996
6054
  * @public
5997
6055
  */
@@ -6129,13 +6187,17 @@ export declare abstract class Page extends EventEmitter<PageEvents> {
6129
6187
  * Consider using {@link BrowserContext.overridePermissions} to grant
6130
6188
  * permissions for the page to read its geolocation.
6131
6189
  *
6190
+ * Pass `null` to remove the geolocation override.
6191
+ *
6132
6192
  * @example
6133
6193
  *
6134
6194
  * ```ts
6135
6195
  * await page.setGeolocation({latitude: 59.95, longitude: 30.31667});
6196
+ * // Later, go back to the browser's real geolocation:
6197
+ * await page.setGeolocation(null);
6136
6198
  * ```
6137
6199
  */
6138
- abstract setGeolocation(options: GeolocationOptions): Promise<void>;
6200
+ abstract setGeolocation(options: GeolocationOptions | null): Promise<void>;
6139
6201
  /**
6140
6202
  * A target this page was created from.
6141
6203
  *
@@ -7983,6 +8045,17 @@ export declare abstract class Page extends EventEmitter<PageEvents> {
7983
8045
  * @experimental
7984
8046
  */
7985
8047
  abstract windowId(): Promise<WindowId>;
8048
+ /**
8049
+ * Returns information about the browser tab of this page. The result is a
8050
+ * snapshot and is not updated when the tab changes.
8051
+ *
8052
+ * @returns `null` if the page is not in a tab strip, for example, in
8053
+ * `chrome-headless-shell`. Chrome before M150 does not report tab
8054
+ * information, so the method also returns `null` there.
8055
+ *
8056
+ * @experimental
8057
+ */
8058
+ abstract tabInfo(): Promise<TabInfo | null>;
7986
8059
  [disposeSymbol](): void;
7987
8060
  [asyncDisposeSymbol](): Promise<void>;
7988
8061
  /**
@@ -8624,6 +8697,7 @@ declare namespace Puppeteer_2 {
8624
8697
  LaunchPWAOptions,
8625
8698
  GetPWAStateOptions,
8626
8699
  PWAState,
8700
+ NetworkRestrictions,
8627
8701
  BrowserContextEvents,
8628
8702
  CDPEvents,
8629
8703
  CDPSessionEvents,
@@ -8679,6 +8753,7 @@ declare namespace Puppeteer_2 {
8679
8753
  NewDocumentScriptEvaluation,
8680
8754
  ReloadOptions,
8681
8755
  HeapSnapshotOptions,
8756
+ TabInfo,
8682
8757
  WritableDestination,
8683
8758
  WebWorkerEvents,
8684
8759
  VisibilityOption,
@@ -9625,7 +9700,8 @@ export declare interface SerializedAXNode {
9625
9700
  * Get an ElementHandle for this AXNode if available.
9626
9701
  *
9627
9702
  * If the underlying DOM element has been disposed, the method might return an
9628
- * error.
9703
+ * error. If the frame has navigated to a new document since the snapshot,
9704
+ * the method returns `null`.
9629
9705
  */
9630
9706
  elementHandle(): Promise<ElementHandle | null>;
9631
9707
  }
@@ -9700,6 +9776,31 @@ export declare type SupportedWebDriverCapability = Exclude<
9700
9776
  'unhandledPromptBehavior' | 'acceptInsecureCerts'
9701
9777
  >;
9702
9778
 
9779
+ /**
9780
+ * Information about the browser tab of a page. See {@link Page.tabInfo}.
9781
+ *
9782
+ * @public
9783
+ * @experimental
9784
+ */
9785
+ export declare interface TabInfo {
9786
+ /**
9787
+ * Zero-based index of the tab in its window's tab strip.
9788
+ */
9789
+ index: number;
9790
+ /**
9791
+ * Whether the tab is the active tab in its window.
9792
+ */
9793
+ active: boolean;
9794
+ /**
9795
+ * Whether the tab is pinned.
9796
+ */
9797
+ pinned: boolean;
9798
+ /**
9799
+ * ID of the tab group the tab belongs to, if any.
9800
+ */
9801
+ groupId?: string;
9802
+ }
9803
+
9703
9804
  /**
9704
9805
  * Target represents a
9705
9806
  * {@link https://chromedevtools.github.io/devtools-protocol/tot/Target/ | CDP target}.
@@ -10481,6 +10582,15 @@ export declare interface WsOptions {
10481
10582
  * @defaultValue `256 * 1024 * 1024`
10482
10583
  */
10483
10584
  maxPayload?: number;
10585
+ /**
10586
+ * Time in milliseconds to wait for the WebSocket opening handshake before
10587
+ * failing. Without it, connecting to a host that accepts the TCP connection
10588
+ * but never answers the upgrade request waits until the operating system
10589
+ * gives up. Node.js only.
10590
+ *
10591
+ * @defaultValue no timeout
10592
+ */
10593
+ handshakeTimeout?: number;
10484
10594
  }
10485
10595
 
10486
10596
  export {};