chrome-devtools-frontend 1.0.1662965 → 1.0.1664496

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/.agents/skills/{creating-a-model → devtools-model-management}/SKILL.md +0 -1
  2. package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +2 -1
  3. package/.agents/skills/fixing-skipped-tests/SKILL.md +3 -3
  4. package/.agents/skills/merging-devtools-module/SKILL.md +1 -1
  5. package/.agents/skills/migrate-chromium-test/SKILL.md +3 -2
  6. package/.agents/skills/repro-flaky-tests/SKILL.md +71 -31
  7. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +1 -0
  8. package/docs/ui_engineering.md +2 -0
  9. package/eslint.config.mjs +1 -0
  10. package/front_end/core/common/Settings.ts +75 -0
  11. package/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts +112 -0
  12. package/front_end/core/sdk/CPUProfilerModel.ts +21 -13
  13. package/front_end/core/sdk/CSSContainerQuery.ts +1 -1
  14. package/front_end/core/sdk/CSSLayer.ts +1 -1
  15. package/front_end/core/sdk/CSSMedia.ts +1 -1
  16. package/front_end/core/sdk/CSSModel.ts +1 -1
  17. package/front_end/core/sdk/CSSNavigation.ts +1 -1
  18. package/front_end/core/sdk/CSSProperty.ts +1 -1
  19. package/front_end/core/sdk/CSSQuery.ts +1 -1
  20. package/front_end/core/sdk/CSSRule.ts +1 -1
  21. package/front_end/core/sdk/CSSScope.ts +1 -1
  22. package/front_end/core/sdk/CSSStartingStyle.ts +1 -1
  23. package/front_end/core/sdk/CSSStyleDeclaration.ts +1 -1
  24. package/front_end/core/sdk/CSSStyleSheetHeader.ts +1 -1
  25. package/front_end/core/sdk/CSSSupports.ts +1 -1
  26. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
  27. package/front_end/core/sdk/NetworkManager.ts +1 -1
  28. package/front_end/core/sdk/NetworkRequest.ts +7 -7
  29. package/front_end/core/sdk/Resource.ts +1 -1
  30. package/front_end/core/sdk/ScopeTreeCache.ts +1 -1
  31. package/front_end/core/sdk/Script.ts +1 -1
  32. package/front_end/core/sdk/ServerSentEvents.ts +1 -1
  33. package/front_end/core/sdk/SourceMap.ts +1 -1
  34. package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
  35. package/front_end/core/sdk/sdk-meta.ts +3 -3
  36. package/front_end/{models → core}/text_utils/ContentProvider.ts +4 -6
  37. package/front_end/{models → core}/text_utils/StaticContentProvider.ts +4 -6
  38. package/front_end/{models → core}/text_utils/StreamingContentData.ts +1 -2
  39. package/front_end/{models → core}/text_utils/TextRange.ts +6 -3
  40. package/front_end/{models → core}/text_utils/TextUtils.ts +7 -7
  41. package/front_end/{models → core}/text_utils/WasmDisassembly.ts +2 -2
  42. package/front_end/core/text_utils/text_utils.ts +27 -0
  43. package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +1 -1
  44. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
  45. package/front_end/entrypoints/main/MainImpl.ts +14 -1
  46. package/front_end/foundation/Universe.ts +1 -1
  47. package/front_end/models/ai_assistance/AgentProject.ts +1 -1
  48. package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +3 -6
  49. package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -1
  50. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -11
  51. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
  52. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +23 -10
  53. package/front_end/models/ai_assistance/agents/StorageAgent.ts +19 -18
  54. package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -3
  55. package/front_end/models/ai_assistance/contexts/FileContext.ts +7 -3
  56. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +39 -11
  57. package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +6 -3
  58. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
  59. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +4 -4
  60. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
  61. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +76 -3
  62. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +11 -1
  63. package/front_end/models/badges/AiExplorerBadge.ts +8 -3
  64. package/front_end/models/badges/Badge.ts +1 -0
  65. package/front_end/models/badges/UserBadges.ts +11 -5
  66. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
  67. package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
  68. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
  69. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
  70. package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
  71. package/front_end/models/bindings/FileUtils.ts +1 -1
  72. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +7 -10
  73. package/front_end/models/bindings/ResourceMapping.ts +1 -1
  74. package/front_end/models/bindings/ResourceScriptMapping.ts +1 -1
  75. package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
  76. package/front_end/models/bindings/StylesSourceMapping.ts +1 -1
  77. package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
  78. package/front_end/models/crux-manager/CrUXManager.ts +1 -1
  79. package/front_end/models/emulation/EmulatedDevices.ts +3 -2
  80. package/front_end/models/har/Importer.ts +1 -1
  81. package/front_end/models/har/Writer.ts +1 -1
  82. package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
  83. package/front_end/models/issues_manager/IssuesManager.ts +5 -0
  84. package/front_end/models/issues_manager/LazyLoadImageIssue.ts +76 -0
  85. package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +7 -0
  86. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  87. package/front_end/models/javascript_metadata/NativeFunctions.js +9 -10
  88. package/front_end/models/live-metrics/LiveMetrics.ts +2 -3
  89. package/front_end/models/logs/NetworkLog.ts +4 -3
  90. package/front_end/models/logs/logs-meta.ts +3 -3
  91. package/front_end/models/network_time_calculator/NetworkTimeCalculator.ts +4 -4
  92. package/front_end/models/persistence/Automapping.ts +1 -1
  93. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
  94. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
  95. package/front_end/models/persistence/IsolatedFileSystem.ts +2 -2
  96. package/front_end/models/persistence/NetworkPersistenceManager.ts +1 -1
  97. package/front_end/models/persistence/PersistenceImpl.ts +1 -1
  98. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  99. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +1 -1
  100. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  101. package/front_end/models/text_utils/text_utils.ts +2 -24
  102. package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
  103. package/front_end/models/trace/insights/LegacyJavaScript.ts +1 -1
  104. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  105. package/front_end/models/trace/insights/ThirdParties.ts +1 -1
  106. package/front_end/models/workspace/FileManager.ts +1 -1
  107. package/front_end/models/workspace/UISourceCode.ts +1 -1
  108. package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
  109. package/front_end/models/workspace_diff/WorkspaceDiff.ts +1 -1
  110. package/front_end/panels/accessibility/AccessibilityNodeView.ts +1 -1
  111. package/front_end/panels/accessibility/AccessibilityStrings.ts +2 -2
  112. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -1
  113. package/front_end/panels/ai_assistance/ExportConversation.ts +1 -1
  114. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -1
  115. package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
  116. package/front_end/panels/application/AppManifestView.ts +4 -4
  117. package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -2
  118. package/front_end/panels/application/CrashReportContextView.ts +1 -1
  119. package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
  120. package/front_end/panels/application/DeviceBoundSessionsView.ts +4 -4
  121. package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
  122. package/front_end/panels/application/FrameDetailsView.ts +1 -1
  123. package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +12 -2
  124. package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
  125. package/front_end/panels/application/application.ts +2 -0
  126. package/front_end/panels/application/components/BackForwardCacheView.ts +21 -5
  127. package/front_end/panels/application/components/CrashReportContextGrid.ts +1 -1
  128. package/front_end/panels/application/components/TrustTokensView.ts +2 -2
  129. package/front_end/panels/application/preloading/PreloadingView.ts +1 -1
  130. package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
  131. package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -2
  132. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +4 -4
  133. package/front_end/panels/autofill/AutofillView.ts +1 -1
  134. package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
  135. package/front_end/panels/common/ExtensionServer.ts +1 -1
  136. package/front_end/panels/console/ConsoleFilter.ts +1 -1
  137. package/front_end/panels/console/ConsoleSidebar.ts +1 -1
  138. package/front_end/panels/console/ConsoleView.ts +1 -1
  139. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  140. package/front_end/panels/console/PromptBuilder.ts +1 -1
  141. package/front_end/panels/coverage/CoverageDecorationManager.ts +9 -1
  142. package/front_end/panels/coverage/CoverageModel.ts +1 -1
  143. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
  144. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  145. package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
  146. package/front_end/panels/elements/AccessibilityTreeView.ts +38 -3
  147. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +1 -1
  148. package/front_end/panels/elements/ElementIssueUtils.ts +2 -2
  149. package/front_end/panels/elements/ElementsTreeElement.ts +10 -3
  150. package/front_end/panels/elements/StandaloneStylesContainer.ts +1 -1
  151. package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
  152. package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
  153. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  154. package/front_end/panels/elements/StylesContainer.ts +1 -1
  155. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  156. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +1 -1
  157. package/front_end/panels/explain/components/ConsoleInsight.ts +2 -2
  158. package/front_end/panels/issues/AffectedLazyLoadImagesView.ts +76 -0
  159. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  160. package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -1
  161. package/front_end/panels/issues/IssueView.ts +2 -0
  162. package/front_end/panels/issues/issues.ts +2 -0
  163. package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
  164. package/front_end/panels/lighthouse/LighthouseController.ts +5 -0
  165. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  166. package/front_end/panels/network/BinaryResourceView.ts +1 -1
  167. package/front_end/panels/network/NetworkDataGridNode.ts +29 -7
  168. package/front_end/panels/network/NetworkLogView.ts +1 -1
  169. package/front_end/panels/network/NetworkLogViewColumns.ts +6 -6
  170. package/front_end/panels/network/NetworkPanel.ts +4 -4
  171. package/front_end/panels/network/NetworkSearchScope.ts +1 -1
  172. package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
  173. package/front_end/panels/network/RequestHTMLView.ts +1 -1
  174. package/front_end/panels/network/RequestPayloadView.ts +1 -1
  175. package/front_end/panels/network/RequestPreviewView.ts +1 -1
  176. package/front_end/panels/network/RequestResponseView.ts +1 -1
  177. package/front_end/panels/network/ResourceChunkView.ts +1 -1
  178. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
  179. package/front_end/panels/network/ResourceWebSocketFrameView.ts +1 -1
  180. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  181. package/front_end/panels/network/forward/UIRequestLocation.ts +1 -1
  182. package/front_end/panels/network/network-meta.ts +3 -3
  183. package/front_end/panels/profiler/HeapProfileView.ts +6 -6
  184. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  185. package/front_end/panels/profiler/ProfileDataGrid.ts +12 -8
  186. package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -1
  187. package/front_end/panels/recorder/RecorderPanel.ts +493 -381
  188. package/front_end/panels/recorder/RecordingListView.ts +8 -37
  189. package/front_end/panels/recorder/RecordingView.ts +54 -27
  190. package/front_end/panels/recorder/SelectorPicker.ts +0 -13
  191. package/front_end/panels/recorder/StepEditor.ts +6 -14
  192. package/front_end/panels/recorder/StepView.ts +36 -105
  193. package/front_end/panels/search/SearchResultsPane.ts +1 -1
  194. package/front_end/panels/security/SecurityPanel.ts +3 -3
  195. package/front_end/panels/settings/AISettingsTab.ts +4 -4
  196. package/front_end/panels/settings/components/SyncSection.ts +4 -4
  197. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +3 -3
  198. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +1 -1
  199. package/front_end/panels/sources/BreakpointsView.ts +1 -1
  200. package/front_end/panels/sources/CoveragePlugin.ts +1 -1
  201. package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
  202. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +27 -3
  203. package/front_end/panels/sources/NavigatorView.ts +1 -1
  204. package/front_end/panels/sources/PersistenceActions.ts +1 -1
  205. package/front_end/panels/sources/SourcesNavigator.ts +1 -1
  206. package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
  207. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  208. package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
  209. package/front_end/panels/sources/components/HeadersView.ts +1 -1
  210. package/front_end/panels/sources/filteredUISourceCodeListProvider.css +12 -1
  211. package/front_end/panels/sources/sources-meta.ts +1 -1
  212. package/front_end/panels/timeline/StatusDialog.ts +1 -1
  213. package/front_end/panels/timeline/TimelineController.ts +24 -3
  214. package/front_end/panels/timeline/TimelinePanel.ts +116 -25
  215. package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
  216. package/front_end/panels/timeline/TimelineUIUtils.ts +1 -1
  217. package/front_end/panels/timeline/components/CWVMetrics.ts +1 -1
  218. package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
  219. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  220. package/front_end/panels/timeline/timeline-meta.ts +13 -0
  221. package/front_end/services/tracing/TracingManager.ts +27 -2
  222. package/front_end/third_party/chromium/README.chromium +1 -1
  223. package/front_end/third_party/lighthouse/README.chromium +2 -2
  224. package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1418 -1413
  225. package/front_end/third_party/lighthouse/locales/en-US.json +12 -6
  226. package/front_end/third_party/lighthouse/locales/en-XL.json +12 -6
  227. package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
  228. package/front_end/third_party/puppeteer/puppeteer.ts +20 -1
  229. package/front_end/ui/components/highlighting/HighlightElement.ts +4 -1
  230. package/front_end/ui/components/highlighting/HighlightManager.ts +1 -1
  231. package/front_end/ui/components/highlighting/MarkupHighlight.ts +1 -1
  232. package/front_end/ui/components/markdown_view/MarkdownView.ts +46 -2
  233. package/front_end/ui/components/markdown_view/markdownView.css +23 -0
  234. package/front_end/ui/components/text_editor/config.ts +1 -1
  235. package/front_end/ui/components/tree_outline/TreeOutline.ts +7 -1
  236. package/front_end/ui/legacy/Infobar.ts +1 -1
  237. package/front_end/ui/legacy/InspectorView.ts +12 -7
  238. package/front_end/ui/legacy/SuggestBox.ts +1 -1
  239. package/front_end/ui/legacy/TextPrompt.ts +1 -1
  240. package/front_end/ui/legacy/Toolbar.ts +5 -2
  241. package/front_end/ui/legacy/Treeoutline.ts +26 -7
  242. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
  243. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +1 -1
  244. package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
  245. package/front_end/ui/legacy/components/data_grid/dataGrid.css +1 -1
  246. package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +27 -13
  247. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +5 -2
  248. package/front_end/ui/legacy/components/inline_editor/CSSLinearEasingModel.ts +23 -0
  249. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +161 -54
  250. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  251. package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +1 -1
  252. package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -1
  253. package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
  254. package/front_end/ui/legacy/components/source_frame/JSONView.ts +105 -115
  255. package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +1 -1
  256. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +1 -1
  257. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +3 -3
  258. package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
  259. package/front_end/ui/legacy/components/source_frame/XMLView.ts +5 -1
  260. package/front_end/ui/legacy/components/source_frame/jsonView.css +4 -0
  261. package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
  262. package/front_end/ui/legacy/inspectorCommon.css +6 -2
  263. package/front_end/ui/settings/SettingUIRegistration.ts +105 -0
  264. package/front_end/ui/settings/settings.ts +9 -0
  265. package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
  266. package/mcp/mcp.ts +1 -0
  267. package/package.json +1 -1
  268. /package/.agents/skills/{verification → devtools-verification}/SKILL.md +0 -0
  269. /package/front_end/{models → core}/text_utils/CodeMirrorUtils.ts +0 -0
  270. /package/front_end/{models → core}/text_utils/ContentData.ts +0 -0
  271. /package/front_end/{models → core}/text_utils/Text.ts +0 -0
  272. /package/front_end/{models → core}/text_utils/TextCursor.ts +0 -0
  273. /package/front_end/{models → core}/text_utils/TextUtils.snapshot.txt +0 -0
@@ -7,8 +7,8 @@ import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import * as Root from '../../core/root/root.js';
9
9
  import type * as SDK from '../../core/sdk/sdk.js';
10
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
10
11
  import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
11
- import * as TextUtils from '../../models/text_utils/text_utils.js';
12
12
  import * as TextEditor from '../../ui/components/text_editor/text_editor.js';
13
13
 
14
14
  export class StylesAiCodeCompletionProvider {
@@ -3,8 +3,8 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import type * as SDK from '../../core/sdk/sdk.js';
6
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
6
7
  import type * as ComputedStyle from '../../models/computed_style/computed_style.js';
7
- import type * as TextUtils from '../../models/text_utils/text_utils.js';
8
8
  import type * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
9
9
  import type * as Components from '../../ui/legacy/components/utils/utils.js';
10
10
 
@@ -42,11 +42,11 @@ import * as Platform from '../../core/platform/platform.js';
42
42
  import {assertNotNullOrUndefined} from '../../core/platform/platform.js';
43
43
  import * as Root from '../../core/root/root.js';
44
44
  import * as SDK from '../../core/sdk/sdk.js';
45
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
45
46
  import * as Protocol from '../../generated/protocol.js';
46
47
  import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
47
48
  import * as Bindings from '../../models/bindings/bindings.js';
48
49
  import type * as ComputedStyle from '../../models/computed_style/computed_style.js';
49
- import * as TextUtils from '../../models/text_utils/text_utils.js';
50
50
  import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
51
51
  import * as TextEditor from '../../ui/components/text_editor/text_editor.js';
52
52
  import {createIcon, Icon} from '../../ui/kit/kit.js';
@@ -22,7 +22,7 @@ const UIStrings = {
22
22
  /**
23
23
  * @description Text for a checkbox to turn off the CSS property documentation.
24
24
  */
25
- dontShow: 'Don\'t show',
25
+ dontShow: 'Dont show',
26
26
  /**
27
27
  * @description Text indicating that the CSS property has limited availability across major browsers.
28
28
  */
@@ -90,9 +90,9 @@ const UIStrings = {
90
90
  */
91
91
  learnMore: 'Learn more',
92
92
  /**
93
- * @description The error message when the user is not logged in into Chrome.
93
+ * @description The error message when the user is not logged in to Chrome.
94
94
  */
95
- notLoggedIn: 'This feature is only available when you sign into Chrome with your Google account.',
95
+ notLoggedIn: 'This feature is only available when you sign in to Chrome with your Google account.',
96
96
  /**
97
97
  * @description The title of a button which opens the Chrome SignIn page.
98
98
  */
@@ -0,0 +1,76 @@
1
+ // Copyright 2026 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as i18n from '../../core/i18n/i18n.js';
6
+ import type * as Platform from '../../core/platform/platform.js';
7
+ import type * as IssuesManager from '../../models/issues_manager/issues_manager.js';
8
+ import {html, render} from '../../ui/lit/lit.js';
9
+
10
+ import {AffectedResourcesView} from './AffectedResourcesView.js';
11
+ import type {IssueView} from './IssueView.js';
12
+
13
+ const UIStrings = {
14
+ /**
15
+ * @description Noun for singular or plural number of affected element resource indication in issue view.
16
+ */
17
+ nElements: '{n, plural, =1 {# element} other {# elements}}',
18
+ } as const;
19
+ const str_ = i18n.i18n.registerUIStrings('panels/issues/AffectedLazyLoadImagesView.ts', UIStrings);
20
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
21
+
22
+ export interface ViewInput {
23
+ issues: Iterable<IssuesManager.LazyLoadImageIssue.LazyLoadImageIssue>;
24
+ issueCategory: IssuesManager.Issue.IssueCategory;
25
+ createElementCell: (element: IssuesManager.Issue.AffectedElement,
26
+ category: IssuesManager.Issue.IssueCategory) => Promise<Element>;
27
+ }
28
+
29
+ export type View = (input: ViewInput, output: object, target: HTMLElement) => Promise<void>;
30
+
31
+ export const DEFAULT_VIEW: View = async (input, _output, target) => {
32
+ const templates = [];
33
+ for (const issue of input.issues) {
34
+ for (const element of issue.elements()) {
35
+ templates.push(html`<tr>
36
+ ${await input.createElementCell(element, input.issueCategory)}
37
+ </tr>`);
38
+ }
39
+ }
40
+ render(html`${templates}`, target);
41
+ };
42
+
43
+ export class AffectedLazyLoadImagesView extends AffectedResourcesView {
44
+ readonly #view: View;
45
+
46
+ constructor(parent: IssueView, issue: IssuesManager.IssueAggregator.AggregatedIssue, jslogContext: string,
47
+ view = DEFAULT_VIEW) {
48
+ super(parent, issue, jslogContext);
49
+ this.#view = view;
50
+ }
51
+
52
+ override update(): void {
53
+ this.requestResolver.clear();
54
+ void this.#render();
55
+ }
56
+
57
+ protected override getResourceNameWithCount(count: number): Platform.UIString.LocalizedString {
58
+ return i18nString(UIStrings.nElements, {n: count});
59
+ }
60
+
61
+ async #render(): Promise<void> {
62
+ const issues = this.issue.getLazyLoadImageIssues();
63
+ let count = 0;
64
+ for (const issue of issues) {
65
+ count += issue.elementCount();
66
+ }
67
+ this.updateAffectedResourceCount(count);
68
+
69
+ const input = {
70
+ issues,
71
+ issueCategory: this.issue.getCategory(),
72
+ createElementCell: this.createElementCell.bind(this),
73
+ };
74
+ await this.#view(input, {}, this.affectedResources);
75
+ }
76
+ }
@@ -31,7 +31,7 @@ const UIStrings = {
31
31
  /**
32
32
  * @description Tooltip for button linking to the Elements panel
33
33
  */
34
- clickToRevealTheFramesDomNodeIn: 'Click to reveal the frame\'s DOM node in the Elements panel',
34
+ clickToRevealTheFramesDomNodeIn: 'Click to reveal the frames DOM node in the Elements panel',
35
35
  /**
36
36
  * @description Replacement text for a link to an HTML element which is not available (anymore).
37
37
  */
@@ -93,7 +93,7 @@ const UIStrings = {
93
93
  /**
94
94
  * @description Content for the problem column in the affected resources table for a CORS issue that indicates that the HTTP status the preflight request was not successful.
95
95
  */
96
- preflightInvalidStatus: 'HTTP status of preflight request didn\'t indicate success',
96
+ preflightInvalidStatus: 'HTTP status of preflight request didnt indicate success',
97
97
  /**
98
98
  * @description Title for a column in the affected resources for a CORS issue showing the origin that was allowed according to CORS headers.
99
99
  */
@@ -25,6 +25,7 @@ import {AffectedDirectivesView} from './AffectedDirectivesView.js';
25
25
  import {AffectedDocumentsInQuirksModeView} from './AffectedDocumentsInQuirksModeView.js';
26
26
  import {AffectedElementsView} from './AffectedElementsView.js';
27
27
  import {AffectedHeavyAdView} from './AffectedHeavyAdView.js';
28
+ import {AffectedLazyLoadImagesView} from './AffectedLazyLoadImagesView.js';
28
29
  import {AffectedMetadataAllowedSitesView} from './AffectedMetadataAllowedSitesView.js';
29
30
  import {AffectedPartitioningBlobURLView} from './AffectedPartitioningBlobURLView.js';
30
31
  import {AffectedPermissionElementsView} from './AffectedPermissionElementsView.js';
@@ -259,6 +260,7 @@ export class IssueView extends UI.TreeOutline.TreeElement {
259
260
  new AffectedDescendantsWithinSelectElementView(this, this.#issue, 'disallowed-select-descendants-details'),
260
261
  new AffectedPartitioningBlobURLView(this, this.#issue, 'partitioning-blob-url-details'),
261
262
  new AffectedPermissionElementsView(this, this.#issue, 'permission-element-elements'),
263
+ new AffectedLazyLoadImagesView(this, this.#issue, 'lazy-load-image-details'),
262
264
  new AffectedSelectivePermissionsInterventionView(this, this.#issue, 'selective-permissions-intervention-details'),
263
265
  ];
264
266
  this.#hiddenIssuesMenu = new Components.HideIssuesMenu.HideIssuesMenu();
@@ -2,12 +2,14 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as AffectedLazyLoadImagesView from './AffectedLazyLoadImagesView.js';
5
6
  import * as AffectedSelectivePermissionsInterventionView from './AffectedSelectivePermissionsInterventionView.js';
6
7
  import * as IssueRevealer from './IssueRevealer.js';
7
8
  import * as IssuesPane from './IssuesPane.js';
8
9
  import * as IssueView from './IssueView.js';
9
10
 
10
11
  export {
12
+ AffectedLazyLoadImagesView,
11
13
  AffectedSelectivePermissionsInterventionView,
12
14
  IssueRevealer,
13
15
  IssuesPane,
@@ -45,7 +45,7 @@ const UIStrings = {
45
45
  /**
46
46
  * @description Text in DView of the Layers panel
47
47
  */
48
- cantDisplayLayers: 'Can\'t display layers',
48
+ cantDisplayLayers: 'Cant display layers',
49
49
  /**
50
50
  * @description Text in DView of the Layers panel
51
51
  */
@@ -900,3 +900,8 @@ export interface EventTypes {
900
900
  [Events.PageWarningsChanged]: PageWarningsChangedEvent;
901
901
  [Events.AuditProgressChanged]: AuditProgressChangedEvent;
902
902
  }
903
+
904
+ export function clearSettingsCacheForTest(): void {
905
+ runtimeSettings = null;
906
+ presets = null;
907
+ }
@@ -7,8 +7,8 @@ import * as Common from '../../core/common/common.js';
7
7
  import * as Host from '../../core/host/host.js';
8
8
  import * as Platform from '../../core/platform/platform.js';
9
9
  import * as SDK from '../../core/sdk/sdk.js';
10
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
10
11
  import type * as LighthouseModel from '../../models/lighthouse/lighthouse.js';
11
- import * as TextUtils from '../../models/text_utils/text_utils.js';
12
12
  import * as Workspace from '../../models/workspace/workspace.js';
13
13
  import * as LighthouseReport from '../../third_party/lighthouse/report/report.js';
14
14
  import * as Components from '../../ui/legacy/components/utils/utils.js';
@@ -9,7 +9,7 @@ import * as Common from '../../core/common/common.js';
9
9
  import * as Host from '../../core/host/host.js';
10
10
  import * as i18n from '../../core/i18n/i18n.js';
11
11
  import type * as Platform from '../../core/platform/platform.js';
12
- import type * as TextUtils from '../../models/text_utils/text_utils.js';
12
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
13
13
  import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
14
14
  import * as UI from '../../ui/legacy/legacy.js';
15
15
 
@@ -108,7 +108,7 @@ const UIStrings = {
108
108
  /**
109
109
  * @description Reason why a request was blocked shown in the Network panel
110
110
  */
111
- coopSandboxedIframeCannotNavigateToCoopPage: 'Sandboxed iframe\'s popup cannot navigate to COOP page',
111
+ coopSandboxedIframeCannotNavigateToCoopPage: 'Sandboxed iframes popup cannot navigate to COOP page',
112
112
  /**
113
113
  * @description Reason why a request was blocked shown in the Network panel
114
114
  */
@@ -610,6 +610,27 @@ export const _backgroundColors: Record<string, string> = {
610
610
  FromFrame: '--network-grid-from-frame-color',
611
611
  };
612
612
 
613
+ // name/path/url are the primary cells that own the request icon, the Ask AI
614
+ // button and the row click handlers. The first visible one is decorated, which
615
+ // is not necessarily visible index 0 (the pinned request-number column can come
616
+ // first).
617
+ const PRIMARY_COLUMNS = new Set(['name', 'path', 'url']);
618
+
619
+ function firstPrimaryColumn(dataGrid: DataGrid.DataGrid.DataGridImpl<unknown>|null): DataGrid.DataGrid.ColumnDescriptor|
620
+ undefined {
621
+ return dataGrid?.visibleColumnsArray.find(column => PRIMARY_COLUMNS.has(column.id));
622
+ }
623
+
624
+ function isFirstPrimaryColumn(dataGrid: DataGrid.DataGrid.DataGridImpl<unknown>|null, columnId: string): boolean {
625
+ const firstPrimary = firstPrimaryColumn(dataGrid);
626
+ // When the node is not attached to a grid yet there are no visible columns to
627
+ // inspect, so fall back to treating any primary column as the first one.
628
+ if (!firstPrimary) {
629
+ return PRIMARY_COLUMNS.has(columnId);
630
+ }
631
+ return firstPrimary.id === columnId;
632
+ }
633
+
613
634
  export class NetworkRequestNode extends NetworkNode {
614
635
  private initiatorCell: Element|null;
615
636
  private requestInternal: SDK.NetworkRequest.NetworkRequest;
@@ -1351,9 +1372,8 @@ export class NetworkRequestNode extends NetworkNode {
1351
1372
  }
1352
1373
 
1353
1374
  private renderPrimaryCell(cell: HTMLElement, columnId: string, text?: string): void {
1354
- const columnIndex = (this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>)?.indexOfVisibleColumn(columnId) | 0;
1355
- const isFirstCell = (columnIndex === 0);
1356
- if (isFirstCell) {
1375
+ const dataGrid = this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>| null;
1376
+ if (isFirstPrimaryColumn(dataGrid, columnId)) {
1357
1377
  const leftPadding = this.leftPadding ? this.leftPadding + 'px' : '';
1358
1378
  cell.style.setProperty('padding-left', leftPadding);
1359
1379
  cell.tabIndex = -1;
@@ -1814,7 +1834,8 @@ export class NetworkRequestNode extends NetworkNode {
1814
1834
  export class NetworkGroupNode extends NetworkNode {
1815
1835
  override createCells(element: Element): void {
1816
1836
  super.createCells(element);
1817
- const primaryColumn = (this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>).visibleColumnsArray[0];
1837
+ const dataGrid = this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>;
1838
+ const primaryColumn = firstPrimaryColumn(dataGrid) ?? dataGrid.visibleColumnsArray[0];
1818
1839
  const localizedTitle = `${primaryColumn.title}`;
1819
1840
  const localizedLevel = i18nString(UIStrings.level);
1820
1841
  this.nodeAccessibleText =
@@ -1822,8 +1843,9 @@ export class NetworkGroupNode extends NetworkNode {
1822
1843
  }
1823
1844
 
1824
1845
  override renderCell(c: Element, columnId: string): void {
1825
- const columnIndex = (this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>).indexOfVisibleColumn(columnId);
1826
- if (columnIndex === 0) {
1846
+ const dataGrid = this.dataGrid as DataGrid.DataGrid.DataGridImpl<unknown>;
1847
+ const primaryColumn = firstPrimaryColumn(dataGrid) ?? dataGrid.visibleColumnsArray[0];
1848
+ if (primaryColumn.id === columnId) {
1827
1849
  const cell = (c as HTMLElement);
1828
1850
  const leftPadding = this.leftPadding ? this.leftPadding + 'px' : '';
1829
1851
  cell.style.setProperty('padding-left', leftPadding);
@@ -40,13 +40,13 @@ import * as Host from '../../core/host/host.js';
40
40
  import * as i18n from '../../core/i18n/i18n.js';
41
41
  import * as Platform from '../../core/platform/platform.js';
42
42
  import * as SDK from '../../core/sdk/sdk.js';
43
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
43
44
  import * as Protocol from '../../generated/protocol.js';
44
45
  import * as Bindings from '../../models/bindings/bindings.js';
45
46
  import * as HAR from '../../models/har/har.js';
46
47
  import * as Logs from '../../models/logs/logs.js';
47
48
  import * as NetworkTimeCalculator from '../../models/network_time_calculator/network_time_calculator.js';
48
49
  import * as Persistence from '../../models/persistence/persistence.js';
49
- import * as TextUtils from '../../models/text_utils/text_utils.js';
50
50
  import * as Workspace from '../../models/workspace/workspace.js';
51
51
  import * as NetworkForward from '../../panels/network/forward/forward.js';
52
52
  import * as Sources from '../../panels/sources/sources.js';
@@ -980,6 +980,12 @@ const DEFAULT_COLUMN_CONFIG = {
980
980
  };
981
981
 
982
982
  const DEFAULT_COLUMNS = [
983
+ {
984
+ id: 'request-number',
985
+ title: i18nLazyString(UIStrings.requestNumber),
986
+ align: DataGrid.DataGrid.Align.RIGHT,
987
+ sortingFunction: NetworkRequestNode.RequestNumberComparator,
988
+ },
983
989
  {
984
990
  id: 'name',
985
991
  title: i18nLazyString(UIStrings.name),
@@ -1004,12 +1010,6 @@ const DEFAULT_COLUMNS = [
1004
1010
  hideableGroup: 'path',
1005
1011
  sortingFunction: NetworkRequestNode.RequestURLComparator,
1006
1012
  },
1007
- {
1008
- id: 'request-number',
1009
- title: i18nLazyString(UIStrings.requestNumber),
1010
- align: DataGrid.DataGrid.Align.RIGHT,
1011
- sortingFunction: NetworkRequestNode.RequestNumberComparator,
1012
- },
1013
1013
  {
1014
1014
  id: 'method',
1015
1015
  title: i18nLazyString(UIStrings.method),
@@ -71,13 +71,13 @@ const UIStrings = {
71
71
  */
72
72
  search: 'Search',
73
73
  /**
74
- * @description Tooltip text that appears on the setting to preserve log when hovering over the item
74
+ * @description Tooltip text that appears on the setting to keep log when hovering over the item.
75
75
  */
76
- doNotClearLogOnPageReload: 'Do not clear log on page reload / navigation',
76
+ doNotClearLogOnPageReload: 'Don’t clear log on page reload / navigation',
77
77
  /**
78
- * @description Text to preserve the log after refreshing
78
+ * @description Text to keep the log after refreshing.
79
79
  */
80
- preserveLog: 'Preserve log',
80
+ preserveLog: 'Keep log',
81
81
  /**
82
82
  * @description Text to disable cache while DevTools is open
83
83
  */
@@ -6,8 +6,8 @@ import type * as Common from '../../core/common/common.js';
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
7
  import * as Platform from '../../core/platform/platform.js';
8
8
  import type * as SDK from '../../core/sdk/sdk.js';
9
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
9
10
  import type * as Logs from '../../models/logs/logs.js';
10
- import * as TextUtils from '../../models/text_utils/text_utils.js';
11
11
  import type * as Workspace from '../../models/workspace/workspace.js';
12
12
  import * as NetworkForward from '../../panels/network/forward/forward.js';
13
13
  import type * as Search from '../search/search.js';
@@ -46,7 +46,7 @@ const UIStrings = {
46
46
  * @example {Learn more} PH1
47
47
  */
48
48
  noThrottlingOrBlockingPattern:
49
- `To throttle or block a network request, add a rule here manually or via the network panel's context menu. {PH1}`,
49
+ `To throttle or block a network request, add a rule here manually or via the network panels context menu. {PH1}`,
50
50
  /**
51
51
  * @description Text in Blocked URLs Pane of the Network panel
52
52
  * @example {4} PH1
@@ -2,7 +2,7 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
- import type * as TextUtils from '../../models/text_utils/text_utils.js';
5
+ import type * as TextUtils from '../../core/text_utils/text_utils.js';
6
6
  import * as UI from '../../ui/legacy/legacy.js';
7
7
  import {html, nothing, render} from '../../ui/lit/lit.js';
8
8
 
@@ -37,7 +37,7 @@ import * as Host from '../../core/host/host.js';
37
37
  import * as i18n from '../../core/i18n/i18n.js';
38
38
  import * as Platform from '../../core/platform/platform.js';
39
39
  import * as SDK from '../../core/sdk/sdk.js';
40
- import * as TextUtils from '../../models/text_utils/text_utils.js';
40
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
41
41
  import * as Buttons from '../../ui/components/buttons/buttons.js';
42
42
  import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
43
43
  // eslint-disable-next-line @devtools/es-modules-import
@@ -7,7 +7,7 @@ import '../../ui/legacy/legacy.js';
7
7
 
8
8
  import * as i18n from '../../core/i18n/i18n.js';
9
9
  import type * as SDK from '../../core/sdk/sdk.js';
10
- import * as TextUtils from '../../models/text_utils/text_utils.js';
10
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
11
11
  import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
12
12
  import * as UI from '../../ui/legacy/legacy.js';
13
13
  import {render} from '../../ui/lit/lit.js';
@@ -6,7 +6,7 @@ import * as Common from '../../core/common/common.js';
6
6
  import * as Host from '../../core/host/host.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import type * as SDK from '../../core/sdk/sdk.js';
9
- import * as TextUtils from '../../models/text_utils/text_utils.js';
9
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
10
10
  import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
11
11
  import * as UI from '../../ui/legacy/legacy.js';
12
12
  import * as Lit from '../../ui/lit/lit.js';
@@ -9,7 +9,7 @@ import * as Host from '../../core/host/host.js';
9
9
  import * as i18n from '../../core/i18n/i18n.js';
10
10
  import * as Platform from '../../core/platform/platform.js';
11
11
  import type * as SDK from '../../core/sdk/sdk.js';
12
- import * as TextUtils from '../../models/text_utils/text_utils.js';
12
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
13
13
  import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
14
14
  import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
15
15
  import * as UI from '../../ui/legacy/legacy.js';
@@ -7,7 +7,7 @@ import * as Common from '../../core/common/common.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import * as Platform from '../../core/platform/platform.js';
9
9
  import * as SDK from '../../core/sdk/sdk.js';
10
- import * as TextUtils from '../../models/text_utils/text_utils.js';
10
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
11
11
  import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
12
12
  import * as UI from '../../ui/legacy/legacy.js';
13
13
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
@@ -25,7 +25,7 @@ import * as Common from '../../core/common/common.js';
25
25
  import * as i18n from '../../core/i18n/i18n.js';
26
26
  import * as Platform from '../../core/platform/platform.js';
27
27
  import * as SDK from '../../core/sdk/sdk.js';
28
- import * as TextUtils from '../../models/text_utils/text_utils.js';
28
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
29
29
  import * as UI from '../../ui/legacy/legacy.js';
30
30
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
31
31
 
@@ -9,10 +9,10 @@ import * as i18n from '../../../core/i18n/i18n.js';
9
9
  import * as Platform from '../../../core/platform/platform.js';
10
10
  import type {NameValue} from '../../../core/sdk/NetworkRequest.js';
11
11
  import type * as SDK from '../../../core/sdk/sdk.js';
12
+ import * as TextUtils from '../../../core/text_utils/text_utils.js';
12
13
  import * as Protocol from '../../../generated/protocol.js';
13
14
  import * as IssuesManager from '../../../models/issues_manager/issues_manager.js';
14
15
  import * as Persistence from '../../../models/persistence/persistence.js';
15
- import * as TextUtils from '../../../models/text_utils/text_utils.js';
16
16
  import type * as Workspace from '../../../models/workspace/workspace.js';
17
17
  import * as NetworkForward from '../../../panels/network/forward/forward.js';
18
18
  import * as Sources from '../../../panels/sources/sources.js';
@@ -3,7 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import type * as SDK from '../../../core/sdk/sdk.js';
6
- import type * as TextUtils from '../../../models/text_utils/text_utils.js';
6
+ import type * as TextUtils from '../../../core/text_utils/text_utils.js';
7
7
 
8
8
  export const enum UIHeaderSection {
9
9
  GENERAL = 'General',
@@ -110,7 +110,7 @@ const UIStrings = {
110
110
  /**
111
111
  * @description Title of a setting under the Network category that can be invoked through the Command Menu
112
112
  */
113
- dontGroupNetworkLogItemsByFrame: 'Don\'t group network log items by frame',
113
+ dontGroupNetworkLogItemsByFrame: 'Dont group network log items by frame',
114
114
  /**
115
115
  * @description Title of a button for clearing the network log
116
116
  */
@@ -132,13 +132,13 @@ const UIStrings = {
132
132
  * @description Title of an action in the Network panel that disables options in the UI to copy or export
133
133
  * HAR (not translatable) with sensitive data.
134
134
  */
135
- dontAllowToGenerateHarWithSensitiveData: 'Don\'t allow to generate `HAR` with sensitive data',
135
+ dontAllowToGenerateHarWithSensitiveData: 'Dont allow to generate `HAR` with sensitive data',
136
136
  /**
137
137
  * @description Tooltip shown as documentation when hovering the (?) icon next to the "Allow to generate
138
138
  * HAR with sensitive data" option in the Settings panel.
139
139
  */
140
140
  allowToGenerateHarWithSensitiveDataDocumentation:
141
- 'By default generated HAR logs are sanitized and don\'t include `Cookie`, `Set-Cookie`, or `Authorization` HTTP headers. When this setting is enabled, options to export/copy HAR with sensitive data are provided.',
141
+ 'By default generated HAR logs are sanitized and dont include `Cookie`, `Set-Cookie`, or `Authorization` HTTP headers. When this setting is enabled, options to export/copy HAR with sensitive data are provided.',
142
142
  } as const;
143
143
  const str_ = i18n.i18n.registerUIStrings('panels/network/network-meta.ts', UIStrings);
144
144
  const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
@@ -210,7 +210,7 @@ export class HeapProfileView extends UI.View.SimpleView implements UI.Searchable
210
210
  #selectedNode: ProfileDataGridNode|null = null;
211
211
 
212
212
  readonly linkifierInternal: Components.Linkifier.Linkifier = new Components.Linkifier.Linkifier(maxLinkLength);
213
- nodeFormatter!: Formatter;
213
+ nodeFormatter!: NodeFormatter;
214
214
  viewType!: Common.Settings.Setting<ViewTypes>;
215
215
  bottomUpProfileDataGridTree?: BottomUpProfileDataGridTree|null;
216
216
  topDownProfileDataGridTree?: TopDownProfileDataGridTree|null;
@@ -344,16 +344,16 @@ export class HeapProfileView extends UI.View.SimpleView implements UI.Searchable
344
344
  <tr data-uid=${node.callUID} ?selected=${this.#selectedNode === node} ?expanded=${node.expanded} @select=${onSelect}
345
345
  @contextmenu=${onContextMenu} @expand=${onExpand} @collapse=${onCollapse}>
346
346
  <td data-value=${node.self} class="numeric-column ${node.searchMatchedSelfColumn ? 'highlight' : ''}"
347
- aria-label=${`${this.nodeFormatter.formatValueAccessibleText(node.self, node)}, ${this.nodeFormatter.formatPercent(node.selfPercent, node)}`}>
347
+ aria-label=${`${this.nodeFormatter.formatValueAccessibleText(node.self)}, ${this.nodeFormatter.formatPercent(node.selfPercent, node)}`}>
348
348
  <div class="profile-multiple-values">
349
- <span>${this.nodeFormatter.formatValue(node.self, node)}</span>
349
+ <span>${this.nodeFormatter.formatValue(node.self)}</span>
350
350
  <span class="percent-column">${this.nodeFormatter.formatPercent(node.selfPercent, node)}</span>
351
351
  </div>
352
352
  </td>
353
353
  <td data-value=${node.total} class="numeric-column ${node.searchMatchedTotalColumn ? 'highlight' : ''}"
354
- aria-label=${`${this.nodeFormatter.formatValueAccessibleText(node.total, node)}, ${this.nodeFormatter.formatPercent(node.totalPercent, node)}`}>
354
+ aria-label=${`${this.nodeFormatter.formatValueAccessibleText(node.total)}, ${this.nodeFormatter.formatPercent(node.totalPercent, node)}`}>
355
355
  <div class="profile-multiple-values">
356
- <span>${this.nodeFormatter.formatValue(node.total, node)}</span>
356
+ <span>${this.nodeFormatter.formatValue(node.total)}</span>
357
357
  <span class="percent-column">${this.nodeFormatter.formatPercent(node.totalPercent, node)}</span>
358
358
  </div>
359
359
  </td>
@@ -525,7 +525,7 @@ export class HeapProfileView extends UI.View.SimpleView implements UI.Searchable
525
525
  return this.profileInternal;
526
526
  }
527
527
 
528
- initialize(nodeFormatter: Formatter): void {
528
+ initialize(nodeFormatter: NodeFormatter): void {
529
529
  this.nodeFormatter = nodeFormatter;
530
530
 
531
531
  this.viewType = Common.Settings.Settings.instance().createSetting('profile-view', ViewTypes.HEAVY);
@@ -277,7 +277,7 @@ const UIStrings = {
277
277
  * @description Text of a DOM element in Heap Snapshot View of a profiler tool
278
278
  */
279
279
  stackWasNotRecordedForThisObject:
280
- 'Stack wasn\'t recorded for this object because it had been allocated before this profile recording started.',
280
+ 'Stack wasnt recorded for this object because it had been allocated before this profile recording started.',
281
281
  /**
282
282
  * @description Text in Heap Snapshot View of a profiler tool.
283
283
  * This text is on a button to undo all previous "Ignore this retainer" actions.
@@ -590,16 +590,20 @@ export class ProfileDataGridTree implements UI.SearchableView.Searchable {
590
590
 
591
591
  this.searchResults = [];
592
592
  const deepSearch = this.deepSearch;
593
- let current: DataGrid.DataGrid.DataGridNode<unknown>|null;
594
- for (current = this.children[0]; current; current = current.traverseNextNode(!deepSearch, null, !deepSearch)) {
595
- const item = (current as ProfileDataGridNode | null);
596
- if (!item) {
597
- break;
598
- }
599
593
 
600
- if (matchesQuery(item)) {
601
- this.searchResults.push({profileNode: item});
594
+ const walk = (node: ProfileDataGridNode): void => {
595
+ if (matchesQuery(node)) {
596
+ this.searchResults.push({profileNode: node});
597
+ }
598
+ if (deepSearch || node.expanded) {
599
+ for (const child of node.children as ProfileDataGridNode[]) {
600
+ walk(child);
601
+ }
602
602
  }
603
+ };
604
+
605
+ for (const child of this.children as ProfileDataGridNode[]) {
606
+ walk(child);
603
607
  }
604
608
  this.searchResultIndex = jumpBackwards ? 0 : this.searchResults.length - 1;
605
609
  this.searchableView.updateSearchMatchesCount(this.searchResults.length);
@@ -9,8 +9,8 @@ import * as i18n from '../../core/i18n/i18n.js';
9
9
  import * as Platform from '../../core/platform/platform.js';
10
10
  import * as ProtocolClient from '../../core/protocol_client/protocol_client.js';
11
11
  import * as SDK from '../../core/sdk/sdk.js';
12
+ import * as TextUtils from '../../core/text_utils/text_utils.js';
12
13
  import * as Bindings from '../../models/bindings/bindings.js';
13
- import * as TextUtils from '../../models/text_utils/text_utils.js';
14
14
  import * as Workspace from '../../models/workspace/workspace.js';
15
15
  import * as Buttons from '../../ui/components/buttons/buttons.js';
16
16
  import * as UIHelpers from '../../ui/helpers/helpers.js';