chrome-devtools-frontend 1.0.1571573 → 1.0.1573331

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 (158) hide show
  1. package/front_end/Images/geminiInDevTools.png +0 -0
  2. package/front_end/Images/geminiInDevTools_2x.png +0 -0
  3. package/front_end/Images/src/database-off.svg +1 -0
  4. package/front_end/Images/src/lock-person.svg +1 -1
  5. package/front_end/core/common/Debouncer.ts +10 -1
  6. package/front_end/core/common/SettingRegistration.ts +1 -1
  7. package/front_end/core/host/AidaClient.ts +8 -0
  8. package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -6
  9. package/front_end/core/host/UserMetrics.ts +0 -30
  10. package/front_end/core/root/ExperimentNames.ts +30 -0
  11. package/front_end/core/root/Runtime.ts +12 -27
  12. package/front_end/core/root/root.ts +2 -0
  13. package/front_end/core/sdk/CSSModel.ts +36 -13
  14. package/front_end/core/sdk/CSSProperty.ts +1 -1
  15. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +9 -0
  16. package/front_end/core/sdk/CookieModel.ts +2 -1
  17. package/front_end/core/sdk/DOMModel.ts +1 -1
  18. package/front_end/core/sdk/DebuggerModel.ts +1 -1
  19. package/front_end/core/sdk/IsolateManager.ts +0 -7
  20. package/front_end/core/sdk/OverlayModel.ts +1 -1
  21. package/front_end/core/sdk/SourceMap.ts +1 -1
  22. package/front_end/devtools_compatibility.js +0 -6
  23. package/front_end/entrypoints/main/MainImpl.ts +34 -25
  24. package/front_end/entrypoints/main/main-meta.ts +1 -1
  25. package/front_end/generated/SupportedCSSProperties.js +4 -8
  26. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +0 -180
  27. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +7 -7
  28. package/front_end/models/ai_assistance/agents/StylingAgent.ts +4 -4
  29. package/front_end/models/ai_assistance/ai_assistance.ts +0 -2
  30. package/front_end/models/breakpoints/BreakpointManager.ts +3 -3
  31. package/front_end/models/issues_manager/ContrastCheckTrigger.ts +2 -2
  32. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  33. package/front_end/models/trace/EventsSerializer.ts +5 -1
  34. package/front_end/models/trace/types/TraceEvents.ts +4 -0
  35. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
  36. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +1 -1
  37. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +8 -63
  38. package/front_end/panels/ai_assistance/PatchWidget.ts +3 -4
  39. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +1 -1
  40. package/front_end/panels/ai_assistance/aiAssistancePanel.css +0 -16
  41. package/front_end/panels/ai_assistance/ai_assistance.ts +0 -1
  42. package/front_end/panels/ai_assistance/components/ChatView.ts +123 -108
  43. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +1 -145
  44. package/front_end/panels/application/AppManifestView.ts +5 -5
  45. package/front_end/panels/application/DeviceBoundSessionsModel.ts +55 -4
  46. package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +46 -1
  47. package/front_end/panels/application/FrameDetailsView.ts +10 -10
  48. package/front_end/panels/application/components/BackForwardCacheView.ts +6 -8
  49. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -3
  50. package/front_end/panels/application/components/ProtocolHandlersView.ts +5 -6
  51. package/front_end/panels/application/components/ReportsGrid.ts +8 -9
  52. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +5 -4
  53. package/front_end/panels/application/components/TrustTokensView.ts +4 -6
  54. package/front_end/panels/application/preloading/PreloadingView.ts +9 -8
  55. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +237 -230
  56. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +3 -2
  57. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +6 -10
  58. package/front_end/panels/application/resourcesSidebar.css +8 -0
  59. package/front_end/panels/autofill/AutofillView.ts +4 -3
  60. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +1 -1
  61. package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
  62. package/front_end/panels/common/AiCodeGenerationTeaser.ts +35 -4
  63. package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +2 -2
  64. package/front_end/panels/common/BadgeNotification.ts +18 -14
  65. package/front_end/panels/common/GdpSignUpDialog.ts +5 -6
  66. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +192 -0
  67. package/front_end/panels/common/aiCodeGenerationTeaser.css +16 -1
  68. package/front_end/panels/common/common.ts +1 -0
  69. package/front_end/panels/common/geminiRebrandPromoDialog.css +47 -0
  70. package/front_end/panels/console/ConsoleInsightTeaser.ts +3 -3
  71. package/front_end/panels/console/ErrorStackParser.ts +11 -16
  72. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  73. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  74. package/front_end/panels/elements/ComputedStyleModel.ts +7 -54
  75. package/front_end/panels/elements/ElementsPanel.ts +33 -6
  76. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  77. package/front_end/panels/elements/StylePropertiesSection.ts +16 -8
  78. package/front_end/panels/elements/StylePropertyTreeElement.ts +67 -32
  79. package/front_end/panels/elements/StylesSidebarPane.ts +28 -11
  80. package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
  81. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
  82. package/front_end/panels/elements/elements-meta.ts +1 -1
  83. package/front_end/panels/explain/components/ConsoleInsight.ts +7 -7
  84. package/front_end/panels/issues/IssueView.ts +6 -6
  85. package/front_end/panels/network/RequestConditionsDrawer.ts +8 -7
  86. package/front_end/panels/network/RequestCookiesView.ts +3 -4
  87. package/front_end/panels/network/RequestTimingView.ts +3 -8
  88. package/front_end/panels/network/components/HeaderSectionRow.ts +3 -2
  89. package/front_end/panels/network/components/RequestHeaderSection.ts +3 -1
  90. package/front_end/panels/network/components/RequestHeadersView.ts +2 -2
  91. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  92. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  93. package/front_end/panels/profiler/IsolateSelector.ts +1 -2
  94. package/front_end/panels/profiler/profiler-meta.ts +3 -3
  95. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
  96. package/front_end/panels/recorder/RecorderController.ts +4 -9
  97. package/front_end/panels/recorder/components/CreateRecordingView.ts +6 -6
  98. package/front_end/panels/recorder/components/RecordingView.ts +0 -38
  99. package/front_end/panels/recorder/components/ReplaySection.ts +0 -14
  100. package/front_end/panels/recorder/components/StepEditor.ts +2 -40
  101. package/front_end/panels/recorder/recorderController.css +3 -3
  102. package/front_end/panels/security/CookieReportView.ts +17 -17
  103. package/front_end/panels/security/cookieControlsView.css +1 -1
  104. package/front_end/panels/security/cookieReportView.css +1 -1
  105. package/front_end/panels/settings/AISettingsTab.ts +8 -10
  106. package/front_end/panels/settings/components/SyncSection.ts +1 -1
  107. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +4 -12
  108. package/front_end/panels/settings/settings-meta.ts +1 -1
  109. package/front_end/panels/sources/BreakpointEditDialog.ts +4 -3
  110. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +1 -1
  111. package/front_end/panels/sources/NavigatorView.ts +4 -4
  112. package/front_end/panels/sources/SourcesPanel.ts +5 -4
  113. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  114. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +3 -2
  115. package/front_end/panels/timeline/ThreadAppender.ts +2 -1
  116. package/front_end/panels/timeline/TimelineController.ts +3 -3
  117. package/front_end/panels/timeline/TimelinePanel.ts +6 -4
  118. package/front_end/panels/timeline/TimelineUIUtils.ts +2 -2
  119. package/front_end/panels/timeline/components/ExportTraceOptions.ts +4 -4
  120. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +13 -6
  121. package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -9
  122. package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
  123. package/front_end/panels/timeline/components/fieldSettingsDialog.css +1 -1
  124. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -19
  125. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +3 -4
  126. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +0 -5
  127. package/front_end/panels/timeline/components/liveMetricsView.css +1 -1
  128. package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
  129. package/front_end/third_party/chromium/README.chromium +1 -1
  130. package/front_end/ui/components/buttons/button.css +4 -0
  131. package/front_end/ui/components/markdown_view/CodeBlock.ts +1 -1
  132. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +1 -1
  133. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +5 -5
  134. package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
  135. package/front_end/ui/components/text_editor/AiCodeGenerationParser.ts +27 -8
  136. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +36 -6
  137. package/front_end/ui/components/text_editor/AutocompleteHistory.ts +33 -1
  138. package/front_end/ui/legacy/ActionRegistration.ts +1 -1
  139. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  140. package/front_end/ui/legacy/EmptyWidget.ts +3 -3
  141. package/front_end/ui/legacy/LinkContextMenuProvider.ts +42 -0
  142. package/front_end/ui/legacy/ViewRegistration.ts +1 -1
  143. package/front_end/ui/legacy/XLink.ts +0 -27
  144. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +1 -1
  145. package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +4 -4
  146. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
  147. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +1 -1
  148. package/front_end/ui/legacy/inspectorCommon.css +2 -1
  149. package/front_end/ui/legacy/legacy.ts +3 -1
  150. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  151. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -0
  152. package/package.json +1 -1
  153. package/front_end/models/ai_assistance/ArtifactsManager.ts +0 -67
  154. package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +0 -183
  155. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +0 -89
  156. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +0 -133
  157. package/front_end/panels/ai_assistance/components/artifactsViewer.css +0 -15
  158. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +0 -32
@@ -120,6 +120,46 @@ export class RootTreeElement extends ApplicationPanelTreeElement {
120
120
  }
121
121
  }
122
122
 
123
+ #updateElementIconAndStyling(
124
+ sessionElement: ApplicationPanelTreeElement, isSessionTerminated: boolean, sessionHasErrors: boolean): void {
125
+ if (isSessionTerminated) {
126
+ sessionElement.listItemElement.classList.add('device-bound-session-terminated');
127
+ sessionElement.setLeadingIcons([createIcon('database-off')]);
128
+ return;
129
+ }
130
+ sessionElement.listItemElement.classList.remove('device-bound-session-terminated');
131
+ sessionElement.setLeadingIcons([createIcon(sessionHasErrors ? 'warning' : 'database')]);
132
+ }
133
+
134
+ #updateIconAndStyling(site: string, sessionId: string|undefined): void {
135
+ const isSessionTerminated = this.#model.isSessionTerminated(site, sessionId);
136
+ const sessionHasErrors = this.#model.sessionHasErrors(site, sessionId);
137
+ const siteMapEntry = this.#sites.get(site);
138
+ if (!siteMapEntry) {
139
+ return;
140
+ }
141
+ const sessionElement = siteMapEntry.sessions.get(sessionId);
142
+ if (!sessionElement) {
143
+ return;
144
+ }
145
+ this.#updateElementIconAndStyling(sessionElement, isSessionTerminated, sessionHasErrors);
146
+ }
147
+
148
+ #removeWarningIcons(noLongerFailedSessions: Map<string, Array<string|undefined>>): void {
149
+ for (const [site, noLongerFailedSessionIds] of noLongerFailedSessions) {
150
+ const siteData = this.#sites.get(site);
151
+ if (siteData) {
152
+ for (const noLongerFailedSessionId of noLongerFailedSessionIds) {
153
+ const sessionElement = siteData.sessions.get(noLongerFailedSessionId);
154
+ if (sessionElement) {
155
+ const isSessionTerminated = this.#model.isSessionTerminated(site, noLongerFailedSessionId);
156
+ this.#updateElementIconAndStyling(sessionElement, isSessionTerminated, /* sessionHasErrors=*/ false);
157
+ }
158
+ }
159
+ }
160
+ }
161
+ }
162
+
123
163
  #addSiteSessionIfMissing(site: string, sessionId: string|undefined): void {
124
164
  let siteMapEntry = this.#sites.get(site);
125
165
  if (!siteMapEntry) {
@@ -144,6 +184,9 @@ export class RootTreeElement extends ApplicationPanelTreeElement {
144
184
  if (!siteMapEntry.sessions.has(sessionId)) {
145
185
  const sessionElement = new ApplicationPanelTreeElement(
146
186
  this.resourcesPanel, sessionId ?? i18nString(UIStrings.noSession), false, 'device-bound-sessions-session');
187
+ if (sessionId === undefined) {
188
+ sessionElement.listItemElement.classList.add('no-device-bound-session');
189
+ }
147
190
  sessionElement.setLeadingIcons([createIcon('database')]);
148
191
  sessionElement.itemURL = `device-bound-sessions://${site}/${sessionId || ''}` as Platform.DevToolsPath.UrlString;
149
192
  const defaultOnSelect = sessionElement.onselect.bind(sessionElement);
@@ -209,11 +252,13 @@ export class RootTreeElement extends ApplicationPanelTreeElement {
209
252
  {data: {site, sessionId}}: Common.EventTarget
210
253
  .EventTargetEvent<DeviceBoundSessionModelEventTypes[DeviceBoundSessionModelEvents.EVENT_OCCURRED]>): void {
211
254
  this.#addSiteSessionIfMissing(site, sessionId);
255
+ this.#updateIconAndStyling(site, sessionId);
212
256
  }
213
257
 
214
- #onClearEvents({data: {emptySessions, emptySites}}: Common.EventTarget
258
+ #onClearEvents({data: {emptySessions, emptySites, noLongerFailedSessions}}: Common.EventTarget
215
259
  .EventTargetEvent<DeviceBoundSessionModelEventTypes[DeviceBoundSessionModelEvents.CLEAR_EVENTS]>):
216
260
  void {
217
261
  this.#removeEmptyElements(emptySessions, emptySites);
262
+ this.#removeWarningIcons(noLongerFailedSessions);
218
263
  }
219
264
  }
@@ -2,6 +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 '../../ui/kit/kit.js';
5
6
  import '../../ui/components/expandable_list/expandable_list.js';
6
7
  import '../../ui/components/report_view/report_view.js';
7
8
 
@@ -322,10 +323,10 @@ function renderOriginTrial(trials: Protocol.Page.OriginTrial[]|null): LitTemplat
322
323
  <devtools-report-section>
323
324
  <span class="report-section">
324
325
  ${i18nString(UIStrings.originTrialsExplanation)}
325
- <x-link href="https://developer.chrome.com/docs/web-platform/origin-trials/" class="link"
326
- jslog=${VisualLogging.link('learn-more.origin-trials').track({click: true})}>
326
+ <devtools-link href="https://developer.chrome.com/docs/web-platform/origin-trials/" class="link"
327
+ jslogcontext="learn-more.origin-trials">
327
328
  ${i18nString(UIStrings.learnMore)}
328
- </x-link>
329
+ </devtools-link>
329
330
  </span>
330
331
  </devtools-report-section>
331
332
  <devtools-widget class="span-cols" .widgetConfig=${widgetConfig(OriginTrialTreeView, {data})}>
@@ -735,11 +736,11 @@ function renderApiAvailabilitySection(frame: SDK.ResourceTreeModel.ResourceTreeF
735
736
  <devtools-report-section>
736
737
  <span class="report-section">
737
738
  ${i18nString(UIStrings.availabilityOfCertainApisDepends)}
738
- <x-link
739
+ <devtools-link
739
740
  href="https://web.dev/why-coop-coep/" class="link"
740
- jslog=${VisualLogging.link('learn-more.coop-coep').track({click: true})}>
741
+ jslogcontext="learn-more.coop-coep">
741
742
  ${i18nString(UIStrings.learnMore)}
742
- </x-link>
743
+ </devtools-link>
743
744
  </span>
744
745
  </devtools-report-section>
745
746
  ${renderSharedArrayBufferAvailability(frame)}
@@ -814,9 +815,8 @@ function renderMeasureMemoryAvailability(frame: SDK.ResourceTreeModel.ResourceTr
814
815
  <devtools-report-key>${i18nString(UIStrings.measureMemory)}</devtools-report-key>
815
816
  <devtools-report-value>
816
817
  <span title=${tooltipText}>${
817
- availabilityText}</span>\xA0<x-link class="link" href="https://web.dev/monitor-total-page-memory-usage/" jslog=${
818
- VisualLogging.link('learn-more.monitor-memory-usage').track({click: true})}>${
819
- i18nString(UIStrings.learnMore)}</x-link>
818
+ availabilityText}</span>\xA0<devtools-link class="link" href="https://web.dev/monitor-total-page-memory-usage/" jslogcontext="learn-more.monitor-memory-usage">${
819
+ i18nString(UIStrings.learnMore)}</devtools-link>
820
820
  </devtools-report-value>
821
821
  `;
822
822
  }
@@ -857,7 +857,7 @@ export class FrameDetailsReportView extends UI.Widget.Widget {
857
857
  constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
858
858
  super(element, {useShadowDom: true});
859
859
  this.#protocolMonitorExperimentEnabled =
860
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.PROTOCOL_MONITOR);
860
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.PROTOCOL_MONITOR);
861
861
  this.#view = view;
862
862
  }
863
863
 
@@ -199,10 +199,10 @@ function renderMainFrameInformation(
199
199
  frame.backForwardCacheDetails.explanationsTree,
200
200
  reasonToFramesMap)}
201
201
  <devtools-report-section>
202
- <x-link href="https://web.dev/bfcache/" class="link"
203
- jslog=${VisualLogging.action('learn-more.eligibility').track({click: true})}>
202
+ <devtools-link href="https://web.dev/bfcache/" class="link"
203
+ jslogcontext="learn-more.eligibility">
204
204
  ${i18nString(UIStrings.learnMore)}
205
- </x-link>
205
+ </devtools-link>
206
206
  </devtools-report-section>`;
207
207
  // clang-format on
208
208
  }
@@ -370,12 +370,10 @@ function maybeRenderDeepLinkToUnload(explanation: Protocol.Page.BackForwardCache
370
370
  if (explanation.reason === Protocol.Page.BackForwardCacheNotRestoredReason.UnloadHandlerExistsInMainFrame ||
371
371
  explanation.reason === Protocol.Page.BackForwardCacheNotRestoredReason.UnloadHandlerExistsInSubFrame) {
372
372
  return html`
373
- <x-link href="https://web.dev/bfcache/#never-use-the-unload-event" class="link"
374
- jslog=${VisualLogging.action('learn-more.never-use-unload').track({
375
- click: true,
376
- })}>
373
+ <devtools-link href="https://web.dev/bfcache/#never-use-the-unload-event" class="link"
374
+ jslogContext=${'learn-more.never-use-unload'}>
377
375
  ${i18nString(UIStrings.neverUseUnload)}
378
- </x-link>`;
376
+ </devtools-link>`;
379
377
  }
380
378
  return nothing;
381
379
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  import '../../../ui/components/report_view/report_view.js';
6
6
  import '../../../ui/legacy/components/data_grid/data_grid.js';
7
+ import '../../../ui/kit/kit.js';
7
8
 
8
9
  import * as i18n from '../../../core/i18n/i18n.js';
9
10
  import * as SDK from '../../../core/sdk/sdk.js';
@@ -157,10 +158,10 @@ const renderMainFrameInformation = (input: ViewInput): Lit.LitTemplate => {
157
158
  <devtools-report-divider>
158
159
  </devtools-report-divider>
159
160
  <devtools-report-section>
160
- <x-link href="https://privacycg.github.io/nav-tracking-mitigations/#bounce-tracking-mitigations" class="link"
161
- jslog=${VisualLogging.link('learn-more').track({click: true})}>
161
+ <devtools-link href="https://privacycg.github.io/nav-tracking-mitigations/#bounce-tracking-mitigations" class="link"
162
+ jslogcontext="learn-more">
162
163
  ${i18nString(UIStrings.learnMore)}
163
- </x-link>
164
+ </devtools-link>
164
165
  </devtools-report-section>
165
166
  `;
166
167
  // clang-format on
@@ -74,8 +74,6 @@ const i18nTemplate = unboundI18nTemplate.bind(undefined, str_);
74
74
 
75
75
  function renderStatusMessage(
76
76
  protocolHandlers: readonly ProtocolHandler[], manifestLink: Platform.DevToolsPath.UrlString): TemplateResult {
77
- const manifestInTextLink =
78
- UI.XLink.XLink.create(manifestLink, i18nString(UIStrings.manifest), undefined, undefined, 'manifest');
79
77
  const statusString = protocolHandlers.length > 0 ? UIStrings.protocolDetected : UIStrings.protocolNotDetected;
80
78
  // clang-format off
81
79
  return html`
@@ -83,7 +81,9 @@ function renderStatusMessage(
83
81
  <devtools-icon class="inline-icon"
84
82
  name=${protocolHandlers.length > 0 ? 'check-circle' : 'info'}>
85
83
  </devtools-icon>
86
- ${uiI18n.getFormatLocalizedString(str_, statusString, {PH1: manifestInTextLink })}
84
+ ${uiI18n.getFormatLocalizedStringTemplate(str_, statusString, {PH1: html`
85
+ <devtools-link href=${manifestLink} jslogcontext="manifest">${i18nString(UIStrings.manifest)}</devtools-link>
86
+ ` })}
87
87
  </div>`;
88
88
  // clang-format on
89
89
  }
@@ -144,10 +144,9 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
144
144
  ${renderStatusMessage(input.protocolHandler, input.manifestLink)}
145
145
  <div class="protocol-handlers-row">
146
146
  ${i18nTemplate(UIStrings.needHelpReadOur, {PH1: html`
147
- <x-link href=${PROTOCOL_DOCUMENT_URL} tabindex=0 class="devtools-link" autofocus jslog=${
148
- VisualLogging.link('learn-more').track({click: true, keydown: 'Enter|Space'})}>
147
+ <devtools-link href=${PROTOCOL_DOCUMENT_URL} class="devtools-link" autofocus jslogcontext="learn-more">
149
148
  ${i18nString(UIStrings.protocolHandlerRegistrations)}
150
- </x-link>`})}
149
+ </devtools-link>`})}
151
150
  </div>
152
151
  ${renderProtocolTest(input.protocolHandler, input.queryInputState, input.protocolSelectHandler,
153
152
  input.queryInputChangeHandler, input.testProtocolClickHandler)}
@@ -2,6 +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 '../../../ui/kit/kit.js';
5
6
  import '../../../ui/legacy/components/data_grid/data_grid.js';
6
7
 
7
8
  import * as i18n from '../../../core/i18n/i18n.js';
@@ -80,11 +81,11 @@ export const DEFAULT_VIEW = (input: ViewInput, output: undefined, target: HTMLEl
80
81
  <th id="status" weight="20">
81
82
  <style>${reportsGridStyles}</style>
82
83
  <span class="status-header">${i18nString(UIStrings.status)}</span>
83
- <x-link href="https://web.dev/reporting-api/#report-status"
84
- jslog=${VisualLogging.link('report-status').track({click: true})}>
84
+ <devtools-link href="https://web.dev/reporting-api/#report-status"
85
+ jslogcontext="report-status">
85
86
  <devtools-icon class="inline-icon medium" name="help" style="color: var(--icon-link);"
86
87
  ></devtools-icon>
87
- </x-link>
88
+ </devtools-link>
88
89
  </th>
89
90
  <th id="destination" weight="20">${i18nString(UIStrings.destination)}</th>
90
91
  <th id="timestamp" weight="20">${i18nString(UIStrings.generatedAt)}</th>
@@ -108,13 +109,11 @@ export const DEFAULT_VIEW = (input: ViewInput, output: undefined, target: HTMLEl
108
109
  <span class="empty-state-header">${i18nString(UIStrings.noReportsToDisplay)}</span>
109
110
  <div class="empty-state-description">
110
111
  <span>${i18nString(UIStrings.reportingApiDescription)}</span>
111
- <x-link
112
+ <devtools-link
112
113
  class="devtools-link"
113
114
  href=${REPORTING_API_EXPLANATION_URL}
114
- jslog=${VisualLogging.link()
115
- .track({ click: true, keydown: 'Enter|Space' })
116
- .context('learn-more')}
117
- >${i18nString(UIStrings.learnMore)}</x-link>
115
+ jslogcontext="learn-more"
116
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
118
117
  </div>
119
118
  </div>
120
119
  `}
@@ -135,7 +134,7 @@ export class ReportsGrid extends UI.Widget.Widget {
135
134
  super(element);
136
135
  this.#view = view;
137
136
  this.#protocolMonitorExperimentEnabled =
138
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.PROTOCOL_MONITOR);
137
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.PROTOCOL_MONITOR);
139
138
  this.requestUpdate();
140
139
  }
141
140
 
@@ -2,6 +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 '../../../ui/kit/kit.js';
5
6
  import '../../../ui/legacy/components/data_grid/data_grid.js';
6
7
 
7
8
  import * as i18n from '../../../core/i18n/i18n.js';
@@ -97,11 +98,11 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
97
98
  <div class="empty-state-header">${i18nString(UIStrings.noEvents)}</div>
98
99
  <div class="empty-state-description">
99
100
  <span>${i18nString(UIStrings.sharedStorageDescription)}</span>
100
- <x-link
101
- class="x-link devtools-link"
101
+ <devtools-link
102
+ class="devtools-link"
102
103
  href=${SHARED_STORAGE_EXPLANATION_URL}
103
- jslog=${VisualLogging.link().track({click: true, keydown: 'Enter|Space'}).context('learn-more')}
104
- >${i18nString(UIStrings.learnMore)}</x-link>
104
+ .jslogContext=${'learn-more'}
105
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
105
106
  </div>
106
107
  </div>`
107
108
  : html`
@@ -78,13 +78,11 @@ function renderGridOrNoDataMessage(input: TrustTokensViewInput): Lit.TemplateRes
78
78
  <div class="empty-state-header">${i18nString(UIStrings.noTrustTokens)}</div>
79
79
  <div class="empty-state-description">
80
80
  <span>${i18nString(UIStrings.trustTokensDescription)}</span>
81
- <x-link
82
- class="x-link devtools-link"
81
+ <devtools-link
82
+ class="devtools-link"
83
83
  href=${PRIVATE_STATE_TOKENS_EXPLANATION_URL}
84
- jslog=${VisualLogging.link()
85
- .track({ click: true, keydown: 'Enter|Space' })
86
- .context('learn-more')}
87
- >${i18nString(UIStrings.learnMore)}</x-link>
84
+ .jslogContext=${'learn-more'}
85
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
88
86
  </div>
89
87
  </div>
90
88
  </div>
@@ -4,6 +4,7 @@
4
4
  /* eslint-disable @devtools/no-imperative-dom-api */
5
5
  /* eslint-disable @devtools/no-lit-render-outside-of-view */
6
6
 
7
+ import '../../../ui/kit/kit.js';
7
8
  import '../../../ui/legacy/legacy.js';
8
9
 
9
10
  import * as Common from '../../../core/common/common.js';
@@ -253,11 +254,11 @@ export class PreloadingRuleSetView extends UI.Widget.VBox {
253
254
  <span class="empty-state-header">${i18nString(UIStrings.noRulesDetected)}</span>
254
255
  <div class="empty-state-description">
255
256
  <span>${i18nString(UIStrings.rulesDescription)}</span>
256
- <x-link
257
- class="x-link devtools-link"
257
+ <devtools-link
258
+ class="devtools-link"
258
259
  href=${SPECULATION_EXPLANATION_URL}
259
- jslog=${VisualLogging.link().track({click: true, keydown:'Enter|Space'}).context('learn-more')}
260
- >${i18nString(UIStrings.learnMore)}</x-link>
260
+ jslogcontext="learn-more"
261
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
261
262
  </div>
262
263
  </div>
263
264
  <devtools-split-view sidebar-position="second">
@@ -430,11 +431,11 @@ export class PreloadingAttemptView extends UI.Widget.VBox {
430
431
  <span class="empty-state-header">${i18nString(UIStrings.noPrefetchAttempts)}</span>
431
432
  <div class="empty-state-description">
432
433
  <span>${i18nString(UIStrings.prefetchDescription)}</span>
433
- <x-link
434
- class="x-link devtools-link"
434
+ <devtools-link
435
+ class="devtools-link"
435
436
  href=${SPECULATION_EXPLANATION_URL}
436
- jslog=${VisualLogging.link().track({click: true, keydown: 'Enter|Space'}).context('learn-more')}
437
- >${i18nString(UIStrings.learnMore)}</x-link>
437
+ jslogcontext="learn-more"
438
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
438
439
  </div>
439
440
  </div>
440
441
  <devtools-split-view sidebar-position="second">