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
@@ -5,7 +5,6 @@
5
5
 
6
6
  import '../../../../ui/components/report_view/report_view.js';
7
7
  import '../../../../ui/components/request_link_icon/request_link_icon.js';
8
- import '../../../../ui/legacy/components/utils/utils.js';
9
8
 
10
9
  import * as Common from '../../../../core/common/common.js';
11
10
  import * as i18n from '../../../../core/i18n/i18n.js';
@@ -15,6 +14,8 @@ import * as SDK from '../../../../core/sdk/sdk.js';
15
14
  import * as Protocol from '../../../../generated/protocol.js';
16
15
  import * as Logs from '../../../../models/logs/logs.js';
17
16
  import * as Buttons from '../../../../ui/components/buttons/buttons.js';
17
+ import * as LegacyWrapper from '../../../../ui/components/legacy_wrapper/legacy_wrapper.js';
18
+ import * as RenderCoordinator from '../../../../ui/components/render_coordinator/render_coordinator.js';
18
19
  import * as UI from '../../../../ui/legacy/legacy.js';
19
20
  import * as Lit from '../../../../ui/lit/lit.js';
20
21
  import * as VisualLogging from '../../../../ui/visual_logging/visual_logging.js';
@@ -155,278 +156,284 @@ interface PreloadingDetailsReportViewDataInternal {
155
156
  requestResolver?: Logs.RequestResolver.RequestResolver;
156
157
  }
157
158
 
158
- export interface ViewInput {
159
- data: PreloadingDetailsReportViewData;
160
- onRevealRuleSet: (ruleSet: Protocol.Preload.RuleSet) => void;
161
- }
162
- export type ViewOutput = unknown;
163
- export type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
159
+ export class PreloadingDetailsReportView extends LegacyWrapper.LegacyWrapper.WrappableComponent<UI.Widget.VBox> {
160
+ readonly #shadow = this.attachShadow({mode: 'open'});
161
+ #data: PreloadingDetailsReportViewData = null;
162
+
163
+ set data(data: PreloadingDetailsReportViewData) {
164
+ this.#data = data;
165
+ void this.#render();
166
+ }
164
167
 
165
- function url(data: PreloadingDetailsReportViewDataInternal): Lit.LitTemplate {
166
- const attempt = data.pipeline.getOriginallyTriggered();
168
+ async #render(): Promise<void> {
169
+ await RenderCoordinator.write('PreloadingDetailsReportView render', () => {
170
+ if (this.#data === null) {
171
+ // Disabled until https://crbug.com/1079231 is fixed.
172
+ // clang-format off
173
+ Lit.render(html`
174
+ <style>${preloadingDetailsReportViewStyles}</style>
175
+ <style>${UI.inspectorCommonStyles}</style>
176
+ <div class="empty-state">
177
+ <span class="empty-state-header">${i18nString(UIStrings.noElementSelected)}</span>
178
+ <span class="empty-state-description">${i18nString(UIStrings.selectAnElementForMoreDetails)}</span>
179
+ </div>
180
+ `, this.#shadow, {host: this});
181
+ // clang-format on
182
+ return;
183
+ }
167
184
 
168
- const prefetchStatus = data.pipeline.getPrefetch()?.status;
185
+ const pipeline = this.#data.pipeline;
186
+ const pageURL = this.#data.pageURL;
187
+ const isFallbackToPrefetch = pipeline.getPrerender()?.status === SDK.PreloadingModel.PreloadingStatus.FAILURE &&
188
+ (pipeline.getPrefetch()?.status === SDK.PreloadingModel.PreloadingStatus.READY ||
189
+ pipeline.getPrefetch()?.status === SDK.PreloadingModel.PreloadingStatus.SUCCESS);
190
+
191
+ // Disabled until https://crbug.com/1079231 is fixed.
192
+ // clang-format off
193
+ Lit.render(html`
194
+ <style>${preloadingDetailsReportViewStyles}</style>
195
+ <style>${UI.inspectorCommonStyles}</style>
196
+ <devtools-report
197
+ .data=${{reportTitle: 'Speculative Loading Attempt'}}
198
+ jslog=${VisualLogging.section('preloading-details')}>
199
+ <devtools-report-section-header>${i18nString(UIStrings.detailsDetailedInformation)}</devtools-report-section-header>
200
+
201
+ ${this.#url()}
202
+ ${this.#action(isFallbackToPrefetch)}
203
+ ${this.#status(isFallbackToPrefetch)}
204
+ ${this.#targetHint()}
205
+ ${this.#maybePrefetchFailureReason()}
206
+ ${this.#maybePrerenderFailureReason()}
207
+
208
+ ${this.#data.ruleSets.map(ruleSet => this.#renderRuleSet(ruleSet, pageURL))}
209
+ </devtools-report>
210
+ `, this.#shadow, {host: this});
211
+ // clang-format on
212
+ });
213
+ }
214
+
215
+ #url(): Lit.LitTemplate {
216
+ assertNotNullOrUndefined(this.#data);
217
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
218
+
219
+ const prefetchStatus = this.#data.pipeline.getPrefetch()?.status;
220
+
221
+ let value;
222
+ if (attempt.action === Protocol.Preload.SpeculationAction.Prefetch && attempt.requestId !== undefined &&
223
+ prefetchStatus !== SDK.PreloadingModel.PreloadingStatus.NOT_TRIGGERED) {
224
+ // Disabled until https://crbug.com/1079231 is fixed.
225
+ // clang-format off
226
+ const {requestId, key: {url}} = attempt;
227
+ const affectedRequest: {requestId?: Protocol.Network.RequestId, url?: string} = {requestId, url};
228
+ value = html`
229
+ <devtools-request-link-icon
230
+ .data=${
231
+ {
232
+ affectedRequest,
233
+ requestResolver: this.#data.requestResolver || new Logs.RequestResolver.RequestResolver(),
234
+ displayURL: true,
235
+ urlToDisplay: url,
236
+ }
237
+ }
238
+ >
239
+ </devtools-request-link-icon>
240
+ `;
241
+ } else {
242
+ // Disabled until https://crbug.com/1079231 is fixed.
243
+ // clang-format off
244
+ value = html`
245
+ <div class="text-ellipsis" title=${attempt.key.url}>${attempt.key.url}</div>
246
+ `;
247
+ // clang-format on
248
+ }
169
249
 
170
- let value;
171
- if (attempt.action === Protocol.Preload.SpeculationAction.Prefetch && attempt.requestId !== undefined &&
172
- prefetchStatus !== SDK.PreloadingModel.PreloadingStatus.NOT_TRIGGERED) {
173
250
  // Disabled until https://crbug.com/1079231 is fixed.
174
251
  // clang-format off
175
- const {requestId, key: {url}} = attempt;
176
- const affectedRequest: {requestId?: Protocol.Network.RequestId, url?: string} = {requestId, url};
177
- value = html`
178
- <devtools-request-link-icon
179
- .data=${
180
- {
181
- affectedRequest,
182
- requestResolver: data.requestResolver || new Logs.RequestResolver.RequestResolver(),
183
- displayURL: true,
184
- urlToDisplay: url,
185
- }
186
- }
187
- >
188
- </devtools-request-link-icon>
252
+ return html`
253
+ <devtools-report-key>${i18n.i18n.lockedString('URL')}</devtools-report-key>
254
+ <devtools-report-value>
255
+ ${value}
256
+ </devtools-report-value>
189
257
  `;
190
- } else {
191
- value = html`<div class="text-ellipsis" title=${attempt.key.url}>${attempt.key.url}</div>`;
258
+ // clang-format on
192
259
  }
193
260
 
194
- // Disabled until https://crbug.com/1079231 is fixed.
195
- // clang-format off
196
- return html`
197
- <devtools-report-key>${i18n.i18n.lockedString('URL')}</devtools-report-key>
198
- <devtools-report-value>
199
- ${value}
200
- </devtools-report-value>
201
- `;
202
- // clang-format on
203
- }
204
-
205
- function isPrerenderLike(speculationAction: Protocol.Preload.SpeculationAction): boolean {
206
- return [
207
- Protocol.Preload.SpeculationAction.Prerender, Protocol.Preload.SpeculationAction.PrerenderUntilScript
208
- ].includes(speculationAction);
209
- }
210
-
211
- function action(data: PreloadingDetailsReportViewDataInternal, isFallbackToPrefetch: boolean): Lit.LitTemplate {
212
- const attempt = data.pipeline.getOriginallyTriggered();
213
-
214
- const action = PreloadingString.capitalizedAction(attempt.action);
215
-
216
- let maybeFallback: Lit.LitTemplate = Lit.nothing;
217
- if (isFallbackToPrefetch) {
218
- maybeFallback = html`${i18nString(UIStrings.automaticallyFellBackToPrefetch)}`;
261
+ #isPrerenderLike(speculationAction: Protocol.Preload.SpeculationAction): boolean {
262
+ return [
263
+ Protocol.Preload.SpeculationAction.Prerender, Protocol.Preload.SpeculationAction.PrerenderUntilScript
264
+ ].includes(speculationAction);
219
265
  }
220
266
 
221
- let maybeInspectButton: Lit.LitTemplate = Lit.nothing;
222
- (() => {
223
- if (!isPrerenderLike(attempt.action)) {
224
- return;
225
- }
267
+ #action(isFallbackToPrefetch: boolean): Lit.LitTemplate {
268
+ assertNotNullOrUndefined(this.#data);
269
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
270
+
271
+ const action = PreloadingString.capitalizedAction(attempt.action);
226
272
 
227
- const target = SDK.TargetManager.TargetManager.instance().primaryPageTarget();
228
- if (target === null) {
229
- return;
273
+ let maybeFallback: Lit.LitTemplate = Lit.nothing;
274
+ if (isFallbackToPrefetch) {
275
+ maybeFallback = html`${i18nString(UIStrings.automaticallyFellBackToPrefetch)}`;
230
276
  }
231
277
 
232
- const prerenderTarget = SDK.TargetManager.TargetManager.instance().targets().find(
233
- child => child.targetInfo()?.subtype === 'prerender' && child.inspectedURL() === attempt.key.url);
278
+ let maybeInspectButton: Lit.LitTemplate = Lit.nothing;
279
+ (() => {
280
+ if (!this.#isPrerenderLike(attempt.action)) {
281
+ return;
282
+ }
234
283
 
235
- const disabled = (prerenderTarget === undefined);
236
- const inspect = (): void => {
237
- if (prerenderTarget === undefined) {
284
+ const target = SDK.TargetManager.TargetManager.instance().primaryPageTarget();
285
+ if (target === null) {
238
286
  return;
239
287
  }
240
- UI.Context.Context.instance().setFlavor(SDK.Target.Target, prerenderTarget);
241
- };
288
+
289
+ const prerenderTarget = SDK.TargetManager.TargetManager.instance().targets().find(
290
+ child => child.targetInfo()?.subtype === 'prerender' && child.inspectedURL() === attempt.key.url);
291
+
292
+ const disabled = (prerenderTarget === undefined);
293
+ const inspect = (): void => {
294
+ if (prerenderTarget === undefined) {
295
+ return;
296
+ }
297
+ UI.Context.Context.instance().setFlavor(SDK.Target.Target, prerenderTarget);
298
+ };
299
+ // Disabled until https://crbug.com/1079231 is fixed.
300
+ // clang-format off
301
+ maybeInspectButton = html`
302
+ <devtools-button
303
+ @click=${inspect}
304
+ .title=${i18nString(UIStrings.buttonClickToInspect)}
305
+ .size=${Buttons.Button.Size.SMALL}
306
+ .variant=${Buttons.Button.Variant.OUTLINED}
307
+ .disabled=${disabled}
308
+ jslog=${VisualLogging.action('inspect-prerendered-page').track({click: true})}
309
+ >
310
+ ${i18nString(UIStrings.buttonInspect)}
311
+ </devtools-button>
312
+ `;
313
+ // clang-format on
314
+ })();
315
+
242
316
  // Disabled until https://crbug.com/1079231 is fixed.
243
317
  // clang-format off
244
- maybeInspectButton = html`
245
- <devtools-button
246
- @click=${inspect}
247
- .title=${i18nString(UIStrings.buttonClickToInspect)}
248
- .size=${Buttons.Button.Size.SMALL}
249
- .variant=${Buttons.Button.Variant.OUTLINED}
250
- .disabled=${disabled}
251
- jslog=${VisualLogging.action('inspect-prerendered-page').track({click: true})}
252
- >
253
- ${i18nString(UIStrings.buttonInspect)}
254
- </devtools-button>
318
+ return html`
319
+ <devtools-report-key>${i18nString(UIStrings.detailsAction)}</devtools-report-key>
320
+ <devtools-report-value>
321
+ <div class="text-ellipsis" title="">
322
+ ${action} ${maybeFallback} ${maybeInspectButton}
323
+ </div>
324
+ </devtools-report-value>
255
325
  `;
256
326
  // clang-format on
257
- })();
327
+ }
258
328
 
259
- // Disabled until https://crbug.com/1079231 is fixed.
260
- // clang-format off
261
- return html`
262
- <devtools-report-key>${i18nString(UIStrings.detailsAction)}</devtools-report-key>
263
- <devtools-report-value>
264
- <div class="text-ellipsis" title="">
265
- ${action} ${maybeFallback} ${maybeInspectButton}
266
- </div>
267
- </devtools-report-value>
268
- `;
269
- // clang-format on
270
- }
329
+ #status(isFallbackToPrefetch: boolean): Lit.LitTemplate {
330
+ assertNotNullOrUndefined(this.#data);
331
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
271
332
 
272
- function status(data: PreloadingDetailsReportViewDataInternal, isFallbackToPrefetch: boolean): Lit.LitTemplate {
273
- const attempt = data.pipeline.getOriginallyTriggered();
333
+ const detailedStatus = isFallbackToPrefetch ? i18nString(UIStrings.detailedStatusFallbackToPrefetch) :
334
+ PreloadingUIUtils.detailedStatus(attempt);
274
335
 
275
- const detailedStatus = isFallbackToPrefetch ? i18nString(UIStrings.detailedStatusFallbackToPrefetch) :
276
- PreloadingUIUtils.detailedStatus(attempt);
336
+ return html`
337
+ <devtools-report-key>${i18nString(UIStrings.detailsStatus)}</devtools-report-key>
338
+ <devtools-report-value>
339
+ ${detailedStatus}
340
+ </devtools-report-value>
341
+ `;
342
+ }
277
343
 
278
- return html`
279
- <devtools-report-key>${i18nString(UIStrings.detailsStatus)}</devtools-report-key>
280
- <devtools-report-value>
281
- ${detailedStatus}
282
- </devtools-report-value>
283
- `;
284
- }
344
+ #maybePrefetchFailureReason(): Lit.LitTemplate {
345
+ assertNotNullOrUndefined(this.#data);
346
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
285
347
 
286
- function maybePrefetchFailureReason(data: PreloadingDetailsReportViewDataInternal): Lit.LitTemplate {
287
- const attempt = data.pipeline.getOriginallyTriggered();
348
+ if (attempt.action !== Protocol.Preload.SpeculationAction.Prefetch) {
349
+ return Lit.nothing;
350
+ }
288
351
 
289
- if (attempt.action !== Protocol.Preload.SpeculationAction.Prefetch) {
290
- return Lit.nothing;
291
- }
352
+ const failureDescription = prefetchFailureReason(attempt);
353
+ if (failureDescription === null) {
354
+ return Lit.nothing;
355
+ }
292
356
 
293
- const failureDescription = prefetchFailureReason(attempt);
294
- if (failureDescription === null) {
295
- return Lit.nothing;
357
+ return html`
358
+ <devtools-report-key>${i18nString(UIStrings.detailsFailureReason)}</devtools-report-key>
359
+ <devtools-report-value>
360
+ ${failureDescription}
361
+ </devtools-report-value>
362
+ `;
296
363
  }
297
364
 
298
- return html`
299
- <devtools-report-key>${i18nString(UIStrings.detailsFailureReason)}</devtools-report-key>
300
- <devtools-report-value>
301
- ${failureDescription}
302
- </devtools-report-value>
303
- `;
304
- }
365
+ #targetHint(): Lit.LitTemplate {
366
+ assertNotNullOrUndefined(this.#data);
367
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
368
+ const hasTargetHint = this.#isPrerenderLike(attempt.action) && attempt.key.targetHint !== undefined;
369
+ if (!hasTargetHint) {
370
+ return Lit.nothing;
371
+ }
305
372
 
306
- function targetHint(data: PreloadingDetailsReportViewDataInternal): Lit.LitTemplate {
307
- const attempt = data.pipeline.getOriginallyTriggered();
308
- const hasTargetHint = isPrerenderLike(attempt.action) && attempt.key.targetHint !== undefined;
309
- if (!hasTargetHint) {
310
- return Lit.nothing;
373
+ return html`
374
+ <devtools-report-key>${i18nString(UIStrings.detailsTargetHint)}</devtools-report-key>
375
+ <devtools-report-value>
376
+ ${PreloadingUIUtils.detailedTargetHint(attempt.key)}
377
+ </devtools-report-value>
378
+ `;
311
379
  }
312
380
 
313
- return html`
314
- <devtools-report-key>${i18nString(UIStrings.detailsTargetHint)}</devtools-report-key>
315
- <devtools-report-value>
316
- ${PreloadingUIUtils.detailedTargetHint(attempt.key)}
317
- </devtools-report-value>
318
- `;
319
- }
381
+ #maybePrerenderFailureReason(): Lit.LitTemplate {
382
+ assertNotNullOrUndefined(this.#data);
383
+ const attempt = this.#data.pipeline.getOriginallyTriggered();
320
384
 
321
- function maybePrerenderFailureReason(data: PreloadingDetailsReportViewDataInternal): Lit.LitTemplate {
322
- const attempt = data.pipeline.getOriginallyTriggered();
385
+ if (!this.#isPrerenderLike(attempt.action)) {
386
+ return Lit.nothing;
387
+ }
323
388
 
324
- if (!isPrerenderLike(attempt.action)) {
325
- return Lit.nothing;
326
- }
389
+ const failureReason = prerenderFailureReason(
390
+ attempt as SDK.PreloadingModel.PrerenderAttempt | SDK.PreloadingModel.PrerenderUntilScriptAttempt);
391
+ if (failureReason === null) {
392
+ return Lit.nothing;
393
+ }
327
394
 
328
- const failureReason = prerenderFailureReason(
329
- attempt as SDK.PreloadingModel.PrerenderAttempt | SDK.PreloadingModel.PrerenderUntilScriptAttempt);
330
- if (failureReason === null) {
331
- return Lit.nothing;
395
+ return html`
396
+ <devtools-report-key>${i18nString(UIStrings.detailsFailureReason)}</devtools-report-key>
397
+ <devtools-report-value>
398
+ ${failureReason}
399
+ </devtools-report-value>
400
+ `;
332
401
  }
333
402
 
334
- return html`
335
- <devtools-report-key>${i18nString(UIStrings.detailsFailureReason)}</devtools-report-key>
336
- <devtools-report-value>
337
- ${failureReason}
338
- </devtools-report-value>
339
- `;
340
- }
403
+ #renderRuleSet(ruleSet: Protocol.Preload.RuleSet, pageURL: Platform.DevToolsPath.UrlString): Lit.LitTemplate {
404
+ const revealRuleSetView = (): void => {
405
+ void Common.Revealer.reveal(new PreloadingHelper.PreloadingForward.RuleSetView(ruleSet.id));
406
+ };
407
+ const location = ruleSetLocationShort(ruleSet, pageURL);
341
408
 
342
- const DEFAULT_VIEW: View = ({data, onRevealRuleSet}, _, target) => {
343
- if (data === null) {
344
409
  // Disabled until https://crbug.com/1079231 is fixed.
345
410
  // clang-format off
346
- Lit.render(html`
347
- <style>${preloadingDetailsReportViewStyles}</style>
348
- <style>${UI.inspectorCommonStyles}</style>
349
- <div class="empty-state">
350
- <span class="empty-state-header">${i18nString(UIStrings.noElementSelected)}</span>
351
- <span class="empty-state-description">${i18nString(UIStrings.selectAnElementForMoreDetails)}</span>
352
- </div>
353
- `, target, {host: target});
411
+ return html`
412
+ <devtools-report-key>${i18nString(UIStrings.detailsRuleSet)}</devtools-report-key>
413
+ <devtools-report-value>
414
+ <div class="text-ellipsis" title="">
415
+ <button class="link" role="link"
416
+ @click=${revealRuleSetView}
417
+ title=${i18nString(UIStrings.buttonClickToRevealRuleSet)}
418
+ style=${Lit.Directives.styleMap({
419
+ color: 'var(--sys-color-primary)',
420
+ 'text-decoration': 'underline',
421
+ })}
422
+ jslog=${VisualLogging.action('reveal-rule-set').track({click: true})}
423
+ >
424
+ ${location}
425
+ </button>
426
+ </div>
427
+ </devtools-report-value>
428
+ `;
354
429
  // clang-format on
355
- return;
356
- }
357
-
358
- const pipeline = data.pipeline;
359
- const pageURL = data.pageURL;
360
- const isFallbackToPrefetch = pipeline.getPrerender()?.status === SDK.PreloadingModel.PreloadingStatus.FAILURE &&
361
- (pipeline.getPrefetch()?.status === SDK.PreloadingModel.PreloadingStatus.READY ||
362
- pipeline.getPrefetch()?.status === SDK.PreloadingModel.PreloadingStatus.SUCCESS);
363
-
364
- // Disabled until https://crbug.com/1079231 is fixed.
365
- // clang-format off
366
- Lit.render(html`
367
- <style>${preloadingDetailsReportViewStyles}</style>
368
- <style>${UI.inspectorCommonStyles}</style>
369
- <devtools-report
370
- .data=${{reportTitle: 'Speculative Loading Attempt'}}
371
- jslog=${VisualLogging.section('preloading-details')}>
372
- <devtools-report-section-header>${i18nString(UIStrings.detailsDetailedInformation)}</devtools-report-section-header>
373
-
374
- ${url(data)}
375
- ${action(data, isFallbackToPrefetch)}
376
- ${status(data, isFallbackToPrefetch)}
377
- ${targetHint(data)}
378
- ${maybePrefetchFailureReason(data)}
379
- ${maybePrerenderFailureReason(data)}
380
-
381
- ${data.ruleSets.map(ruleSet => {
382
- const location = ruleSetLocationShort(ruleSet, pageURL);
383
- return html`
384
- <devtools-report-key>${i18nString(UIStrings.detailsRuleSet)}</devtools-report-key>
385
- <devtools-report-value>
386
- <div class="text-ellipsis" title="">
387
- <button class="link" role="link"
388
- @click=${() => onRevealRuleSet(ruleSet)}
389
- title=${i18nString(UIStrings.buttonClickToRevealRuleSet)}
390
- style=${Lit.Directives.styleMap({
391
- color: 'var(--sys-color-primary)',
392
- 'text-decoration': 'underline',
393
- })}
394
- jslog=${VisualLogging.action('reveal-rule-set').track({click: true})}
395
- >
396
- ${location}
397
- </button>
398
- </div>
399
- </devtools-report-value>
400
- `;
401
- })}
402
- </devtools-report>
403
- `, target, {host: target});
404
- // clang-format on
405
- };
406
- export class PreloadingDetailsReportView extends UI.Widget.VBox {
407
- #view: View;
408
- #data: PreloadingDetailsReportViewData = null;
409
-
410
- constructor(view: View = DEFAULT_VIEW) {
411
- super();
412
- this.#view = view;
413
430
  }
431
+ }
414
432
 
415
- set data(data: PreloadingDetailsReportViewData) {
416
- this.#data = data;
417
- this.requestUpdate();
418
- }
433
+ customElements.define('devtools-resources-preloading-details-report-view', PreloadingDetailsReportView);
419
434
 
420
- override performUpdate(): void {
421
- this.#view(
422
- {
423
- data: this.#data,
424
- onRevealRuleSet: (ruleSet: Protocol.Preload.RuleSet) => {
425
- void Common.Revealer.reveal(new PreloadingHelper.PreloadingForward.RuleSetView(ruleSet.id));
426
- },
427
- },
428
- undefined,
429
- this.contentElement,
430
- );
435
+ declare global {
436
+ interface HTMLElementTagNameMap {
437
+ 'devtools-resources-preloading-details-report-view': PreloadingDetailsReportView;
431
438
  }
432
439
  }
@@ -62,7 +62,7 @@ export interface ViewInput {
62
62
  type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
63
63
 
64
64
  export const PRELOADING_GRID_DEFAULT_VIEW: View = (input, _output, target): void => {
65
- if (!input.rows || input.pageURL === undefined) {
65
+ if (!input.rows || !input.pageURL) {
66
66
  render(nothing, target);
67
67
  return;
68
68
  }
@@ -116,7 +116,8 @@ export const PRELOADING_GRID_DEFAULT_VIEW: View = (input, _output, target): void
116
116
  </devtools-data-grid>
117
117
  </div>
118
118
  `, target);
119
- }; // clang-format on
119
+ // clang-format on
120
+ };
120
121
 
121
122
  /** Grid component to show prerendering attempts. **/
122
123
  export class PreloadingGrid extends UI.Widget.VBox {
@@ -259,13 +259,11 @@ function renderMismatchedSections(data: MismatchedData): LitTemplate {
259
259
  ${i18nString(UIStrings.currentURL)}
260
260
  </devtools-report-section-header>
261
261
  <devtools-report-section>
262
- <x-link
262
+ <devtools-link
263
263
  class="link devtools-link"
264
264
  href=${data.pageURL}
265
- jslog=${VisualLogging.link()
266
- .track({ click: true, keydown: 'Enter|Space' })
267
- .context('current-url')}
268
- >${data.pageURL}</x-link>
265
+ jslogcontext="current-url"
266
+ >${data.pageURL}</devtools-link>
269
267
  </devtools-report-section>
270
268
 
271
269
  <devtools-report-section-header>
@@ -411,13 +409,11 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
411
409
  <devtools-report-divider></devtools-report-divider>
412
410
 
413
411
  <devtools-report-section>
414
- <x-link
412
+ <devtools-link
415
413
  class="link devtools-link"
416
414
  href=${'https://developer.chrome.com/blog/prerender-pages/'}
417
- jslog=${VisualLogging.link()
418
- .track({ click: true, keydown: 'Enter|Space' })
419
- .context('learn-more')}
420
- >${i18nString(UIStrings.learnMore)}</x-link>
415
+ jslogcontext="learn-more"
416
+ >${i18nString(UIStrings.learnMore)}</devtools-link>
421
417
  </devtools-report-section>
422
418
  </devtools-report>`, target);
423
419
  // clang-format on
@@ -56,3 +56,11 @@ devtools-icon.navigator-font-tree-item {
56
56
  .window-closed .tree-element-title {
57
57
  text-decoration: line-through;
58
58
  }
59
+
60
+ .device-bound-session-terminated {
61
+ text-decoration: line-through;
62
+ }
63
+
64
+ .no-device-bound-session {
65
+ font-style: italic;
66
+ }
@@ -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/adorners/adorners.js';
6
7
  import '../../ui/legacy/components/data_grid/data_grid.js';
7
8
 
@@ -237,14 +238,14 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
237
238
  jslog=${VisualLogging.toggle(input.autoOpenViewSetting.name).track({ change: true })}>
238
239
  ${i18nString(UIStrings.autoShow)}
239
240
  </devtools-checkbox>
240
- <x-link href=${AUTOFILL_FEEDBACK_URL} class="feedback link" jslog=${VisualLogging.link('feedback').track({click: true})}>${i18nString(UIStrings.sendFeedback)}</x-link>
241
+ <devtools-link href=${AUTOFILL_FEEDBACK_URL} class="feedback link" jslogcontext="feedback">${i18nString(UIStrings.sendFeedback)}</devtools-link>
241
242
  </div>
242
243
  <div class="placeholder-container" jslog=${VisualLogging.pane('autofill-empty')}>
243
244
  <div class="empty-state">
244
245
  <span class="empty-state-header">${i18nString(UIStrings.noAutofill)}</span>
245
246
  <div class="empty-state-description">
246
247
  <span>${i18nString(UIStrings.toStartDebugging)}</span>
247
- <x-link href=${AUTOFILL_INFO_URL} class="link" jslog=${VisualLogging.link('learn-more').track({click: true})}>${i18nString(UIStrings.learnMore)}</x-link>
248
+ <devtools-link href=${AUTOFILL_INFO_URL} class="link" jslogcontext="learn-more">${i18nString(UIStrings.learnMore)}</devtools-link>
248
249
  </div>
249
250
  </div>
250
251
  </div>
@@ -279,7 +280,7 @@ const DEFAULT_VIEW: View = (input: ViewInput, _output: ViewOutput, target: HTMLE
279
280
  ${i18nString(UIStrings.autoShow)}
280
281
  </devtools-checkbox>
281
282
  </div>
282
- <x-link href=${AUTOFILL_FEEDBACK_URL} class="feedback link" jslog=${VisualLogging.link('feedback').track({click: true})}>${i18nString(UIStrings.sendFeedback)}</x-link>
283
+ <devtools-link href=${AUTOFILL_FEEDBACK_URL} class="feedback link" jslogcontext="feedback">${i18nString(UIStrings.sendFeedback)}</devtools-link>
283
284
  </div>
284
285
  ${renderAddress()}
285
286
  </div>
@@ -89,7 +89,7 @@ export const DEFAULT_SUMMARY_TOOLBAR_VIEW: View = (input, _output, target) => {
89
89
  ${Directives.repeat(input.citations, citation => html`<devtools-link
90
90
  tabIndex="0"
91
91
  href=${citation}
92
- .jslogContext=${'ai-code-completion-citations.citation-link'}>${citation}</devtools-link>`)}</div></devtools-tooltip>
92
+ jslogcontext="ai-code-completion-citations.citation-link">${citation}</devtools-link>`)}</div></devtools-tooltip>
93
93
  </div>` : nothing;
94
94
 
95
95
  render(
@@ -249,7 +249,7 @@ export class AiCodeCompletionTeaser extends UI.Widget.Widget {
249
249
  content: html`<devtools-link
250
250
  href=${CODE_SNIPPET_WARNING_URL}
251
251
  class="link devtools-link"
252
- .jslogContext=${'code-snippets-explainer.ai-code-completion-teaser'}
252
+ jslogcontext="code-snippets-explainer.ai-code-completion-teaser"
253
253
  >${lockedString(UIStringsNotTranslate.freDisclaimerTextUseWithCaution)}</devtools-link>`,
254
254
  // clang-format on
255
255
  });