chrome-devtools-frontend 1.0.1675430 → 1.0.1676824

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 (225) hide show
  1. package/WATCHLISTS +0 -4
  2. package/front_end/core/common/Settings.ts +0 -66
  3. package/front_end/core/root/Runtime.ts +0 -5
  4. package/front_end/core/sdk/CSSMetadata.ts +5 -9
  5. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +8 -28
  6. package/front_end/core/sdk/DebuggerModel.ts +50 -30
  7. package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
  8. package/front_end/core/sdk/Script.ts +9 -53
  9. package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
  10. package/front_end/entrypoints/main/MainImpl.ts +31 -0
  11. package/front_end/generated/InspectorBackendCommands.ts +3 -1
  12. package/front_end/generated/SupportedCSSProperties.ts +21 -4
  13. package/front_end/generated/protocol-mapping.d.ts +14 -0
  14. package/front_end/generated/protocol-proxy-api.d.ts +10 -0
  15. package/front_end/generated/protocol.ts +35 -0
  16. package/front_end/models/ai_assistance/AiAgent2.ts +11 -0
  17. package/front_end/models/ai_assistance/AiConversation.ts +22 -5
  18. package/front_end/models/ai_assistance/README.md +52 -26
  19. package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
  20. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
  21. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
  22. package/front_end/models/ai_assistance/agents/StorageAgent.ts +8 -87
  23. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
  24. package/front_end/models/ai_assistance/ai_assistance.ts +16 -0
  25. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
  26. package/front_end/models/ai_assistance/contexts/StorageContext.ts +111 -0
  27. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
  28. package/front_end/models/ai_assistance/skills/README.md +63 -1
  29. package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
  30. package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
  31. package/front_end/models/ai_assistance/skills/performance.md +8 -0
  32. package/front_end/models/ai_assistance/skills/sources.md +16 -0
  33. package/front_end/models/ai_assistance/skills/storage.md +31 -0
  34. package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
  35. package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
  36. package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
  37. package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
  38. package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +81 -0
  39. package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
  40. package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
  41. package/front_end/models/ai_assistance/tools/Tool.ts +22 -1
  42. package/front_end/models/ai_assistance/tools/ToolRegistry.ts +14 -0
  43. package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
  44. package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
  45. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
  46. package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
  47. package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
  48. package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
  49. package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
  50. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
  51. package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
  52. package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
  53. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
  54. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  55. package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
  56. package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
  57. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  58. package/front_end/models/persistence/persistence-meta.ts +9 -9
  59. package/front_end/models/trace/types/TraceEvents.ts +36 -0
  60. package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
  61. package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
  62. package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
  63. package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
  64. package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
  65. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
  66. package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
  67. package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
  68. package/front_end/panels/ai_assistance/components/ChatMessage.ts +27 -2
  69. package/front_end/panels/application/IndexedDBViews.ts +65 -63
  70. package/front_end/panels/application/WebMCPView.ts +16 -7
  71. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
  72. package/front_end/panels/common/BadgeNotification.ts +8 -8
  73. package/front_end/panels/common/ExtensionServer.ts +21 -1
  74. package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
  75. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
  76. package/front_end/panels/common/PersistenceUtils.ts +2 -2
  77. package/front_end/panels/common/common.ts +0 -97
  78. package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
  79. package/front_end/panels/console/ConsolePinPane.ts +2 -2
  80. package/front_end/panels/console/ConsoleView.ts +20 -19
  81. package/front_end/panels/elements/LayoutPane.ts +2 -8
  82. package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
  83. package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
  84. package/front_end/panels/media/PlayerMessagesView.ts +149 -68
  85. package/front_end/panels/network/NetworkPanel.ts +1 -1
  86. package/front_end/panels/network/RequestPayloadView.ts +1 -0
  87. package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
  88. package/front_end/panels/profiler/heapProfiler.css +0 -9
  89. package/front_end/panels/recorder/RecorderPanel.ts +2 -3
  90. package/front_end/panels/screencast/ScreencastView.ts +148 -138
  91. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
  92. package/front_end/panels/sources/DebuggerPlugin.ts +9 -58
  93. package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
  94. package/front_end/panels/sources/UISourceCodeFrame.ts +3 -8
  95. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
  96. package/front_end/panels/timeline/TimelineController.ts +36 -64
  97. package/front_end/panels/timeline/TimelinePanel.ts +11 -8
  98. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
  99. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
  100. package/front_end/panels/timeline/timelinePanel.css +0 -10
  101. package/front_end/panels/utils/utils.ts +7 -7
  102. package/front_end/services/tracing/PerformanceTracing.ts +5 -17
  103. package/front_end/third_party/chromium/README.chromium +1 -1
  104. package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
  105. package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
  106. package/front_end/third_party/codemirror.next/package.json +2 -2
  107. package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
  108. package/front_end/ui/comments/CommentAnchorResolver.ts +436 -10
  109. package/front_end/ui/comments/CommentManager.ts +640 -0
  110. package/front_end/ui/comments/CommentsOverlayWidget.ts +121 -0
  111. package/front_end/ui/comments/comments.ts +4 -0
  112. package/front_end/ui/comments/commentsOverlay.css +49 -0
  113. package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
  114. package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
  115. package/front_end/ui/components/dialogs/dialogs.ts +4 -0
  116. package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
  117. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
  118. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
  119. package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
  120. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
  121. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
  122. package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
  123. package/front_end/ui/components/text_editor/text_editor.ts +4 -0
  124. package/front_end/ui/legacy/Toolbar.ts +1 -1
  125. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
  126. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +270 -162
  127. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
  128. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
  129. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
  130. package/front_end/ui/legacy/components/source_frame/JSONView.ts +8 -1
  131. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -2
  132. package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
  133. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  134. package/mcp/mcp.ts +6 -1
  135. package/package.json +1 -1
  136. package/front_end/Images/toolbarResizerVertical.png +0 -0
  137. package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
  138. package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
  139. package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
  140. package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
  141. package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
  142. package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
  143. package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
  144. package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
  145. package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
  146. package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
  147. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
  148. package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
  149. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
  150. package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
  151. package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
  152. package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
  153. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
  154. package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
  155. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
  156. package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
  157. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
  158. package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
  159. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
  160. package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
  161. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
  162. package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
  163. package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
  164. package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
  165. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
  166. package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
  167. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
  168. package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
  169. package/front_end/emulated_devices/iPad-landscape.svg +0 -73
  170. package/front_end/emulated_devices/iPad-portrait.svg +0 -76
  171. package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
  172. package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
  173. package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
  174. package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
  175. package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
  176. package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
  177. package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
  178. package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
  179. package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
  180. package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
  181. package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
  182. package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
  183. package/front_end/emulated_devices/optimized/README.md +0 -9
  184. package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
  185. package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
  186. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
  187. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
  188. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
  189. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
  190. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
  191. package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
  192. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
  193. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
  194. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
  195. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
  196. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
  197. package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
  198. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
  199. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
  200. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
  201. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
  202. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
  203. package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
  204. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
  205. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
  206. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
  207. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
  208. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
  209. package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
  210. package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
  211. package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
  212. package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
  213. package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
  214. package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
  215. package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
  216. package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
  217. package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
  218. package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
  219. package/front_end/models/ai_assistance/agents/README.md +0 -136
  220. /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
  221. /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
  222. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
  223. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
  224. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
  225. /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
@@ -10,11 +10,13 @@ import type * as Common from '../../core/common/common.js';
10
10
  import * as i18n from '../../core/i18n/i18n.js';
11
11
  import type * as Protocol from '../../generated/protocol.js';
12
12
  import * as UI from '../../ui/legacy/legacy.js';
13
- import {html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
13
+ import {Directives, html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
14
14
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
15
15
 
16
16
  import playerMessagesViewStyles from './playerMessagesView.css.js';
17
17
 
18
+ const {classMap} = Directives;
19
+
18
20
  const UIStrings = {
19
21
  /**
20
22
  * @description A context menu item in the Console view of the Console panel.
@@ -104,7 +106,7 @@ class MessageLevelSelector implements UI.SoftDropDown.Delegate<SelectableLevel>
104
106
  readonly #defaultTitle: Common.UIString.LocalizedString;
105
107
  private readonly customTitle: Common.UIString.LocalizedString;
106
108
  private readonly allTitle: Common.UIString.LocalizedString;
107
- elementsForItems: WeakMap<SelectableLevel, HTMLElement>;
109
+ elementsForItems: WeakMap<SelectableLevel, ShadowRoot>;
108
110
 
109
111
  constructor(items: UI.ListModel.ListModel<SelectableLevel>, view: PlayerMessagesView) {
110
112
  this.items = items;
@@ -131,66 +133,86 @@ class MessageLevelSelector implements UI.SoftDropDown.Delegate<SelectableLevel>
131
133
  }
132
134
 
133
135
  populate(): void {
134
- this.items.insert(this.items.length, {
136
+ const defaultLevel = {
135
137
  title: this.#defaultTitle,
136
138
  overwrite: true,
137
139
  stringValue: '',
138
140
  value: MessageLevelBitfield.DEFAULT,
141
+ };
142
+ this.items.insert(this.items.length, defaultLevel);
143
+ this.itemMap.set(defaultLevel.value, defaultLevel);
139
144
 
140
- });
141
-
142
- this.items.insert(this.items.length, {
145
+ const allLevel = {
143
146
  title: this.allTitle,
144
147
  overwrite: true,
145
148
  stringValue: '',
146
149
  value: MessageLevelBitfield.ALL,
150
+ };
151
+ this.items.insert(this.items.length, allLevel);
152
+ this.itemMap.set(allLevel.value, allLevel);
147
153
 
148
- });
149
-
150
- this.items.insert(this.items.length, {
154
+ const errorLevel = {
151
155
  title: i18nString(UIStrings.error),
152
156
  overwrite: false,
153
157
  stringValue: 'error',
154
158
  value: MessageLevelBitfield.ERROR,
159
+ };
160
+ this.items.insert(this.items.length, errorLevel);
161
+ this.itemMap.set(errorLevel.value, errorLevel);
155
162
 
156
- });
157
-
158
- this.items.insert(this.items.length, {
163
+ const warningLevel = {
159
164
  title: i18nString(UIStrings.warning),
160
165
  overwrite: false,
161
166
  stringValue: 'warning',
162
167
  value: MessageLevelBitfield.WARNING,
163
- });
168
+ };
169
+ this.items.insert(this.items.length, warningLevel);
170
+ this.itemMap.set(warningLevel.value, warningLevel);
164
171
 
165
- this.items.insert(this.items.length, {
172
+ const infoLevel = {
166
173
  title: i18nString(UIStrings.info),
167
174
  overwrite: false,
168
175
  stringValue: 'info',
169
176
  value: MessageLevelBitfield.INFO,
170
- });
177
+ };
178
+ this.items.insert(this.items.length, infoLevel);
179
+ this.itemMap.set(infoLevel.value, infoLevel);
171
180
 
172
- this.items.insert(this.items.length, {
181
+ const debugLevel = {
173
182
  title: i18nString(UIStrings.debug),
174
183
  overwrite: false,
175
184
  stringValue: 'debug',
176
185
  value: MessageLevelBitfield.DEBUG,
186
+ };
187
+ this.items.insert(this.items.length, debugLevel);
188
+ this.itemMap.set(debugLevel.value, debugLevel);
189
+ }
177
190
 
178
- });
191
+ #renderItem(item: SelectableLevel, target: ShadowRoot|HTMLElement): void {
192
+ const checked = Boolean(item.value & this.bitFieldValue);
193
+ // clang-format off
194
+ render(html`
195
+ <div class="media-messages-level-dropdown-element">
196
+ <div class="media-messages-level-dropdown-checkbox">
197
+ ${!item.overwrite && checked ? html`<div>✓</div>` : nothing}
198
+ </div>
199
+ <span class="media-messages-level-dropdown-text">${item.title}</span>
200
+ </div>
201
+ `, target, {host: this});
202
+ // clang-format on
179
203
  }
180
204
 
181
205
  private updateCheckMarks(): void {
182
206
  this.hiddenLevels = [];
183
207
  for (const [key, item] of this.itemMap) {
184
208
  if (!item.overwrite) {
185
- const elementForItem = this.elementsForItems.get(item);
186
- if (elementForItem?.firstChild) {
187
- elementForItem.firstChild.remove();
188
- }
189
- if (elementForItem && key & this.bitFieldValue) {
190
- UI.UIUtils.createTextChild(elementForItem.createChild('div'), '✓');
191
- } else {
209
+ if (!(key & this.bitFieldValue)) {
192
210
  this.hiddenLevels.push(item.stringValue);
193
211
  }
212
+ const target = this.elementsForItems.get(item);
213
+ if (target) {
214
+ this.#renderItem(item, target);
215
+ }
194
216
  }
195
217
  }
196
218
  }
@@ -223,12 +245,9 @@ class MessageLevelSelector implements UI.SoftDropDown.Delegate<SelectableLevel>
223
245
  createElementForItem(item: SelectableLevel): Element {
224
246
  const element = document.createElement('div');
225
247
  const shadowRoot = UI.UIUtils.createShadowRootWithCoreStyles(element, {cssFile: playerMessagesViewStyles});
226
- const container = shadowRoot.createChild('div', 'media-messages-level-dropdown-element');
227
- const checkBox = container.createChild('div', 'media-messages-level-dropdown-checkbox');
228
- const text = container.createChild('span', 'media-messages-level-dropdown-text');
229
- UI.UIUtils.createTextChild(text, item.title);
230
- this.elementsForItems.set(item, checkBox);
248
+ this.elementsForItems.set(item, shadowRoot);
231
249
  this.itemMap.set(item.value, item);
250
+ this.#renderItem(item, shadowRoot);
232
251
  this.updateCheckMarks();
233
252
  this.view.regenerateMessageDisplayCss(this.hiddenLevels);
234
253
  return element;
@@ -249,10 +268,29 @@ class MessageLevelSelector implements UI.SoftDropDown.Delegate<SelectableLevel>
249
268
  }
250
269
  }
251
270
 
271
+ interface MessageItem {
272
+ type: 'message';
273
+ level: string;
274
+ message: Protocol.Media.PlayerMessage;
275
+ }
276
+
277
+ interface ErrorItem {
278
+ type: 'error';
279
+ level: 'error';
280
+ error: Protocol.Media.PlayerError;
281
+ }
282
+
283
+ type MessageOrErrorItem = MessageItem|ErrorItem;
284
+
252
285
  export class PlayerMessagesView extends UI.Widget.VBox {
253
286
  private readonly headerPanel: HTMLElement;
254
287
  private readonly bodyPanel: HTMLElement;
255
288
  private messageLevelSelector?: MessageLevelSelector;
289
+ #items: MessageOrErrorItem[] = [];
290
+ #hiddenLevels: string[] = [];
291
+ #filterString = '';
292
+ #dropDownItem?: UI.Toolbar.ToolbarItem;
293
+ #filterInput?: UI.Toolbar.ToolbarInput;
256
294
 
257
295
  constructor() {
258
296
  super({jslog: `${VisualLogging.pane('messages')}`});
@@ -261,15 +299,9 @@ export class PlayerMessagesView extends UI.Widget.VBox {
261
299
  this.headerPanel = this.contentElement.createChild('div', 'media-messages-header');
262
300
  this.bodyPanel = this.contentElement.createChild('div', 'media-messages-body');
263
301
 
264
- this.buildToolbar();
265
- }
266
-
267
- private buildToolbar(): void {
268
- const toolbar = this.headerPanel.createChild('devtools-toolbar', 'media-messages-toolbar');
269
- toolbar.appendText(i18nString(UIStrings.logLevel));
270
- toolbar.appendToolbarItem(this.createDropdown());
271
- toolbar.appendSeparator();
272
- toolbar.appendToolbarItem(this.createFilterInput());
302
+ this.#dropDownItem = this.createDropdown();
303
+ this.#filterInput = this.createFilterInput();
304
+ this.performUpdate();
273
305
  }
274
306
 
275
307
  private createDropdown(): UI.Toolbar.ToolbarItem {
@@ -300,45 +332,92 @@ export class PlayerMessagesView extends UI.Widget.VBox {
300
332
  return filterInput;
301
333
  }
302
334
 
303
- regenerateMessageDisplayCss(hiddenLevels: string[]): void {
304
- const messages = this.bodyPanel.getElementsByClassName('media-messages-message-container');
305
- for (const message of messages) {
306
- if (this.matchesHiddenLevels(message, hiddenLevels)) {
307
- message.classList.add('media-messages-message-unselected');
308
- } else {
309
- message.classList.remove('media-messages-message-unselected');
310
- }
311
- }
335
+ override performUpdate(): void {
336
+ this.#renderToolbar();
337
+ this.#renderMessages();
338
+ }
339
+
340
+ #renderToolbar(): void {
341
+ // clang-format off
342
+ render(html`
343
+ <devtools-toolbar class="media-messages-toolbar">
344
+ <div class="toolbar-text">${i18nString(UIStrings.logLevel)}</div>
345
+ ${this.#dropDownItem?.element}
346
+ <div class="toolbar-divider"></div>
347
+ ${this.#filterInput?.element}
348
+ </devtools-toolbar>
349
+ `, this.headerPanel, {host: this});
350
+ // clang-format on
351
+ }
352
+
353
+ #renderMessages(): void {
354
+ // clang-format off
355
+ render(html`
356
+ ${this.#items.map(item => {
357
+ const isUnselected = this.#isLevelHidden(item.level);
358
+ let isFiltered = false;
359
+ if (this.#filterString !== '') {
360
+ if (item.type === 'message') {
361
+ isFiltered = !item.message.message.includes(this.#filterString);
362
+ } else {
363
+ isFiltered = !this.#errorMatchesFilter(item.error, this.#filterString);
364
+ }
365
+ }
366
+ const classes = {
367
+ 'media-messages-message-container': true,
368
+ [`media-message-${item.level}`]: true,
369
+ 'media-messages-message-unselected': isUnselected,
370
+ 'media-messages-message-filtered': isFiltered,
371
+ };
372
+ return html`
373
+ <div class=${classMap(classes)}>
374
+ ${item.type === 'message' ? item.message.message : this.renderError(item.error)}
375
+ </div>
376
+ `;
377
+ })}
378
+ `, this.bodyPanel, {host: this});
379
+ // clang-format on
380
+ }
381
+
382
+ #isLevelHidden(level: string): boolean {
383
+ return this.#hiddenLevels.includes(level);
312
384
  }
313
385
 
314
- private matchesHiddenLevels(element: Element, hiddenLevels: string[]): boolean {
315
- for (const level of hiddenLevels) {
316
- if (element.classList.contains('media-message-' + level)) {
386
+ #errorMatchesFilter(error: Protocol.Media.PlayerError, filter: string): boolean {
387
+ if (error.errorType.includes(filter) || error.code.toString().includes(filter)) {
388
+ return true;
389
+ }
390
+ for (const [key, value] of Object.entries(error.data)) {
391
+ if (`${key}: ${value}`.includes(filter)) {
392
+ return true;
393
+ }
394
+ }
395
+ for (const stackEntry of error.stack) {
396
+ if (`${stackEntry.file}:${stackEntry.line}`.includes(filter)) {
397
+ return true;
398
+ }
399
+ }
400
+ for (const cause of error.cause) {
401
+ if (this.#errorMatchesFilter(cause, filter)) {
317
402
  return true;
318
403
  }
319
404
  }
320
405
  return false;
321
406
  }
322
407
 
408
+ regenerateMessageDisplayCss(hiddenLevels: string[]): void {
409
+ this.#hiddenLevels = hiddenLevels;
410
+ this.performUpdate();
411
+ }
412
+
323
413
  private filterByString(userStringData: {data: string}): void {
324
- const userString = userStringData.data;
325
- const messages = this.bodyPanel.getElementsByClassName('media-messages-message-container');
326
-
327
- for (const message of messages) {
328
- if (userString === '') {
329
- message.classList.remove('media-messages-message-filtered');
330
- } else if (message.textContent?.includes(userString)) {
331
- message.classList.remove('media-messages-message-filtered');
332
- } else {
333
- message.classList.add('media-messages-message-filtered');
334
- }
335
- }
414
+ this.#filterString = userStringData.data;
415
+ this.performUpdate();
336
416
  }
337
417
 
338
418
  addMessage(message: Protocol.Media.PlayerMessage): void {
339
- const container =
340
- this.bodyPanel.createChild('div', 'media-messages-message-container media-message-' + message.level);
341
- UI.UIUtils.createTextChild(container, message.message);
419
+ this.#items.push({type: 'message', level: message.level, message});
420
+ this.performUpdate();
342
421
  }
343
422
 
344
423
  private renderError(error: Protocol.Media.PlayerError): LitTemplate {
@@ -393,7 +472,9 @@ export class PlayerMessagesView extends UI.Widget.VBox {
393
472
  <span class="status-error-field-label"
394
473
  >${i18nString(UIStrings.errorCauseLabel)}</span
395
474
  >
396
- ${this.renderError(error.cause[0])}
475
+ <div>
476
+ ${error.cause.map(cause => this.renderError(cause))}
477
+ </div>
397
478
  `
398
479
  : nothing
399
480
  }
@@ -404,7 +485,7 @@ export class PlayerMessagesView extends UI.Widget.VBox {
404
485
  }
405
486
 
406
487
  addError(error: Protocol.Media.PlayerError): void {
407
- const container = this.bodyPanel.createChild('div', 'media-messages-message-container media-message-error');
408
- render(this.renderError(error), container);
488
+ this.#items.push({type: 'error', level: 'error', error});
489
+ this.performUpdate();
409
490
  }
410
491
  }
@@ -963,7 +963,7 @@ export class FilmStripRecorder implements Tracing.TracingManager.TracingManagerC
963
963
 
964
964
  this.#tracingManager = tracingManager;
965
965
  this.#resourceTreeModel = this.#tracingManager.target().model(SDK.ResourceTreeModel.ResourceTreeModel);
966
- void this.#tracingManager.start(this, '-*,disabled-by-default-devtools.screenshot');
966
+ void this.#tracingManager.start(this, ['-*', ...Trace.Types.Events.OptionalCategories.Screenshot].join(','));
967
967
 
968
968
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.FilmStripStartedRecording);
969
969
  }
@@ -201,6 +201,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
201
201
  readOnly: true,
202
202
  propertiesMode: ObjectUI.ObjectPropertiesSection.ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
203
203
  });
204
+ objectTree.expanded = true;
204
205
  return html`
205
206
  <li role=treeitem class="source-code object-properties-section-root-element object-properties-section" open>
206
207
  ${object.description}
@@ -453,7 +453,6 @@ export class HeapSnapshotView extends UI.View.SimpleView implements DataDisplayD
453
453
  const retainmentViewHeader = document.createElement('div');
454
454
  retainmentViewHeader.classList.add('heap-snapshot-view-resizer');
455
455
  const retainingPathsTitleDiv = retainmentViewHeader.createChild('div', 'title');
456
- retainmentViewHeader.createChild('div', 'verticalResizerIcon');
457
456
  const retainingPathsTitle = retainingPathsTitleDiv.createChild('span');
458
457
  retainingPathsTitle.textContent = i18nString(UIStrings.retainers);
459
458
 
@@ -1350,7 +1349,6 @@ export class AllocationPerspective extends Perspective {
1350
1349
  const resizer = document.createElement('div');
1351
1350
  resizer.classList.add('heap-snapshot-view-resizer');
1352
1351
  const title = resizer.createChild('div', 'title').createChild('span');
1353
- resizer.createChild('div', 'verticalResizerIcon');
1354
1352
  title.textContent = i18nString(UIStrings.liveObjects);
1355
1353
  this.allocationSplitWidget.hideDefaultResizer();
1356
1354
  this.allocationSplitWidget.installResizer(resizer);
@@ -100,15 +100,6 @@
100
100
  white-space: nowrap;
101
101
  }
102
102
 
103
- .heap-snapshot-view .heap-snapshot-view-resizer .verticalResizerIcon {
104
- /* stylelint-disable-next-line custom-property-pattern */
105
- background-image: var(--image-file-toolbarResizerVertical);
106
- background-repeat: no-repeat;
107
- background-position: center;
108
- flex: 0 0 28px;
109
- margin-left: auto;
110
- }
111
-
112
103
  .heap-snapshot-view .heap-snapshot-view-resizer .title > span {
113
104
  display: inline-block;
114
105
  padding-top: 3px;
@@ -13,10 +13,9 @@ import * as Bindings from '../../models/bindings/bindings.js';
13
13
  import * as EmulationModel from '../../models/emulation/emulation.js';
14
14
  import * as PublicExtensions from '../../models/extensions/extensions.js';
15
15
  import type * as Trace from '../../models/trace/trace.js';
16
- import * as PanelCommon from '../../panels/common/common.js';
17
16
  import * as Tracing from '../../services/tracing/tracing.js';
18
17
  import * as Buttons from '../../ui/components/buttons/buttons.js';
19
- import type * as Dialogs from '../../ui/components/dialogs/dialogs.js';
18
+ import * as Dialogs from '../../ui/components/dialogs/dialogs.js';
20
19
  import type * as Menus from '../../ui/components/menus/menus.js';
21
20
  import * as UI from '../../ui/legacy/legacy.js';
22
21
  import {Directives, html, type LitTemplate, render} from '../../ui/lit/lit.js';
@@ -1668,7 +1667,7 @@ export class RecorderPanel extends UI.Widget.VBox<DocumentFragment> {
1668
1667
  return true;
1669
1668
  }
1670
1669
 
1671
- const result = await PanelCommon.TypeToAllowDialog.show({
1670
+ const result = await Dialogs.TypeToAllowDialog.TypeToAllowDialog.show({
1672
1671
  jslogContext: {
1673
1672
  input: 'confirm-import-recording-input',
1674
1673
  dialog: 'confirm-import-recording-dialog',