chrome-devtools-frontend 1.0.1672388 → 1.0.1674545

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/eslint.config.mjs +3 -3
  2. package/front_end/core/common/SettingRegistration.ts +1 -26
  3. package/front_end/core/common/Settings.ts +4 -53
  4. package/front_end/core/host/UserMetrics.ts +127 -117
  5. package/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts +42 -9
  6. package/front_end/core/root/Runtime.ts +7 -2
  7. package/front_end/core/sdk/NetworkManager.ts +0 -35
  8. package/front_end/core/sdk/SourceMap.ts +1 -19
  9. package/front_end/core/sdk/SourceMapManager.ts +75 -48
  10. package/front_end/core/sdk/SourceMapScopesInfo.ts +0 -62
  11. package/front_end/devtools_compatibility.js +1 -1
  12. package/front_end/generated/InspectorBackendCommands.ts +4 -3
  13. package/front_end/generated/{SupportedCSSProperties.js → SupportedCSSProperties.ts} +32 -1
  14. package/front_end/generated/protocol-mapping.d.ts +8 -0
  15. package/front_end/generated/protocol-proxy-api.d.ts +6 -0
  16. package/front_end/generated/protocol.ts +16 -2
  17. package/front_end/models/ai_assistance/AiSetting.ts +66 -3
  18. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
  19. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +4 -3
  20. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +1 -1
  21. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
  22. package/front_end/models/emulation/DeviceModeModel.ts +25 -34
  23. package/front_end/models/emulation/EmulatedDevices.ts +1 -1
  24. package/front_end/models/javascript_metadata/NativeFunctions.js +4 -4
  25. package/front_end/models/trace/ModelImpl.ts +5 -0
  26. package/front_end/models/trace/Processor.ts +47 -10
  27. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +18 -19
  28. package/front_end/models/trace/handlers/MetaHandler.ts +46 -9
  29. package/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +11 -0
  30. package/front_end/models/trace/insights/CLSCulprits.ts +1 -2
  31. package/front_end/models/trace/insights/CharacterSet.ts +1 -1
  32. package/front_end/models/trace/insights/Common.ts +21 -2
  33. package/front_end/models/trace/insights/DocumentLatency.ts +1 -1
  34. package/front_end/models/trace/insights/LCPBreakdown.ts +7 -6
  35. package/front_end/models/trace/insights/LCPDiscovery.ts +1 -1
  36. package/front_end/models/trace/insights/ModernHTTP.ts +7 -3
  37. package/front_end/models/trace/insights/NetworkDependencyTree.ts +1 -1
  38. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  39. package/front_end/models/trace/insights/ThirdParties.ts +5 -2
  40. package/front_end/models/trace/insights/types.ts +11 -6
  41. package/front_end/models/trace/types/Configuration.ts +5 -0
  42. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +11 -10
  43. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +3 -45
  44. package/front_end/panels/application/BackgroundServiceView.ts +42 -40
  45. package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -0
  46. package/front_end/panels/common/ExtensionServer.ts +7 -1
  47. package/front_end/panels/common/common.ts +0 -1
  48. package/front_end/panels/console/ConsoleInsightTeaser.ts +7 -6
  49. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  50. package/front_end/panels/elements/ClassesPaneWidget.ts +2 -2
  51. package/front_end/panels/elements/ElementsTreeElement.ts +56 -5
  52. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  53. package/front_end/panels/elements/components/AdornerManager.ts +1 -0
  54. package/front_end/panels/emulation/AdvancedApp.ts +3 -3
  55. package/front_end/panels/emulation/DeviceModeToolbar.ts +2 -11
  56. package/front_end/panels/emulation/DeviceModeView.ts +234 -75
  57. package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
  58. package/front_end/panels/emulation/deviceModeView.css +4 -21
  59. package/front_end/panels/emulation/emulation-meta.ts +4 -30
  60. package/front_end/panels/emulation/emulation.ts +0 -3
  61. package/front_end/panels/explain/components/ConsoleInsight.ts +11 -7
  62. package/front_end/panels/layers/LayersPanel.ts +2 -2
  63. package/front_end/panels/layers/layers-meta.ts +2 -2
  64. package/front_end/panels/lighthouse/LighthouseController.ts +3 -7
  65. package/front_end/panels/mobile_throttling/CPUThrottlingSelector.ts +313 -0
  66. package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +0 -10
  67. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +23 -10
  68. package/front_end/panels/mobile_throttling/mobile_throttling.ts +3 -0
  69. package/front_end/panels/network/NetworkConfigView.ts +1 -71
  70. package/front_end/panels/network/networkConfigView.css +1 -2
  71. package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +3 -3
  72. package/front_end/panels/profiler/HeapDetachedElementsView.ts +5 -5
  73. package/front_end/panels/profiler/HeapProfileView.ts +32 -32
  74. package/front_end/panels/profiler/HeapProfilerPanel.ts +2 -2
  75. package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +33 -37
  76. package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +26 -27
  77. package/front_end/panels/profiler/HeapSnapshotView.ts +48 -48
  78. package/front_end/panels/profiler/IsolateSelector.ts +10 -10
  79. package/front_end/panels/profiler/ModuleUIStrings.ts +25 -25
  80. package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
  81. package/front_end/panels/profiler/ProfilesPanel.ts +6 -6
  82. package/front_end/panels/profiler/WritableProfileHeader.ts +6 -6
  83. package/front_end/panels/profiler/profiler-meta.ts +7 -7
  84. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  85. package/front_end/panels/settings/AISettingsTab.ts +27 -23
  86. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +463 -13
  87. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +12 -17
  88. package/front_end/panels/timeline/TimelinePanel.ts +22 -35
  89. package/front_end/panels/timeline/components/CWVMetrics.ts +16 -3
  90. package/front_end/panels/timeline/components/LiveMetricsView.ts +27 -6
  91. package/front_end/panels/timeline/components/NetworkTrackWidget.ts +1 -1
  92. package/front_end/panels/timeline/components/components.ts +0 -4
  93. package/front_end/panels/timeline/components/cwvMetrics.css +4 -0
  94. package/front_end/panels/timeline/components/liveMetricsView.css +7 -17
  95. package/front_end/panels/timeline/components/metricValueStyles.css +17 -0
  96. package/front_end/third_party/chromium/README.chromium +1 -1
  97. package/front_end/third_party/puppeteer/README.chromium +2 -2
  98. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +64 -15
  99. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +65 -16
  100. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +50 -7
  101. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  102. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts +2 -1
  104. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +5 -5
  106. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts +2 -1
  108. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.d.ts.map +1 -1
  109. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js +8 -6
  110. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Connection.js.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.d.ts.map +1 -1
  112. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.js +3 -0
  113. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Dialog.js.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +16 -1
  116. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.d.ts +5 -1
  118. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.d.ts.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js +11 -6
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Connection.js.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.js +5 -0
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Dialog.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +10 -0
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +4 -3
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts +27 -2
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js +12 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/Debug.js.map +1 -1
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +2 -2
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +2 -2
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js +2 -0
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ChromeLauncher.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +2 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +5 -4
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/types.d.ts +64 -15
  149. package/front_end/third_party/puppeteer/package/package.json +2 -2
  150. package/front_end/third_party/puppeteer/package/src/api/Page.ts +50 -7
  151. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +9 -7
  152. package/front_end/third_party/puppeteer/package/src/bidi/Connection.ts +9 -6
  153. package/front_end/third_party/puppeteer/package/src/bidi/Dialog.ts +4 -0
  154. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +24 -1
  155. package/front_end/third_party/puppeteer/package/src/cdp/Connection.ts +11 -6
  156. package/front_end/third_party/puppeteer/package/src/cdp/Dialog.ts +7 -0
  157. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +11 -0
  158. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +7 -3
  159. package/front_end/third_party/puppeteer/package/src/common/Debug.ts +30 -5
  160. package/front_end/third_party/puppeteer/package/src/common/util.ts +2 -2
  161. package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
  162. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +6 -4
  163. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  164. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  165. package/front_end/third_party/source-map-scopes-codec/package/CONTRIBUTING.md +0 -0
  166. package/front_end/third_party/source-map-scopes-codec/package/LICENSE +0 -0
  167. package/front_end/third_party/source-map-scopes-codec/package/README.md +0 -0
  168. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts +0 -0
  169. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/builder.d.ts.map +1 -1
  170. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts +0 -0
  171. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/builder/safe_builder.d.ts.map +0 -0
  172. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts +0 -0
  173. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/decode/decode.d.ts.map +0 -0
  174. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts +0 -0
  175. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/encode/encode.d.ts.map +0 -0
  176. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts +0 -0
  177. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/mod.d.ts.map +0 -0
  178. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts +0 -0
  179. package/front_end/third_party/source-map-scopes-codec/package/_dist/src/scopes.d.ts.map +0 -0
  180. package/front_end/third_party/source-map-scopes-codec/package/deno.json +1 -1
  181. package/front_end/third_party/source-map-scopes-codec/package/package.json +1 -1
  182. package/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +2 -0
  183. package/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js.map +1 -1
  184. package/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.ts +2 -0
  185. package/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +0 -0
  186. package/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js.map +0 -0
  187. package/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.ts +0 -0
  188. package/front_end/third_party/source-map-scopes-codec/package/src/codec.js +0 -0
  189. package/front_end/third_party/source-map-scopes-codec/package/src/codec.js.map +0 -0
  190. package/front_end/third_party/source-map-scopes-codec/package/src/codec.ts +0 -0
  191. package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +0 -0
  192. package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js.map +0 -0
  193. package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.ts +0 -0
  194. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +0 -0
  195. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js.map +0 -0
  196. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.ts +0 -0
  197. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +0 -0
  198. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js.map +0 -0
  199. package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.ts +0 -0
  200. package/front_end/third_party/source-map-scopes-codec/package/src/mod.js +0 -0
  201. package/front_end/third_party/source-map-scopes-codec/package/src/mod.js.map +0 -0
  202. package/front_end/third_party/source-map-scopes-codec/package/src/mod.ts +0 -0
  203. package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +0 -0
  204. package/front_end/third_party/source-map-scopes-codec/package/src/scopes.js.map +0 -0
  205. package/front_end/third_party/source-map-scopes-codec/package/src/scopes.ts +0 -0
  206. package/front_end/third_party/source-map-scopes-codec/package/src/util.js +0 -0
  207. package/front_end/third_party/source-map-scopes-codec/package/src/util.js.map +0 -0
  208. package/front_end/third_party/source-map-scopes-codec/package/src/util.ts +0 -0
  209. package/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +0 -0
  210. package/front_end/third_party/source-map-scopes-codec/package/src/vlq.js.map +0 -0
  211. package/front_end/third_party/source-map-scopes-codec/package/src/vlq.ts +0 -0
  212. package/front_end/ui/components/dialogs/ShortcutDialog.ts +2 -0
  213. package/front_end/ui/components/settings/SettingCheckbox.ts +4 -12
  214. package/front_end/ui/components/settings/settingCheckbox.css +0 -7
  215. package/front_end/ui/legacy/Treeoutline.ts +14 -14
  216. package/front_end/ui/legacy/UIUtils.ts +2 -47
  217. package/front_end/ui/legacy/Widget.ts +10 -2
  218. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +1 -1
  219. package/front_end/ui/lit/Directives.ts +80 -0
  220. package/front_end/ui/lit/lit.ts +1 -0
  221. package/front_end/ui/lit/render.ts +8 -0
  222. package/front_end/ui/visual_logging/KnownContextValues.ts +18 -0
  223. package/mcp/mcp.ts +1 -0
  224. package/package.json +1 -1
  225. package/front_end/panels/common/ThrottlingUtils.ts +0 -51
  226. package/front_end/panels/emulation/DeviceModeWrapper.ts +0 -248
  227. package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +0 -235
  228. package/front_end/panels/timeline/components/NetworkThrottlingSelector.ts +0 -245
  229. package/front_end/panels/timeline/components/cpuThrottlingSelector.css +0 -30
  230. package/front_end/panels/timeline/components/networkThrottlingSelector.css +0 -24
  231. /package/front_end/core/host/{UserMetricsEnums.d.ts → UserMetricsEnums.ts} +0 -0
  232. /package/front_end/generated/{ARIAProperties.js → ARIAProperties.ts} +0 -0
@@ -2180,7 +2180,6 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
2180
2180
  readonly #targetManager: TargetManager;
2181
2181
  #userAgentOverride = '';
2182
2182
  #userAgentMetadataOverride: Protocol.Emulation.UserAgentMetadata|null = null;
2183
- #customAcceptedEncodings: Protocol.Network.ContentEncoding[]|null = null;
2184
2183
  readonly #networkAgents = new Set<ProtocolProxyApi.NetworkApi>();
2185
2184
  readonly #fetchAgents = new Set<ProtocolProxyApi.FetchApi>();
2186
2185
  readonly inflightMainResourceRequests = new Map<string, NetworkRequest>();
@@ -2283,11 +2282,6 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
2283
2282
  if (this.isIntercepting()) {
2284
2283
  void fetchAgent.invoke_enable({patterns: this.#urlsForRequestInterceptor.valuesArray()});
2285
2284
  }
2286
- if (this.#customAcceptedEncodings === null) {
2287
- void networkAgent.invoke_clearAcceptedEncodingsOverride();
2288
- } else {
2289
- void networkAgent.invoke_setAcceptedEncodings({encodings: this.#customAcceptedEncodings});
2290
- }
2291
2285
  this.#networkAgents.add(networkAgent);
2292
2286
  this.#fetchAgents.add(fetchAgent);
2293
2287
  }
@@ -2388,33 +2382,6 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
2388
2382
  this.updateUserAgentOverride();
2389
2383
  }
2390
2384
 
2391
- setCustomAcceptedEncodingsOverride(acceptedEncodings: Protocol.Network.ContentEncoding[]): void {
2392
- this.#customAcceptedEncodings = acceptedEncodings;
2393
- this.updateAcceptedEncodingsOverride();
2394
- this.dispatchEventToListeners(MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED);
2395
- }
2396
-
2397
- clearCustomAcceptedEncodingsOverride(): void {
2398
- this.#customAcceptedEncodings = null;
2399
- this.updateAcceptedEncodingsOverride();
2400
- this.dispatchEventToListeners(MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED);
2401
- }
2402
-
2403
- isAcceptedEncodingOverrideSet(): boolean {
2404
- return this.#customAcceptedEncodings !== null;
2405
- }
2406
-
2407
- private updateAcceptedEncodingsOverride(): void {
2408
- const customAcceptedEncodings = this.#customAcceptedEncodings;
2409
- for (const agent of this.#networkAgents) {
2410
- if (customAcceptedEncodings === null) {
2411
- void agent.invoke_clearAcceptedEncodingsOverride();
2412
- } else {
2413
- void agent.invoke_setAcceptedEncodings({encodings: customAcceptedEncodings});
2414
- }
2415
- }
2416
- }
2417
-
2418
2385
  get requestConditions(): RequestConditions {
2419
2386
  return this.#requestConditions;
2420
2387
  }
@@ -2516,7 +2483,6 @@ export namespace MultitargetNetworkManager {
2516
2483
  CONDITIONS_CHANGED = 'ConditionsChanged',
2517
2484
  USER_AGENT_CHANGED = 'UserAgentChanged',
2518
2485
  INTERCEPTORS_CHANGED = 'InterceptorsChanged',
2519
- ACCEPTED_ENCODINGS_CHANGED = 'AcceptedEncodingsChanged',
2520
2486
  REQUEST_INTERCEPTED = 'RequestIntercepted',
2521
2487
  REQUEST_FULFILLED = 'RequestFulfilled',
2522
2488
  }
@@ -2526,7 +2492,6 @@ export namespace MultitargetNetworkManager {
2526
2492
  [Events.CONDITIONS_CHANGED]: void;
2527
2493
  [Events.USER_AGENT_CHANGED]: void;
2528
2494
  [Events.INTERCEPTORS_CHANGED]: void;
2529
- [Events.ACCEPTED_ENCODINGS_CHANGED]: void;
2530
2495
  [Events.REQUEST_INTERCEPTED]: string;
2531
2496
  [Events.REQUEST_FULFILLED]: Platform.DevToolsPath.UrlString;
2532
2497
  }
@@ -231,26 +231,8 @@ export class SourceMap {
231
231
  return this.#scopesFallbackPromise ?? Promise.resolve();
232
232
  }
233
233
 
234
- findEntry(lineNumber: number, columnNumber: number, inlineFrameIndex?: number): SourceMapEntry|null {
234
+ findEntry(lineNumber: number, columnNumber: number): SourceMapEntry|null {
235
235
  this.#ensureSourceMapProcessed();
236
- if (inlineFrameIndex && this.#scopesInfo !== null) {
237
- // For inlineFrameIndex != 0 we use the callsite info for the corresponding inlining site.
238
- // Note that the callsite for "inlineFrameIndex" is actually in the previous frame.
239
- const {inlinedFunctions} = this.#scopesInfo.findInlinedFunctions(lineNumber, columnNumber);
240
- const {callsite} = inlinedFunctions[inlineFrameIndex - 1];
241
- if (!callsite) {
242
- console.error('Malformed source map. Expected to have a callsite info for index', inlineFrameIndex);
243
- return null;
244
- }
245
- return {
246
- lineNumber,
247
- columnNumber,
248
- sourceIndex: callsite.sourceIndex,
249
- sourceURL: this.sourceURLs()[callsite.sourceIndex],
250
- sourceLineNumber: callsite.line,
251
- sourceColumnNumber: callsite.column,
252
- };
253
- }
254
236
  const mappings = this.mappings();
255
237
  const index = Platform.ArrayUtilities.upperBound(
256
238
  mappings, undefined, (_, entry) => lineNumber - entry.lineNumber || columnNumber - entry.columnNumber);
@@ -15,9 +15,17 @@ export type SourceMapFactory<T> =
15
15
  (compiledURL: Platform.DevToolsPath.UrlString, sourceMappingURL: Platform.DevToolsPath.UrlString,
16
16
  payload: SourceMapV3, client: T) => SourceMap;
17
17
 
18
+ export const lazyLoadingSettingDescriptor: Common.Settings.SettingDescriptor<boolean> = {
19
+ name: 'source-maps-lazy-loading',
20
+ type: Common.Settings.SettingType.BOOLEAN,
21
+ defaultValue: false,
22
+ storageType: Common.Settings.SettingStorageType.LOCAL,
23
+ };
24
+
18
25
  export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWrapper.ObjectWrapper<EventTypes<T>> {
19
26
  readonly #target: Target;
20
27
  readonly #factory: SourceMapFactory<T>;
28
+ readonly #lazyLoadingSetting: Common.Settings.Setting<boolean>;
21
29
  #isEnabled = true;
22
30
  readonly #clientData = new Map<T, ClientData>();
23
31
  readonly #sourceMaps = new Map<SourceMap, T>();
@@ -31,6 +39,12 @@ export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWr
31
39
  this.#factory = factory ??
32
40
  ((compiledURL, sourceMappingURL, payload) =>
33
41
  new SourceMap(compiledURL, sourceMappingURL, payload, this.#target.targetManager().getConsole()));
42
+ const settings = target.targetManager().settings;
43
+ this.#lazyLoadingSetting = settings.resolve(lazyLoadingSettingDescriptor);
44
+ }
45
+
46
+ isLazyLoadEnabled(): boolean {
47
+ return this.#lazyLoadingSetting.get();
34
48
  }
35
49
 
36
50
  setEnabled(isEnabled: boolean): void {
@@ -75,7 +89,7 @@ export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWr
75
89
  return Promise.resolve(undefined);
76
90
  }
77
91
 
78
- return clientData.sourceMapPromise;
92
+ return clientData.getSourceMap();
79
93
  }
80
94
 
81
95
  clientForSourceMap(sourceMap: SourceMap): T|undefined {
@@ -92,65 +106,78 @@ export class SourceMapManager<T extends FrameAssociated> extends Common.ObjectWr
92
106
  return;
93
107
  }
94
108
 
95
- let clientData: ClientData|null = {
109
+ const clientData: ClientData = {
96
110
  relativeSourceURL,
97
111
  relativeSourceMapURL,
98
- sourceMapPromise: Promise.resolve(undefined),
112
+ getSourceMap: () => Promise.resolve(undefined),
99
113
  };
114
+ this.#clientData.set(client, clientData);
115
+
100
116
  if (this.#isEnabled) {
101
117
  // The `// #sourceURL=foo` can be a random string, but is generally an absolute path.
102
118
  // Complete it to inspected page url for relative links.
103
119
  const sourceURL = SourceMapManager.resolveRelativeSourceURL(this.#target, relativeSourceURL);
104
120
  const sourceMapURL = Common.ParsedURL.ParsedURL.completeURL(sourceURL, relativeSourceMapURL);
105
121
  if (sourceMapURL) {
106
- if (this.#attachingClient) {
107
- // This should not happen
108
- console.error('Attaching source map may cancel previously attaching source map');
109
- }
110
- this.#attachingClient = client;
111
- this.dispatchEventToListeners(Events.SourceMapWillAttach, {client});
112
-
113
- if (this.#attachingClient === client) {
114
- this.#attachingClient = null;
115
- const initiator = client.createPageResourceLoadInitiator();
116
- // TODO(crbug.com/458180550): Pass PageResourceLoader via constructor.
117
- // The reason we grab it here lazily from the context is that otherwise every
118
- // unit test using `createTarget` would need to set up a `PageResourceLoader`, as
119
- // CSSModel and DebuggerModel are autostarted by default, and they create a
120
- // SourceMapManager in their respective constructors.
121
- const resourceLoader = this.#target.targetManager().context.get(PageResourceLoader);
122
- clientData.sourceMapPromise =
123
- loadSourceMap(resourceLoader, this.#sourceMapCache, sourceMapURL, client.debugId(), initiator)
124
- .then(
125
- payload => {
126
- const sourceMap = this.#factory(sourceURL, sourceMapURL, payload, client);
127
- if (this.#clientData.get(client) === clientData) {
128
- clientData.sourceMap = sourceMap;
129
- this.#sourceMaps.set(sourceMap, client);
130
- this.dispatchEventToListeners(Events.SourceMapAttached, {client, sourceMap});
131
- }
132
- return sourceMap;
133
- },
134
- () => {
135
- if (this.#clientData.get(client) === clientData) {
136
- this.dispatchEventToListeners(Events.SourceMapFailedToAttach, {client});
137
- }
138
- return undefined;
139
- });
140
- } else {
141
- // Assume cancelAttachSourceMap was called.
142
- if (this.#attachingClient) {
143
- // This should not happen
144
- console.error('Cancelling source map attach because another source map is attaching');
122
+ let sourceMapPromise: Promise<SourceMap|undefined>|undefined;
123
+ const doLoad = (): Promise<SourceMap|undefined> => {
124
+ if (!sourceMapPromise) {
125
+ if (this.#attachingClient) {
126
+ // This should not happen
127
+ console.error('Attaching source map may cancel previously attaching source map');
128
+ }
129
+ this.#attachingClient = client;
130
+ this.dispatchEventToListeners(Events.SourceMapWillAttach, {client});
131
+
132
+ if (this.#attachingClient === client) {
133
+ this.#attachingClient = null;
134
+ const initiator = client.createPageResourceLoadInitiator();
135
+ // TODO(crbug.com/458180550): Pass PageResourceLoader via constructor.
136
+ // The reason we grab it here lazily from the context is that otherwise every
137
+ // unit test using `createTarget` would need to set up a `PageResourceLoader`, as
138
+ // CSSModel and DebuggerModel are autostarted by default, and they create a
139
+ // SourceMapManager in their respective constructors.
140
+ const resourceLoader = this.#target.targetManager().context.get(PageResourceLoader);
141
+ sourceMapPromise =
142
+ loadSourceMap(resourceLoader, this.#sourceMapCache, sourceMapURL, client.debugId(), initiator)
143
+ .then(
144
+ payload => {
145
+ const sourceMap = this.#factory(sourceURL, sourceMapURL, payload, client);
146
+ if (this.#clientData.get(client) === clientData) {
147
+ clientData.sourceMap = sourceMap;
148
+ this.#sourceMaps.set(sourceMap, client);
149
+ this.dispatchEventToListeners(Events.SourceMapAttached, {client, sourceMap});
150
+ }
151
+ return sourceMap;
152
+ },
153
+ () => {
154
+ if (this.#clientData.get(client) === clientData) {
155
+ this.dispatchEventToListeners(Events.SourceMapFailedToAttach, {client});
156
+ }
157
+ return undefined;
158
+ });
159
+ } else {
160
+ // Assume cancelAttachSourceMap was called.
161
+ if (this.#attachingClient) {
162
+ // This should not happen
163
+ console.error('Cancelling source map attach because another source map is attaching');
164
+ }
165
+ this.#clientData.delete(client);
166
+ this.dispatchEventToListeners(Events.SourceMapFailedToAttach, {client});
167
+ sourceMapPromise = Promise.resolve(undefined);
168
+ }
145
169
  }
146
- clientData = null;
147
- this.dispatchEventToListeners(Events.SourceMapFailedToAttach, {client});
170
+ return sourceMapPromise;
171
+ };
172
+
173
+ if (this.isLazyLoadEnabled()) {
174
+ clientData.getSourceMap = doLoad;
175
+ } else {
176
+ const promise = doLoad();
177
+ clientData.getSourceMap = () => promise;
148
178
  }
149
179
  }
150
180
  }
151
- if (clientData) {
152
- this.#clientData.set(client, clientData);
153
- }
154
181
  }
155
182
 
156
183
  cancelAttachSourceMap(client: T): void {
@@ -231,7 +258,7 @@ interface ClientData {
231
258
  // be valid URLs and will be checked and resolved once `attachSourceMap` is called.
232
259
  relativeSourceMapURL: string;
233
260
  sourceMap?: SourceMap;
234
- sourceMapPromise: Promise<SourceMap|undefined>;
261
+ getSourceMap: () => Promise<SourceMap|undefined>;
235
262
  }
236
263
 
237
264
  export enum Events {
@@ -267,46 +267,6 @@ export class SourceMapScopesInfo {
267
267
  return false;
268
268
  }
269
269
 
270
- /**
271
- * Given a generated position, returns the original name of the surrounding function as well as
272
- * all the original function names that got inlined into the surrounding generated function and their
273
- * respective callsites in the original code (ordered from inner to outer).
274
- *
275
- * @returns a list with inlined functions. Every entry in the list has a callsite in the orignal code,
276
- * except the last function (since the last function didn't get inlined).
277
- */
278
- findInlinedFunctions(generatedLine: number, generatedColumn: number): InlineInfo {
279
- const rangeChain = this.#findGeneratedRangeChain(generatedLine, generatedColumn);
280
- const result: InlineInfo = {
281
- inlinedFunctions: [],
282
- originalFunctionName: '',
283
- };
284
-
285
- // Walk the generated ranges from the innermost containing range outwards as long as we don't
286
- // encounter a range that is a scope in the generated code and a function scope originally.
287
- for (let i = rangeChain.length - 1; i >= 0; --i) {
288
- const range = rangeChain[i];
289
-
290
- if (range.callSite) {
291
- // Record the name and call-site if the range corresponds to an inlined function.
292
- result.inlinedFunctions.push({
293
- name: range.originalScope?.name ?? '',
294
- callsite: {...range.callSite, sourceURL: this.#sourceMap.sourceURLForSourceIndex(range.callSite.sourceIndex)},
295
- });
296
- }
297
- if (range.isStackFrame) {
298
- // We arrived at an actual generated JS function, don't go further.
299
- // The corresponding original scope could not actually be a function
300
- // (e.g. a block scope transpiled down to a JS function), but we'll
301
- // filter that out later.
302
- result.originalFunctionName = range.originalScope?.name ?? '';
303
- break;
304
- }
305
- }
306
-
307
- return result;
308
- }
309
-
310
270
  /**
311
271
  * Given a generated position, this returns all the surrounding generated ranges from outer
312
272
  * to inner.
@@ -608,28 +568,6 @@ export interface TranslatedFrame {
608
568
  url?: Platform.DevToolsPath.UrlString;
609
569
  }
610
570
 
611
- /**
612
- * Represents the inlining information for a given generated position.
613
- *
614
- * It contains a list of all the inlined original functions at the generated position
615
- * as well as the original function name of the generated position's surrounding
616
- * function.
617
- *
618
- * The inlined functions are sorted from inner to outer (or top to bottom on the stack).
619
- */
620
- export interface InlineInfo {
621
- inlinedFunctions: Array<{
622
- name: string,
623
- callsite: {
624
- line: number,
625
- column: number,
626
- sourceIndex: number,
627
- sourceURL?: Platform.DevToolsPath.UrlString,
628
- },
629
- }>;
630
- originalFunctionName: string;
631
- }
632
-
633
571
  export function contains(
634
572
  range: Pick<ScopesCodec.GeneratedRange, 'start'|'end'>, line: number, column: number): boolean {
635
573
  if (range.start.line > line || (range.start.line === line && range.start.column > column)) {
@@ -1290,7 +1290,7 @@
1290
1290
  MAX_VALUE: 16,
1291
1291
  },
1292
1292
  };
1293
- // LINT.ThenChange(/front_end/core/host/UserMetricsEnums.d.ts)
1293
+ // LINT.ThenChange(/front_end/core/host/UserMetricsEnums.ts)
1294
1294
 
1295
1295
  // InspectorFrontendHostImpl --------------------------------------------------
1296
1296
 
@@ -435,6 +435,7 @@ inspectorBackend.registerCommand("DOM.getContainerForNode", [{"name": "nodeId",
435
435
  inspectorBackend.registerCommand("DOM.getQueryingDescendantsForContainer", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the container node to find querying descendants from.", "typeRef": "DOM.NodeId"}], ["nodeIds"], "Returns the descendants of a container query container that have container queries against this container.");
436
436
  inspectorBackend.registerCommand("DOM.getAnchorElement", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the positioned element from which to find the anchor.", "typeRef": "DOM.NodeId"}, {"name": "anchorSpecifier", "type": "string", "optional": true, "description": "An optional anchor specifier, as defined in https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier. If not provided, it will return the implicit anchor element for the given positioned element.", "typeRef": null}], ["nodeId"], "Returns the target anchor element of the given anchor query according to https://www.w3.org/TR/css-anchor-position-1/#target.");
437
437
  inspectorBackend.registerCommand("DOM.forceShowPopover", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the popover HTMLElement", "typeRef": "DOM.NodeId"}, {"name": "enable", "type": "boolean", "optional": false, "description": "If true, opens the popover and keeps it open. If false, closes the popover if it was previously force-opened.", "typeRef": null}, {"name": "invokerNodeId", "type": "number", "optional": true, "description": "Optional ID of the element invoking this popover, used to establish the implicit anchor. If not provided, it will fall back to the first invoker in the document, preferring elements with a popovertarget attribute over those with a commandfor attribute. Note that if there are multiple invokers, this is just an estimate.", "typeRef": "DOM.BackendNodeId"}], ["nodeIds"], "When enabling, this API force-opens the popover identified by nodeId and keeps it open until disabled.");
438
+ inspectorBackend.registerCommand("DOM.forceShowInterest", [{"name": "nodeId", "type": "number", "optional": false, "description": "Id of the interest invoker HTMLElement.", "typeRef": "DOM.NodeId"}, {"name": "enable", "type": "boolean", "optional": false, "description": "If true, opens and holds interest. If false, releases forced interest.", "typeRef": null}], [], "When enabling, this API forces an element to gain interest in its target, keeping interest active until disabled.");
438
439
  inspectorBackend.registerType("DOM.BackendNode", [{"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.BackendNodeId"}]);
439
440
  inspectorBackend.registerType("DOM.Node", [{"name": "nodeId", "type": "number", "optional": false, "description": "Node identifier that is passed into the rest of the DOM messages as the `nodeId`. Backend will only push node with given `id` once. It is aware of all requested nodes and will only fire DOM events for nodes known to the client.", "typeRef": "DOM.NodeId"}, {"name": "parentId", "type": "number", "optional": true, "description": "The id of the parent node if any.", "typeRef": "DOM.NodeId"}, {"name": "backendNodeId", "type": "number", "optional": false, "description": "The BackendNodeId for this node.", "typeRef": "DOM.BackendNodeId"}, {"name": "nodeType", "type": "number", "optional": false, "description": "`Node`'s nodeType.", "typeRef": null}, {"name": "nodeName", "type": "string", "optional": false, "description": "`Node`'s nodeName.", "typeRef": null}, {"name": "localName", "type": "string", "optional": false, "description": "`Node`'s localName.", "typeRef": null}, {"name": "nodeValue", "type": "string", "optional": false, "description": "`Node`'s nodeValue.", "typeRef": null}, {"name": "childNodeCount", "type": "number", "optional": true, "description": "Child count for `Container` nodes.", "typeRef": null}, {"name": "children", "type": "array", "optional": true, "description": "Child nodes of this node when requested with children.", "typeRef": "DOM.Node"}, {"name": "attributes", "type": "array", "optional": true, "description": "Attributes of the `Element` node in the form of flat array `[name1, value1, name2, value2]`.", "typeRef": "string"}, {"name": "documentURL", "type": "string", "optional": true, "description": "Document URL that `Document` or `FrameOwner` node points to.", "typeRef": null}, {"name": "baseURL", "type": "string", "optional": true, "description": "Base URL that `Document` or `FrameOwner` node uses for URL completion.", "typeRef": null}, {"name": "publicId", "type": "string", "optional": true, "description": "`DocumentType`'s publicId.", "typeRef": null}, {"name": "systemId", "type": "string", "optional": true, "description": "`DocumentType`'s systemId.", "typeRef": null}, {"name": "internalSubset", "type": "string", "optional": true, "description": "`DocumentType`'s internalSubset.", "typeRef": null}, {"name": "xmlVersion", "type": "string", "optional": true, "description": "`Document`'s XML version in case of XML documents.", "typeRef": null}, {"name": "name", "type": "string", "optional": true, "description": "`Attr`'s name.", "typeRef": null}, {"name": "value", "type": "string", "optional": true, "description": "`Attr`'s value.", "typeRef": null}, {"name": "pseudoType", "type": "string", "optional": true, "description": "Pseudo element type for this node.", "typeRef": "DOM.PseudoType"}, {"name": "pseudoIdentifier", "type": "string", "optional": true, "description": "Pseudo element identifier for this node. Only present if there is a valid pseudoType.", "typeRef": null}, {"name": "shadowRootType", "type": "string", "optional": true, "description": "Shadow root type.", "typeRef": "DOM.ShadowRootType"}, {"name": "frameId", "type": "string", "optional": true, "description": "Frame ID for frame owner elements.", "typeRef": "Page.FrameId"}, {"name": "contentDocument", "type": "object", "optional": true, "description": "Content document for frame owner elements.", "typeRef": "DOM.Node"}, {"name": "shadowRoots", "type": "array", "optional": true, "description": "Shadow root list for given element host.", "typeRef": "DOM.Node"}, {"name": "templateContent", "type": "object", "optional": true, "description": "Content document fragment for template elements.", "typeRef": "DOM.Node"}, {"name": "pseudoElements", "type": "array", "optional": true, "description": "Pseudo elements associated with this node.", "typeRef": "DOM.Node"}, {"name": "importedDocument", "type": "object", "optional": true, "description": "Deprecated, as the HTML Imports API has been removed (crbug.com/937746). This property used to return the imported document for the HTMLImport links. The property is always undefined now.", "typeRef": "DOM.Node"}, {"name": "distributedNodes", "type": "array", "optional": true, "description": "Distributed nodes for given insertion point.", "typeRef": "DOM.BackendNode"}, {"name": "isSVG", "type": "boolean", "optional": true, "description": "Whether the node is SVG.", "typeRef": null}, {"name": "compatibilityMode", "type": "string", "optional": true, "description": "", "typeRef": "DOM.CompatibilityMode"}, {"name": "assignedSlot", "type": "object", "optional": true, "description": "", "typeRef": "DOM.BackendNode"}, {"name": "isScrollable", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "affectedByStartingStyles", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "adoptedStyleSheets", "type": "array", "optional": true, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "adProvenance", "type": "object", "optional": true, "description": "", "typeRef": "Network.AdProvenance"}]);
440
441
  inspectorBackend.registerType("DOM.DetachedElementInfo", [{"name": "treeNode", "type": "object", "optional": false, "description": "", "typeRef": "DOM.Node"}, {"name": "retainedNodeIds", "type": "array", "optional": false, "description": "", "typeRef": "DOM.NodeId"}]);
@@ -1178,7 +1179,7 @@ inspectorBackend.registerType("Page.InstallabilityErrorArgument", [{"name": "nam
1178
1179
  inspectorBackend.registerType("Page.InstallabilityError", [{"name": "errorId", "type": "string", "optional": false, "description": "The error id (e.g. 'manifest-missing-suitable-icon').", "typeRef": null}, {"name": "errorArguments", "type": "array", "optional": false, "description": "The list of error arguments (e.g. {name:'minimum-icon-size-in-pixels', value:'64'}).", "typeRef": "Page.InstallabilityErrorArgument"}]);
1179
1180
  inspectorBackend.registerType("Page.CompilationCacheParams", [{"name": "url", "type": "string", "optional": false, "description": "The URL of the script to produce a compilation cache entry for.", "typeRef": null}, {"name": "eager", "type": "boolean", "optional": true, "description": "A hint to the backend whether eager compilation is recommended. (the actual compilation mode used is upon backend discretion).", "typeRef": null}]);
1180
1181
  inspectorBackend.registerType("Page.FileFilter", [{"name": "name", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "accepts", "type": "array", "optional": true, "description": "", "typeRef": "string"}]);
1181
- inspectorBackend.registerType("Page.FileHandler", [{"name": "action", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "icons", "type": "array", "optional": true, "description": "", "typeRef": "Page.ImageResource"}, {"name": "accepts", "type": "array", "optional": true, "description": "Mimic a map, name is the key, accepts is the value.", "typeRef": "Page.FileFilter"}, {"name": "launchType", "type": "string", "optional": false, "description": "Won't repeat the enums, using string for easy comparison. Same as the other enums below.", "typeRef": null}]);
1182
+ inspectorBackend.registerType("Page.FileHandler", [{"name": "action", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "name", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "accepts", "type": "array", "optional": true, "description": "Mimic a map, name is the key, accepts is the value.", "typeRef": "Page.FileFilter"}, {"name": "launchType", "type": "string", "optional": false, "description": "Won't repeat the enums, using string for easy comparison. Same as the other enums below.", "typeRef": null}]);
1182
1183
  inspectorBackend.registerType("Page.ImageResource", [{"name": "url", "type": "string", "optional": false, "description": "The src field in the definition, but changing to url in favor of consistency.", "typeRef": null}, {"name": "sizes", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "type", "type": "string", "optional": true, "description": "", "typeRef": null}]);
1183
1184
  inspectorBackend.registerType("Page.LaunchHandler", [{"name": "clientMode", "type": "string", "optional": false, "description": "", "typeRef": null}]);
1184
1185
  inspectorBackend.registerType("Page.ProtocolHandler", [{"name": "protocol", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "url", "type": "string", "optional": false, "description": "", "typeRef": null}]);
@@ -1482,7 +1483,7 @@ inspectorBackend.registerCommand("WebAuthn.setUserVerified", [{"name": "authenti
1482
1483
  inspectorBackend.registerCommand("WebAuthn.setAutomaticPresenceSimulation", [{"name": "authenticatorId", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorId"}, {"name": "enabled", "type": "boolean", "optional": false, "description": "", "typeRef": null}], [], "Sets whether tests of user presence will succeed immediately (if true) or fail to resolve (if false) for an authenticator. The default is true.");
1483
1484
  inspectorBackend.registerCommand("WebAuthn.setCredentialProperties", [{"name": "authenticatorId", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorId"}, {"name": "credentialId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "backupEligibility", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "backupState", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "activeCmtgKeyIndex", "type": "number", "optional": true, "description": "", "typeRef": null}, {"name": "generateCmtgKeyOnNextOperation", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "signCount", "type": "number", "optional": true, "description": "Must be equal to or greater than -1. If -1, the signature counter is removed from the credential, and every assertion operation will report a value of 0. See https://w3c.github.io/webauthn/#signature-counter", "typeRef": null}], [], "Allows setting credential properties. https://w3c.github.io/webauthn/#sctn-automation-set-credential-properties");
1484
1485
  inspectorBackend.registerType("WebAuthn.VirtualAuthenticatorOptions", [{"name": "protocol", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorProtocol"}, {"name": "ctap2Version", "type": "string", "optional": true, "description": "Defaults to ctap2_0. Ignored if |protocol| == u2f.", "typeRef": "WebAuthn.Ctap2Version"}, {"name": "transport", "type": "string", "optional": false, "description": "", "typeRef": "WebAuthn.AuthenticatorTransport"}, {"name": "hasResidentKey", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasUserVerification", "type": "boolean", "optional": true, "description": "Defaults to false.", "typeRef": null}, {"name": "hasLargeBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the largeBlob extension. https://w3c.github.io/webauthn#largeBlob Defaults to false.", "typeRef": null}, {"name": "hasCredBlob", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the credBlob extension. https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension Defaults to false.", "typeRef": null}, {"name": "hasMinPinLength", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the minPinLength extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension Defaults to false.", "typeRef": null}, {"name": "hasPrf", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the prf extension. https://w3c.github.io/webauthn/#prf-extension Defaults to false.", "typeRef": null}, {"name": "hasHmacSecret", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the hmac-secret extension. https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-hmac-secret-extension Defaults to false.", "typeRef": null}, {"name": "hasHmacSecretMc", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the hmac-secret-mc extension. https://fidoalliance.org/specs/fido-v2.2-rd-20241003/fido-client-to-authenticator-protocol-v2.2-rd-20241003.html#sctn-hmac-secret-make-cred-extension Defaults to false.", "typeRef": null}, {"name": "hasCmtgKey", "type": "boolean", "optional": true, "description": "If set to true, the authenticator will support the cmtgKey (Credential Manager Trust Group Key) extension. https://github.com/w3c/webauthn/pull/2377 Defaults to false.", "typeRef": null}, {"name": "automaticPresenceSimulation", "type": "boolean", "optional": true, "description": "If set to true, tests of user presence will succeed immediately. Otherwise, they will not be resolved. Defaults to true.", "typeRef": null}, {"name": "isUserVerified", "type": "boolean", "optional": true, "description": "Sets whether User Verification succeeds or fails for an authenticator. Defaults to false.", "typeRef": null}, {"name": "defaultBackupEligibility", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup eligibility (BE) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}, {"name": "defaultBackupState", "type": "boolean", "optional": true, "description": "Credentials created by this authenticator will have the backup state (BS) flag set to this value. Defaults to false. https://w3c.github.io/webauthn/#sctn-credential-backup", "typeRef": null}]);
1485
- inspectorBackend.registerType("WebAuthn.Credential", [{"name": "credentialId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isResidentCredential", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "rpId", "type": "string", "optional": true, "description": "Relying Party ID the credential is scoped to. Must be set when adding a credential.", "typeRef": null}, {"name": "privateKey", "type": "string", "optional": false, "description": "The ECDSA P-256 private key in PKCS#8 format.", "typeRef": null}, {"name": "userHandle", "type": "string", "optional": true, "description": "An opaque byte sequence with a maximum size of 64 bytes mapping the credential to a specific user.", "typeRef": null}, {"name": "signCount", "type": "number", "optional": true, "description": "Signature counter. Must be equal to or greater than -1. If -1, the credential won't have an associated signature counter, and every assertion operation will report a value of 0. See https://w3c.github.io/webauthn/#signature-counter", "typeRef": null}, {"name": "largeBlob", "type": "string", "optional": true, "description": "The large blob associated with the credential. See https://w3c.github.io/webauthn/#sctn-large-blob-extension", "typeRef": null}, {"name": "backupEligibility", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup eligibility (BE) flag set to this value. Defaults to the authenticator's defaultBackupEligibility value.", "typeRef": null}, {"name": "backupState", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup state (BS) flag set to this value. Defaults to the authenticator's defaultBackupState value.", "typeRef": null}, {"name": "userName", "type": "string", "optional": true, "description": "The credential's user.name property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialentity-name", "typeRef": null}, {"name": "userDisplayName", "type": "string", "optional": true, "description": "The credential's user.displayName property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialuserentity-displayname", "typeRef": null}, {"name": "cmtgKeys", "type": "array", "optional": true, "description": "The CMTG keys associated with the credential.", "typeRef": "binary"}, {"name": "activeCmtgKeyIndex", "type": "number", "optional": true, "description": "The 0-based index of the active key in cmtgKeys.", "typeRef": null}, {"name": "generateCmtgKeyOnNextOperation", "type": "boolean", "optional": true, "description": "If true, the authenticator will generate a new CMTG key on the next operation.", "typeRef": null}]);
1486
+ inspectorBackend.registerType("WebAuthn.Credential", [{"name": "credentialId", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "isResidentCredential", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "rpId", "type": "string", "optional": true, "description": "Relying Party ID the credential is scoped to. Must be set when adding a credential.", "typeRef": null}, {"name": "privateKey", "type": "string", "optional": false, "description": "The ECDSA P-256 private key in PKCS#8 format.", "typeRef": null}, {"name": "userHandle", "type": "string", "optional": true, "description": "An opaque byte sequence with a maximum size of 64 bytes mapping the credential to a specific user.", "typeRef": null}, {"name": "signCount", "type": "number", "optional": false, "description": "Signature counter. Must be equal to or greater than -1. If -1, the credential won't have an associated signature counter, and every assertion operation will report a value of 0. See https://w3c.github.io/webauthn/#signature-counter", "typeRef": null}, {"name": "largeBlob", "type": "string", "optional": true, "description": "The large blob associated with the credential. See https://w3c.github.io/webauthn/#sctn-large-blob-extension", "typeRef": null}, {"name": "backupEligibility", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup eligibility (BE) flag set to this value. Defaults to the authenticator's defaultBackupEligibility value.", "typeRef": null}, {"name": "backupState", "type": "boolean", "optional": true, "description": "Assertions returned by this credential will have the backup state (BS) flag set to this value. Defaults to the authenticator's defaultBackupState value.", "typeRef": null}, {"name": "userName", "type": "string", "optional": true, "description": "The credential's user.name property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialentity-name", "typeRef": null}, {"name": "userDisplayName", "type": "string", "optional": true, "description": "The credential's user.displayName property. Equivalent to empty if not set. https://w3c.github.io/webauthn/#dom-publickeycredentialuserentity-displayname", "typeRef": null}, {"name": "cmtgKeys", "type": "array", "optional": true, "description": "The CMTG keys associated with the credential.", "typeRef": "binary"}, {"name": "activeCmtgKeyIndex", "type": "number", "optional": true, "description": "The 0-based index of the active key in cmtgKeys.", "typeRef": null}, {"name": "generateCmtgKeyOnNextOperation", "type": "boolean", "optional": true, "description": "If true, the authenticator will generate a new CMTG key on the next operation.", "typeRef": null}]);
1486
1487
 
1487
1488
  // WebMCP.
1488
1489
  inspectorBackend.registerEnum("WebMCP.InvocationStatus", {Completed: "Completed", Canceled: "Canceled", Error: "Error"});
@@ -1513,7 +1514,7 @@ inspectorBackend.registerEnum("Debugger.ContinueToLocationRequestTargetCallFrame
1513
1514
  inspectorBackend.registerCommand("Debugger.continueToLocation", [{"name": "location", "type": "object", "optional": false, "description": "Location to continue to.", "typeRef": "Debugger.Location"}, {"name": "targetCallFrames", "type": "string", "optional": true, "description": "", "typeRef": "Debugger.ContinueToLocationRequestTargetCallFrames"}], [], "Continues execution until specific location is reached.");
1514
1515
  inspectorBackend.registerCommand("Debugger.disable", [], [], "Disables debugger for given page.");
1515
1516
  inspectorBackend.registerCommand("Debugger.enable", [{"name": "maxScriptsCacheSize", "type": "number", "optional": true, "description": "The maximum size in bytes of collected scripts (not referenced by other heap objects) the debugger can hold. Puts no limit if parameter is omitted.", "typeRef": null}], ["debuggerId"], "Enables debugger for the given page. Clients should not assume that the debugging has been enabled until the result for this command is received.");
1516
- inspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false, "description": "Call frame identifier to evaluate on.", "typeRef": "Debugger.CallFrameId"}, {"name": "expression", "type": "string", "optional": false, "description": "Expression to evaluate.", "typeRef": null}, {"name": "objectGroup", "type": "string", "optional": true, "description": "String object group name to put result into (allows rapid releasing resulting object handles using `releaseObjectGroup`).", "typeRef": null}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true, "description": "Specifies whether command line API should be available to the evaluated expression, defaults to false.", "typeRef": null}, {"name": "silent", "type": "boolean", "optional": true, "description": "In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides `setPauseOnException` state.", "typeRef": null}, {"name": "returnByValue", "type": "boolean", "optional": true, "description": "Whether the result is expected to be a JSON object that should be sent by value.", "typeRef": null}, {"name": "generatePreview", "type": "boolean", "optional": true, "description": "Whether preview should be generated for the result.", "typeRef": null}, {"name": "throwOnSideEffect", "type": "boolean", "optional": true, "description": "Whether to throw an exception if side effect cannot be ruled out during evaluation.", "typeRef": null}, {"name": "timeout", "type": "number", "optional": true, "description": "Terminate execution after timing out (number of milliseconds).", "typeRef": "Runtime.TimeDelta"}], ["result", "exceptionDetails"], "Evaluates expression on a given call frame.");
1517
+ inspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false, "description": "Call frame identifier to evaluate on.", "typeRef": "Debugger.CallFrameId"}, {"name": "expression", "type": "string", "optional": false, "description": "Expression to evaluate.", "typeRef": null}, {"name": "objectGroup", "type": "string", "optional": true, "description": "String object group name to put result into (allows rapid releasing resulting object handles using `releaseObjectGroup`).", "typeRef": null}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true, "description": "Specifies whether command line API should be available to the evaluated expression, defaults to false.", "typeRef": null}, {"name": "silent", "type": "boolean", "optional": true, "description": "In silent mode exceptions thrown during evaluation are not reported and do not pause execution. Overrides `setPauseOnException` state.", "typeRef": null}, {"name": "returnByValue", "type": "boolean", "optional": true, "description": "Whether the result is expected to be a JSON object that should be sent by value.", "typeRef": null}, {"name": "generatePreview", "type": "boolean", "optional": true, "description": "Whether preview should be generated for the result.", "typeRef": null}, {"name": "throwOnSideEffect", "type": "boolean", "optional": true, "description": "Whether to throw an exception if side effect cannot be ruled out during evaluation.", "typeRef": null}, {"name": "timeout", "type": "number", "optional": true, "description": "Terminate execution after timing out (number of milliseconds).", "typeRef": "Runtime.TimeDelta"}, {"name": "scopeNumber", "type": "number", "optional": true, "description": "Specifies the scope number to evaluate the expression in (default: 0, innermost scope).", "typeRef": null}], ["result", "exceptionDetails"], "Evaluates expression on a given call frame.");
1517
1518
  inspectorBackend.registerCommand("Debugger.getPossibleBreakpoints", [{"name": "start", "type": "object", "optional": false, "description": "Start of range to search possible breakpoint locations in.", "typeRef": "Debugger.Location"}, {"name": "end", "type": "object", "optional": true, "description": "End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range.", "typeRef": "Debugger.Location"}, {"name": "restrictToFunction", "type": "boolean", "optional": true, "description": "Only consider locations which are in the same (non-nested) function as start.", "typeRef": null}], ["locations"], "Returns possible locations for breakpoint. scriptId in start and end range locations should be the same.");
1518
1519
  inspectorBackend.registerCommand("Debugger.getScriptSource", [{"name": "scriptId", "type": "string", "optional": false, "description": "Id of the script to get source for.", "typeRef": "Runtime.ScriptId"}], ["scriptSource", "bytecode"], "Returns source for the script with given id.");
1519
1520
  inspectorBackend.registerCommand("Debugger.disassembleWasmModule", [{"name": "scriptId", "type": "string", "optional": false, "description": "Id of the script to disassemble", "typeRef": "Runtime.ScriptId"}], ["streamId", "totalNumberOfLines", "functionBodyOffsets", "chunk"], "");
@@ -668,6 +668,7 @@ export const generatedProperties = [
668
668
  "math-shift",
669
669
  "math-style",
670
670
  "max-block-size",
671
+ "max-content-sizing",
671
672
  "max-height",
672
673
  "max-inline-size",
673
674
  "max-lines",
@@ -826,6 +827,7 @@ export const generatedProperties = [
826
827
  "text-box-trim",
827
828
  "text-combine-upright",
828
829
  "text-decoration-color",
830
+ "text-decoration-inset",
829
831
  "text-decoration-line",
830
832
  "text-decoration-skip-ink",
831
833
  "text-decoration-skip-spaces",
@@ -3915,6 +3917,15 @@ export const generatedProperties = [
3915
3917
  ],
3916
3918
  "name": "max-block-size"
3917
3919
  },
3920
+ {
3921
+ "keywords": [
3922
+ "auto",
3923
+ "shrink-to-fit"
3924
+ ],
3925
+ "name": "max-content-sizing",
3926
+ "runtime_flag": "CssMaxContentSizing",
3927
+ "runtime_flag_status": "test"
3928
+ },
3918
3929
  {
3919
3930
  "keywords": [
3920
3931
  "none"
@@ -4981,7 +4992,7 @@ export const generatedProperties = [
4981
4992
  ],
4982
4993
  "name": "scroll-axis-lock",
4983
4994
  "runtime_flag": "ScrollAxisLock",
4984
- "runtime_flag_status": "experimental"
4995
+ "runtime_flag_status": "stable"
4985
4996
  },
4986
4997
  {
4987
4998
  "keywords": [
@@ -5479,6 +5490,15 @@ export const generatedProperties = [
5479
5490
  ],
5480
5491
  "name": "text-decoration-color"
5481
5492
  },
5493
+ {
5494
+ "inherited": false,
5495
+ "keywords": [
5496
+ "auto"
5497
+ ],
5498
+ "name": "text-decoration-inset",
5499
+ "runtime_flag": "CSSTextDecorationInset",
5500
+ "runtime_flag_status": "experimental"
5501
+ },
5482
5502
  {
5483
5503
  "keywords": [
5484
5504
  "none",
@@ -8046,6 +8066,12 @@ export const generatedPropertyValues = {
8046
8066
  "none"
8047
8067
  ]
8048
8068
  },
8069
+ "max-content-sizing": {
8070
+ "values": [
8071
+ "auto",
8072
+ "shrink-to-fit"
8073
+ ]
8074
+ },
8049
8075
  "max-height": {
8050
8076
  "values": [
8051
8077
  "none"
@@ -8831,6 +8857,11 @@ export const generatedPropertyValues = {
8831
8857
  "currentcolor"
8832
8858
  ]
8833
8859
  },
8860
+ "text-decoration-inset": {
8861
+ "values": [
8862
+ "auto"
8863
+ ]
8864
+ },
8834
8865
  "text-decoration-line": {
8835
8866
  "values": [
8836
8867
  "none",
@@ -2273,6 +2273,14 @@ export namespace ProtocolMapping {
2273
2273
  paramsType: [Protocol.DOM.ForceShowPopoverRequest];
2274
2274
  returnType: Protocol.DOM.ForceShowPopoverResponse;
2275
2275
  };
2276
+ /**
2277
+ * When enabling, this API forces an element to gain interest in its target,
2278
+ * keeping interest active until disabled.
2279
+ */
2280
+ 'DOM.forceShowInterest': {
2281
+ paramsType: [Protocol.DOM.ForceShowInterestRequest];
2282
+ returnType: void;
2283
+ };
2276
2284
  /**
2277
2285
  * Returns event listeners of the given object.
2278
2286
  */
@@ -1369,6 +1369,12 @@ declare namespace ProtocolProxyApi {
1369
1369
  */
1370
1370
  invoke_forceShowPopover(params: Protocol.DOM.ForceShowPopoverRequest): Promise<Protocol.DOM.ForceShowPopoverResponse>;
1371
1371
 
1372
+ /**
1373
+ * When enabling, this API forces an element to gain interest in its target,
1374
+ * keeping interest active until disabled.
1375
+ */
1376
+ invoke_forceShowInterest(params: Protocol.DOM.ForceShowInterestRequest): Promise<Protocol.ProtocolResponseWithError>;
1377
+
1372
1378
  }
1373
1379
  export interface DOMDispatcher {
1374
1380
  /**
@@ -5897,6 +5897,17 @@ export namespace DOM {
5897
5897
  nodeIds: NodeId[];
5898
5898
  }
5899
5899
 
5900
+ export interface ForceShowInterestRequest {
5901
+ /**
5902
+ * Id of the interest invoker HTMLElement.
5903
+ */
5904
+ nodeId: NodeId;
5905
+ /**
5906
+ * If true, opens and holds interest. If false, releases forced interest.
5907
+ */
5908
+ enable: boolean;
5909
+ }
5910
+
5900
5911
  /**
5901
5912
  * Fired when `Element`'s attribute is modified.
5902
5913
  */
@@ -15215,7 +15226,6 @@ export namespace Page {
15215
15226
  export interface FileHandler {
15216
15227
  action: string;
15217
15228
  name: string;
15218
- icons?: ImageResource[];
15219
15229
  /**
15220
15230
  * Mimic a map, name is the key, accepts is the value.
15221
15231
  */
@@ -20172,7 +20182,7 @@ export namespace WebAuthn {
20172
20182
  * every assertion operation will report a value of 0.
20173
20183
  * See https://w3c.github.io/webauthn/#signature-counter
20174
20184
  */
20175
- signCount?: integer;
20185
+ signCount: integer;
20176
20186
  /**
20177
20187
  * The large blob associated with the credential.
20178
20188
  * See https://w3c.github.io/webauthn/#sctn-large-blob-extension
@@ -20816,6 +20826,10 @@ export namespace Debugger {
20816
20826
  * Terminate execution after timing out (number of milliseconds).
20817
20827
  */
20818
20828
  timeout?: Runtime.TimeDelta;
20829
+ /**
20830
+ * Specifies the scope number to evaluate the expression in (default: 0, innermost scope).
20831
+ */
20832
+ scopeNumber?: integer;
20819
20833
  }
20820
20834
 
20821
20835
  export interface EvaluateOnCallFrameResponse extends ProtocolResponseWithError {