chrome-devtools-frontend 1.0.1571007 → 1.0.1572937

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 (168) hide show
  1. package/agents/prompts/README.md +18 -0
  2. package/agents/prompts/devtools-imports.md +47 -0
  3. package/agents/prompts/verification.md +27 -0
  4. package/front_end/Images/geminiInDevTools.png +0 -0
  5. package/front_end/Images/geminiInDevTools_2x.png +0 -0
  6. package/front_end/Images/src/database-off.svg +1 -0
  7. package/front_end/Images/src/lock-person.svg +1 -1
  8. package/front_end/core/common/Debouncer.ts +10 -1
  9. package/front_end/core/common/SettingRegistration.ts +1 -1
  10. package/front_end/core/host/AidaClient.ts +8 -0
  11. package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -6
  12. package/front_end/core/host/UserMetrics.ts +1 -31
  13. package/front_end/core/root/ExperimentNames.ts +30 -0
  14. package/front_end/core/root/Runtime.ts +47 -48
  15. package/front_end/core/root/root.ts +2 -0
  16. package/front_end/core/sdk/CSSModel.ts +36 -13
  17. package/front_end/core/sdk/CSSProperty.ts +1 -1
  18. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +9 -0
  19. package/front_end/core/sdk/CookieModel.ts +2 -1
  20. package/front_end/core/sdk/DOMModel.ts +1 -1
  21. package/front_end/core/sdk/DebuggerModel.ts +1 -1
  22. package/front_end/core/sdk/OverlayModel.ts +3 -2
  23. package/front_end/core/sdk/SourceMap.ts +1 -1
  24. package/front_end/devtools_compatibility.js +0 -6
  25. package/front_end/entrypoints/main/MainImpl.ts +44 -24
  26. package/front_end/entrypoints/main/main-meta.ts +1 -1
  27. package/front_end/generated/SupportedCSSProperties.js +6 -14
  28. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +0 -180
  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/javascript_metadata/NativeFunctions.js +8 -0
  33. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  34. package/front_end/models/trace/EventsSerializer.ts +5 -1
  35. package/front_end/models/trace/ModelImpl.ts +0 -4
  36. package/front_end/models/trace/types/TraceEvents.ts +4 -0
  37. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
  38. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +1 -1
  39. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +8 -63
  40. package/front_end/panels/ai_assistance/PatchWidget.ts +10 -15
  41. package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +5 -4
  42. package/front_end/panels/ai_assistance/aiAssistancePanel.css +0 -16
  43. package/front_end/panels/ai_assistance/ai_assistance.ts +0 -1
  44. package/front_end/panels/ai_assistance/components/ChatMessage.ts +3 -2
  45. package/front_end/panels/ai_assistance/components/ChatView.ts +123 -108
  46. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +1 -145
  47. package/front_end/panels/application/DeviceBoundSessionsModel.ts +23 -1
  48. package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +23 -0
  49. package/front_end/panels/application/FrameDetailsView.ts +12 -10
  50. package/front_end/panels/application/components/BackForwardCacheView.ts +6 -8
  51. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -3
  52. package/front_end/panels/application/components/ProtocolHandlersView.ts +5 -6
  53. package/front_end/panels/application/components/ReportsGrid.ts +9 -9
  54. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +5 -4
  55. package/front_end/panels/application/components/TrustTokensView.ts +4 -6
  56. package/front_end/panels/application/preloading/PreloadingView.ts +9 -8
  57. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +237 -230
  58. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +3 -2
  59. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +6 -10
  60. package/front_end/panels/application/resourcesSidebar.css +8 -0
  61. package/front_end/panels/autofill/AutofillView.ts +4 -3
  62. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +3 -5
  63. package/front_end/panels/common/AiCodeCompletionTeaser.ts +5 -5
  64. package/front_end/panels/common/AiCodeGenerationTeaser.ts +35 -4
  65. package/front_end/panels/common/BadgeNotification.ts +17 -14
  66. package/front_end/panels/common/GdpSignUpDialog.ts +5 -6
  67. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +192 -0
  68. package/front_end/panels/common/aiCodeGenerationTeaser.css +16 -1
  69. package/front_end/panels/common/common.ts +1 -0
  70. package/front_end/panels/common/geminiRebrandPromoDialog.css +47 -0
  71. package/front_end/panels/console/ConsoleInsightTeaser.ts +10 -11
  72. package/front_end/panels/console/ErrorStackParser.ts +11 -16
  73. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  74. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  75. package/front_end/panels/elements/ComputedStyleModel.ts +16 -65
  76. package/front_end/panels/elements/ComputedStyleWidget.ts +3 -3
  77. package/front_end/panels/elements/ElementsPanel.ts +35 -5
  78. package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
  79. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  80. package/front_end/panels/elements/PlatformFontsWidget.ts +1 -1
  81. package/front_end/panels/elements/StylePropertiesSection.ts +16 -8
  82. package/front_end/panels/elements/StylePropertyTreeElement.ts +67 -32
  83. package/front_end/panels/elements/StylesSidebarPane.ts +28 -11
  84. package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
  85. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
  86. package/front_end/panels/elements/elements-meta.ts +1 -1
  87. package/front_end/panels/emulation/DeviceModeWrapper.ts +101 -62
  88. package/front_end/panels/explain/components/ConsoleInsight.ts +27 -23
  89. package/front_end/panels/explain/components/consoleInsight.css +1 -1
  90. package/front_end/panels/issues/IssueView.ts +6 -6
  91. package/front_end/panels/network/RequestConditionsDrawer.ts +4 -3
  92. package/front_end/panels/network/RequestCookiesView.ts +3 -4
  93. package/front_end/panels/network/RequestTimingView.ts +6 -10
  94. package/front_end/panels/network/components/HeaderSectionRow.ts +3 -2
  95. package/front_end/panels/network/components/RequestHeaderSection.ts +3 -1
  96. package/front_end/panels/network/components/RequestHeadersView.css +2 -2
  97. package/front_end/panels/network/components/RequestHeadersView.ts +7 -6
  98. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  99. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  100. package/front_end/panels/profiler/profiler-meta.ts +3 -3
  101. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
  102. package/front_end/panels/recorder/RecorderController.ts +7 -13
  103. package/front_end/panels/recorder/components/CreateRecordingView.ts +6 -6
  104. package/front_end/panels/recorder/components/RecordingView.ts +0 -38
  105. package/front_end/panels/recorder/components/ReplaySection.ts +0 -14
  106. package/front_end/panels/recorder/components/StepEditor.ts +2 -40
  107. package/front_end/panels/recorder/recorderController.css +4 -4
  108. package/front_end/panels/security/CookieControlsView.ts +2 -2
  109. package/front_end/panels/security/CookieReportView.ts +21 -21
  110. package/front_end/panels/security/cookieControlsView.css +1 -1
  111. package/front_end/panels/security/cookieReportView.css +1 -1
  112. package/front_end/panels/settings/AISettingsTab.ts +13 -15
  113. package/front_end/panels/settings/components/SyncSection.ts +4 -3
  114. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +4 -12
  115. package/front_end/panels/settings/settings-meta.ts +1 -1
  116. package/front_end/panels/sources/BreakpointEditDialog.ts +4 -3
  117. package/front_end/panels/sources/CallStackSidebarPane.ts +4 -1
  118. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +1 -1
  119. package/front_end/panels/sources/NavigatorView.ts +4 -4
  120. package/front_end/panels/sources/SourcesPanel.ts +7 -4
  121. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  122. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +3 -2
  123. package/front_end/panels/timeline/ThreadAppender.ts +2 -1
  124. package/front_end/panels/timeline/TimelineController.ts +4 -3
  125. package/front_end/panels/timeline/TimelinePanel.ts +7 -4
  126. package/front_end/panels/timeline/TimelineUIUtils.ts +2 -2
  127. package/front_end/panels/timeline/components/ExportTraceOptions.ts +4 -4
  128. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +13 -6
  129. package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -9
  130. package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
  131. package/front_end/panels/timeline/components/fieldSettingsDialog.css +1 -1
  132. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -19
  133. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +3 -4
  134. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +0 -5
  135. package/front_end/panels/timeline/components/liveMetricsView.css +1 -1
  136. package/front_end/panels/whats_new/ReleaseNoteView.ts +4 -3
  137. package/front_end/third_party/chromium/README.chromium +1 -1
  138. package/front_end/ui/components/buttons/button.css +4 -0
  139. package/front_end/ui/components/markdown_view/CodeBlock.ts +3 -6
  140. package/front_end/ui/components/markdown_view/MarkdownLink.ts +3 -4
  141. package/front_end/ui/components/panel_feedback/PanelFeedback.ts +3 -4
  142. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +10 -7
  143. package/front_end/ui/components/panel_feedback/panelFeedback.css +2 -2
  144. package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
  145. package/front_end/ui/components/text_editor/AiCodeGenerationParser.ts +27 -8
  146. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +36 -6
  147. package/front_end/ui/kit/link/Link.ts +1 -14
  148. package/front_end/ui/legacy/ActionRegistration.ts +1 -1
  149. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  150. package/front_end/ui/legacy/EmptyWidget.ts +3 -3
  151. package/front_end/ui/legacy/LinkContextMenuProvider.ts +42 -0
  152. package/front_end/ui/legacy/ViewRegistration.ts +1 -1
  153. package/front_end/ui/legacy/XLink.ts +0 -27
  154. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +1 -1
  155. package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +5 -4
  156. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
  157. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +1 -1
  158. package/front_end/ui/legacy/inspectorCommon.css +2 -1
  159. package/front_end/ui/legacy/legacy.ts +3 -1
  160. package/front_end/ui/visual_logging/KnownContextValues.ts +4 -1
  161. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -0
  162. package/package.json +1 -1
  163. package/front_end/models/ai_assistance/ArtifactsManager.ts +0 -67
  164. package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +0 -183
  165. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +0 -89
  166. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +0 -133
  167. package/front_end/panels/ai_assistance/components/artifactsViewer.css +0 -15
  168. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +0 -32
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import '../../../ui/components/spinners/spinners.js';
6
+ import '../../../ui/kit/kit.js';
6
7
 
7
8
  import * as Common from '../../../core/common/common.js';
8
9
  import * as Host from '../../../core/host/host.js';
@@ -299,9 +300,9 @@ function renderSearchButton(onSearch: ViewInput['callbacks']['onSearch']): Lit.T
299
300
 
300
301
  function renderLearnMoreAboutInsights(): Lit.TemplateResult {
301
302
  // clang-format off
302
- return html`<x-link href=${LEARN_MORE_URL} class="link" jslog=${VisualLogging.link('learn-more').track({click: true})}>
303
+ return html`<devtools-link href=${LEARN_MORE_URL} class="link" .jslogContext=${'learn-more'}>
303
304
  ${i18nString(UIStrings.learnMore)}
304
- </x-link>`;
305
+ </devtools-link>`;
305
306
  // clang-format on
306
307
  }
307
308
 
@@ -317,15 +318,15 @@ function maybeRenderSources(
317
318
  <ol class="sources-list">
318
319
  ${directCitationUrls.map((url, index) => html`
319
320
  <li>
320
- <x-link
321
+ <devtools-link
321
322
  href=${url}
322
323
  class=${Directives.classMap({link: true, highlighted: index === highlightedCitationIndex})}
323
- jslog=${VisualLogging.link('references.console-insights').track({click: true})}
324
+ .jslogContext=${'references.console-insights'}
324
325
  ${Directives.ref(e => { output.citationLinks[index] = e as HTMLElement; })}
325
326
  @animationend=${onCitationAnimationEnd}
326
327
  >
327
328
  ${url}
328
- </x-link>
329
+ </devtools-link>
329
330
  </li>
330
331
  `)}
331
332
  </ol>
@@ -343,13 +344,13 @@ function maybeRenderRelatedContent(relatedUrls: string[], directCitationUrls: st
343
344
  <ul class="references-list">
344
345
  ${relatedUrls.map(relatedUrl => html`
345
346
  <li>
346
- <x-link
347
+ <devtools-link
347
348
  href=${relatedUrl}
348
349
  class="link"
349
- jslog=${VisualLogging.link('references.console-insights').track({click: true})}
350
+ .jslogContext=${'references.console-insights'}
350
351
  >
351
352
  ${relatedUrl}
352
- </x-link>
353
+ </devtools-link>
353
354
  </li>
354
355
  `)}
355
356
  </ul>
@@ -379,10 +380,10 @@ function renderInsightSourcesList(
379
380
  <div class="insight-sources">
380
381
  <ul>
381
382
  ${Directives.repeat(sources, item => item.value, item => {
382
- return html`<li><x-link class="link" title="${localizeType(item.type)} ${i18nString(UIStrings.opensInNewTab)}" href="data:text/plain;charset=utf-8,${encodeURIComponent(item.value)}" jslog=${VisualLogging.link('source-' + item.type).track({click: true})}>
383
+ return html`<li><devtools-link class="link" title="${localizeType(item.type)} ${i18nString(UIStrings.opensInNewTab)}" href="data:text/plain;charset=utf-8,${encodeURIComponent(item.value)}" .jslogContext=${'source-' + item.type}>
383
384
  <devtools-icon name="open-externally"></devtools-icon>
384
385
  ${localizeType(item.type)}
385
- </x-link></li>`;
386
+ </devtools-link></li>`;
386
387
  })}
387
388
  ${isPageReloadRecommended ? html`<li class="source-disclaimer">
388
389
  <devtools-icon name="warning"></devtools-icon>
@@ -450,28 +451,28 @@ function renderConsentReminder(noLogging: boolean): Lit.TemplateResult {
450
451
  <devtools-icon name="policy" class="medium">
451
452
  </devtools-icon>
452
453
  </div>
453
- <div>Use of this feature is subject to the <x-link
454
+ <div>Use of this feature is subject to the <devtools-link
454
455
  href=${TERMS_OF_SERVICE_URL}
455
456
  class="link"
456
- jslog=${VisualLogging.link('terms-of-service.console-insights').track({click: true})}>
457
+ .jslogContext=${'terms-of-service.console-insights'}>
457
458
  Google Terms of Service
458
- </x-link> and <x-link
459
+ </devtools-link> and <devtools-link
459
460
  href=${PRIVACY_POLICY_URL}
460
461
  class="link"
461
- jslog=${VisualLogging.link('privacy-policy.console-insights').track({click: true})}>
462
+ .jslogContext=${'privacy-policy.console-insights'}>
462
463
  Google Privacy Policy
463
- </x-link>
464
+ </devtools-link>
464
465
  </div>
465
466
  <div>
466
467
  <devtools-icon name="warning" class="medium">
467
468
  </devtools-icon>
468
469
  </div>
469
470
  <div>
470
- <x-link
471
+ <devtools-link
471
472
  href=${CODE_SNIPPET_WARNING_URL}
472
473
  class="link"
473
- jslog=${VisualLogging.link('code-snippets-explainer.console-insights').track({click: true})}
474
- >Use generated code snippets with caution</x-link>
474
+ .jslogContext=${'code-snippets-explainer.console-insights'}
475
+ >Use generated code snippets with caution</devtools-link>
475
476
  </div>
476
477
  </div>`;
477
478
  // clang-format on
@@ -513,10 +514,10 @@ function renderDisclaimer(noLogging: boolean, onDisclaimerSettingsLink: () => vo
513
514
  } <button class="link" role="link" @click=${onDisclaimerSettingsLink}
514
515
  jslog=${VisualLogging.action('open-ai-settings').track({click: true})}>
515
516
  Open settings
516
- </button> or <x-link href=${LEARN_MORE_URL}
517
- class="link" jslog=${VisualLogging.link('learn-more').track({click: true})}>
517
+ </button> or <devtools-link href=${LEARN_MORE_URL}
518
+ class="link" .jslogContext=${'learn-more'}>
518
519
  learn more
519
- </x-link>
520
+ </devtools-link>
520
521
  </span>`;
521
522
  // clang-format on
522
523
  }
@@ -549,7 +550,8 @@ function renderSignInFooter(onGoToSignIn: () => void): Lit.LitTemplate {
549
550
  // clang-format on
550
551
  }
551
552
 
552
- function renderConsentReminderFooter(onReminderSettingsLink: () => void, onConsentReminderConfirmed: () => void): Lit.LitTemplate {
553
+ function renderConsentReminderFooter(
554
+ onReminderSettingsLink: () => void, onConsentReminderConfirmed: () => void): Lit.LitTemplate {
553
555
  // clang-format off
554
556
  return html`
555
557
  <div class="filler"></div>
@@ -575,7 +577,9 @@ function renderConsentReminderFooter(onReminderSettingsLink: () => void, onConse
575
577
  // clang-format on
576
578
  }
577
579
 
578
- function renderInsightFooter(noLogging: ViewInput['noLogging'], selectedRating: ViewInput['selectedRating'], callbacks: ViewInput['callbacks']): Lit.LitTemplate {
580
+ function renderInsightFooter(
581
+ noLogging: ViewInput['noLogging'], selectedRating: ViewInput['selectedRating'],
582
+ callbacks: ViewInput['callbacks']): Lit.LitTemplate {
579
583
  // clang-format off
580
584
  return html`
581
585
  <div class="disclaimer">
@@ -360,7 +360,7 @@
360
360
  display: table-cell;
361
361
  }
362
362
 
363
- .sources-list x-link.highlighted {
363
+ .sources-list devtools-link.highlighted {
364
364
  animation: highlight-fadeout 2s;
365
365
  }
366
366
 
@@ -16,7 +16,7 @@ import * as IssueCounter from '../../ui/components/issue_counter/issue_counter.j
16
16
  import * as MarkdownView from '../../ui/components/markdown_view/markdown_view.js';
17
17
  import {Icon} from '../../ui/kit/kit.js';
18
18
  import * as UI from '../../ui/legacy/legacy.js';
19
- import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
19
+ import {html, render} from '../../ui/lit/lit.js';
20
20
 
21
21
  import {AffectedBlockedByResponseView} from './AffectedBlockedByResponseView.js';
22
22
  import {AffectedCookiesView, AffectedRawCookieLinesView} from './AffectedCookiesView.js';
@@ -452,12 +452,12 @@ export class IssueView extends UI.TreeOutline.TreeElement {
452
452
 
453
453
  const linkList = linkWrapper.listItemElement.createChild('ul', 'link-list');
454
454
  for (const description of this.#description.links) {
455
- const link = UI.Fragment.html`<x-link class="link devtools-link" tabindex="0" href=${description.link}>${
456
- i18nString(UIStrings.learnMoreS, {PH1: description.linkTitle})}</x-link>` as UI.XLink.XLink;
457
- link.setAttribute('jslog', `${VisualLogging.link('learn-more').track({click: true})}`);
458
-
459
455
  const linkListItem = linkList.createChild('li');
460
- linkListItem.appendChild(link);
456
+ // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
457
+ render(
458
+ html`<devtools-link class="link devtools-link" href=${description.link} .jslogContext=${'learn-more'}>${
459
+ i18nString(UIStrings.learnMoreS, {PH1: description.linkTitle})}</devtools-link>`,
460
+ linkListItem);
461
461
  }
462
462
  this.appendChild(linkWrapper);
463
463
  }
@@ -4,6 +4,7 @@
4
4
  /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
5
  /* eslint-disable @devtools/no-imperative-dom-api */
6
6
 
7
+ import '../../ui/kit/kit.js';
7
8
  import '../../ui/legacy/legacy.js';
8
9
  import '../../ui/components/tooltips/tooltips.js';
9
10
 
@@ -325,13 +326,13 @@ export class AffectedCountWidget extends UI.Widget.Widget {
325
326
  }
326
327
 
327
328
  function learnMore(): LitTemplate {
328
- return html`<x-link
329
+ return html`<devtools-link
329
330
  href=${NETWORK_REQUEST_BLOCKING_EXPLANATION_URL}
330
331
  tabindex=0
331
332
  class=devtools-link
332
- jslog=${VisualLogging.link().track({click: true, keydown: 'Enter|Space'}).context('learn-more')}>
333
+ .jslogContext=${'learn-more'}>
333
334
  ${i18nString(UIStrings.learnMore)}
334
- </x-link>`;
335
+ </devtools-link>`;
335
336
  }
336
337
 
337
338
  export class RequestConditionsDrawer extends UI.Widget.VBox implements
@@ -121,10 +121,9 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
121
121
  ` : Lit.nothing}
122
122
 
123
123
  <div class="cookies-panel-item site-has-cookies-in-other-partition ${input.siteHasCookieInOtherPartition ? '' : 'hidden'}">
124
- ${uiI18n.getFormatLocalizedString(str_, UIStrings.siteHasCookieInOtherPartition, {
125
- PH1: UI.XLink.XLink.create(
126
- 'https://developer.chrome.com/en/docs/privacy-sandbox/chips/', i18nString(UIStrings.learnMore), undefined,
127
- undefined, 'learn-more'),})}
124
+ ${uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.siteHasCookieInOtherPartition, {
125
+ PH1: html`<devtools-link href="https://developer.chrome.com/en/docs/privacy-sandbox/chips/" .jslogContext=${'learn-more'}>${i18nString(UIStrings.learnMore)}</devtools-link>`
126
+ })}
128
127
  </div>
129
128
 
130
129
  <div class="request-cookies-title ${input.responseCookies.cookies.length ? '' : 'hidden'}"
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  /* eslint-disable @devtools/no-imperative-dom-api */
6
+ import '../../ui/kit/kit.js';
6
7
 
7
8
  import * as Common from '../../core/common/common.js';
8
9
  import * as Host from '../../core/host/host.js';
@@ -500,12 +501,12 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
500
501
  </tr>` : nothing}
501
502
  <tr class=network-timing-footer>
502
503
  <td colspan=1>
503
- <x-link
504
+ <devtools-link
504
505
  href="https://developer.chrome.com/docs/devtools/network/reference/#timing-explanation"
505
506
  class=devtools-link
506
- jslog=${VisualLogging.link().track({click: true, keydown:'Enter|Space'}).context('explanation')}>
507
+ .jslogContext=${'explanation'}>
507
508
  ${i18nString(UIStrings.explanation)}
508
- </x-link>
509
+ </devtools-link>
509
510
  <td></td>
510
511
  <td class=${input.wasThrottled ? 'throttled' : ''} title=${ifDefined(throttledRequestTitle)}>
511
512
  ${input.wasThrottled ? html` <devtools-icon name=watch @click=${revealThrottled}></devtools-icon>` : nothing}
@@ -527,13 +528,8 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
527
528
  ${input.serverTimings.length === 0 ? html`
528
529
  <tr>
529
530
  <td colspan=3>
530
- ${uiI18n.getFormatLocalizedString(str_, UIStrings.duringDevelopmentYouCanUseSToAdd, {PH1:
531
- UI.XLink.XLink.create(
532
- 'https://web.dev/custom-metrics/#server-timing-api',
533
- i18nString(UIStrings.theServerTimingApi),
534
- undefined,
535
- undefined,
536
- 'server-timing-api')})}
531
+ ${uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.duringDevelopmentYouCanUseSToAdd, {PH1:
532
+ html`<devtools-link href="https://web.dev/custom-metrics/#server-timing-api" .jslogContext=${'server-timing-api'}>${i18nString(UIStrings.theServerTimingApi)}</devtools-link>`})}
537
533
  </td>
538
534
  </tr>` : nothing}
539
535
  </table>`,
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
  /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
5
 
6
+ import '../../../ui/kit/kit.js';
6
7
  import '../../../ui/legacy/legacy.js';
7
8
 
8
9
  import * as Host from '../../../core/host/host.js';
@@ -339,11 +340,11 @@ export class HeaderSectionRow extends HTMLElement {
339
340
  // Disabled until https://crbug.com/1079231 is fixed.
340
341
  // clang-format off
341
342
  return html`
342
- <x-link href=${blockedDetails.link.url} class="link">
343
+ <devtools-link href=${blockedDetails.link.url} class="link">
343
344
  <devtools-icon name="open-externally" class="inline-icon extra-large" style="color: var(--icon-link);">
344
345
  </devtools-icon
345
346
  >${i18nString(UIStrings.learnMore)}
346
- </x-link>
347
+ </devtools-link>
347
348
  `;
348
349
  // clang-format on
349
350
  }
@@ -2,6 +2,8 @@
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';
6
+
5
7
  import * as i18n from '../../../core/i18n/i18n.js';
6
8
  import * as Platform from '../../../core/platform/platform.js';
7
9
  import type * as SDK from '../../../core/sdk/sdk.js';
@@ -81,7 +83,7 @@ function renderProvisionalHeadersWarning(isRequestCached: boolean): Lit.LitTempl
81
83
  <div class="explanation" title=${cautionTitle}>
82
84
  <devtools-icon class="inline-icon medium" name='warning-filled'>
83
85
  </devtools-icon>
84
- ${cautionText} <x-link href="https://developer.chrome.com/docs/devtools/network/reference/#provisional-headers" class="link">${i18nString(UIStrings.learnMore)}</x-link>
86
+ ${cautionText} <devtools-link href="https://developer.chrome.com/docs/devtools/network/reference/#provisional-headers" class="link">${i18nString(UIStrings.learnMore)}</devtools-link>
85
87
  </div>
86
88
  </div>
87
89
  </div>
@@ -147,11 +147,11 @@ div.raw-headers-row {
147
147
  color: var(--sys-color-on-surface);
148
148
  }
149
149
 
150
- x-link {
150
+ devtools-link {
151
151
  position: relative;
152
152
  }
153
153
 
154
- x-link .inline-icon {
154
+ devtools-link .inline-icon {
155
155
  padding-right: 3px;
156
156
  }
157
157
 
@@ -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
  /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
+ import '../../../ui/kit/kit.js';
5
6
 
6
7
  import * as Common from '../../../core/common/common.js';
7
8
  import * as Host from '../../../core/host/host.js';
@@ -306,22 +307,22 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
306
307
  // Disabled until https://crbug.com/1079231 is fixed.
307
308
  // clang-format off
308
309
  return html`
309
- <x-link
310
+ <devtools-link
310
311
  href="https://goo.gle/devtools-override"
311
312
  class="link devtools-link"
312
- jslog=${VisualLogging.link('devtools-override').track({click: true})}
313
+ .jslogContext=${'devtools-override'}
313
314
  >
314
315
  <devtools-icon name="help" class="inline-icon medium">
315
316
  </devtools-icon>
316
- </x-link>
317
- <x-link
317
+ </devtools-link>
318
+ <devtools-link
318
319
  @click=${revealHeadersFile}
319
320
  class="link devtools-link"
320
321
  title=${UIStrings.revealHeaderOverrides}
321
- jslog=${VisualLogging.link('reveal-header-overrides').track({click: true})}
322
+ .jslogContext=${'reveal-header-overrides'}
322
323
  >
323
324
  ${fileIcon}${Persistence.NetworkPersistenceManager.HEADERS_FILENAME}
324
- </x-link>
325
+ </devtools-link>
325
326
  `;
326
327
  // clang-format on
327
328
  }
@@ -144,7 +144,7 @@ export class HeapProfileView extends ProfileView implements UI.SearchableView.Se
144
144
 
145
145
  this.timelineOverview = new HeapTimelineOverview();
146
146
 
147
- if (Root.Runtime.experiments.isEnabled('sampling-heap-profiler-timeline')) {
147
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE)) {
148
148
  this.timelineOverview.addEventListener(Events.IDS_RANGE_CHANGED, this.onIdsRangeChanged.bind(this));
149
149
  this.timelineOverview.show(this.element, this.element.firstChild);
150
150
  this.timelineOverview.start();
@@ -368,7 +368,7 @@ export class SamplingHeapProfileType extends SamplingHeapProfileTypeBase {
368
368
  }
369
369
 
370
370
  override hasTemporaryView(): boolean {
371
- return Root.Runtime.experiments.isEnabled('sampling-heap-profiler-timeline');
371
+ return Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE);
372
372
  }
373
373
 
374
374
  override startSampling(): void {
@@ -378,7 +378,7 @@ export class SamplingHeapProfileType extends SamplingHeapProfileTypeBase {
378
378
  }
379
379
 
380
380
  void heapProfilerModel.startSampling();
381
- if (Root.Runtime.experiments.isEnabled('sampling-heap-profiler-timeline')) {
381
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE)) {
382
382
  this.updateTimer = window.setTimeout(() => {
383
383
  void this.updateStats();
384
384
  }, this.updateIntervalMs);
@@ -1337,8 +1337,8 @@ export class HeapSnapshotProfileType extends
1337
1337
  }
1338
1338
 
1339
1339
  override customContent(): Element|null {
1340
- const showOptionToExposeInternalsInHeapSnapshot =
1341
- Root.Runtime.experiments.isEnabled('show-option-tp-expose-internals-in-heap-snapshot');
1340
+ const showOptionToExposeInternalsInHeapSnapshot = Root.Runtime.experiments.isEnabled(
1341
+ Root.ExperimentNames.ExperimentName.SHOW_OPTION_TO_EXPOSE_INTERNALS_IN_HEAP_SNAPSHOT);
1342
1342
  const exposeInternalsInHeapSnapshotCheckbox =
1343
1343
  SettingsUI.SettingsUI.createSettingCheckbox(i18nString(UIStrings.exposeInternals), this.exposeInternals);
1344
1344
  this.customContentInternal = exposeInternalsInHeapSnapshotCheckbox;
@@ -101,7 +101,7 @@ UI.ViewManager.registerViewExtension({
101
101
  const Profiler = await loadProfilerModule();
102
102
  return Profiler.LiveHeapProfileView.LiveHeapProfileView.instance();
103
103
  },
104
- experiment: Root.Runtime.ExperimentName.LIVE_HEAP_PROFILE,
104
+ experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
105
105
  });
106
106
 
107
107
  UI.ActionRegistration.registerActionExtension({
@@ -115,7 +115,7 @@ UI.ActionRegistration.registerActionExtension({
115
115
  return new Profiler.LiveHeapProfileView.ActionDelegate();
116
116
  },
117
117
  category: UI.ActionRegistration.ActionCategory.MEMORY,
118
- experiment: Root.Runtime.ExperimentName.LIVE_HEAP_PROFILE,
118
+ experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
119
119
  options: [
120
120
  {
121
121
  value: true,
@@ -136,7 +136,7 @@ UI.ActionRegistration.registerActionExtension({
136
136
  return new Profiler.LiveHeapProfileView.ActionDelegate();
137
137
  },
138
138
  category: UI.ActionRegistration.ActionCategory.MEMORY,
139
- experiment: Root.Runtime.ExperimentName.LIVE_HEAP_PROFILE,
139
+ experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
140
140
  title: i18nLazyString(UIStrings.startRecordingHeapAllocationsAndReload),
141
141
  });
142
142
 
@@ -44,5 +44,5 @@ UI.ViewManager.registerViewExtension({
44
44
  const ProtocolMonitor = await loadProtocolMonitorModule();
45
45
  return new ProtocolMonitor.ProtocolMonitor.ProtocolMonitorImpl();
46
46
  },
47
- experiment: Root.Runtime.ExperimentName.PROTOCOL_MONITOR,
47
+ experiment: Root.ExperimentNames.ExperimentName.PROTOCOL_MONITOR,
48
48
  });
@@ -1,6 +1,7 @@
1
1
  // Copyright 2023 The Chromium Authors
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
+ import '../../ui/kit/kit.js';
4
5
 
5
6
  import * as Common from '../../core/common/common.js';
6
7
  import * as Host from '../../core/host/host.js';
@@ -691,7 +692,6 @@ export class RecorderController extends LitElement {
691
692
  const indexToInsertAt = currentIndex + (position === Components.StepView.AddStepPosition.BEFORE ? 0 : 1);
692
693
  steps.splice(indexToInsertAt, 0, {type: Models.Schema.StepType.WaitForElement, selectors: ['body']});
693
694
  const recording = {...this.currentRecording, flow: {...this.currentRecording.flow, steps}};
694
- Host.userMetrics.recordingEdited(Host.UserMetrics.RecordingEdited.STEP_ADDED);
695
695
  this.#stepBreakpointIndexes = new Set([...this.#stepBreakpointIndexes.values()].map(breakpointIndex => {
696
696
  if (indexToInsertAt > breakpointIndex) {
697
697
  return breakpointIndex;
@@ -722,7 +722,6 @@ export class RecorderController extends LitElement {
722
722
  const currentIndex = steps.indexOf(event.step);
723
723
  steps.splice(currentIndex, 1);
724
724
  const flow = {...this.currentRecording.flow, steps};
725
- Host.userMetrics.recordingEdited(Host.UserMetrics.RecordingEdited.STEP_REMOVED);
726
725
  this.#stepBreakpointIndexes = new Set([...this.#stepBreakpointIndexes.values()]
727
726
  .map(breakpointIndex => {
728
727
  if (currentIndex > breakpointIndex) {
@@ -957,10 +956,8 @@ export class RecorderController extends LitElement {
957
956
  await this.#exportContent(converter.getFilename(this.currentRecording.flow), content);
958
957
  const builtInMetric = CONVERTER_ID_TO_METRIC[converter.getId()];
959
958
  if (builtInMetric) {
960
- Host.userMetrics.recordingExported(builtInMetric);
961
959
  UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.recordingExported));
962
960
  } else if (converter.getId().startsWith(Converters.ExtensionConverter.EXTENSION_PREFIX)) {
963
- Host.userMetrics.recordingExported(Host.UserMetrics.RecordingExported.TO_EXTENSION);
964
961
  UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.recordingExported));
965
962
  } else {
966
963
  throw new Error('Could not find a metric for the export option with id = ' + id);
@@ -992,7 +989,6 @@ export class RecorderController extends LitElement {
992
989
  this.#setCurrentRecording(
993
990
  await this.#storage.updateRecording(this.currentRecording.storageName, flow),
994
991
  {keepBreakpoints: true, updateSession: true});
995
- Host.userMetrics.recordingAssertion(Host.UserMetrics.RecordingAssertion.ASSERTION_ADDED);
996
992
  await this.updateComplete;
997
993
  // FIXME: call a method on the recording view widget.
998
994
  await this.#recordingView?.updateComplete;
@@ -1193,13 +1189,11 @@ export class RecorderController extends LitElement {
1193
1189
  <div class="empty-state-header">${i18nString(UIStrings.header)}</div>
1194
1190
  <div class="empty-state-description">
1195
1191
  <span>${i18nString(UIStrings.recordingDescription)}</span>
1196
- <x-link
1197
- class="x-link devtools-link"
1192
+ <devtools-link
1193
+ class="devtools-link"
1198
1194
  href=${RECORDER_EXPLANATION_URL}
1199
- jslog=${VisualLogging.link()
1200
- .track({ click: true, keydown: 'Enter|Space' })
1201
- .context('learn-more')}
1202
- >${i18nString(UIStrings.learnMore)}</x-link>
1195
+ .jslogContext=${'learn-more'}
1196
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
1203
1197
  </div>
1204
1198
  <devtools-button .variant=${Buttons.Button.Variant.TONAL} jslogContext=${Actions.RecorderActions.CREATE_RECORDING} @click=${this.#onCreateNewRecording}>${i18nString(UIStrings.createRecording)}</devtools-button>
1205
1199
  </div>
@@ -1474,9 +1468,9 @@ export class RecorderController extends LitElement {
1474
1468
  }
1475
1469
  ></devtools-button>
1476
1470
  <div class="feedback">
1477
- <x-link class="x-link" title=${i18nString(UIStrings.sendFeedback)} href=${
1471
+ <devtools-link class="devtools-link" title=${i18nString(UIStrings.sendFeedback)} href=${
1478
1472
  FEEDBACK_URL
1479
- } jslog=${VisualLogging.link('feedback').track({click: true})}>${i18nString(UIStrings.sendFeedback)}</x-link>
1473
+ } .jslogContext=${'feedback'}>${i18nString(UIStrings.sendFeedback)}</devtools-link>
1480
1474
  </div>
1481
1475
  <div class="separator"></div>
1482
1476
  <devtools-shortcut-dialog
@@ -211,13 +211,13 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
211
211
  />
212
212
  <label class="row-label" for="selector-attribute">
213
213
  <span>${i18nString(UIStrings.selectorAttribute)}</span>
214
- <x-link
214
+ <devtools-link
215
215
  class="link" href="https://g.co/devtools/recorder#selector"
216
216
  title=${i18nString(UIStrings.learnMore)}
217
- jslog=${VisualLogging.link('recorder-selector-help').track({click: true})}>
217
+ .jslogContext=${'recorder-selector-help'}>
218
218
  <devtools-icon name="help">
219
219
  </devtools-icon>
220
- </x-link>
220
+ </devtools-link>
221
221
  </label>
222
222
  <input
223
223
  value=${selectorAttribute}
@@ -232,13 +232,13 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
232
232
  />
233
233
  <label class="row-label">
234
234
  <span>${i18nString(UIStrings.selectorTypes)}</span>
235
- <x-link
235
+ <devtools-link
236
236
  class="link" href="https://g.co/devtools/recorder#selector"
237
237
  title=${i18nString(UIStrings.learnMore)}
238
- jslog=${VisualLogging.link('recorder-selector-help').track({click: true})}>
238
+ .jslogContext=${'recorder-selector-help'}>
239
239
  <devtools-icon name="help">
240
240
  </devtools-icon>
241
- </x-link>
241
+ </devtools-link>
242
242
  </label>
243
243
  <div class="checkbox-container">
244
244
  ${repeat(selectorTypes, item => {
@@ -177,38 +177,6 @@ const networkConditionPresets = [
177
177
  SDK.NetworkManager.Fast4GConditions,
178
178
  ];
179
179
 
180
- function converterIdToFlowMetric(
181
- converterId: string,
182
- ): Host.UserMetrics.RecordingCopiedToClipboard {
183
- switch (converterId) {
184
- case Models.ConverterIds.ConverterIds.PUPPETEER:
185
- case Models.ConverterIds.ConverterIds.PUPPETEER_FIREFOX:
186
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_PUPPETEER;
187
- case Models.ConverterIds.ConverterIds.JSON:
188
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_JSON;
189
- case Models.ConverterIds.ConverterIds.REPLAY:
190
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_REPLAY;
191
- default:
192
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_EXTENSION;
193
- }
194
- }
195
-
196
- function converterIdToStepMetric(
197
- converterId: string,
198
- ): Host.UserMetrics.RecordingCopiedToClipboard {
199
- switch (converterId) {
200
- case Models.ConverterIds.ConverterIds.PUPPETEER:
201
- case Models.ConverterIds.ConverterIds.PUPPETEER_FIREFOX:
202
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_PUPPETEER;
203
- case Models.ConverterIds.ConverterIds.JSON:
204
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_JSON;
205
- case Models.ConverterIds.ConverterIds.REPLAY:
206
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_REPLAY;
207
- default:
208
- return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_EXTENSION;
209
- }
210
- }
211
-
212
180
  function renderSettings({
213
181
  settings,
214
182
  replaySettingsExpanded,
@@ -1193,8 +1161,6 @@ export class RecordingView extends UI.Widget.Widget {
1193
1161
  }
1194
1162
 
1195
1163
  Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(text);
1196
- const metric = step ? converterIdToStepMetric(converter.getId()) : converterIdToFlowMetric(converter.getId());
1197
- Host.userMetrics.recordingCopiedToClipboard(metric);
1198
1164
  }
1199
1165
 
1200
1166
  #onCopyStepEvent(event: CopyStepEvent): void {
@@ -1223,10 +1189,6 @@ export class RecordingView extends UI.Widget.Widget {
1223
1189
 
1224
1190
  showCodeToggle = (): void => {
1225
1191
  this.#showCodeView = !this.#showCodeView;
1226
- Host.userMetrics.recordingCodeToggled(
1227
- this.#showCodeView ? Host.UserMetrics.RecordingCodeToggled.CODE_SHOWN :
1228
- Host.UserMetrics.RecordingCodeToggled.CODE_HIDDEN,
1229
- );
1230
1192
  void this.#convertToCode();
1231
1193
  };
1232
1194
 
@@ -1,9 +1,7 @@
1
1
  // Copyright 2023 The Chromium Authors
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
- /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
4
 
6
- import * as Host from '../../../core/host/host.js';
7
5
  import * as i18n from '../../../core/i18n/i18n.js';
8
6
  import * as Platform from '../../../core/platform/platform.js';
9
7
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
@@ -66,13 +64,6 @@ const UIStrings = {
66
64
  extensionGroup: 'Extensions',
67
65
  } as const;
68
66
 
69
- const replaySpeedToMetricSpeedMap = {
70
- [PlayRecordingSpeed.NORMAL]: Host.UserMetrics.RecordingReplaySpeed.NORMAL,
71
- [PlayRecordingSpeed.SLOW]: Host.UserMetrics.RecordingReplaySpeed.SLOW,
72
- [PlayRecordingSpeed.VERY_SLOW]: Host.UserMetrics.RecordingReplaySpeed.VERY_SLOW,
73
- [PlayRecordingSpeed.EXTREMELY_SLOW]: Host.UserMetrics.RecordingReplaySpeed.EXTREMELY_SLOW,
74
- } as const;
75
-
76
67
  const str_ = i18n.i18n.registerUIStrings(
77
68
  'panels/recorder/components/ReplaySection.ts',
78
69
  UIStrings,
@@ -185,7 +176,6 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
185
176
  </devtools-button>
186
177
  </div>`,
187
178
  target,
188
- { host: target },
189
179
  );
190
180
  // clang-format on
191
181
  };
@@ -334,10 +324,6 @@ export class ReplaySection extends UI.Widget.Widget {
334
324
  this.#settings.speed = speed;
335
325
  this.#settings.replayExtension = '';
336
326
  }
337
-
338
- if (replaySpeedToMetricSpeedMap[speed]) {
339
- Host.userMetrics.recordingReplaySpeed(replaySpeedToMetricSpeedMap[speed]);
340
- }
341
327
  this.performUpdate();
342
328
  }
343
329
  }