chrome-devtools-frontend 1.0.1681498 → 1.0.1682249

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 (141) hide show
  1. package/eslint.config.mjs +8 -3
  2. package/front_end/core/sdk/ConsoleModel.ts +1 -1
  3. package/front_end/core/sdk/PreloadingModel.ts +44 -22
  4. package/front_end/core/sdk/RemoteObject.ts +4 -1
  5. package/front_end/core/sdk/RuntimeModel.ts +5 -5
  6. package/front_end/core/sdk/sdk.ts +2 -0
  7. package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +1 -1
  8. package/front_end/entrypoints/inspector_main/InspectorMain.ts +3 -1
  9. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -5
  10. package/front_end/entrypoints/main/MainImpl.ts +9 -10
  11. package/front_end/entrypoints/shell/shell.ts +0 -2
  12. package/front_end/entrypoints/trace_app/trace_app.ts +0 -2
  13. package/front_end/generated/InspectorBackendCommands.ts +2 -0
  14. package/front_end/generated/protocol-mapping.d.ts +16 -0
  15. package/front_end/generated/protocol-proxy-api.d.ts +12 -0
  16. package/front_end/generated/protocol.ts +12 -0
  17. package/front_end/models/ai_assistance/ExtensionScope.ts +11 -12
  18. package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -1
  19. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +2 -1
  20. package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +1 -1
  21. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
  22. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +2 -1
  23. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +8 -8
  24. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
  25. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +1 -0
  26. package/front_end/models/formatter/ScriptFormatter.ts +1 -0
  27. package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
  28. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +4 -4
  29. package/front_end/models/logs/NetworkLog.ts +8 -1
  30. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +4 -2
  31. package/front_end/models/stack_trace/StackTraceImpl.ts +1 -0
  32. package/front_end/models/trace/Name.ts +5 -5
  33. package/front_end/models/trace/Styles.ts +115 -115
  34. package/front_end/models/trace/extras/TraceTree.ts +2 -1
  35. package/front_end/models/trace/helpers/Network.ts +4 -1
  36. package/front_end/models/trace/insights/CLSCulprits.ts +4 -2
  37. package/front_end/models/trace/insights/CharacterSet.ts +3 -3
  38. package/front_end/models/trace/insights/DOMSize.ts +1 -1
  39. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +6 -2
  40. package/front_end/models/trace/insights/FontDisplay.ts +9 -3
  41. package/front_end/models/trace/insights/ForcedReflow.ts +4 -4
  42. package/front_end/models/trace/insights/INPBreakdown.ts +3 -4
  43. package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
  44. package/front_end/models/trace/insights/LCPBreakdown.ts +1 -1
  45. package/front_end/models/trace/insights/LCPDiscovery.ts +5 -5
  46. package/front_end/models/trace/insights/LegacyJavaScript.ts +7 -3
  47. package/front_end/models/trace/insights/ModernHTTP.ts +3 -3
  48. package/front_end/models/trace/insights/NetworkDependencyTree.ts +13 -9
  49. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  50. package/front_end/models/trace/insights/SlowCSSSelector.ts +29 -25
  51. package/front_end/models/trace/insights/ThirdParties.ts +13 -5
  52. package/front_end/models/trace/insights/Viewport.ts +4 -2
  53. package/front_end/models/workspace/IgnoreListManager.ts +53 -17
  54. package/front_end/panels/accessibility/ARIAAttributesView.ts +11 -2
  55. package/front_end/panels/ai_assistance/components/ChatMessage.ts +67 -53
  56. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -2
  57. package/front_end/panels/ai_assistance/components/StylingAgentMarkdownRenderer.ts +2 -2
  58. package/front_end/panels/ai_assistance/components/WalkthroughView.ts +5 -5
  59. package/front_end/panels/animation/AnimationTimeline.ts +2 -0
  60. package/front_end/panels/application/preloading/PreloadingView.ts +9 -3
  61. package/front_end/panels/application/preloading/components/components.ts +2 -0
  62. package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +10 -11
  63. package/front_end/panels/changes/CombinedDiffView.ts +1 -1
  64. package/front_end/panels/common/ExtensionServer.ts +9 -10
  65. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +9 -4
  66. package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -0
  67. package/front_end/panels/elements/ElementsTreeElement.ts +7 -1
  68. package/front_end/panels/elements/EventListenersWidget.ts +10 -11
  69. package/front_end/panels/issues/IssueView.ts +5 -6
  70. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
  71. package/front_end/panels/media/PlayerPropertiesView.ts +309 -416
  72. package/front_end/panels/media/playerPropertiesView.css +1 -1
  73. package/front_end/panels/network/NetworkPanel.ts +2 -1
  74. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -2
  75. package/front_end/panels/network/network-meta.ts +6 -0
  76. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +2 -1
  77. package/front_end/panels/recorder/RecordingView.ts +89 -73
  78. package/front_end/panels/recorder/ReplaySection.ts +59 -40
  79. package/front_end/panels/recorder/injected/injected.ts +4 -0
  80. package/front_end/panels/security/SecurityPanel.ts +5 -6
  81. package/front_end/panels/security/SecurityPanelSidebar.ts +244 -204
  82. package/front_end/panels/security/security.ts +0 -4
  83. package/front_end/panels/settings/EditFileSystemView.ts +8 -7
  84. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -14
  85. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +10 -11
  86. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +3 -3
  87. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +5 -5
  88. package/front_end/panels/timeline/components/CWVMetrics.ts +1 -2
  89. package/front_end/panels/timeline/components/IgnoreListSetting.ts +5 -5
  90. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +2 -3
  91. package/front_end/panels/timeline/components/LiveMetricsView.ts +2 -2
  92. package/front_end/panels/timeline/components/Sidebar.ts +3 -3
  93. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +1 -2
  94. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +3 -1
  95. package/front_end/panels/timeline/components/insights/CLSCulprits.ts +1 -2
  96. package/front_end/panels/timeline/components/insights/Cache.ts +1 -2
  97. package/front_end/panels/timeline/components/insights/CharacterSet.ts +1 -2
  98. package/front_end/panels/timeline/components/insights/DOMSize.ts +1 -2
  99. package/front_end/panels/timeline/components/insights/DocumentLatency.ts +2 -2
  100. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +2 -2
  101. package/front_end/panels/timeline/components/insights/FontDisplay.ts +1 -2
  102. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +1 -2
  103. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +1 -2
  104. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +1 -2
  105. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +13 -13
  106. package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +1 -2
  107. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +4 -4
  108. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +1 -2
  109. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +10 -8
  110. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +2 -2
  111. package/front_end/panels/timeline/components/insights/SidebarInsight.ts +3 -1
  112. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +2 -2
  113. package/front_end/panels/timeline/components/insights/ThirdParties.ts +1 -2
  114. package/front_end/panels/timeline/components/insights/Viewport.ts +1 -2
  115. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +1 -2
  116. package/front_end/panels/timeline/timeline.ts +0 -2
  117. package/front_end/panels/web_audio/WebAudioView.ts +7 -7
  118. package/front_end/panels/webauthn/WebauthnPane.ts +9 -9
  119. package/front_end/third_party/chromium/README.chromium +1 -1
  120. package/front_end/ui/components/diff_view/DiffView.ts +2 -1
  121. package/front_end/ui/components/report_view/ReportView.docs.ts +2 -2
  122. package/front_end/ui/components/text_editor/javascript.ts +12 -13
  123. package/front_end/ui/legacy/GlassPane.ts +38 -14
  124. package/front_end/ui/legacy/Treeoutline.ts +14 -3
  125. package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +1 -1
  126. package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +1 -1
  127. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  128. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +21 -30
  129. package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +3 -8
  130. package/front_end/ui/legacy/components/utils/ImagePreview.ts +15 -16
  131. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +4 -4
  132. package/front_end/ui/legacy/components/utils/Linkifier.ts +8 -10
  133. package/front_end/ui/settings/InspectorMainSettings.ts +12 -0
  134. package/front_end/ui/settings/settings.ts +2 -0
  135. package/front_end/ui/visual_logging/KnownContextValues.ts +21 -0
  136. package/mcp/mcp.ts +0 -6
  137. package/package.json +1 -1
  138. package/front_end/models/logs/logs-meta.ts +0 -24
  139. package/front_end/models/workspace/workspace-meta.ts +0 -40
  140. package/front_end/panels/security/OriginTreeElement.ts +0 -60
  141. package/front_end/panels/security/SecurityPanelSidebarTreeElement.ts +0 -30
@@ -8,7 +8,6 @@ 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
10
  import type * as Protocol from '../../../../generated/protocol.js';
11
- import type {SlowCSSSelectorInsightModel} from '../../../../models/trace/insights/SlowCSSSelector.js';
12
11
  import * as Trace from '../../../../models/trace/trace.js';
13
12
  import type * as Linkifier from '../../../../ui/components/linkifier/linkifier.js';
14
13
  import * as UI from '../../../../ui/legacy/legacy.js';
@@ -22,7 +21,8 @@ const {UIStrings, i18nString} = Trace.Insights.Models.SlowCSSSelector;
22
21
  const {html} = Lit;
23
22
  const {widget} = UI.Widget;
24
23
 
25
- export class SlowCSSSelector extends BaseInsightComponent<SlowCSSSelectorInsightModel> {
24
+ export class SlowCSSSelector extends
25
+ BaseInsightComponent<Trace.Insights.Models.SlowCSSSelector.SlowCSSSelectorInsightModel> {
26
26
  override internalName = 'slow-css-selector';
27
27
  #selectorLocations = new Map<string, Protocol.CSS.SourceRange[]>();
28
28
 
@@ -3,7 +3,6 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import * as i18n from '../../../../core/i18n/i18n.js';
6
- import type {ThirdPartiesInsightModel} from '../../../../models/trace/insights/ThirdParties.js';
7
6
  import * as Trace from '../../../../models/trace/trace.js';
8
7
  import * as UI from '../../../../ui/legacy/legacy.js';
9
8
  import * as Lit from '../../../../ui/lit/lit.js';
@@ -18,7 +17,7 @@ const {widget} = UI.Widget;
18
17
 
19
18
  const MAX_TO_SHOW = 5;
20
19
 
21
- export class ThirdParties extends BaseInsightComponent<ThirdPartiesInsightModel> {
20
+ export class ThirdParties extends BaseInsightComponent<Trace.Insights.Models.ThirdParties.ThirdPartiesInsightModel> {
22
21
  override internalName = 'third-parties';
23
22
 
24
23
  #mainThreadTimeAggregator: RowLimitAggregator<Trace.Extras.ThirdParties.EntitySummary> = {
@@ -2,7 +2,6 @@
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 {ViewportInsightModel} from '../../../../models/trace/insights/Viewport.js';
6
5
  import type * as Trace from '../../../../models/trace/trace.js';
7
6
  import * as Lit from '../../../../ui/lit/lit.js';
8
7
 
@@ -11,7 +10,7 @@ import {nodeLink} from './NodeLink.js';
11
10
 
12
11
  const {html} = Lit;
13
12
 
14
- export class Viewport extends BaseInsightComponent<ViewportInsightModel> {
13
+ export class Viewport extends BaseInsightComponent<Trace.Insights.Models.Viewport.ViewportInsightModel> {
15
14
  override internalName = 'viewport';
16
15
 
17
16
  protected override hasAskAiSupport(): boolean {
@@ -15,7 +15,6 @@ import {html, render} from '../../../ui/lit/lit.js';
15
15
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
16
16
 
17
17
  import * as Components from './components/components.js';
18
- import type {SectionPosition} from './components/TimespanBreakdownOverlay.js';
19
18
 
20
19
  const UIStrings = {
21
20
  /**
@@ -939,7 +938,7 @@ export class Overlays extends EventTarget {
939
938
  widget.left = leftEdgePixel;
940
939
  widget.width = rangeWidth;
941
940
 
942
- const widths: SectionPosition[] = [];
941
+ const widths: Components.TimespanBreakdownOverlay.SectionPosition[] = [];
943
942
  for (const section of overlay.sections) {
944
943
  const leftPixel = this.#xPixelForMicroSeconds('main', section.bounds.min);
945
944
  const rightPixel = this.#xPixelForMicroSeconds('main', section.bounds.max);
@@ -7,7 +7,6 @@ import * as AnnotationHelpers from './AnnotationHelpers.js';
7
7
  import * as AppenderUtils from './AppenderUtils.js';
8
8
  import * as BenchmarkEvents from './BenchmarkEvents.js';
9
9
  import * as CompatibilityTracksAppender from './CompatibilityTracksAppender.js';
10
- import * as NetworkTrackWidget from './components/NetworkTrackWidget.js';
11
10
  import * as CountersGraph from './CountersGraph.js';
12
11
  import * as EntriesFilter from './EntriesFilter.js';
13
12
  import * as EventsTimelineTreeView from './EventsTimelineTreeView.js';
@@ -62,7 +61,6 @@ export {
62
61
  LayoutShiftsTrackAppender,
63
62
  ModificationsManager,
64
63
  NetworkTrackAppender,
65
- NetworkTrackWidget,
66
64
  RecordingMetadata,
67
65
  SaveFileFormatter,
68
66
  TargetForEvent,
@@ -132,7 +132,7 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
132
132
  link: WEBAUDIO_EXPLANATION_URL,
133
133
  })}
134
134
  </div>` : html`<div class="web-audio-details-container vbox flex-auto">
135
- <div class="context-detail-container">
135
+ <div class="context-detail-container" jslog=${VisualLogging.section('audio-context-details')}>
136
136
  <div class="context-detail-header">
137
137
  <div class="context-detail-title">
138
138
  ${selectedContext.contextType === 'realtime' ? i18n.i18n.lockedString('AudioContext')
@@ -140,24 +140,24 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
140
140
  </div>
141
141
  <div class="context-detail-subtitle">${selectedContext.contextId}</div>
142
142
  </div>
143
- <div class="context-detail-row">
143
+ <div class="context-detail-row" jslog=${VisualLogging.item('detail-row')}>
144
144
  <div class="context-detail-row-entry">${i18nString(UIStrings.state)}</div>
145
145
  <div class="context-detail-row-value">${selectedContext.contextState}</div>
146
146
  </div>
147
- <div class="context-detail-row">
147
+ <div class="context-detail-row" jslog=${VisualLogging.item('detail-row')}>
148
148
  <div class="context-detail-row-entry">${i18nString(UIStrings.sampleRate)}</div>
149
149
  <div class="context-detail-row-value">${selectedContext.sampleRate} Hz</div>
150
150
  </div>
151
151
  ${selectedContext.contextType === 'realtime' ? html`
152
- <div class="context-detail-row">
152
+ <div class="context-detail-row" jslog=${VisualLogging.item('detail-row')}>
153
153
  <div class="context-detail-row-entry">${i18nString(UIStrings.callbackBufferSize)}</div>
154
154
  <div class="context-detail-row-value">${selectedContext.callbackBufferSize} frames</div>
155
155
  </div>` : ''}
156
- <div class="context-detail-row">
156
+ <div class="context-detail-row" jslog=${VisualLogging.item('detail-row')}>
157
157
  <div class="context-detail-row-entry">${i18nString(UIStrings.renderQuantumSize)}</div>
158
158
  <div class="context-detail-row-value">${selectedContext.renderQuantumSize} frames</div>
159
159
  </div>
160
- <div class="context-detail-row">
160
+ <div class="context-detail-row" jslog=${VisualLogging.item('detail-row')}>
161
161
  <div class="context-detail-row-entry">${i18nString(UIStrings.maxOutputChannels)}</div>
162
162
  <div class="context-detail-row-value">${selectedContext.maxOutputChannelCount} ch</div>
163
163
  </div>
@@ -165,7 +165,7 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
165
165
  </div>`}
166
166
  <div class="web-audio-summary-container">
167
167
  ${contextRealtimeData ?
168
- html`<div class="context-summary-container">
168
+ html`<div class="context-summary-container" jslog=${VisualLogging.section('audio-context-summary')}>
169
169
  <span>${i18nString(UIStrings.currentTime)}: ${contextRealtimeData.currentTime.toFixed(3)} s</span>
170
170
  <span>\u2758</span>
171
171
  <span>${i18nString(UIStrings.callbackInterval)}: μ = ${
@@ -189,7 +189,7 @@ function renderCredentialsDataGrid(
189
189
  </thead>
190
190
  <tbody>
191
191
  ${credentials.length ? repeat(credentials, c => c.credentialId, credential => html`
192
- <tr>
192
+ <tr jslog=${VisualLogging.tableRow('credential')}>
193
193
  <td>${credential.credentialId}</td>
194
194
  <td>${credential.isResidentCredential}</td>
195
195
  <td>${credential.rpId}</td>
@@ -492,19 +492,19 @@ function renderAuthenticatorFields(
492
492
  // clang-format off
493
493
  return html`
494
494
  <div class="authenticator-fields">
495
- <div class="authenticator-field">
495
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
496
496
  <label class="authenticator-option-label">${i18nString(UIStrings.uuid)}</label>
497
497
  <div class="authenticator-field-value">${authenticatorId}</div>
498
498
  </div>
499
- <div class="authenticator-field">
499
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
500
500
  <label class="authenticator-option-label">${i18nString(UIStrings.protocol)}</label>
501
501
  <div class="authenticator-field-value">${options.protocol}</div>
502
502
  </div>
503
- <div class="authenticator-field">
503
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
504
504
  <label class="authenticator-option-label">${i18nString(UIStrings.transport)}</label>
505
505
  <div class="authenticator-field-value">${options.transport}</div>
506
506
  </div>
507
- <div class="authenticator-field">
507
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
508
508
  <label class="authenticator-option-label">
509
509
  ${i18nString(UIStrings.supportsResidentKeys)}
510
510
  </label>
@@ -512,7 +512,7 @@ function renderAuthenticatorFields(
512
512
  ${options.hasResidentKey ? i18nString(UIStrings.yes) : i18nString(UIStrings.no)}
513
513
  </div>
514
514
  </div>
515
- <div class="authenticator-field">
515
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
516
516
  <label class="authenticator-option-label">
517
517
  ${i18nString(UIStrings.supportsLargeBlob)}
518
518
  </label>
@@ -520,7 +520,7 @@ function renderAuthenticatorFields(
520
520
  ${options.hasLargeBlob ? i18nString(UIStrings.yes) : i18nString(UIStrings.no)}
521
521
  </div>
522
522
  </div>
523
- <div class="authenticator-field">
523
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
524
524
  <label class="authenticator-option-label">
525
525
  ${i18nString(UIStrings.supportsUserVerification)}
526
526
  </label>
@@ -528,7 +528,7 @@ function renderAuthenticatorFields(
528
528
  ${options.hasUserVerification ? i18nString(UIStrings.yes) : i18nString(UIStrings.no)}
529
529
  </div>
530
530
  </div>
531
- <div class="authenticator-field">
531
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
532
532
  <label class="authenticator-option-label">
533
533
  ${i18nString(UIStrings.supportsHmacSecret)}
534
534
  </label>
@@ -536,7 +536,7 @@ function renderAuthenticatorFields(
536
536
  ${options.hasHmacSecret ? i18nString(UIStrings.yes) : i18nString(UIStrings.no)}
537
537
  </div>
538
538
  </div>
539
- <div class="authenticator-field">
539
+ <div class="authenticator-field" jslog=${VisualLogging.item('authenticator-field')}>
540
540
  <label class="authenticator-option-label">
541
541
  ${i18nString(UIStrings.supportsHmacSecretMc)}
542
542
  </label>
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: ca1960ebbf919625140331d83f55552e8fe05333
4
+ Revision: e35c9c6a769bb2bfc92bbbd8270b7ef6b330b939
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -201,7 +201,8 @@ class DiffRenderer {
201
201
  return html`
202
202
  <style>${diffViewStyles}</style>
203
203
  <style>${CodeHighlighter.codeHighlighterStyles}</style>
204
- <div class="diff-listing" aria-label=${i18nString(UIStrings.changesDiffViewer)}>
204
+ <div class="diff-listing" aria-label=${i18nString(UIStrings.changesDiffViewer)} jslog=${
205
+ VisualLogging.section('diff-view')}>
205
206
  ${rows.map(row => this.#renderRow(row))}
206
207
  </div>`;
207
208
  }
@@ -6,7 +6,7 @@ import './report_view.js';
6
6
 
7
7
  import * as Lit from '../../lit/lit.js';
8
8
 
9
- import type {ReportData} from './ReportView.js';
9
+ import type * as ReportView from './report_view.js';
10
10
 
11
11
  const {html} = Lit;
12
12
 
@@ -19,7 +19,7 @@ export function render(container: HTMLElement) {
19
19
  // clang-format off
20
20
  Lit.render(
21
21
  html`
22
- <devtools-report .data=${{reportTitle: 'Optional Title'} as ReportData}>
22
+ <devtools-report .data=${{reportTitle: 'Optional Title'} as ReportView.ReportView.ReportData}>
23
23
  <devtools-report-section-header>Section 1</devtools-report-section-header>
24
24
  <devtools-report-key>Basic plain text field</devtools-report-key>
25
25
  <devtools-report-value>And this is the value</devtools-report-value>
@@ -237,19 +237,18 @@ async function evaluateExpression(
237
237
  expression: string,
238
238
  group: string,
239
239
  ): Promise<SDK.RemoteObject.RemoteObject|null> {
240
- const result = await context.evaluate(
241
- {
242
- expression,
243
- objectGroup: group,
244
- includeCommandLineAPI: true,
245
- silent: true,
246
- returnByValue: false,
247
- generatePreview: false,
248
- throwOnSideEffect: true,
249
- timeout: 500,
250
- replMode: true,
251
- },
252
- false, false);
240
+ const result = await context.evaluateWithSelectedFrameFallback({
241
+ expression,
242
+ objectGroup: group,
243
+ includeCommandLineAPI: true,
244
+ silent: true,
245
+ returnByValue: false,
246
+ generatePreview: false,
247
+ throwOnSideEffect: true,
248
+ timeout: 500,
249
+ replMode: true,
250
+ },
251
+ false, false);
253
252
  if ('error' in result || result.exceptionDetails || !result.object) {
254
253
  return null;
255
254
  }
@@ -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
  /* eslint-disable @devtools/no-imperative-dom-api */
5
- import type {Size} from '../../models/geometry/geometry.js';
5
+ import type * as Geometry from '../../models/geometry/geometry.js';
6
6
 
7
7
  import glassPaneStyles from './glassPane.css.js';
8
8
  import {deepElementFromEvent, measuredScrollbarWidth} from './UIUtils.js';
@@ -16,7 +16,7 @@ export class GlassPane {
16
16
  private readonly onMouseDownBound: (event: Event) => void;
17
17
  private onClickOutsideCallback: ((arg0: Event) => void)|null = null;
18
18
  #onHideCallback: (() => void)|null = null;
19
- private maxSize: Size|null = null;
19
+ private maxSize: Geometry.Size|null = null;
20
20
  private positionX: number|null = null;
21
21
  private positionY: number|null = null;
22
22
  private anchorBox: AnchorBox|null = null;
@@ -60,9 +60,13 @@ export class GlassPane {
60
60
 
61
61
  setPointerEventsBehavior(pointerEventsBehavior: PointerEventsBehavior): void {
62
62
  this.element.classList.toggle(
63
- 'no-pointer-events', pointerEventsBehavior !== PointerEventsBehavior.BLOCKED_BY_GLASS_PANE);
63
+ 'no-pointer-events',
64
+ pointerEventsBehavior !== PointerEventsBehavior.BLOCKED_BY_GLASS_PANE,
65
+ );
64
66
  this.contentElement.classList.toggle(
65
- 'no-pointer-events', pointerEventsBehavior === PointerEventsBehavior.PIERCE_CONTENTS);
67
+ 'no-pointer-events',
68
+ pointerEventsBehavior === PointerEventsBehavior.PIERCE_CONTENTS,
69
+ );
66
70
  }
67
71
 
68
72
  setOutsideClickCallback(callback: ((arg0: Event) => void)|null): void {
@@ -73,7 +77,7 @@ export class GlassPane {
73
77
  this.#onHideCallback = cb;
74
78
  }
75
79
 
76
- setMaxContentSize(size: Size|null): void {
80
+ setMaxContentSize(size: Geometry.Size|null): void {
77
81
  this.maxSize = size;
78
82
  this.positionContent();
79
83
  }
@@ -133,8 +137,16 @@ export class GlassPane {
133
137
 
134
138
  #onDetach(): void {
135
139
  panes.delete(this);
136
- this.element.ownerDocument.body.removeEventListener('mousedown', this.onMouseDownBound, true);
137
- this.element.ownerDocument.body.removeEventListener('pointerdown', this.onMouseDownBound, true);
140
+ this.element.ownerDocument.body.removeEventListener(
141
+ 'mousedown',
142
+ this.onMouseDownBound,
143
+ true,
144
+ );
145
+ this.element.ownerDocument.body.removeEventListener(
146
+ 'pointerdown',
147
+ this.onMouseDownBound,
148
+ true,
149
+ );
138
150
  }
139
151
 
140
152
  private onMouseDown(event: Event): void {
@@ -157,7 +169,7 @@ export class GlassPane {
157
169
  const scrollbarSize = measuredScrollbarWidth(this.element.ownerDocument);
158
170
  const offsetSize = 10;
159
171
 
160
- const container = (containers.get((this.element.ownerDocument))) as HTMLElement;
172
+ const container = containers.get(this.element.ownerDocument) as HTMLElement;
161
173
  if (this.sizeBehavior === SizeBehavior.MEASURE_CONTENT) {
162
174
  this.contentElement.positionAt(0, 0);
163
175
  this.contentElement.style.width = '';
@@ -189,7 +201,7 @@ export class GlassPane {
189
201
 
190
202
  if (this.anchorBox) {
191
203
  const anchorBox = this.anchorBox.relativeToElement(container);
192
- let behavior: AnchorBehavior.PREFER_BOTTOM|AnchorBehavior.PREFER_TOP|AnchorBehavior.PREFER_RIGHT|
204
+ let behavior:|AnchorBehavior.PREFER_BOTTOM|AnchorBehavior.PREFER_TOP|AnchorBehavior.PREFER_RIGHT|
193
205
  AnchorBehavior.PREFER_LEFT|AnchorBehavior = this.anchorBehavior;
194
206
 
195
207
  if (behavior === AnchorBehavior.PREFER_TOP || behavior === AnchorBehavior.PREFER_BOTTOM) {
@@ -226,14 +238,20 @@ export class GlassPane {
226
238
  }
227
239
  }
228
240
 
229
- const naturalPositionX = Math.min(anchorBox.x, containerWidth - width - gutterSize);
241
+ const naturalPositionX = Math.min(
242
+ anchorBox.x,
243
+ containerWidth - width - gutterSize,
244
+ );
230
245
  positionX = Math.max(gutterSize, naturalPositionX);
231
246
  if (this.#ignoreLeftMargin && gutterSize > naturalPositionX) {
232
247
  positionX = 0;
233
248
  }
234
249
 
235
250
  if (!enoughHeight) {
236
- positionX = Math.min(positionX + offsetSize, containerWidth - width - gutterSize);
251
+ positionX = Math.min(
252
+ positionX + offsetSize,
253
+ containerWidth - width - gutterSize,
254
+ );
237
255
  } else if (positionX - offsetSize >= gutterSize) {
238
256
  positionX -= offsetSize;
239
257
  }
@@ -272,9 +290,15 @@ export class GlassPane {
272
290
  }
273
291
  }
274
292
 
275
- positionY = Math.max(gutterSize, Math.min(anchorBox.y, containerHeight - height - gutterSize));
293
+ positionY = Math.max(
294
+ gutterSize,
295
+ Math.min(anchorBox.y, containerHeight - height - gutterSize),
296
+ );
276
297
  if (!enoughWidth) {
277
- positionY = Math.min(positionY + offsetSize, containerHeight - height - gutterSize);
298
+ positionY = Math.min(
299
+ positionY + offsetSize,
300
+ containerHeight - height - gutterSize,
301
+ );
278
302
  } else if (positionY - offsetSize >= gutterSize) {
279
303
  positionY -= offsetSize;
280
304
  }
@@ -303,7 +327,7 @@ export class GlassPane {
303
327
  }
304
328
 
305
329
  static setContainer(element: Element): void {
306
- containers.set((element.ownerDocument), element);
330
+ containers.set(element.ownerDocument, element);
307
331
  GlassPane.containerMoved(element);
308
332
  }
309
333
 
@@ -1876,20 +1876,26 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
1876
1876
  }
1877
1877
 
1878
1878
  #getParentTreeElement(element: HTMLLIElement|TreeElementWrapper):
1879
- {treeElement: TreeElement, expanded: boolean, classes: DOMTokenList}|null {
1879
+ {treeElement: TreeElement, expanded: boolean, classes: DOMTokenList, attributes?: NamedNodeMap}|null {
1880
1880
  const subtreeRoot = element.parentElement;
1881
1881
  if (!(subtreeRoot instanceof HTMLUListElement)) {
1882
1882
  return null;
1883
1883
  }
1884
1884
  if (subtreeRoot.role === 'tree') {
1885
- return {treeElement: this.#treeOutline.rootElement(), expanded: false, classes: subtreeRoot.classList};
1885
+ return {
1886
+ treeElement: this.#treeOutline.rootElement(),
1887
+ expanded: false,
1888
+ classes: subtreeRoot.classList,
1889
+ attributes: subtreeRoot.attributes,
1890
+ };
1886
1891
  }
1887
1892
  if (subtreeRoot.role !== 'group' || !subtreeRoot.parentElement) {
1888
1893
  return null;
1889
1894
  }
1890
1895
  const treeElement = TreeViewTreeElement.get(subtreeRoot.parentElement);
1891
1896
  const expanded = treeElement ? treeElement.expanded : hasBooleanAttribute(subtreeRoot.parentElement, 'open');
1892
- return treeElement ? {expanded, treeElement, classes: subtreeRoot.classList} : null;
1897
+ return treeElement ? {expanded, treeElement, classes: subtreeRoot.classList, attributes: subtreeRoot.attributes} :
1898
+ null;
1893
1899
  }
1894
1900
 
1895
1901
  protected override updateNode(node: Node, attributeName: string|null): void {
@@ -1929,6 +1935,11 @@ export class TreeViewElement extends HTMLElementWithLightDOMTemplate {
1929
1935
  }
1930
1936
  if (parent.treeElement.childCount() === 0) {
1931
1937
  parent.treeElement.childrenListElement.classList.add(...parent.classes.values());
1938
+ for (const attr of parent.attributes || []) {
1939
+ if (attr.name !== 'role' && attr.name !== 'class') {
1940
+ parent.treeElement.childrenListElement.setAttribute(attr.name, attr.value);
1941
+ }
1942
+ }
1932
1943
  }
1933
1944
  let nextElement: TreeElement|null = null;
1934
1945
  for (let e: Element|null = node.nextElementSibling; e; e = e.nextElementSibling) {
@@ -23,7 +23,7 @@ import {
23
23
 
24
24
  const UIStrings = {
25
25
  /**
26
- * @description A context menu item in the Custom Preview Component
26
+ * @description Context menu item to show a custom formatted object as a standard JavaScript object.
27
27
  */
28
28
  showAsJavascriptObject: 'Show as JavaScript object',
29
29
  } as const;
@@ -78,7 +78,7 @@ export class JavaScriptREPL {
78
78
  replMode,
79
79
  silent,
80
80
  };
81
- return await executionContext.evaluate(options, false /* userGesture */, awaitPromise);
81
+ return await executionContext.evaluateWithSelectedFrameFallback(options, false /* userGesture */, awaitPromise);
82
82
  }
83
83
 
84
84
  static async evaluateAndBuildPreview(
@@ -20,7 +20,7 @@ import objectValueStyles from './objectValue.css.js';
20
20
 
21
21
  const UIStrings = {
22
22
  /**
23
- * @description Text that is usually a hyperlink to more documentation
23
+ * @description Link text for opening documentation in an object popover.
24
24
  */
25
25
  learnMore: 'Learn more',
26
26
  } as const;
@@ -68,92 +68,83 @@ const {widget, widgetRef} = UI.Widget;
68
68
  const {ref, repeat, ifDefined, classMap} = Directives;
69
69
  const UIStrings = {
70
70
  /**
71
- * @description Text in Object Properties Section
71
+ * @description Text shown in an object properties tree when evaluating a property throws an exception.
72
72
  * @example {function alert() [native code] } PH1
73
73
  */
74
74
  exceptionS: '[Exception: {PH1}]',
75
75
  /**
76
- * @description Text in Object Properties Section
76
+ * @description Placeholder text shown for a property value whose type or value is unknown.
77
77
  */
78
78
  unknown: 'unknown',
79
79
  /**
80
- * @description Text to expand something recursively
80
+ * @description Context menu item to expand an object and all of its child properties recursively.
81
81
  */
82
82
  expandRecursively: 'Expand recursively',
83
83
  /**
84
- * @description Text to collapse children of a parent group
84
+ * @description Context menu item to collapse all child properties of an object.
85
85
  */
86
86
  collapseChildren: 'Collapse children',
87
87
  /**
88
- * @description A context menu item in the Object Properties Section to choose property ordering.
88
+ * @description Context menu item to sort object properties alphabetically.
89
89
  */
90
90
  sortPropertiesAlphabetically: 'Sort properties alphabetically',
91
91
  /**
92
- * @description Text in Object Properties Section
92
+ * @description Message displayed in an object properties tree when an object has no properties.
93
93
  */
94
94
  noProperties: 'No properties',
95
95
  /**
96
- * @description Element text content in Object Properties Section
96
+ * @description Placeholder text indicating more content or an invocable getter in an object properties tree.
97
97
  */
98
98
  dots: '(...)',
99
99
  /**
100
- * @description Element title in Object Properties Section
100
+ * @description Tooltip text for the button that invokes an object property getter.
101
101
  */
102
102
  invokePropertyGetter: 'Invoke property getter',
103
103
  /**
104
- * @description Show all text content in Show More Data Grid Node of a data grid
104
+ * @description Tooltip text on a button to expand and show all hidden child properties.
105
105
  * @example {50} PH1
106
106
  */
107
107
  showAllD: 'Show all {PH1}',
108
108
  /**
109
- * @description Show all properties including those with null or undefined values
109
+ * @description Context menu checkbox item to show all properties, including null and undefined values.
110
110
  */
111
111
  showAll: 'Show all',
112
112
  /**
113
- * @description Value element text content in Object Properties Section. Shown when the developer is
114
- * viewing a variable in the Scope view, whose value is not available (i.e. because it was optimized
115
- * out) by the JavaScript engine, or inspecting a JavaScript object accessor property, which has no
116
- * getter. This string should be translated.
113
+ * @description Text shown when a variable or property value is unavailable, such as when optimized out by the JavaScript engine or missing a getter.
117
114
  */
118
115
  valueUnavailable: '<value unavailable>',
119
116
  /**
120
- * @description Tooltip for value elements in the Scope view that refer to variables whose values
121
- * aren't accessible to the debugger (potentially due to being optimized out by the JavaScript
122
- * engine), or for JavaScript object accessor properties which have no getter.
117
+ * @description Tooltip text for property values that aren't accessible to the debugger.
123
118
  */
124
- valueNotAccessibleToTheDebugger: 'Value is not accessible to the debugger',
119
+ valueNotAccessibleToTheDebugger: 'Value isn’t accessible to the debugger',
125
120
  /**
126
- * @description A context menu item in the Watch Expressions Sidebar Pane of the Sources panel and Network pane request.
121
+ * @description Context menu item to copy the value of a property to the clipboard.
127
122
  */
128
123
  copyValue: 'Copy value',
129
124
  /**
130
- * @description A context menu item in the Object Properties Section
125
+ * @description Context menu item to copy the property path of an object property to the clipboard.
131
126
  */
132
127
  copyPropertyPath: 'Copy property path',
133
128
  /**
134
- * @description Text shown when displaying a JavaScript object that has a string property that is
135
- * too large for DevTools to properly display a text editor. This is shown instead of the string in
136
- * question. Should be translated.
129
+ * @description Placeholder text shown when a string property is too large to display in a text editor.
137
130
  */
138
131
  stringIsTooLargeToEdit: '<string is too large to edit>',
139
132
  /**
140
- * @description Text of attribute value when text is too long
133
+ * @description Context menu item and button text to expand truncated long text and show the remaining size.
141
134
  * @example {30 MB} PH1
142
135
  */
143
136
  showMoreS: 'Show more ({PH1})',
144
137
  /**
145
- * @description Text of attribute value when text is too long
138
+ * @description Button text indicating that a long text string was truncated and showing its total size.
146
139
  * @example {30 MB} PH1
147
140
  */
148
- longTextWasTruncatedS: 'long text was truncated ({PH1})',
141
+ longTextWasTruncatedS: 'Long text was truncated ({PH1})',
149
142
  /**
150
- * @description Text for copying
143
+ * @description Button and context menu item to copy text to the clipboard.
151
144
  */
152
145
  copy: 'Copy',
153
146
  /**
154
- * @description A tooltip text that shows when hovering over a button next to value objects,
155
- * which are based on bytes and can be shown in a hexadecimal viewer.
156
- * Clicking on the button will display that object in the Memory inspector panel.
147
+ * @description Tooltip text for the button to open a memory buffer object in the Memory inspector panel.
157
148
  */
158
149
  openInMemoryInpector: 'Open in Memory inspector panel',
159
150
  } as const;
@@ -11,21 +11,16 @@ import {Directives, html, type LitTemplate, nothing, render} from '../../../lit/
11
11
  const {ifDefined, repeat} = Directives;
12
12
  const UIStrings = {
13
13
  /**
14
- * @description Text shown in the console object preview. Shown when the user is inspecting a
15
- * JavaScript object and there are multiple empty properties on the object (x =
16
- * 'times'/'multiply').
14
+ * @description Placeholder text shown in an object preview when there are multiple consecutive empty slots in an array.
17
15
  * @example {3} PH1
18
16
  */
19
17
  emptyD: 'empty × {PH1}',
20
18
  /**
21
- * @description Shown when the user is inspecting a JavaScript object in the console and there is
22
- * an empty property on the object..
19
+ * @description Placeholder text shown in an object preview when there is a single empty slot in an array.
23
20
  */
24
21
  empty: 'empty',
25
22
  /**
26
- * @description Text shown when the user is inspecting a JavaScript object, but of the properties
27
- * is not immediately available because it is a JavaScript 'getter' function, which means we have
28
- * to run some code first in order to compute this property.
23
+ * @description Tooltip text for an accessor property in an object preview when its value needs to be evaluated via a getter.
29
24
  */
30
25
  thePropertyIsComputedWithAGetter: 'The property is computed with a getter',
31
26
  } as const;