chrome-devtools-frontend 1.0.1571573 → 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 (140) 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/OverlayModel.ts +1 -1
  20. package/front_end/core/sdk/SourceMap.ts +1 -1
  21. package/front_end/devtools_compatibility.js +0 -6
  22. package/front_end/entrypoints/main/MainImpl.ts +34 -25
  23. package/front_end/entrypoints/main/main-meta.ts +1 -1
  24. package/front_end/generated/SupportedCSSProperties.js +4 -8
  25. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +0 -180
  26. package/front_end/models/ai_assistance/ai_assistance.ts +0 -2
  27. package/front_end/models/breakpoints/BreakpointManager.ts +3 -3
  28. package/front_end/models/issues_manager/ContrastCheckTrigger.ts +2 -2
  29. package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
  30. package/front_end/models/trace/EventsSerializer.ts +5 -1
  31. package/front_end/models/trace/types/TraceEvents.ts +4 -0
  32. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
  33. package/front_end/panels/accessibility/AccessibilitySidebarView.ts +1 -1
  34. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +8 -63
  35. package/front_end/panels/ai_assistance/aiAssistancePanel.css +0 -16
  36. package/front_end/panels/ai_assistance/ai_assistance.ts +0 -1
  37. package/front_end/panels/ai_assistance/components/ChatView.ts +123 -108
  38. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +1 -145
  39. package/front_end/panels/application/DeviceBoundSessionsModel.ts +23 -1
  40. package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +23 -0
  41. package/front_end/panels/application/FrameDetailsView.ts +11 -10
  42. package/front_end/panels/application/components/BackForwardCacheView.ts +6 -8
  43. package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -3
  44. package/front_end/panels/application/components/ProtocolHandlersView.ts +5 -6
  45. package/front_end/panels/application/components/ReportsGrid.ts +8 -9
  46. package/front_end/panels/application/components/SharedStorageAccessGrid.ts +5 -4
  47. package/front_end/panels/application/components/TrustTokensView.ts +4 -6
  48. package/front_end/panels/application/preloading/PreloadingView.ts +9 -8
  49. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +237 -230
  50. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +3 -2
  51. package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +6 -10
  52. package/front_end/panels/application/resourcesSidebar.css +8 -0
  53. package/front_end/panels/autofill/AutofillView.ts +4 -3
  54. package/front_end/panels/common/AiCodeGenerationTeaser.ts +35 -4
  55. package/front_end/panels/common/BadgeNotification.ts +17 -14
  56. package/front_end/panels/common/GdpSignUpDialog.ts +5 -6
  57. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +192 -0
  58. package/front_end/panels/common/aiCodeGenerationTeaser.css +16 -1
  59. package/front_end/panels/common/common.ts +1 -0
  60. package/front_end/panels/common/geminiRebrandPromoDialog.css +47 -0
  61. package/front_end/panels/console/ErrorStackParser.ts +11 -16
  62. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
  63. package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
  64. package/front_end/panels/elements/ComputedStyleModel.ts +7 -54
  65. package/front_end/panels/elements/ElementsPanel.ts +33 -6
  66. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
  67. package/front_end/panels/elements/StylePropertiesSection.ts +16 -8
  68. package/front_end/panels/elements/StylePropertyTreeElement.ts +67 -32
  69. package/front_end/panels/elements/StylesSidebarPane.ts +28 -11
  70. package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
  71. package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
  72. package/front_end/panels/elements/elements-meta.ts +1 -1
  73. package/front_end/panels/issues/IssueView.ts +6 -6
  74. package/front_end/panels/network/RequestConditionsDrawer.ts +4 -3
  75. package/front_end/panels/network/RequestCookiesView.ts +3 -4
  76. package/front_end/panels/network/RequestTimingView.ts +2 -7
  77. package/front_end/panels/network/components/HeaderSectionRow.ts +3 -2
  78. package/front_end/panels/network/components/RequestHeaderSection.ts +3 -1
  79. package/front_end/panels/profiler/HeapProfileView.ts +3 -3
  80. package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
  81. package/front_end/panels/profiler/profiler-meta.ts +3 -3
  82. package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
  83. package/front_end/panels/recorder/RecorderController.ts +2 -7
  84. package/front_end/panels/recorder/components/CreateRecordingView.ts +6 -6
  85. package/front_end/panels/recorder/components/RecordingView.ts +0 -38
  86. package/front_end/panels/recorder/components/ReplaySection.ts +0 -14
  87. package/front_end/panels/recorder/components/StepEditor.ts +2 -40
  88. package/front_end/panels/recorder/recorderController.css +3 -3
  89. package/front_end/panels/security/CookieReportView.ts +14 -14
  90. package/front_end/panels/security/cookieControlsView.css +1 -1
  91. package/front_end/panels/security/cookieReportView.css +1 -1
  92. package/front_end/panels/settings/AISettingsTab.ts +8 -10
  93. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +4 -12
  94. package/front_end/panels/settings/settings-meta.ts +1 -1
  95. package/front_end/panels/sources/BreakpointEditDialog.ts +4 -3
  96. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +1 -1
  97. package/front_end/panels/sources/NavigatorView.ts +4 -4
  98. package/front_end/panels/sources/SourcesPanel.ts +5 -4
  99. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  100. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +3 -2
  101. package/front_end/panels/timeline/ThreadAppender.ts +2 -1
  102. package/front_end/panels/timeline/TimelineController.ts +3 -3
  103. package/front_end/panels/timeline/TimelinePanel.ts +6 -4
  104. package/front_end/panels/timeline/TimelineUIUtils.ts +2 -2
  105. package/front_end/panels/timeline/components/ExportTraceOptions.ts +4 -4
  106. package/front_end/panels/timeline/components/FieldSettingsDialog.ts +13 -6
  107. package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -9
  108. package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
  109. package/front_end/panels/timeline/components/fieldSettingsDialog.css +1 -1
  110. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -19
  111. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +3 -4
  112. package/front_end/panels/timeline/components/insights/baseInsightComponent.css +0 -5
  113. package/front_end/panels/timeline/components/liveMetricsView.css +1 -1
  114. package/front_end/third_party/chromium/README.chromium +1 -1
  115. package/front_end/ui/components/buttons/button.css +4 -0
  116. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +5 -5
  117. package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
  118. package/front_end/ui/components/text_editor/AiCodeGenerationParser.ts +27 -8
  119. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +36 -6
  120. package/front_end/ui/legacy/ActionRegistration.ts +1 -1
  121. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  122. package/front_end/ui/legacy/EmptyWidget.ts +3 -3
  123. package/front_end/ui/legacy/LinkContextMenuProvider.ts +42 -0
  124. package/front_end/ui/legacy/ViewRegistration.ts +1 -1
  125. package/front_end/ui/legacy/XLink.ts +0 -27
  126. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +1 -1
  127. package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +4 -4
  128. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
  129. package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +1 -1
  130. package/front_end/ui/legacy/inspectorCommon.css +2 -1
  131. package/front_end/ui/legacy/legacy.ts +3 -1
  132. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  133. package/front_end/ui/visual_logging/LoggingDriver.ts +3 -0
  134. package/package.json +1 -1
  135. package/front_end/models/ai_assistance/ArtifactsManager.ts +0 -67
  136. package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +0 -183
  137. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +0 -89
  138. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +0 -133
  139. package/front_end/panels/ai_assistance/components/artifactsViewer.css +0 -15
  140. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +0 -32
@@ -33,7 +33,7 @@
33
33
  font: var(--sys-typescale-body4-regular);
34
34
  }
35
35
 
36
- .x-link {
36
+ .devtools-link {
37
37
  color: var(--sys-color-primary);
38
38
  text-decoration-line: underline;
39
39
  cursor: pointer;
@@ -249,7 +249,7 @@ interface AiSettingParams {
249
249
 
250
250
  interface ViewInput {
251
251
  disabledReasons: string[];
252
- sharedDisclaimerBulletPoints: Array<{icon: string, text: Common.UIString.LocalizedString|Lit.TemplateResult}>;
252
+ sharedDisclaimerBulletPoints: Array<{icon: string, text: Common.UIString.LocalizedString|Lit.LitTemplate}>;
253
253
  settingToParams: Map<Common.Settings.Setting<boolean>, AiSettingParams>;
254
254
  expandSetting(setting: Common.Settings.Setting<boolean>): void;
255
255
  toggleSetting(setting: Common.Settings.Setting<boolean>, ev: Event): void;
@@ -658,13 +658,11 @@ export class AISettingsTab extends UI.Widget.VBox {
658
658
  this.requestUpdate();
659
659
  }
660
660
 
661
- #getSharedDisclaimerBulletPoints(): Array<{icon: string, text: Common.UIString.LocalizedString|Lit.TemplateResult}> {
662
- const tosLink = UI.XLink.XLink.create(
663
- 'https://policies.google.com/terms', i18nString(UIStrings.termsOfService), undefined, undefined,
664
- 'terms-of-service');
665
- const privacyNoticeLink = UI.XLink.XLink.create(
666
- 'https://policies.google.com/privacy', i18nString(UIStrings.privacyNotice), undefined, undefined,
667
- 'privacy-notice');
661
+ #getSharedDisclaimerBulletPoints(): Array<{icon: string, text: Common.UIString.LocalizedString|Lit.LitTemplate}> {
662
+ const tosLink = html`<devtools-link href="https://policies.google.com/terms" .jslogContext=${'terms-of-service'}>${
663
+ i18nString(UIStrings.termsOfService)}</devtools-link>`;
664
+ const privacyNoticeLink = html`<devtools-link href="https://policies.google.com/privacy" .jslogContext=${
665
+ 'privacy-notice'}>${i18nString(UIStrings.privacyNotice)}</devtools-link>`;
668
666
  const noLogging = Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue ===
669
667
  Root.Runtime.GenAiEnterprisePolicyValue.ALLOW_WITHOUT_LOGGING;
670
668
 
@@ -680,10 +678,10 @@ export class AISettingsTab extends UI.Widget.VBox {
680
678
  },
681
679
  {
682
680
  icon: 'policy',
683
- text: html`${uiI18n.getFormatLocalizedString(str_, UIStrings.termsOfServicePrivacyNotice, {
681
+ text: uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.termsOfServicePrivacyNotice, {
684
682
  PH1: tosLink,
685
683
  PH2: privacyNoticeLink,
686
- })}`,
684
+ }),
687
685
  },
688
686
  ];
689
687
  }
@@ -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 i18n from '../../../../core/i18n/i18n.js';
@@ -488,13 +489,6 @@ export class UserAgentClientHintsForm extends HTMLElement {
488
489
  this.dispatchEvent(new ClientHintsChangeEvent());
489
490
  };
490
491
 
491
- #handleLinkPress = (event: KeyboardEvent): void => {
492
- if (event.code === 'Space' || event.code === 'Enter') {
493
- event.preventDefault();
494
- (event.target as HTMLAnchorElement).click();
495
- }
496
- };
497
-
498
492
  #handleSubmit = (event: Event): void => {
499
493
  event.preventDefault();
500
494
  if (this.#showSubmitButton) {
@@ -869,17 +863,15 @@ export class UserAgentClientHintsForm extends HTMLElement {
869
863
  ${i18nString(UIStrings.title)}
870
864
  </div>
871
865
  <devtools-icon tabindex=${this.#isFormDisabled ? '-1' : '0'} class=info-icon name=info aria-label=${i18nString(UIStrings.userAgentClientHintsInfo)} title=${i18nString(UIStrings.userAgentClientHintsInfo)}></devtools-icon>
872
- <x-link
866
+ <devtools-link
873
867
  tabindex=${this.#isFormDisabled ? '-1' : '0'}
874
868
  href="https://web.dev/user-agent-client-hints/"
875
- target="_blank"
876
869
  class="link"
877
- @keypress=${this.#handleLinkPress}
878
870
  aria-label=${i18nString(UIStrings.learnMore)}
879
- jslog=${VisualLogging.link('learn-more').track({click: true})}
871
+ .jslogContext=${'learn-more'}
880
872
  >
881
873
  ${i18nString(UIStrings.learnMore)}
882
- </x-link>
874
+ </devtools-link>
883
875
  </div>
884
876
  <form
885
877
  id="form-container"
@@ -141,7 +141,7 @@ UI.ViewManager.registerViewExtension({
141
141
  title: i18nLazyString(UIStrings.experiments),
142
142
  commandPrompt: i18nLazyString(UIStrings.showExperiments),
143
143
  order: 3,
144
- experiment: Root.Runtime.ExperimentName.ALL,
144
+ experiment: Root.ExperimentNames.ExperimentName.ALL,
145
145
  async loadView() {
146
146
  const Settings = await loadSettingsModule();
147
147
  return new Settings.SettingsScreen.ExperimentsSettingsTab();
@@ -3,6 +3,7 @@
3
3
  // found in the LICENSE file.
4
4
  /* eslint-disable @devtools/no-imperative-dom-api */
5
5
 
6
+ import '../../ui/kit/kit.js';
6
7
  import '../../ui/legacy/legacy.js';
7
8
 
8
9
  import * as Common from '../../core/common/common.js';
@@ -141,9 +142,9 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
141
142
  </div>
142
143
  <div class=link-wrapper>
143
144
  <devtools-icon name=open-externally class=link-icon></devtools-icon>
144
- <x-link class="link devtools-link" tabindex="0" href="https://goo.gle/devtools-loc"
145
- jslog=${VisualLogging.link('learn-more')}>${
146
- i18nString(UIStrings.learnMoreOnBreakpointTypes)}</x-link>
145
+ <devtools-link class="devtools-link" href="https://goo.gle/devtools-loc"
146
+ .jslogContext=${'learn-more'}>${
147
+ i18nString(UIStrings.learnMoreOnBreakpointTypes)}</devtools-link>
147
148
  </div>
148
149
  `,
149
150
  // clang-format on
@@ -74,7 +74,7 @@ export class FilteredUISourceCodeListProvider extends QuickOpen.FilteredListWidg
74
74
  if (this.uiSourceCodeIds.has(uiSourceCode.canonicalScriptId())) {
75
75
  return false;
76
76
  }
77
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.JUST_MY_CODE) &&
77
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.JUST_MY_CODE) &&
78
78
  Workspace.IgnoreListManager.IgnoreListManager.instance().isUserOrSourceMapIgnoreListedUISourceCode(
79
79
  uiSourceCode)) {
80
80
  return false;
@@ -179,7 +179,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
179
179
  private authoredNode?: NavigatorGroupTreeNode;
180
180
  private deployedNode?: NavigatorGroupTreeNode;
181
181
  private navigatorGroupByFolderSetting: Common.Settings.Setting<boolean>;
182
- private navigatorGroupByAuthoredExperiment?: Root.Runtime.ExperimentName;
182
+ private navigatorGroupByAuthoredExperiment?: Root.ExperimentNames.ExperimentName;
183
183
  #workspace!: Workspace.Workspace.WorkspaceImpl;
184
184
  private groupByFrame?: boolean;
185
185
  private groupByAuthored?: boolean;
@@ -217,7 +217,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
217
217
  this.navigatorGroupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigator-group-by-folder');
218
218
  this.navigatorGroupByFolderSetting.addChangeListener(this.groupingChanged.bind(this));
219
219
  if (enableAuthoredGrouping) {
220
- this.navigatorGroupByAuthoredExperiment = Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING;
220
+ this.navigatorGroupByAuthoredExperiment = Root.ExperimentNames.ExperimentName.AUTHORED_DEPLOYED_GROUPING;
221
221
  }
222
222
 
223
223
  Workspace.IgnoreListManager.IgnoreListManager.instance().addChangeListener(this.ignoreListChanged.bind(this));
@@ -457,7 +457,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
457
457
  }
458
458
 
459
459
  private addUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): void {
460
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.JUST_MY_CODE) &&
460
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.JUST_MY_CODE) &&
461
461
  Workspace.IgnoreListManager.IgnoreListManager.instance().isUserOrSourceMapIgnoreListedUISourceCode(
462
462
  uiSourceCode)) {
463
463
  return;
@@ -1188,7 +1188,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
1188
1188
  }
1189
1189
 
1190
1190
  private ignoreListChanged(): void {
1191
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.JUST_MY_CODE)) {
1191
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.JUST_MY_CODE)) {
1192
1192
  this.groupingChanged();
1193
1193
  } else {
1194
1194
  this.rootNode.updateTitleRecursive();
@@ -639,7 +639,7 @@ export class SourcesPanel extends UI.Panel.Panel implements
639
639
  }
640
640
 
641
641
  private addExperimentMenuItem(
642
- menuSection: UI.ContextMenu.Section, experiment: Root.Runtime.ExperimentName,
642
+ menuSection: UI.ContextMenu.Section, experiment: Root.ExperimentNames.ExperimentName,
643
643
  menuItem: Common.UIString.LocalizedString): void {
644
644
  /** menu handler **/
645
645
  function toggleExperiment(): void {
@@ -670,10 +670,11 @@ export class SourcesPanel extends UI.Panel.Panel implements
670
670
  {checked: groupByFolderSetting.get(), jslogContext: groupByFolderSetting.name});
671
671
 
672
672
  this.addExperimentMenuItem(
673
- contextMenu.viewSection(), Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING,
673
+ contextMenu.viewSection(), Root.ExperimentNames.ExperimentName.AUTHORED_DEPLOYED_GROUPING,
674
674
  i18nString(UIStrings.groupByAuthored));
675
675
  this.addExperimentMenuItem(
676
- contextMenu.viewSection(), Root.Runtime.ExperimentName.JUST_MY_CODE, i18nString(UIStrings.hideIgnoreListed));
676
+ contextMenu.viewSection(), Root.ExperimentNames.ExperimentName.JUST_MY_CODE,
677
+ i18nString(UIStrings.hideIgnoreListed));
677
678
  }
678
679
 
679
680
  updateLastModificationTime(): void {
@@ -968,7 +969,7 @@ export class SourcesPanel extends UI.Panel.Panel implements
968
969
  const eventTarget = (event.target as Node);
969
970
  if (!uiSourceCode.project().isServiceProject() &&
970
971
  !eventTarget.isSelfOrDescendant(this.navigatorTabbedLocation.widget().element) &&
971
- !(Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.JUST_MY_CODE) &&
972
+ !(Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.JUST_MY_CODE) &&
972
973
  Workspace.IgnoreListManager.IgnoreListManager.instance().isUserOrSourceMapIgnoreListedUISourceCode(
973
974
  uiSourceCode))) {
974
975
  contextMenu.revealSection().appendItem(
@@ -377,10 +377,10 @@ export class HeadersViewComponent extends HTMLElement {
377
377
  ${i18nString(UIStrings.addOverrideRule)}
378
378
  </devtools-button>
379
379
  <div class="learn-more-row">
380
- <x-link
380
+ <devtools-link
381
381
  href="https://goo.gle/devtools-override"
382
382
  class="link"
383
- jslog=${VisualLogging.link('learn-more').track({click: true})}>${i18nString(UIStrings.learnMore)}</x-link>
383
+ jslogContext=${'learn-more'}>${i18nString(UIStrings.learnMore)}</devtools-link>
384
384
  </div>
385
385
  `, this.#shadow, {host: this});
386
386
  // clang-format on
@@ -42,7 +42,7 @@ function isShowPostMessageEventsEnabled(): boolean {
42
42
  // cache is updated automatically.
43
43
  if (showPostMessageEvents === undefined) {
44
44
  showPostMessageEvents =
45
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_POST_MESSAGE_EVENTS);
45
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_POST_MESSAGE_EVENTS);
46
46
  }
47
47
  return showPostMessageEvents;
48
48
  }
@@ -327,7 +327,8 @@ export class CompatibilityTracksAppender {
327
327
  }
328
328
  };
329
329
  const threads = Trace.Handlers.Threads.threadsInTrace(this.#parsedTrace.data);
330
- const showAllEvents = Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
330
+ const showAllEvents =
331
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
331
332
 
332
333
  for (const {pid, tid, name, type, entries, tree} of threads) {
333
334
  if (this.#parsedTrace.data.Meta.traceIsGeneric) {
@@ -151,7 +151,8 @@ export class ThreadAppender implements TrackAppender {
151
151
  #headerAppended = false;
152
152
  readonly threadType: Trace.Handlers.Threads.ThreadType = Trace.Handlers.Threads.ThreadType.MAIN_THREAD;
153
153
  readonly isOnMainFrame: boolean;
154
- #showAllEventsEnabled = Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
154
+ #showAllEventsEnabled =
155
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
155
156
  #url = '';
156
157
  #headerNestingLevel: number|null = null;
157
158
  constructor(
@@ -229,7 +229,7 @@ export class TimelineController implements Tracing.TracingManager.TracingManager
229
229
  // 'disabled-by-default-v8.cpu_profiler'
230
230
  // └ default: on, option: enableJSSampling
231
231
  const categoriesArray = [
232
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_ALL_EVENTS) ? '*' : '-*',
232
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_ALL_EVENTS) ? '*' : '-*',
233
233
  Trace.Types.Events.Categories.Console,
234
234
  Trace.Types.Events.Categories.Loading,
235
235
  Trace.Types.Events.Categories.UserTiming,
@@ -251,14 +251,14 @@ export class TimelineController implements Tracing.TracingManager.TracingManager
251
251
  'navigation,rail',
252
252
  ];
253
253
 
254
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_V8_RUNTIME_CALL_STATS) &&
254
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_V8_RUNTIME_CALL_STATS) &&
255
255
  options.enableJSSampling) {
256
256
  categoriesArray.push(disabledByDefault('v8.runtime_stats_sampling'));
257
257
  }
258
258
  if (options.enableJSSampling) {
259
259
  categoriesArray.push(disabledByDefault('v8.cpu_profiler'));
260
260
  }
261
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_INVALIDATION_TRACKING)) {
261
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_INVALIDATION_TRACKING)) {
262
262
  categoriesArray.push(disabledByDefault('devtools.timeline.invalidationTracking'));
263
263
  }
264
264
  if (options.capturePictures) {
@@ -732,10 +732,11 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
732
732
 
733
733
  #instantiateNewModel(): Trace.TraceModel.Model {
734
734
  const config = Trace.Types.Configuration.defaults();
735
- config.showAllEvents = Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
735
+ config.showAllEvents =
736
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_ALL_EVENTS);
736
737
  config.includeRuntimeCallStats =
737
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_V8_RUNTIME_CALL_STATS);
738
- config.debugMode = Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_DEBUG_MODE);
738
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_V8_RUNTIME_CALL_STATS);
739
+ config.debugMode = Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_DEBUG_MODE);
739
740
 
740
741
  const traceEngineModel = Trace.TraceModel.Model.createWithAllHandlers(config);
741
742
 
@@ -2090,7 +2091,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2090
2091
 
2091
2092
  #applyActiveFilters(traceIsGeneric: boolean, exclusiveFilter: Trace.Extras.TraceFilter.TraceFilter|null = null):
2092
2093
  void {
2093
- if (traceIsGeneric || Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SHOW_ALL_EVENTS)) {
2094
+ if (traceIsGeneric ||
2095
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_SHOW_ALL_EVENTS)) {
2094
2096
  return;
2095
2097
  }
2096
2098
 
@@ -505,7 +505,7 @@ export class TimelineUIUtils {
505
505
  static getGetDebugModeEnabled(): boolean {
506
506
  if (TimelineUIUtils.debugModeEnabled === undefined) {
507
507
  TimelineUIUtils.debugModeEnabled =
508
- Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_DEBUG_MODE);
508
+ Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_DEBUG_MODE);
509
509
  }
510
510
  return TimelineUIUtils.debugModeEnabled;
511
511
  }
@@ -1527,7 +1527,7 @@ export class TimelineUIUtils {
1527
1527
  await TimelineUIUtils.generateCauses(event, contentHelper, parsedTrace);
1528
1528
  }
1529
1529
 
1530
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_DEBUG_MODE)) {
1530
+ if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.TIMELINE_DEBUG_MODE)) {
1531
1531
  TimelineUIUtils.renderEventJson(event, contentHelper);
1532
1532
  }
1533
1533
 
@@ -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/components/tooltips/tooltips.js';
7
8
  import '../../../ui/components/buttons/buttons.js';
8
9
 
@@ -14,7 +15,6 @@ import * as Dialogs from '../../../ui/components/dialogs/dialogs.js';
14
15
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
15
16
  import * as UI from '../../../ui/legacy/legacy.js';
16
17
  import * as Lit from '../../../ui/lit/lit.js';
17
- import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
18
18
 
19
19
  import exportTraceOptionsStyles from './exportTraceOptions.css.js';
20
20
 
@@ -299,12 +299,12 @@ export class ExportTraceOptions extends HTMLElement {
299
299
  ${this.#renderCheckbox('compress-with-gzip', this.#shouldCompressCheckbox, i18nString(UIStrings.shouldCompress), this.#state.shouldCompress)}
300
300
  <div class='export-trace-options-row export-trace-options-row-last'>
301
301
  <div class="export-trace-explanation">
302
- <x-link
302
+ <devtools-link
303
303
  href="https://developer.chrome.com/docs/devtools/performance/save-trace"
304
304
  class=devtools-link
305
- jslog=${VisualLogging.link().track({click: true, keydown:'Enter|Space'}).context('save-trace-explanation')}>
305
+ .jslogContext=${'save-trace-explanation'}>
306
306
  ${i18nString(UIStrings.explanation)}
307
- </x-link>
307
+ </devtools-link>
308
308
  </div>
309
309
  <devtools-button
310
310
  class="setup-button"
@@ -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 './OriginMap.js';
7
8
 
8
9
  import * as i18n from '../../../core/i18n/i18n.js';
@@ -12,7 +13,6 @@ import * as Dialogs from '../../../ui/components/dialogs/dialogs.js';
12
13
  import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
13
14
  import * as Input from '../../../ui/components/input/input.js';
14
15
  import * as uiI18n from '../../../ui/i18n/i18n.js';
15
- import * as UI from '../../../ui/legacy/legacy.js';
16
16
  import * as Lit from '../../../ui/lit/lit.js';
17
17
  import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
18
18
 
@@ -332,10 +332,6 @@ export class FieldSettingsDialog extends HTMLElement {
332
332
  }
333
333
 
334
334
  #render = (): void => {
335
- const linkEl =
336
- UI.XLink.XLink.create('https://developer.chrome.com/docs/crux', i18n.i18n.lockedString('Chrome UX Report'));
337
- const descriptionEl = uiI18n.getFormatLocalizedString(str_, UIStrings.fetchAggregated, {PH1: linkEl});
338
-
339
335
  // clang-format off
340
336
  const output = html`
341
337
  <style>${fieldSettingsDialogStyles}</style>
@@ -356,7 +352,18 @@ export class FieldSettingsDialog extends HTMLElement {
356
352
  })}
357
353
  >
358
354
  <div class="content">
359
- <div>${descriptionEl}</div>
355
+ <div>
356
+ ${uiI18n.getFormatLocalizedStringTemplate(
357
+ str_,
358
+ UIStrings.fetchAggregated,
359
+ {
360
+ PH1: html`<devtools-link
361
+ href="https://developer.chrome.com/docs/crux"
362
+ >${i18n.i18n.lockedString('Chrome UX Report')}</devtools-link
363
+ >`,
364
+ },
365
+ )}
366
+ </div>
360
367
  <div class="privacy-disclosure">
361
368
  <h3 class="section-title">${i18nString(UIStrings.privacyDisclosure)}</h3>
362
369
  <div>${i18nString(UIStrings.whenPerformanceIsShown)}</div>
@@ -867,10 +867,10 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
867
867
  tmp.searchParams.set('device', device);
868
868
  const cruxVis = `${tmp.origin}/#/${tmp.search}`;
869
869
  return html`
870
- (<x-link href=${cruxVis}
870
+ (<devtools-link href=${cruxVis}
871
871
  class="local-field-link"
872
872
  title=${i18nString(UIStrings.fieldDataHistoryTooltip)}
873
- >${i18nString(UIStrings.fieldDataHistoryLink)}</x-link>)
873
+ >${i18nString(UIStrings.fieldDataHistoryLink)}</devtools-link>)
874
874
  `;
875
875
  }
876
876
 
@@ -904,13 +904,17 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
904
904
  return this.#renderCollectionPeriod();
905
905
  }
906
906
 
907
- const linkEl =
908
- UI.XLink.XLink.create('https://developer.chrome.com/docs/crux', i18n.i18n.lockedString('Chrome UX Report'));
909
- const messageEl = uiI18n.getFormatLocalizedString(str_, UIStrings.seeHowYourLocalMetricsCompare, {PH1: linkEl});
910
-
907
+ // clang-format off
911
908
  return html`
912
- <div class="field-data-message">${messageEl}</div>
909
+ <div class="field-data-message">
910
+ ${uiI18n.getFormatLocalizedStringTemplate(
911
+ str_,
912
+ UIStrings.seeHowYourLocalMetricsCompare,
913
+ { PH1: html`<devtools-link href="https://developer.chrome.com/docs/crux">${i18n.i18n.lockedString('Chrome UX Report')}</devtools-link>` },
914
+ )}
915
+ </div>
913
916
  `;
917
+ // clang-format on
914
918
  }
915
919
 
916
920
  #renderLogSection(): Lit.LitTemplate {
@@ -1174,11 +1178,11 @@ export class LiveMetricsView extends LegacyWrapper.LegacyWrapper.WrappableCompon
1174
1178
  ${this.#renderInpCard()}
1175
1179
  </div>
1176
1180
  </div>
1177
- <x-link
1181
+ <devtools-link
1178
1182
  href=${helpLink}
1179
1183
  class="local-field-link"
1180
1184
  title=${i18nString(UIStrings.localFieldLearnMoreTooltip)}
1181
- >${i18nString(UIStrings.localFieldLearnMoreLink)}</x-link>
1185
+ >${i18nString(UIStrings.localFieldLearnMoreLink)}</devtools-link>
1182
1186
  ${this.#renderLogSection()}
1183
1187
  </main>
1184
1188
  <aside class="next-steps" aria-labelledby="next-steps-section-title">
@@ -34,7 +34,7 @@
34
34
  white-space: normal;
35
35
  }
36
36
 
37
- x-link {
37
+ devtools-link {
38
38
  color: var(--sys-color-primary);
39
39
  text-decoration-line: underline;
40
40
  }
@@ -104,7 +104,7 @@ input[type="text"][disabled] {
104
104
  color: var(--color-error-text);
105
105
  }
106
106
 
107
- x-link {
107
+ devtools-link {
108
108
  color: var(--sys-color-primary);
109
109
  text-decoration-line: underline;
110
110
  }
@@ -69,7 +69,6 @@ interface ViewInput {
69
69
  internalName: string;
70
70
  model: InsightModel;
71
71
  selected: boolean;
72
- isAIAssistanceContext: boolean;
73
72
  showAskAI: boolean;
74
73
  estimatedSavingsString: string|null;
75
74
  estimatedSavingsAriaLabel: string|null;
@@ -88,7 +87,6 @@ const DEFAULT_VIEW: View = (input, output, target) => {
88
87
  selected,
89
88
  estimatedSavingsString,
90
89
  estimatedSavingsAriaLabel,
91
- isAIAssistanceContext,
92
90
  showAskAI,
93
91
  dispatchInsightToggle,
94
92
  renderContent,
@@ -98,8 +96,7 @@ const DEFAULT_VIEW: View = (input, output, target) => {
98
96
 
99
97
  const containerClasses = Lit.Directives.classMap({
100
98
  insight: true,
101
- closed: !selected || isAIAssistanceContext,
102
- 'ai-assistance-context': isAIAssistanceContext,
99
+ closed: !selected,
103
100
  });
104
101
 
105
102
  let ariaLabel = `${i18nString(UIStrings.viewDetails, {PH1: model.title})}`;
@@ -139,10 +136,6 @@ const DEFAULT_VIEW: View = (input, output, target) => {
139
136
  }
140
137
 
141
138
  function renderHoverIcon(): Lit.LitTemplate {
142
- if (isAIAssistanceContext) {
143
- return Lit.nothing;
144
- }
145
-
146
139
  const containerClasses = Lit.Directives.classMap({
147
140
  'insight-hover-icon': true,
148
141
  active: selected,
@@ -205,10 +198,6 @@ export interface BaseInsightData {
205
198
  export abstract class BaseInsightComponent<T extends InsightModel> extends UI.Widget.Widget {
206
199
  #view: View;
207
200
  abstract internalName: string;
208
-
209
- // Tracks if this component is rendered withing the AI assistance panel.
210
- // Currently only relevant to GreenDev.
211
- #isAIAssistanceContext = false;
212
201
  #selected = false;
213
202
  #model: T|null = null;
214
203
  #agentFocus: AIAssistance.AIContext.AgentFocus|null = null;
@@ -243,11 +232,6 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends UI.Wi
243
232
  return false;
244
233
  }
245
234
 
246
- set isAIAssistanceContext(isAIAssistanceContext: boolean) {
247
- this.#isAIAssistanceContext = isAIAssistanceContext;
248
- this.requestUpdate();
249
- }
250
-
251
235
  set selected(selected: boolean) {
252
236
  if (!this.#selected && selected) {
253
237
  const options = this.getOverlayOptionsForInitialOverlays();
@@ -408,7 +392,6 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends UI.Wi
408
392
  selected: this.#selected,
409
393
  estimatedSavingsString: this.getEstimatedSavingsString(),
410
394
  estimatedSavingsAriaLabel: this.#getEstimatedSavingsAriaLabel(),
411
- isAIAssistanceContext: this.#isAIAssistanceContext,
412
395
  showAskAI: this.#canShowAskAI(),
413
396
  dispatchInsightToggle: () => this.#dispatchInsightToggle(),
414
397
  renderContent: () => this.renderContent(),
@@ -514,7 +497,7 @@ export abstract class BaseInsightComponent<T extends InsightModel> extends UI.Wi
514
497
  }
515
498
 
516
499
  #canShowAskAI(): boolean {
517
- if (this.#isAIAssistanceContext || !this.hasAskAiSupport()) {
500
+ if (!this.hasAskAiSupport()) {
518
501
  return false;
519
502
  }
520
503
 
@@ -61,9 +61,9 @@ export class InsightRenderer {
61
61
  renderInsightToWidgetElement(
62
62
  parsedTrace: Trace.TraceModel.ParsedTrace, insightSet: Trace.Insights.Types.InsightSet,
63
63
  model: Trace.Insights.Types.InsightModel, insightName: string,
64
- options: Partial<Pick<
65
- BaseInsightComponent<Trace.Insights.Types.InsightModel>,
66
- 'selected'|'agentFocus'|'fieldMetrics'|'isAIAssistanceContext'>>): InsightWidgetElement {
64
+ options: Partial<
65
+ Pick<BaseInsightComponent<Trace.Insights.Types.InsightModel>, 'selected'|'agentFocus'|'fieldMetrics'>>):
66
+ InsightWidgetElement {
67
67
  let widgetElement = this.#insightWidgetCache.get(model);
68
68
  if (!widgetElement) {
69
69
  widgetElement = document.createElement('devtools-widget') as InsightWidgetElement;
@@ -85,7 +85,6 @@ export class InsightRenderer {
85
85
  insightSetKey: insightSet.id,
86
86
  agentFocus: options.agentFocus ?? null,
87
87
  fieldMetrics: options.fieldMetrics ?? null,
88
- isAIAssistanceContext: options.isAIAssistanceContext ?? false,
89
88
  });
90
89
 
91
90
  return widgetElement;
@@ -60,11 +60,6 @@
60
60
  }
61
61
  }
62
62
 
63
- .insight.ai-assistance-context {
64
- display: block;
65
- min-width: 200px;
66
- }
67
-
68
63
  .insight-hover-icon {
69
64
  position: absolute;
70
65
  top: var(--sys-size-5);
@@ -300,7 +300,7 @@
300
300
  font-weight: var(--ref-typeface-weight-medium);
301
301
  }
302
302
 
303
- x-link {
303
+ devtools-link {
304
304
  color: var(--sys-color-primary);
305
305
  text-decoration-line: underline;
306
306
  }
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: https://chromium.googlesource.com/chromium/src
3
3
  Version: N/A
4
- Revision: 68ce69fc7f71cb8b57403cba5397e1d12753b37c
4
+ Revision: 1eaa7f85927d5066cf8a8c7dfc076e8b2b3665d6
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -83,6 +83,10 @@ button {
83
83
  border: none;
84
84
  overflow: hidden;
85
85
 
86
+ devtools-icon {
87
+ color: var(--override-button-icon-color, var(--icon-default));
88
+ }
89
+
86
90
  &.small {
87
91
  --button-height: var(--sys-size-9);
88
92
  --button-width: var(--sys-size-9);