chrome-devtools-frontend 1.0.1555430 → 1.0.1558690

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 (232) hide show
  1. package/front_end/core/common/Object.ts +5 -1
  2. package/front_end/core/host/ResourceLoader.ts +1 -1
  3. package/front_end/core/host/UserMetrics.ts +3 -1
  4. package/front_end/core/sdk/DOMModel.ts +7 -0
  5. package/front_end/core/sdk/NetworkManager.ts +0 -7
  6. package/front_end/core/sdk/SourceMap.ts +16 -2
  7. package/front_end/core/sdk/SourceMapManager.ts +1 -1
  8. package/front_end/core/sdk/SourceMapScopesInfo.ts +11 -4
  9. package/front_end/entrypoints/formatter_worker/FormatterActions.ts +3 -0
  10. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +119 -8
  11. package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
  12. package/front_end/entrypoints/main/GlobalAiButton.ts +5 -1
  13. package/front_end/generated/Deprecation.ts +0 -7
  14. package/front_end/generated/InspectorBackendCommands.ts +4 -4
  15. package/front_end/generated/protocol.ts +9 -1
  16. package/front_end/models/ai_assistance/AiConversation.ts +71 -10
  17. package/front_end/models/ai_assistance/ArtifactsManager.ts +67 -0
  18. package/front_end/models/ai_assistance/ConversationHandler.ts +3 -2
  19. package/front_end/models/ai_assistance/agents/AiAgent.ts +17 -27
  20. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +151 -3
  21. package/front_end/models/ai_assistance/agents/StylingAgent.ts +1 -1
  22. package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
  23. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +0 -2
  24. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +3 -3
  25. package/front_end/models/annotations/AnnotationRepository.ts +2 -2
  26. package/front_end/models/bindings/CompilerScriptMapping.ts +7 -6
  27. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +4 -4
  28. package/front_end/models/greendev/Prototypes.ts +56 -0
  29. package/front_end/models/greendev/README.md +5 -0
  30. package/front_end/models/greendev/greendev.ts +5 -0
  31. package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
  32. package/front_end/models/stack_trace/StackTraceImpl.ts +5 -3
  33. package/front_end/models/stack_trace/StackTraceModel.ts +53 -40
  34. package/front_end/models/trace/EventsSerializer.ts +8 -2
  35. package/front_end/models/trace/extras/TraceTree.ts +4 -2
  36. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +2 -2
  37. package/front_end/models/trace/insights/LCPDiscovery.ts +0 -2
  38. package/front_end/models/trace/types/TraceEvents.ts +0 -1
  39. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +96 -91
  40. package/front_end/panels/ai_assistance/aiAssistancePanel.css +16 -0
  41. package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +109 -7
  42. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -2
  43. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +7 -8
  44. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +15 -8
  45. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +9 -9
  46. package/front_end/panels/ai_assistance/components/artifactsViewer.css +6 -1
  47. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +5 -6
  48. package/front_end/panels/application/AppManifestView.ts +360 -391
  49. package/front_end/panels/application/ApplicationPanelSidebar.ts +24 -57
  50. package/front_end/panels/application/CookieItemsView.ts +1 -0
  51. package/front_end/panels/application/OpenedWindowDetailsView.ts +2 -0
  52. package/front_end/panels/application/ServiceWorkersView.ts +2 -0
  53. package/front_end/panels/application/SharedStorageTreeElement.ts +3 -0
  54. package/front_end/panels/application/StorageView.ts +1 -0
  55. package/front_end/panels/application/appManifestView.css +49 -1
  56. package/front_end/panels/application/components/ProtocolHandlersView.ts +2 -2
  57. package/front_end/panels/console/ConsoleViewMessage.ts +4 -3
  58. package/front_end/panels/elements/ElementsTreeElement.ts +30 -1
  59. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  60. package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +7 -1
  61. package/front_end/panels/elements/components/AdornerManager.ts +8 -0
  62. package/front_end/panels/emulation/DeviceModeToolbar.ts +3 -1
  63. package/front_end/panels/issues/AffectedResourcesView.ts +0 -1
  64. package/front_end/panels/lighthouse/LighthousePanel.ts +10 -0
  65. package/front_end/panels/lighthouse/lighthousePanel.css +46 -3
  66. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +4 -8
  67. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +148 -97
  68. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
  69. package/front_end/panels/linear_memory_inspector/components/linearMemoryValueInterpreter.css +37 -35
  70. package/front_end/panels/network/NetworkLogViewColumns.ts +9 -9
  71. package/front_end/panels/network/RequestCookiesView.ts +125 -141
  72. package/front_end/panels/network/components/RequestHeadersView.ts +2 -2
  73. package/front_end/panels/network/requestCookiesView.css +22 -20
  74. package/front_end/panels/recorder/components/RecordingView.ts +3 -3
  75. package/front_end/panels/recorder/components/StepView.ts +2 -1
  76. package/front_end/panels/settings/SettingsScreen.ts +133 -1
  77. package/front_end/panels/settings/keybindsSettingsTab.css +4 -0
  78. package/front_end/panels/settings/settings-meta.ts +24 -0
  79. package/front_end/panels/settings/settingsScreen.css +4 -0
  80. package/front_end/panels/sources/CallStackSidebarPane.ts +7 -3
  81. package/front_end/panels/sources/DebuggerPausedMessage.ts +125 -90
  82. package/front_end/panels/sources/SourcesPanel.ts +10 -7
  83. package/front_end/panels/sources/UISourceCodeFrame.ts +3 -17
  84. package/front_end/panels/sources/debuggerPausedMessage.css +8 -0
  85. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -1
  86. package/front_end/panels/timeline/components/sidebarInsightsTab.css +2 -0
  87. package/front_end/third_party/acorn/estree-legacy.d.ts +4 -0
  88. package/front_end/third_party/chromium/README.chromium +1 -1
  89. package/front_end/third_party/puppeteer/README.chromium +2 -2
  90. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +12 -0
  91. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
  92. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
  93. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.d.ts.map +1 -1
  94. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.js.map +1 -1
  95. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  96. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  97. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  98. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  99. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +14 -2
  100. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  101. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +3 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +6 -0
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js +0 -20
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/HTTPRequest.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +3 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +10 -14
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +14 -0
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Connection.d.ts.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts +3 -1
  120. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.d.ts.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js +12 -0
  122. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Browser.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts +1 -0
  124. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js +22 -0
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/EmulationManager.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +3 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +9 -2
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +21 -7
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +26 -0
  142. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +86 -20
  143. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +12 -0
  144. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.d.ts.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.js.map +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +14 -2
  153. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  155. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +3 -1
  156. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
  157. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +6 -0
  158. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
  159. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts +0 -1
  160. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js +0 -20
  162. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/HTTPRequest.js.map +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +3 -1
  164. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +11 -15
  166. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +1 -0
  168. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +14 -0
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Connection.d.ts.map +1 -1
  172. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts +3 -1
  173. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.d.ts.map +1 -1
  174. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js +12 -0
  175. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Browser.js.map +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts +1 -0
  177. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js +22 -0
  179. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/EmulationManager.js.map +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +3 -1
  181. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  182. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +9 -2
  183. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  184. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +21 -7
  185. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  186. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
  187. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  188. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  189. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js.map +1 -1
  190. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  191. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  192. package/front_end/third_party/puppeteer/package/lib/types.d.ts +26 -0
  193. package/front_end/third_party/puppeteer/package/package.json +2 -2
  194. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +18 -0
  195. package/front_end/third_party/puppeteer/package/src/api/CDPSession.ts +1 -2
  196. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +2 -4
  197. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +2 -4
  198. package/front_end/third_party/puppeteer/package/src/api/Page.ts +18 -6
  199. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +13 -0
  200. package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +0 -33
  201. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +14 -28
  202. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +19 -0
  203. package/front_end/third_party/puppeteer/package/src/bidi/core/Connection.ts +3 -2
  204. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +19 -0
  205. package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +30 -0
  206. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +15 -6
  207. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +29 -10
  208. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +3 -3
  209. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  210. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  211. package/front_end/ui/components/icon_button/iconButton.css +3 -1
  212. package/front_end/ui/components/report_view/ReportView.docs.ts +37 -0
  213. package/front_end/ui/components/report_view/ReportView.ts +12 -6
  214. package/front_end/ui/components/report_view/report.css +16 -0
  215. package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
  216. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +135 -7
  217. package/front_end/ui/components/text_editor/config.ts +6 -6
  218. package/front_end/ui/legacy/ContextMenu.ts +11 -2
  219. package/front_end/ui/legacy/Floaty.ts +5 -9
  220. package/front_end/ui/legacy/InspectorView.ts +2 -1
  221. package/front_end/ui/legacy/ReportView.ts +5 -4
  222. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  223. package/front_end/ui/legacy/Toolbar.ts +4 -0
  224. package/front_end/ui/legacy/UIUtils.ts +0 -2
  225. package/front_end/ui/legacy/Widget.ts +7 -0
  226. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +18 -3
  227. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +3 -3
  228. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +6 -0
  229. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +0 -1
  230. package/front_end/ui/legacy/reportView.css +0 -24
  231. package/front_end/ui/visual_logging/KnownContextValues.ts +7 -0
  232. package/package.json +1 -1
@@ -105,7 +105,11 @@ export class ObjectWrapper<Events> implements EventTarget<Events> {
105
105
  // new listeners.
106
106
  for (const listener of [...listeners]) {
107
107
  if (!listener.disposed) {
108
- listener.listener.call(listener.thisObject, event);
108
+ try {
109
+ listener.listener.call(listener.thisObject, event);
110
+ } catch (err) {
111
+ console.error(`Event listener for ${String(eventType)} throw an error:`, err);
112
+ }
109
113
  }
110
114
  }
111
115
  }
@@ -206,7 +206,7 @@ async function fetchToString(url: string): Promise<string> {
206
206
 
207
207
  function canBeRemoteFilePath(url: string): boolean {
208
208
  try {
209
- const urlObject = new URL(url);
209
+ const urlObject = new URL(new URL(url).toString()); // Normalize first.
210
210
  return urlObject.protocol === 'file:' && urlObject.host !== '';
211
211
  } catch {
212
212
  return false;
@@ -531,7 +531,9 @@ export enum Action {
531
531
  AiCodeGenerationSuggestionAccepted = 196,
532
532
  InsightTeaserModelDownloadStarted = 197,
533
533
  InsightTeaserModelDownloadCompleted = 198,
534
- MAX_VALUE = 199,
534
+ AiCodeGenerationError = 199,
535
+ AiCodeGenerationRequestTriggered = 200,
536
+ MAX_VALUE = 201,
535
537
  /* eslint-enable @typescript-eslint/naming-convention */
536
538
  }
537
539
 
@@ -322,6 +322,13 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
322
322
  return false;
323
323
  }
324
324
 
325
+ isRootNode(): boolean {
326
+ if (this.nodeType() === Node.ELEMENT_NODE && this.nodeName() === 'HTML') {
327
+ return true;
328
+ }
329
+ return false;
330
+ }
331
+
325
332
  isSVGNode(): boolean {
326
333
  return this.#isSVGNode;
327
334
  }
@@ -2716,13 +2716,6 @@ export interface Conditions {
2716
2716
  packetLoss?: number;
2717
2717
  packetQueueLength?: number;
2718
2718
  packetReordering?: boolean;
2719
- // TODO(crbug.com/1219425): In the future, it might be worthwhile to
2720
- // consider avoiding mixing up presentation state (e.g.: displayed
2721
- // titles) with behavioral state (e.g.: the throttling amounts). In
2722
- // this particular case, the title (along with other properties)
2723
- // doubles as both part of group of fields which (loosely) uniquely
2724
- // identify instances, as well as the literal string displayed in the
2725
- // UI, which leads to complications around persistance.
2726
2719
  // TODO(crbug.com/422682525): make this just a function because we use lazy string everywhere.
2727
2720
  title: string|(() => string);
2728
2721
  // Instances may be serialized to local storage, so localized titles
@@ -138,7 +138,7 @@ export class SourceMap {
138
138
 
139
139
  readonly #debugId?: DebugId;
140
140
 
141
- scopesFallbackPromiseForTest?: Promise<unknown>;
141
+ #scopesFallbackPromise?: Promise<void>;
142
142
 
143
143
  /**
144
144
  * Implements Source Map V3 model. See https://github.com/google/closure-compiler/wiki/Source-Maps
@@ -225,6 +225,11 @@ export class SourceMap {
225
225
  return this.#scopesInfo !== null && !this.#scopesInfo.isEmpty();
226
226
  }
227
227
 
228
+ waitForScopeInfo(): Promise<void> {
229
+ this.#ensureSourceMapProcessed();
230
+ return this.#scopesFallbackPromise ?? Promise.resolve();
231
+ }
232
+
228
233
  findEntry(lineNumber: number, columnNumber: number, inlineFrameIndex?: number): SourceMapEntry|null {
229
234
  this.#ensureSourceMapProcessed();
230
235
  if (inlineFrameIndex && this.#scopesInfo !== null) {
@@ -252,6 +257,15 @@ export class SourceMap {
252
257
  return index ? mappings[index - 1] : null;
253
258
  }
254
259
 
260
+ /** Returns the entry at the given position but only if an entry exists for that exact position */
261
+ findEntryExact(lineNumber: number, columnNumber: number): SourceMapEntry|null {
262
+ const entry = this.findEntry(lineNumber, columnNumber);
263
+ if (entry?.lineNumber === lineNumber && entry.columnNumber === columnNumber) {
264
+ return entry;
265
+ }
266
+ return null;
267
+ }
268
+
255
269
  findEntryRanges(lineNumber: number, columnNumber: number): {
256
270
  range: TextUtils.TextRange.TextRange,
257
271
  sourceRange: TextUtils.TextRange.TextRange,
@@ -411,7 +425,7 @@ export class SourceMap {
411
425
  try {
412
426
  this.eachSection(this.parseMap.bind(this));
413
427
  if (!this.hasScopeInfo()) {
414
- this.scopesFallbackPromiseForTest = this.#buildScopesFallback().then(info => {
428
+ this.#scopesFallbackPromise = this.#buildScopesFallback().then(info => {
415
429
  this.#scopesInfo = info;
416
430
  });
417
431
  }
@@ -182,7 +182,7 @@ export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWr
182
182
  }
183
183
 
184
184
  waitForSourceMapsProcessedForTest(): Promise<unknown> {
185
- return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.scopesFallbackPromiseForTest));
185
+ return Promise.all(this.#sourceMaps.keys().map(sourceMap => sourceMap.waitForScopeInfo()));
186
186
  }
187
187
  }
188
188
 
@@ -123,16 +123,23 @@ export class SourceMapScopesInfo {
123
123
  sourceIndex < numSourceUrls;
124
124
  const isStackFrame = node.kind === Formatter.FormatterWorkerPool.ScopeKind.FUNCTION ||
125
125
  node.kind === Formatter.FormatterWorkerPool.ScopeKind.ARROW_FUNCTION;
126
- // TODO(crbug.com/368222773): Instead of mapping `start`, we should report a number of candidates. e.g. for arrow functions we should
127
- // follow the spec and map the `=>` as the spec says that is where the original name (if any) for arrow functions can be found.
128
- const name = node.kind === Formatter.FormatterWorkerPool.ScopeKind.FUNCTION ? startEntry?.name : undefined;
126
+ let name: string|undefined = undefined;
127
+ for (const offset of node.nameMappingLocations ?? []) {
128
+ const position = positionFromOffset(offset);
129
+ const entry = sourceMap.findEntryExact(position.line, position.column);
130
+ if (entry?.name !== undefined) {
131
+ // Only consider named mappings.
132
+ name = entry.name;
133
+ break;
134
+ }
135
+ }
129
136
 
130
137
  let scope: ScopesCodec.OriginalScope|undefined;
131
138
  if (canMapOriginalPosition) {
132
139
  scope = {
133
140
  start: {line: startEntry.sourceLineNumber, column: startEntry.sourceColumnNumber},
134
141
  end: {line: endEntry.sourceLineNumber, column: endEntry.sourceColumnNumber},
135
- name,
142
+ name: name ?? node.name,
136
143
  isStackFrame,
137
144
  variables: [],
138
145
  children: [],
@@ -55,6 +55,9 @@ export interface ScopeTreeNode {
55
55
  variables: Array<{name: string, kind: DefinitionKind, offsets: number[]}>;
56
56
  start: number;
57
57
  end: number;
58
+ // If present, apply source map mappings to these locations to figure out the original function name.
59
+ nameMappingLocations?: number[];
60
+ name?: string;
58
61
  kind: ScopeKind;
59
62
  children: ScopeTreeNode[];
60
63
  }
@@ -17,7 +17,7 @@ export function parseScopes(expression: string, sourceType: 'module'|'script' =
17
17
  } catch {
18
18
  return null;
19
19
  }
20
- return new ScopeVariableAnalysis(root).run();
20
+ return new ScopeVariableAnalysis(root, expression).run();
21
21
  }
22
22
 
23
23
  export interface Use {
@@ -37,13 +37,18 @@ export class Scope {
37
37
  readonly start: number;
38
38
  readonly end: number;
39
39
  readonly kind: ScopeKind;
40
+ readonly name?: string;
41
+ readonly nameMappingLocations?: number[];
40
42
  readonly children: Scope[] = [];
41
43
 
42
- constructor(start: number, end: number, parent: Scope|null, kind: ScopeKind) {
44
+ constructor(
45
+ start: number, end: number, parent: Scope|null, kind: ScopeKind, name?: string, nameMappingLocations?: number[]) {
43
46
  this.start = start;
44
47
  this.end = end;
45
48
  this.parent = parent;
46
49
  this.kind = kind;
50
+ this.name = name;
51
+ this.nameMappingLocations = nameMappingLocations;
47
52
  if (parent) {
48
53
  parent.children.push(this);
49
54
  }
@@ -64,6 +69,8 @@ export class Scope {
64
69
  end: this.end,
65
70
  variables,
66
71
  kind: this.kind,
72
+ name: this.name,
73
+ nameMappingLocations: this.nameMappingLocations,
67
74
  children,
68
75
  };
69
76
  }
@@ -137,9 +144,13 @@ export class ScopeVariableAnalysis {
137
144
  readonly #allNames = new Set<string>();
138
145
  #currentScope: Scope;
139
146
  readonly #rootNode: Acorn.ESTree.Node;
147
+ readonly #sourceText: string;
148
+ #methodName: string|undefined;
149
+ #additionalMappingLocations: number[] = [];
140
150
 
141
- constructor(node: Acorn.ESTree.Node) {
151
+ constructor(node: Acorn.ESTree.Node, sourceText: string) {
142
152
  this.#rootNode = node;
153
+ this.#sourceText = sourceText;
143
154
  this.#rootScope = new Scope(node.start, node.end, null, ScopeKind.GLOBAL);
144
155
  this.#currentScope = this.#rootScope;
145
156
  }
@@ -172,7 +183,9 @@ export class ScopeVariableAnalysis {
172
183
  node.elements.forEach(item => this.#processNode(item));
173
184
  break;
174
185
  case 'ArrowFunctionExpression': {
175
- this.#pushScope(node.start, node.end, ScopeKind.ARROW_FUNCTION);
186
+ this.#pushScope(
187
+ node.start, node.end, ScopeKind.ARROW_FUNCTION, undefined,
188
+ mappingLocationsForArrowFunctions(node, this.#sourceText));
176
189
  node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.VAR, false));
177
190
  if (node.body.type === 'BlockStatement') {
178
191
  // Include the body of the arrow function in the same scope as the arguments.
@@ -253,7 +266,9 @@ export class ScopeVariableAnalysis {
253
266
  break;
254
267
  case 'FunctionDeclaration':
255
268
  this.#processNodeAsDefinition(DefinitionKind.VAR, false, node.id);
256
- this.#pushScope(node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION);
269
+ this.#pushScope(
270
+ node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION, node.id.name,
271
+ mappingLocationsForFunctionDeclaration(node, this.#sourceText));
257
272
  this.#addVariable('this', node.start, DefinitionKind.FIXED);
258
273
  this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
259
274
  node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.LET, false));
@@ -262,7 +277,11 @@ export class ScopeVariableAnalysis {
262
277
  this.#popScope(true);
263
278
  break;
264
279
  case 'FunctionExpression':
265
- this.#pushScope(node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION);
280
+ this.#pushScope(
281
+ node.id?.end ?? node.start, node.end, ScopeKind.FUNCTION, this.#methodName ?? node.id?.name,
282
+ [...this.#additionalMappingLocations, ...mappingLocationsForFunctionExpression(node, this.#sourceText)]);
283
+ this.#additionalMappingLocations = [];
284
+ this.#methodName = undefined;
266
285
  this.#addVariable('this', node.start, DefinitionKind.FIXED);
267
286
  this.#addVariable('arguments', node.start, DefinitionKind.FIXED);
268
287
  node.params.forEach(this.#processNodeAsDefinition.bind(this, DefinitionKind.LET, false));
@@ -286,6 +305,9 @@ export class ScopeVariableAnalysis {
286
305
  case 'MethodDefinition':
287
306
  if (node.computed) {
288
307
  this.#processNode(node.key);
308
+ } else {
309
+ this.#additionalMappingLocations = mappingLocationsForMethodDefinition(node);
310
+ this.#methodName = nameForMethodDefinition(node);
289
311
  }
290
312
  this.#processNode(node.value);
291
313
  break;
@@ -322,6 +344,9 @@ export class ScopeVariableAnalysis {
322
344
  } else {
323
345
  if (node.computed) {
324
346
  this.#processNode(node.key);
347
+ } else if (node.value.type === 'FunctionExpression') {
348
+ this.#additionalMappingLocations = mappingLocationsForMethodDefinition(node);
349
+ this.#methodName = nameForMethodDefinition(node);
325
350
  }
326
351
  this.#processNode(node.value);
327
352
  }
@@ -424,8 +449,8 @@ export class ScopeVariableAnalysis {
424
449
  return this.#allNames;
425
450
  }
426
451
 
427
- #pushScope(start: number, end: number, kind: ScopeKind): void {
428
- this.#currentScope = new Scope(start, end, this.#currentScope, kind);
452
+ #pushScope(start: number, end: number, kind: ScopeKind, name?: string, nameMappingLocations?: number[]): void {
453
+ this.#currentScope = new Scope(start, end, this.#currentScope, kind, name, nameMappingLocations);
429
454
  }
430
455
 
431
456
  #popScope(isFunctionContext: boolean): void {
@@ -488,3 +513,89 @@ export class ScopeVariableAnalysis {
488
513
  this.#processNode(decl.init ?? null);
489
514
  }
490
515
  }
516
+
517
+ function mappingLocationsForFunctionDeclaration(node: Acorn.ESTree.FunctionDeclaration, sourceText: string): number[] {
518
+ // For function declarations we prefer the position of the identifier as per spec, but we'll also return
519
+ // the beginning of the opening parenthesis '('.
520
+ const result = [node.id.start];
521
+
522
+ const searchParenEndPos = node.params.length ? node.params[0].start : node.body.start;
523
+ const parenPos = indexOfCharInBounds(sourceText, '(', node.id.end, searchParenEndPos);
524
+ if (parenPos >= 0) {
525
+ // Note that this is not 100% accurate as there might be a comment containing a open parenthesis between
526
+ // the identifier the and the argument list (unlikely though).
527
+ result.push(parenPos);
528
+ }
529
+
530
+ return result;
531
+ }
532
+
533
+ function mappingLocationsForFunctionExpression(node: Acorn.ESTree.FunctionExpression, sourceText: string): number[] {
534
+ // For function expressions we prefer the position of the identifier or '(' if none is present, as per spec.
535
+ const result = [];
536
+ if (node.id) {
537
+ result.push(node.id.start);
538
+ }
539
+
540
+ const searchParenStartPos = node.id ? node.id.end : node.start;
541
+ const searchParenEndPos = node.params.length ? node.params[0].start : node.body.start;
542
+ const parenPos = indexOfCharInBounds(sourceText, '(', searchParenStartPos, searchParenEndPos);
543
+ if (parenPos >= 0) {
544
+ // Note that this is not 100% accurate as there might be a comment containing a open parenthesis between
545
+ // the identifier the and the argument list (unlikely though).
546
+ result.push(parenPos);
547
+ }
548
+
549
+ return result;
550
+ }
551
+
552
+ function mappingLocationsForMethodDefinition(node: Acorn.ESTree.MethodDefinition|Acorn.ESTree.Property): number[] {
553
+ // Method definitions use a FunctionExpression as their "value" child. So we only
554
+ // record the start of the "key" here and let 'mappingLocationsForFunctionExpression' handle
555
+ // the parenthesis.
556
+ if (node.key.type === 'Identifier' || node.key.type === 'PrivateIdentifier') {
557
+ const id = node.key as Acorn.ESTree.Identifier | Acorn.ESTree.PrivateIdentifier;
558
+ return [id.start];
559
+ }
560
+ return [];
561
+ }
562
+
563
+ function nameForMethodDefinition(node: Acorn.ESTree.MethodDefinition|Acorn.ESTree.Property): string|undefined {
564
+ if (node.key.type === 'Identifier') {
565
+ return node.key.name;
566
+ }
567
+ if (node.key.type === 'PrivateIdentifier') {
568
+ return '#' + node.key.name;
569
+ }
570
+ return undefined;
571
+ }
572
+
573
+ function mappingLocationsForArrowFunctions(node: Acorn.ESTree.ArrowFunctionExpression, sourceText: string): number[] {
574
+ // For arrow functions we use the `(' parenthesis if present, and the `=>` arrow as per spec.
575
+ // Both are not 100% accurate as acorn doesn't tell us their location so we have to search, which is brittle.
576
+ const result = [];
577
+
578
+ const searchParenStartPos = node.async ? node.start + 5 : node.start;
579
+ const searchParenEndPos = node.params.length ? node.params[0].start : node.body.start;
580
+ const parenPos = indexOfCharInBounds(sourceText, '(', searchParenStartPos, searchParenEndPos);
581
+ if (parenPos >= 0) {
582
+ result.push(parenPos);
583
+ }
584
+
585
+ const searchArrowStartPos = node.params.length ? node.params[node.params.length - 1].end : node.start;
586
+ const arrowPos = indexOfCharInBounds(sourceText, '=', searchArrowStartPos, node.body.start);
587
+ if (arrowPos >= 0 && sourceText[arrowPos + 1] === '>') {
588
+ result.push(arrowPos);
589
+ }
590
+
591
+ return result;
592
+ }
593
+
594
+ function indexOfCharInBounds(str: string, needle: string, start: number, end: number): number {
595
+ for (let i = start; i < end; ++i) {
596
+ if (str[i] === needle) {
597
+ return i;
598
+ }
599
+ }
600
+ return -1;
601
+ }
@@ -35,7 +35,7 @@ function computeSubstitution(expression: string, nameMap: Map<string, string|nul
35
35
  checkPrivateFields: false,
36
36
  ranges: false,
37
37
  } as acorn.Options) as Acorn.ESTree.Node;
38
- const scopeVariables = new ScopeVariableAnalysis(root);
38
+ const scopeVariables = new ScopeVariableAnalysis(root, expression);
39
39
  scopeVariables.run();
40
40
  const freeVariables = scopeVariables.getFreeVariables();
41
41
  const result: Replacement[] = [];
@@ -18,6 +18,10 @@ const UIStrings = {
18
18
  * @description Button's string in promotion state.
19
19
  */
20
20
  aiAssistance: 'AI assistance',
21
+ /**
22
+ * @description Button's tooltip text.
23
+ */
24
+ openAiAssistance: 'Open AI assistance panel',
21
25
  } as const;
22
26
  const str_ = i18n.i18n.registerUIStrings('entrypoints/main/GlobalAiButton.ts', UIStrings);
23
27
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -55,7 +59,7 @@ export const DEFAULT_VIEW = (input: ViewInput, output: undefined, target: HTMLEl
55
59
  render(html`
56
60
  <style>${globalAiButtonStyles}</style>
57
61
  <div class="global-ai-button-container">
58
- <button class=${classes} @click=${input.onClick} jslog=${VisualLogging.action().track({click: true}).context('global-ai-button')}>
62
+ <button class=${classes} @click=${input.onClick} title=${i18nString(UIStrings.openAiAssistance)} jslog=${VisualLogging.action().track({click: true}).context('global-ai-button')}>
59
63
  <devtools-icon name="smart-assistant"></devtools-icon>
60
64
  <span class="button-text">${` ${i18nString(UIStrings.aiAssistance)}`}</span>
61
65
  </button>
@@ -30,10 +30,6 @@ export const UIStrings = {
30
30
  * @description This warning occurs when the website attempts to invoke the deprecated `chrome.loadTimes().wasAlternateProtocolAvailable` API.
31
31
  */
32
32
  ChromeLoadTimesWasAlternateProtocolAvailable: "`chrome.loadTimes()` is deprecated, instead use standardized API: `nextHopProtocol` in Navigation Timing 2.",
33
- /**
34
- * @description This warning occurs when the browser attempts to store a cookie containing a banned character. Rather than the cookie string being truncated at the banned character, the entire cookie will be rejected now.
35
- */
36
- CookieWithTruncatingChar: "Cookies containing a `\\(0|r|n)` character will be rejected instead of truncated.",
37
33
  /**
38
34
  * @description This warning occurs when a frame accesses another frame's data after having set `document.domain` without having set the `Origin-Agent-Cluster` http header. This is a companion warning to `documentDomainSettingWithoutOriginAgentClusterHeader`, where that warning occurs when `document.domain` is set, and this warning occurs when an access has been made, based on that previous `document.domain` setting.
39
35
  */
@@ -286,9 +282,6 @@ export const DEPRECATIONS_METADATA: Partial<Record<string, DeprecationDescriptor
286
282
  "ChromeLoadTimesWasAlternateProtocolAvailable": {
287
283
  "chromeStatusFeature": 5637885046816768
288
284
  },
289
- "CookieWithTruncatingChar": {
290
- "milestone": 103
291
- },
292
285
  "CrossOriginAccessBasedOnDocumentDomain": {
293
286
  "milestone": 115
294
287
  },
@@ -81,7 +81,7 @@ inspectorBackend.registerEnum("Audits.AttributionReportingIssueType", {Permissio
81
81
  inspectorBackend.registerEnum("Audits.SharedDictionaryError", {UseErrorCrossOriginNoCorsRequest: "UseErrorCrossOriginNoCorsRequest", UseErrorDictionaryLoadFailure: "UseErrorDictionaryLoadFailure", UseErrorMatchingDictionaryNotUsed: "UseErrorMatchingDictionaryNotUsed", UseErrorUnexpectedContentDictionaryHeader: "UseErrorUnexpectedContentDictionaryHeader", WriteErrorCossOriginNoCorsRequest: "WriteErrorCossOriginNoCorsRequest", WriteErrorDisallowedBySettings: "WriteErrorDisallowedBySettings", WriteErrorExpiredResponse: "WriteErrorExpiredResponse", WriteErrorFeatureDisabled: "WriteErrorFeatureDisabled", WriteErrorInsufficientResources: "WriteErrorInsufficientResources", WriteErrorInvalidMatchField: "WriteErrorInvalidMatchField", WriteErrorInvalidStructuredHeader: "WriteErrorInvalidStructuredHeader", WriteErrorInvalidTTLField: "WriteErrorInvalidTTLField", WriteErrorNavigationRequest: "WriteErrorNavigationRequest", WriteErrorNoMatchField: "WriteErrorNoMatchField", WriteErrorNonIntegerTTLField: "WriteErrorNonIntegerTTLField", WriteErrorNonListMatchDestField: "WriteErrorNonListMatchDestField", WriteErrorNonSecureContext: "WriteErrorNonSecureContext", WriteErrorNonStringIdField: "WriteErrorNonStringIdField", WriteErrorNonStringInMatchDestList: "WriteErrorNonStringInMatchDestList", WriteErrorNonStringMatchField: "WriteErrorNonStringMatchField", WriteErrorNonTokenTypeField: "WriteErrorNonTokenTypeField", WriteErrorRequestAborted: "WriteErrorRequestAborted", WriteErrorShuttingDown: "WriteErrorShuttingDown", WriteErrorTooLongIdField: "WriteErrorTooLongIdField", WriteErrorUnsupportedType: "WriteErrorUnsupportedType"});
82
82
  inspectorBackend.registerEnum("Audits.SRIMessageSignatureError", {MissingSignatureHeader: "MissingSignatureHeader", MissingSignatureInputHeader: "MissingSignatureInputHeader", InvalidSignatureHeader: "InvalidSignatureHeader", InvalidSignatureInputHeader: "InvalidSignatureInputHeader", SignatureHeaderValueIsNotByteSequence: "SignatureHeaderValueIsNotByteSequence", SignatureHeaderValueIsParameterized: "SignatureHeaderValueIsParameterized", SignatureHeaderValueIsIncorrectLength: "SignatureHeaderValueIsIncorrectLength", SignatureInputHeaderMissingLabel: "SignatureInputHeaderMissingLabel", SignatureInputHeaderValueNotInnerList: "SignatureInputHeaderValueNotInnerList", SignatureInputHeaderValueMissingComponents: "SignatureInputHeaderValueMissingComponents", SignatureInputHeaderInvalidComponentType: "SignatureInputHeaderInvalidComponentType", SignatureInputHeaderInvalidComponentName: "SignatureInputHeaderInvalidComponentName", SignatureInputHeaderInvalidHeaderComponentParameter: "SignatureInputHeaderInvalidHeaderComponentParameter", SignatureInputHeaderInvalidDerivedComponentParameter: "SignatureInputHeaderInvalidDerivedComponentParameter", SignatureInputHeaderKeyIdLength: "SignatureInputHeaderKeyIdLength", SignatureInputHeaderInvalidParameter: "SignatureInputHeaderInvalidParameter", SignatureInputHeaderMissingRequiredParameters: "SignatureInputHeaderMissingRequiredParameters", ValidationFailedSignatureExpired: "ValidationFailedSignatureExpired", ValidationFailedInvalidLength: "ValidationFailedInvalidLength", ValidationFailedSignatureMismatch: "ValidationFailedSignatureMismatch", ValidationFailedIntegrityMismatch: "ValidationFailedIntegrityMismatch"});
83
83
  inspectorBackend.registerEnum("Audits.UnencodedDigestError", {MalformedDictionary: "MalformedDictionary", UnknownAlgorithm: "UnknownAlgorithm", IncorrectDigestType: "IncorrectDigestType", IncorrectDigestLength: "IncorrectDigestLength"});
84
- inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable"});
84
+ inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable", AutofillAndManualTextPolicyControlledFeaturesInfo: "AutofillAndManualTextPolicyControlledFeaturesInfo", AutofillPolicyControlledFeatureInfo: "AutofillPolicyControlledFeatureInfo", ManualTextPolicyControlledFeatureInfo: "ManualTextPolicyControlledFeatureInfo"});
85
85
  inspectorBackend.registerEnum("Audits.ClientHintIssueReason", {MetaTagAllowListInvalidOrigin: "MetaTagAllowListInvalidOrigin", MetaTagModifiedHTML: "MetaTagModifiedHTML"});
86
86
  inspectorBackend.registerEnum("Audits.FederatedAuthRequestIssueReason", {ShouldEmbargo: "ShouldEmbargo", TooManyRequests: "TooManyRequests", WellKnownHttpNotFound: "WellKnownHttpNotFound", WellKnownNoResponse: "WellKnownNoResponse", WellKnownInvalidResponse: "WellKnownInvalidResponse", WellKnownListEmpty: "WellKnownListEmpty", WellKnownInvalidContentType: "WellKnownInvalidContentType", ConfigNotInWellKnown: "ConfigNotInWellKnown", WellKnownTooBig: "WellKnownTooBig", ConfigHttpNotFound: "ConfigHttpNotFound", ConfigNoResponse: "ConfigNoResponse", ConfigInvalidResponse: "ConfigInvalidResponse", ConfigInvalidContentType: "ConfigInvalidContentType", ClientMetadataHttpNotFound: "ClientMetadataHttpNotFound", ClientMetadataNoResponse: "ClientMetadataNoResponse", ClientMetadataInvalidResponse: "ClientMetadataInvalidResponse", ClientMetadataInvalidContentType: "ClientMetadataInvalidContentType", IdpNotPotentiallyTrustworthy: "IdpNotPotentiallyTrustworthy", DisabledInSettings: "DisabledInSettings", DisabledInFlags: "DisabledInFlags", ErrorFetchingSignin: "ErrorFetchingSignin", InvalidSigninResponse: "InvalidSigninResponse", AccountsHttpNotFound: "AccountsHttpNotFound", AccountsNoResponse: "AccountsNoResponse", AccountsInvalidResponse: "AccountsInvalidResponse", AccountsListEmpty: "AccountsListEmpty", AccountsInvalidContentType: "AccountsInvalidContentType", IdTokenHttpNotFound: "IdTokenHttpNotFound", IdTokenNoResponse: "IdTokenNoResponse", IdTokenInvalidResponse: "IdTokenInvalidResponse", IdTokenIdpErrorResponse: "IdTokenIdpErrorResponse", IdTokenCrossSiteIdpErrorResponse: "IdTokenCrossSiteIdpErrorResponse", IdTokenInvalidRequest: "IdTokenInvalidRequest", IdTokenInvalidContentType: "IdTokenInvalidContentType", ErrorIdToken: "ErrorIdToken", Canceled: "Canceled", RpPageNotVisible: "RpPageNotVisible", SilentMediationFailure: "SilentMediationFailure", ThirdPartyCookiesBlocked: "ThirdPartyCookiesBlocked", NotSignedInWithIdp: "NotSignedInWithIdp", MissingTransientUserActivation: "MissingTransientUserActivation", ReplacedByActiveMode: "ReplacedByActiveMode", InvalidFieldsSpecified: "InvalidFieldsSpecified", RelyingPartyOriginIsOpaque: "RelyingPartyOriginIsOpaque", TypeNotMatching: "TypeNotMatching", UiDismissedNoEmbargo: "UiDismissedNoEmbargo", CorsError: "CorsError", SuppressedBySegmentationPlatform: "SuppressedBySegmentationPlatform"});
87
87
  inspectorBackend.registerEnum("Audits.FederatedAuthUserInfoRequestIssueReason", {NotSameOrigin: "NotSameOrigin", NotIframe: "NotIframe", NotPotentiallyTrustworthy: "NotPotentiallyTrustworthy", NoAPIPermission: "NoApiPermission", NotSignedInWithIdp: "NotSignedInWithIdp", NoAccountSharingPermission: "NoAccountSharingPermission", InvalidConfigOrWellKnown: "InvalidConfigOrWellKnown", InvalidAccountsResponse: "InvalidAccountsResponse", NoReturningUserFromFetchedAccounts: "NoReturningUserFromFetchedAccounts"});
@@ -191,7 +191,7 @@ inspectorBackend.registerType("BluetoothEmulation.CharacteristicProperties", [{"
191
191
 
192
192
  // Browser.
193
193
  inspectorBackend.registerEnum("Browser.WindowState", {Normal: "normal", Minimized: "minimized", Maximized: "maximized", Fullscreen: "fullscreen"});
194
- inspectorBackend.registerEnum("Browser.PermissionType", {Ar: "ar", AudioCapture: "audioCapture", AutomaticFullscreen: "automaticFullscreen", BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", CameraPanTiltZoom: "cameraPanTiltZoom", CapturedSurfaceControl: "capturedSurfaceControl", ClipboardReadWrite: "clipboardReadWrite", ClipboardSanitizedWrite: "clipboardSanitizedWrite", DisplayCapture: "displayCapture", DurableStorage: "durableStorage", Geolocation: "geolocation", HandTracking: "handTracking", IdleDetection: "idleDetection", KeyboardLock: "keyboardLock", LocalFonts: "localFonts", LocalNetworkAccess: "localNetworkAccess", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", PointerLock: "pointerLock", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", SmartCard: "smartCard", SpeakerSelection: "speakerSelection", StorageAccess: "storageAccess", TopLevelStorageAccess: "topLevelStorageAccess", VideoCapture: "videoCapture", Vr: "vr", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem", WebAppInstallation: "webAppInstallation", WebPrinting: "webPrinting", WindowManagement: "windowManagement"});
194
+ inspectorBackend.registerEnum("Browser.PermissionType", {Ar: "ar", AudioCapture: "audioCapture", AutomaticFullscreen: "automaticFullscreen", BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", CameraPanTiltZoom: "cameraPanTiltZoom", CapturedSurfaceControl: "capturedSurfaceControl", ClipboardReadWrite: "clipboardReadWrite", ClipboardSanitizedWrite: "clipboardSanitizedWrite", DisplayCapture: "displayCapture", DurableStorage: "durableStorage", Geolocation: "geolocation", HandTracking: "handTracking", IdleDetection: "idleDetection", KeyboardLock: "keyboardLock", LocalFonts: "localFonts", LocalNetwork: "localNetwork", LocalNetworkAccess: "localNetworkAccess", LoopbackNetwork: "loopbackNetwork", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", PointerLock: "pointerLock", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", SmartCard: "smartCard", SpeakerSelection: "speakerSelection", StorageAccess: "storageAccess", TopLevelStorageAccess: "topLevelStorageAccess", VideoCapture: "videoCapture", Vr: "vr", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem", WebAppInstallation: "webAppInstallation", WebPrinting: "webPrinting", WindowManagement: "windowManagement"});
195
195
  inspectorBackend.registerEnum("Browser.PermissionSetting", {Granted: "granted", Denied: "denied", Prompt: "prompt"});
196
196
  inspectorBackend.registerEnum("Browser.BrowserCommandId", {OpenTabSearch: "openTabSearch", CloseTabSearch: "closeTabSearch", OpenGlic: "openGlic"});
197
197
  inspectorBackend.registerEnum("Browser.PrivacySandboxAPI", {BiddingAndAuctionServices: "BiddingAndAuctionServices", TrustedKeyValue: "TrustedKeyValue"});
@@ -340,7 +340,7 @@ inspectorBackend.registerCommand("Cast.stopCasting", [{"name": "sinkName", "type
340
340
  inspectorBackend.registerType("Cast.Sink", [{"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "id", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "session", "type": "string", "optional": true, "description": "Text describing the current session. Present only if there is an active session on the sink.", "typeRef": null}]);
341
341
 
342
342
  // DOM.
343
- inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", PickerIcon: "picker-icon", InterestHint: "interest-hint", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent", OverscrollClientArea: "overscroll-client-area"});
343
+ inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Checkmark: "checkmark", Before: "before", After: "after", PickerIcon: "picker-icon", InterestHint: "interest-hint", Marker: "marker", Backdrop: "backdrop", Column: "column", Selection: "selection", SearchText: "search-text", TargetText: "target-text", SpellingError: "spelling-error", GrammarError: "grammar-error", Highlight: "highlight", FirstLineInherited: "first-line-inherited", ScrollMarker: "scroll-marker", ScrollMarkerGroup: "scroll-marker-group", ScrollButton: "scroll-button", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button", ViewTransition: "view-transition", ViewTransitionGroup: "view-transition-group", ViewTransitionImagePair: "view-transition-image-pair", ViewTransitionGroupChildren: "view-transition-group-children", ViewTransitionOld: "view-transition-old", ViewTransitionNew: "view-transition-new", Placeholder: "placeholder", FileSelectorButton: "file-selector-button", DetailsContent: "details-content", Picker: "picker", PermissionIcon: "permission-icon", OverscrollAreaParent: "overscroll-area-parent"});
344
344
  inspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
345
345
  inspectorBackend.registerEnum("DOM.CompatibilityMode", {QuirksMode: "QuirksMode", LimitedQuirksMode: "LimitedQuirksMode", NoQuirksMode: "NoQuirksMode"});
346
346
  inspectorBackend.registerEnum("DOM.PhysicalAxes", {Horizontal: "Horizontal", Vertical: "Vertical", Both: "Both"});
@@ -1345,7 +1345,7 @@ inspectorBackend.registerCommand("Target.attachToBrowserTarget", [], ["sessionId
1345
1345
  inspectorBackend.registerCommand("Target.closeTarget", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}], ["success"], "Closes the target. If the target is a page that gets closed too.");
1346
1346
  inspectorBackend.registerCommand("Target.exposeDevToolsProtocol", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "bindingName", "type": "string", "optional": true, "description": "Binding name, 'cdp' if not specified.", "typeRef": null}, {"name": "inheritPermissions", "type": "boolean", "optional": true, "description": "If true, inherits the current root session's permissions (default: false).", "typeRef": null}], [], "Inject object to the target's main frame that provides a communication channel with browser target. Injected object will be available as `window[bindingName]`. The object has the following API: - `binding.send(json)` - a method to send messages over the remote debugging protocol - `binding.onmessage = json => handleMessage(json)` - a callback that will be called for the protocol notifications and command responses.");
1347
1347
  inspectorBackend.registerCommand("Target.createBrowserContext", [{"name": "disposeOnDetach", "type": "boolean", "optional": true, "description": "If specified, disposes this context when debugging session disconnects.", "typeRef": null}, {"name": "proxyServer", "type": "string", "optional": true, "description": "Proxy server, similar to the one passed to --proxy-server", "typeRef": null}, {"name": "proxyBypassList", "type": "string", "optional": true, "description": "Proxy bypass list, similar to the one passed to --proxy-bypass-list", "typeRef": null}, {"name": "originsWithUniversalNetworkAccess", "type": "array", "optional": true, "description": "An optional list of origins to grant unlimited cross-origin access to. Parts of the URL other than those constituting origin are ignored.", "typeRef": "string"}], ["browserContextId"], "Creates a new empty BrowserContext. Similar to an incognito profile but you can have more than one.");
1348
- inspectorBackend.registerCommand("Target.getBrowserContexts", [], ["browserContextIds"], "Returns all browser contexts created with `Target.createBrowserContext` method.");
1348
+ inspectorBackend.registerCommand("Target.getBrowserContexts", [], ["browserContextIds", "defaultBrowserContextId"], "Returns all browser contexts created with `Target.createBrowserContext` method.");
1349
1349
  inspectorBackend.registerCommand("Target.createTarget", [{"name": "url", "type": "string", "optional": false, "description": "The initial URL the page will be navigated to. An empty string indicates about:blank.", "typeRef": null}, {"name": "left", "type": "number", "optional": true, "description": "Frame left origin in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "top", "type": "number", "optional": true, "description": "Frame top origin in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "width", "type": "number", "optional": true, "description": "Frame width in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "height", "type": "number", "optional": true, "description": "Frame height in DIP (requires newWindow to be true or headless shell).", "typeRef": null}, {"name": "windowState", "type": "string", "optional": true, "description": "Frame window state (requires newWindow to be true or headless shell). Default is normal.", "typeRef": "Target.WindowState"}, {"name": "browserContextId", "type": "string", "optional": true, "description": "The browser context to create the page in.", "typeRef": "Browser.BrowserContextID"}, {"name": "enableBeginFrameControl", "type": "boolean", "optional": true, "description": "Whether BeginFrames for this target will be controlled via DevTools (headless shell only, not supported on MacOS yet, false by default).", "typeRef": null}, {"name": "newWindow", "type": "boolean", "optional": true, "description": "Whether to create a new Window or Tab (false by default, not supported by headless shell).", "typeRef": null}, {"name": "background", "type": "boolean", "optional": true, "description": "Whether to create the target in background or foreground (false by default, not supported by headless shell).", "typeRef": null}, {"name": "forTab", "type": "boolean", "optional": true, "description": "Whether to create the target of type \\\"tab\\\".", "typeRef": null}, {"name": "hidden", "type": "boolean", "optional": true, "description": "Whether to create a hidden target. The hidden target is observable via protocol, but not present in the tab UI strip. Cannot be created with `forTab: true`, `newWindow: true` or `background: false`. The life-time of the tab is limited to the life-time of the session.", "typeRef": null}], ["targetId"], "Creates a new page.");
1350
1350
  inspectorBackend.registerCommand("Target.detachFromTarget", [{"name": "sessionId", "type": "string", "optional": true, "description": "Session to detach.", "typeRef": "Target.SessionID"}, {"name": "targetId", "type": "string", "optional": true, "description": "Deprecated.", "typeRef": "Target.TargetID"}], [], "Detaches session with given id.");
1351
1351
  inspectorBackend.registerCommand("Target.disposeBrowserContext", [{"name": "browserContextId", "type": "string", "optional": false, "description": "", "typeRef": "Browser.BrowserContextID"}], [], "Deletes a BrowserContext. All the belonging pages will be closed without calling their beforeunload hooks.");
@@ -1194,6 +1194,9 @@ export namespace Audits {
1194
1194
  FormInputHasWrongButWellIntendedAutocompleteValueError = 'FormInputHasWrongButWellIntendedAutocompleteValueError',
1195
1195
  ResponseWasBlockedByORB = 'ResponseWasBlockedByORB',
1196
1196
  NavigationEntryMarkedSkippable = 'NavigationEntryMarkedSkippable',
1197
+ AutofillAndManualTextPolicyControlledFeaturesInfo = 'AutofillAndManualTextPolicyControlledFeaturesInfo',
1198
+ AutofillPolicyControlledFeatureInfo = 'AutofillPolicyControlledFeatureInfo',
1199
+ ManualTextPolicyControlledFeatureInfo = 'ManualTextPolicyControlledFeatureInfo',
1197
1200
  }
1198
1201
 
1199
1202
  /**
@@ -2226,7 +2229,9 @@ export namespace Browser {
2226
2229
  IdleDetection = 'idleDetection',
2227
2230
  KeyboardLock = 'keyboardLock',
2228
2231
  LocalFonts = 'localFonts',
2232
+ LocalNetwork = 'localNetwork',
2229
2233
  LocalNetworkAccess = 'localNetworkAccess',
2234
+ LoopbackNetwork = 'loopbackNetwork',
2230
2235
  Midi = 'midi',
2231
2236
  MidiSysex = 'midiSysex',
2232
2237
  Nfc = 'nfc',
@@ -4531,7 +4536,6 @@ export namespace DOM {
4531
4536
  Picker = 'picker',
4532
4537
  PermissionIcon = 'permission-icon',
4533
4538
  OverscrollAreaParent = 'overscroll-area-parent',
4534
- OverscrollClientArea = 'overscroll-client-area',
4535
4539
  }
4536
4540
 
4537
4541
  /**
@@ -18391,6 +18395,10 @@ export namespace Target {
18391
18395
  * An array of browser context ids.
18392
18396
  */
18393
18397
  browserContextIds: Browser.BrowserContextID[];
18398
+ /**
18399
+ * The id of the default browser context if available.
18400
+ */
18401
+ defaultBrowserContextId?: Browser.BrowserContextID;
18394
18402
  }
18395
18403
 
18396
18404
  export interface CreateTargetRequest {