chrome-devtools-frontend 1.0.1544076 → 1.0.1547147

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 (178) hide show
  1. package/config/typescript/tsconfig.eslint.json +1 -0
  2. package/docs/styleguide/ux/styles.md +1 -1
  3. package/eslint.config.mjs +1 -1
  4. package/front_end/Images/src/arrow-down.svg +8 -1
  5. package/front_end/Images/src/arrow-up.svg +8 -1
  6. package/front_end/core/common/ParsedURL.ts +1 -1
  7. package/front_end/core/common/common.ts +0 -2
  8. package/front_end/core/host/AidaClient.ts +1 -1
  9. package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -1
  10. package/front_end/core/host/UserMetrics.ts +0 -5
  11. package/front_end/core/platform/HostRuntime.ts +18 -0
  12. package/front_end/core/platform/KeyboardUtilities.ts +2 -2
  13. package/front_end/core/platform/StringUtilities.ts +1 -1
  14. package/front_end/core/platform/api/HostRuntime.ts +20 -0
  15. package/front_end/core/platform/api/api.ts +7 -0
  16. package/front_end/core/platform/browser/HostRuntime.ts +14 -0
  17. package/front_end/core/platform/browser/browser.ts +7 -0
  18. package/front_end/core/platform/node/HostRuntime.ts +13 -0
  19. package/front_end/core/platform/node/node.ts +7 -0
  20. package/front_end/core/platform/platform.ts +2 -2
  21. package/front_end/core/protocol_client/CDPConnection.ts +3 -3
  22. package/front_end/core/protocol_client/DevToolsCDPConnection.ts +2 -1
  23. package/front_end/core/sdk/CSSMetadata.ts +17 -5
  24. package/front_end/core/sdk/NetworkManager.ts +6 -8
  25. package/front_end/core/sdk/NetworkRequest.ts +4 -0
  26. package/front_end/core/sdk/SDKModel.ts +4 -2
  27. package/front_end/core/sdk/SourceMapScopesInfo.ts +141 -23
  28. package/front_end/core/sdk/Target.ts +5 -14
  29. package/front_end/core/sdk/TargetManager.ts +39 -18
  30. package/front_end/core/sdk/sdk-meta.ts +62 -0
  31. package/front_end/devtools_compatibility.js +0 -1
  32. package/front_end/entrypoints/main/MainImpl.ts +2 -2
  33. package/front_end/foundation/Universe.ts +2 -2
  34. package/front_end/generated/Deprecation.ts +11 -0
  35. package/front_end/generated/InspectorBackendCommands.ts +3 -6
  36. package/front_end/generated/SupportedCSSProperties.js +4 -25
  37. package/front_end/generated/protocol-mapping.d.ts +0 -15
  38. package/front_end/generated/protocol-proxy-api.d.ts +0 -11
  39. package/front_end/generated/protocol.ts +5 -36
  40. package/front_end/models/ai_assistance/AiConversation.ts +188 -0
  41. package/front_end/models/ai_assistance/AiHistoryStorage.ts +1 -172
  42. package/front_end/models/ai_assistance/ConversationHandler.ts +5 -5
  43. package/front_end/models/ai_assistance/agents/AiAgent.ts +1 -3
  44. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +6 -2
  45. package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +1 -1
  46. package/front_end/models/ai_assistance/agents/StylingAgent.ts +3 -9
  47. package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
  48. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +313 -313
  49. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +8 -6
  50. package/front_end/models/ai_assistance/performance/AICallTree.snapshot.txt +33 -33
  51. package/front_end/models/ai_assistance/performance/AICallTree.ts +9 -3
  52. package/front_end/models/bindings/CSSWorkspaceBinding.ts +5 -3
  53. package/front_end/models/bindings/SASSSourceMapping.ts +6 -4
  54. package/front_end/models/cpu_profile/CPUProfileDataModel.ts +10 -7
  55. package/front_end/models/crux-manager/CrUXManager.ts +7 -4
  56. package/front_end/models/issues_manager/GenericIssue.ts +12 -9
  57. package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
  58. package/front_end/models/trace/handlers/SamplesHandler.ts +3 -0
  59. package/front_end/models/trace/helpers/Trace.ts +13 -0
  60. package/front_end/models/trace/types/TraceEvents.ts +2 -1
  61. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +29 -0
  62. package/front_end/models/workspace/IgnoreListManager.ts +1 -2
  63. package/front_end/models/workspace/UISourceCode.ts +50 -0
  64. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +11 -10
  65. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +8 -0
  66. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -2
  67. package/front_end/panels/ai_assistance/components/UserActionRow.ts +2 -1
  68. package/front_end/panels/animation/AnimationTimeline.ts +0 -8
  69. package/front_end/panels/application/ApplicationPanelSidebar.ts +6 -7
  70. package/front_end/panels/application/{components/FrameDetailsView.ts → FrameDetailsView.ts} +140 -171
  71. package/front_end/panels/application/{components/OriginTrialTreeView.ts → OriginTrialTreeView.ts} +9 -9
  72. package/front_end/panels/application/application.ts +4 -0
  73. package/front_end/panels/application/components/StackTrace.ts +89 -88
  74. package/front_end/panels/application/components/components.ts +2 -4
  75. package/front_end/panels/application/{components/frameDetailsReportView.css → frameDetailsReportView.css} +5 -1
  76. package/front_end/panels/common/AiCodeGenerationTeaser.ts +80 -0
  77. package/front_end/panels/common/BadgeNotification.ts +2 -1
  78. package/front_end/panels/common/DOMLinkifier.ts +7 -2
  79. package/front_end/panels/common/GdpSignUpDialog.ts +2 -1
  80. package/front_end/panels/common/common.ts +2 -1
  81. package/front_end/panels/console/ConsolePrompt.ts +3 -1
  82. package/front_end/panels/console/ConsoleViewport.ts +1 -2
  83. package/front_end/panels/elements/ElementIssueUtils.ts +2 -2
  84. package/front_end/panels/elements/ElementStatePaneWidget.ts +2 -1
  85. package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
  86. package/front_end/panels/elements/StylePropertyTreeElement.ts +23 -19
  87. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  88. package/front_end/panels/elements/cssValueTraceView.css +1 -1
  89. package/front_end/panels/elements/elements-meta.ts +1 -22
  90. package/front_end/panels/explain/components/ConsoleInsight.ts +44 -57
  91. package/front_end/panels/explain/components/consoleInsight.css +46 -1
  92. package/front_end/panels/layer_viewer/LayerTreeOutline.ts +1 -2
  93. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +3 -6
  94. package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +19 -0
  95. package/front_end/panels/network/RequestConditionsDrawer.ts +54 -24
  96. package/front_end/panels/network/networkLogView.css +11 -0
  97. package/front_end/panels/network/networkTimingTable.css +8 -6
  98. package/front_end/panels/network/requestConditionsDrawer.css +10 -1
  99. package/front_end/panels/profiler/ProfilesPanel.ts +1 -2
  100. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +2 -1
  101. package/front_end/panels/settings/KeybindsSettingsTab.ts +20 -21
  102. package/front_end/panels/settings/SettingsScreen.ts +3 -2
  103. package/front_end/panels/sources/CoveragePlugin.ts +5 -5
  104. package/front_end/panels/sources/Plugin.ts +1 -1
  105. package/front_end/panels/sources/ProfilePlugin.ts +22 -14
  106. package/front_end/panels/sources/UISourceCodeFrame.ts +2 -1
  107. package/front_end/panels/sources/sources-meta.ts +0 -62
  108. package/front_end/panels/timeline/README.md +1 -9
  109. package/front_end/panels/timeline/ThreadAppender.ts +0 -7
  110. package/front_end/panels/timeline/TimelinePanel.ts +1 -1
  111. package/front_end/panels/timeline/TimelineUIUtils.ts +2 -0
  112. package/front_end/panels/timeline/components/ExportTraceOptions.ts +15 -1
  113. package/front_end/panels/timeline/components/LiveMetricsView.ts +51 -6
  114. package/front_end/panels/timeline/components/MetricCard.ts +2 -2
  115. package/front_end/panels/timeline/components/exportTraceOptions.css +11 -2
  116. package/front_end/panels/timeline/components/insights/NodeLink.ts +2 -3
  117. package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -1
  118. package/front_end/panels/timeline/timeline-meta.ts +0 -10
  119. package/front_end/panels/timeline/timeline.ts +0 -2
  120. package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -1
  121. package/front_end/panels/whats_new/WhatsNewImpl.ts +3 -2
  122. package/front_end/third_party/chromium/README.chromium +1 -1
  123. package/front_end/tsconfig.json +1 -0
  124. package/front_end/ui/components/buttons/Button.docs.ts +6 -5
  125. package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +1 -0
  126. package/front_end/ui/components/snackbars/Snackbars.docs.ts +1 -1
  127. package/front_end/ui/components/spinners/Spinners.docs.ts +1 -1
  128. package/front_end/ui/components/survey_link/SurveyLink.docs.ts +2 -1
  129. package/front_end/ui/components/switch/Switch.docs.ts +1 -1
  130. package/front_end/ui/components/tooltips/Tooltip.docs.ts +3 -3
  131. package/front_end/ui/helpers/OpenInNewTab.ts +87 -0
  132. package/front_end/ui/helpers/helpers.ts +5 -0
  133. package/front_end/ui/legacy/ARIAUtils.ts +2 -2
  134. package/front_end/ui/legacy/ActionRegistration.ts +11 -0
  135. package/front_end/ui/legacy/ContextMenu.docs.ts +12 -11
  136. package/front_end/ui/legacy/RadioButton.docs.ts +1 -1
  137. package/front_end/ui/legacy/SelectMenu.docs.ts +1 -1
  138. package/front_end/ui/legacy/Slider.docs.ts +1 -1
  139. package/front_end/ui/legacy/SoftDropDown.ts +2 -2
  140. package/front_end/ui/legacy/TextPrompt.ts +3 -2
  141. package/front_end/ui/legacy/Treeoutline.ts +2 -1
  142. package/front_end/ui/legacy/UIUtils.ts +11 -43
  143. package/front_end/ui/legacy/Widget.ts +3 -2
  144. package/front_end/ui/legacy/XLink.ts +4 -4
  145. package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +2 -1
  146. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -2
  147. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +144 -143
  148. package/front_end/ui/legacy/components/perf_ui/LineLevelProfile.ts +62 -39
  149. package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +1 -1
  150. package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +2 -2
  151. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -7
  152. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +1 -2
  153. package/front_end/ui/legacy/components/utils/Linkifier.ts +2 -1
  154. package/front_end/ui/legacy/inspectorCommon.css +2 -2
  155. package/front_end/ui/legacy/legacy.ts +2 -0
  156. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  157. package/mcp/tsconfig.json +16 -0
  158. package/package.json +2 -2
  159. package/front_end/core/common/Linkifier.ts +0 -55
  160. package/front_end/panels/explain/components/consoleInsightSourcesList.css +0 -51
  161. package/front_end/panels/timeline/CLSLinkifier.ts +0 -58
  162. package/front_end/ui/components/docs/README.md +0 -6
  163. package/front_end/ui/components/docs/building-ui-documentation/ComponentEvents.md +0 -54
  164. package/front_end/ui/components/docs/building-ui-documentation/ComponentPerformance.md +0 -136
  165. package/front_end/ui/components/docs/building-ui-documentation/CreatingComponents.md +0 -242
  166. package/front_end/ui/components/docs/building-ui-documentation/README.md +0 -23
  167. package/front_end/ui/components/docs/building-ui-documentation/StylingComponents.md +0 -66
  168. package/front_end/ui/components/docs/building-ui-documentation/TestingComponents.md +0 -111
  169. package/front_end/ui/components/docs/component_docs.ts +0 -24
  170. package/front_end/ui/components/docs/component_docs_styles.css +0 -53
  171. package/front_end/ui/components/docs/create_breadcrumbs.ts +0 -44
  172. package/front_end/ui/components/docs/slider/basic.html +0 -20
  173. package/front_end/ui/components/docs/switch/basic.html +0 -20
  174. /package/front_end/models/issues_manager/descriptions/{genericFormAriaLabelledByToNonExistingId.md → genericFormAriaLabelledByToNonExistingIdError.md} +0 -0
  175. /package/front_end/models/issues_manager/descriptions/{genericFormLabelHasNeitherForNorNestedInput.md → genericFormLabelHasNeitherForNorNestedInputError.md} +0 -0
  176. /package/front_end/panels/application/{components/originTrialTokenRows.css → originTrialTokenRows.css} +0 -0
  177. /package/front_end/panels/application/{components/originTrialTreeView.css → originTrialTreeView.css} +0 -0
  178. /package/front_end/{core/platform → ui/legacy}/DOMUtilities.ts +0 -0
@@ -1,39 +1,32 @@
1
1
  // Copyright 2021 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
-
6
- import '../../../ui/components/expandable_list/expandable_list.js';
7
- import '../../../ui/components/report_view/report_view.js';
8
- import './StackTrace.js';
9
-
10
- import * as Common from '../../../core/common/common.js';
11
- import * as i18n from '../../../core/i18n/i18n.js';
12
- import type * as Platform from '../../../core/platform/platform.js';
13
- import * as Root from '../../../core/root/root.js';
14
- import * as SDK from '../../../core/sdk/sdk.js';
15
- import * as Protocol from '../../../generated/protocol.js';
16
- import * as Bindings from '../../../models/bindings/bindings.js';
17
- import * as Workspace from '../../../models/workspace/workspace.js';
18
- import * as NetworkForward from '../../../panels/network/forward/forward.js';
19
- import * as CspEvaluator from '../../../third_party/csp_evaluator/csp_evaluator.js';
20
- import * as Buttons from '../../../ui/components/buttons/buttons.js';
21
- import type * as ExpandableList from '../../../ui/components/expandable_list/expandable_list.js';
22
- import * as LegacyWrapper from '../../../ui/components/legacy_wrapper/legacy_wrapper.js';
23
- import * as RenderCoordinator from '../../../ui/components/render_coordinator/render_coordinator.js';
24
- import type * as ReportView from '../../../ui/components/report_view/report_view.js';
25
- import * as Components from '../../../ui/legacy/components/utils/utils.js';
26
- import * as UI from '../../../ui/legacy/legacy.js';
27
- import {Directives, html, type LitTemplate, nothing, render} from '../../../ui/lit/lit.js';
28
- import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
29
4
 
5
+ import '../../ui/components/expandable_list/expandable_list.js';
6
+ import '../../ui/components/report_view/report_view.js';
7
+
8
+ import * as Common from '../../core/common/common.js';
9
+ import * as i18n from '../../core/i18n/i18n.js';
10
+ import type * as Platform from '../../core/platform/platform.js';
11
+ import * as Root from '../../core/root/root.js';
12
+ import * as SDK from '../../core/sdk/sdk.js';
13
+ import * as Protocol from '../../generated/protocol.js';
14
+ import * as Bindings from '../../models/bindings/bindings.js';
15
+ import * as Workspace from '../../models/workspace/workspace.js';
16
+ import * as PanelCommon from '../../panels/common/common.js';
17
+ import * as NetworkForward from '../../panels/network/forward/forward.js';
18
+ import * as CspEvaluator from '../../third_party/csp_evaluator/csp_evaluator.js';
19
+ import * as Buttons from '../../ui/components/buttons/buttons.js';
20
+ import type * as ExpandableList from '../../ui/components/expandable_list/expandable_list.js';
21
+ import type * as ReportView from '../../ui/components/report_view/report_view.js';
22
+ import * as Components from '../../ui/legacy/components/utils/utils.js';
23
+ import * as UI from '../../ui/legacy/legacy.js';
24
+ import {Directives, html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
25
+ import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
26
+
27
+ import * as ApplicationComponents from './components/components.js';
30
28
  import frameDetailsReportViewStyles from './frameDetailsReportView.css.js';
31
29
  import {OriginTrialTreeView} from './OriginTrialTreeView.js';
32
- import {
33
- type PermissionsPolicySectionData,
34
- renderIconLink,
35
- } from './PermissionsPolicySection.js';
36
- import type {StackTraceData} from './StackTrace.js';
37
30
 
38
31
  const {until} = Directives;
39
32
  const {widgetConfig} = UI.Widget;
@@ -87,10 +80,6 @@ const UIStrings = {
87
80
  * @description Related node label in Timeline UIUtils of the Performance panel
88
81
  */
89
82
  ownerElement: 'Owner Element',
90
- /**
91
- * @description Title for a link to the Elements panel
92
- */
93
- clickToOpenInElementsPanel: 'Click to open in Elements panel',
94
83
  /**
95
84
  * @description Title for ad frame type field
96
85
  */
@@ -269,7 +258,7 @@ const UIStrings = {
269
258
  */
270
259
  originTrialsExplanation: 'Origin trials give you access to a new or experimental feature.',
271
260
  } as const;
272
- const str_ = i18n.i18n.registerUIStrings('panels/application/components/FrameDetailsView.ts', UIStrings);
261
+ const str_ = i18n.i18n.registerUIStrings('panels/application/FrameDetailsView.ts', UIStrings);
273
262
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
274
263
 
275
264
  export interface FrameDetailsReportViewData {
@@ -287,10 +276,13 @@ interface FrameDetailsViewInput {
287
276
  protocolMonitorExperimentEnabled: boolean;
288
277
  trials: Protocol.Page.OriginTrial[]|null;
289
278
  securityIsolationInfo?: Promise<Protocol.Network.SecurityIsolationStatus|null>;
279
+ onRevealInNetwork?: () => void;
290
280
  onRevealInSources: () => void;
291
281
  }
292
282
 
293
- function renderFrameDetailsView(input: FrameDetailsViewInput, target: ShadowRoot): void {
283
+ type View = (input: FrameDetailsViewInput, output: undefined, target: HTMLElement) => void;
284
+
285
+ const DEFAULT_VIEW: View = (input, _output, target) => {
294
286
  if (!input.frame) {
295
287
  return;
296
288
  }
@@ -305,14 +297,14 @@ function renderFrameDetailsView(input: FrameDetailsViewInput, target: ShadowRoot
305
297
  ${renderOriginTrial(input.trials)}
306
298
  ${until(input.permissionsPolicies?.then?.(policies =>
307
299
  html`
308
- <devtools-resources-permissions-policy-section .data=${{policies, showDetails: false} as PermissionsPolicySectionData}>
300
+ <devtools-resources-permissions-policy-section .data=${{policies, showDetails: false} as ApplicationComponents.PermissionsPolicySection.PermissionsPolicySectionData}>
309
301
  </devtools-resources-permissions-policy-section>
310
302
  `), nothing)}
311
303
  ${input.protocolMonitorExperimentEnabled ? renderAdditionalInfoSection(input.frame) : nothing}
312
304
  </devtools-report>
313
305
  `, target);
314
306
  // clang-format on
315
- }
307
+ };
316
308
 
317
309
  function renderOriginTrial(trials: Protocol.Page.OriginTrial[]|null): LitTemplate {
318
310
  if (!trials) {
@@ -350,27 +342,23 @@ function renderDocumentSection(input: FrameDetailsViewInput): LitTemplate {
350
342
  <devtools-report-key>${i18nString(UIStrings.url)}</devtools-report-key>
351
343
  <devtools-report-value>
352
344
  <div class="inline-items">
353
- ${maybeRenderSourcesLinkForURL(input.frame, input.onRevealInSources)}
354
- ${maybeRenderNetworkLinkForURL(input.frame)}
345
+ ${!input.frame?.unreachableUrl() ? renderSourcesLinkForURL(input.onRevealInSources) : nothing}
346
+ ${input.onRevealInNetwork ? renderNetworkLinkForURL(input.onRevealInNetwork) : nothing}
355
347
  <div class="text-ellipsis" title=${input.frame.url}>${input.frame.url}</div>
356
348
  </div>
357
349
  </devtools-report-value>
358
- ${maybeRenderUnreachableURL(input.frame)}
359
- ${maybeRenderOrigin(input.frame)}
360
- ${until(input.linkTargetDOMNode?.then?.(value => renderOwnerElement(input.frame, value)), nothing)}
361
- ${maybeRenderCreationStacktrace(input.frame)}
362
- ${maybeRenderAdStatus(input.frame)}
363
- ${maybeRenderCreatorAdScriptAncestry(input.frame, input.target, input.adScriptAncestry)}
350
+ ${maybeRenderUnreachableURL(input.frame?.unreachableUrl())}
351
+ ${maybeRenderOrigin(input.frame?.securityOrigin)}
352
+ ${until(input.linkTargetDOMNode?.then?.(value => renderOwnerElement(value)), nothing)}
353
+ ${maybeRenderCreationStacktrace(input.frame.getCreationStackTraceData())}
354
+ ${maybeRenderAdStatus(input.frame?.adFrameType(), input.frame?.adFrameStatus())}
355
+ ${maybeRenderCreatorAdScriptAncestry(input.frame?.adFrameType(), input.target, input.adScriptAncestry)}
364
356
  <devtools-report-divider></devtools-report-divider>
365
357
  `;
366
358
  }
367
359
 
368
- function maybeRenderSourcesLinkForURL(
369
- frame: SDK.ResourceTreeModel.ResourceTreeFrame|null, onRevealInSources: () => void): LitTemplate {
370
- if (!frame || frame.unreachableUrl()) {
371
- return nothing;
372
- }
373
- return renderIconLink(
360
+ function renderSourcesLinkForURL(onRevealInSources: () => void): LitTemplate {
361
+ return ApplicationComponents.PermissionsPolicySection.renderIconLink(
374
362
  'label',
375
363
  i18nString(UIStrings.clickToOpenInSourcesPanel),
376
364
  onRevealInSources,
@@ -378,77 +366,64 @@ function maybeRenderSourcesLinkForURL(
378
366
  );
379
367
  }
380
368
 
381
- function maybeRenderNetworkLinkForURL(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
382
- if (frame) {
383
- const resource = frame.resourceForURL(frame.url);
384
- if (resource?.request) {
385
- const request = resource.request;
386
- return renderIconLink('arrow-up-down-circle', i18nString(UIStrings.clickToOpenInNetworkPanel), () => {
387
- const requestLocation = NetworkForward.UIRequestLocation.UIRequestLocation.tab(
388
- request, NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT);
389
- return Common.Revealer.reveal(requestLocation);
390
- }, 'reveal-in-network');
391
- }
392
- }
393
- return nothing;
369
+ function renderNetworkLinkForURL(onRevealInNetwork: () => void): LitTemplate {
370
+ return ApplicationComponents.PermissionsPolicySection.renderIconLink(
371
+ 'arrow-up-down-circle', i18nString(UIStrings.clickToOpenInNetworkPanel), onRevealInNetwork, 'reveal-in-network');
394
372
  }
395
373
 
396
- function maybeRenderUnreachableURL(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
397
- if (!frame?.unreachableUrl()) {
374
+ function maybeRenderUnreachableURL(unreachableUrl: Platform.DevToolsPath.UrlString): LitTemplate {
375
+ if (!unreachableUrl) {
398
376
  return nothing;
399
377
  }
400
378
  return html`
401
379
  <devtools-report-key>${i18nString(UIStrings.unreachableUrl)}</devtools-report-key>
402
380
  <devtools-report-value>
403
381
  <div class="inline-items">
404
- ${renderNetworkLinkForUnreachableURL(frame)}
405
- <div class="text-ellipsis" title=${frame.unreachableUrl()}>${frame.unreachableUrl()}</div>
382
+ ${renderNetworkLinkForUnreachableURL(unreachableUrl)}
383
+ <div class="text-ellipsis" title=${unreachableUrl}>${unreachableUrl}</div>
406
384
  </div>
407
385
  </devtools-report-value>
408
386
  `;
409
387
  }
410
388
 
411
- function renderNetworkLinkForUnreachableURL(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
412
- if (frame) {
413
- const unreachableUrl = Common.ParsedURL.ParsedURL.fromString(frame.unreachableUrl());
414
- if (unreachableUrl) {
415
- return renderIconLink(
416
- 'arrow-up-down-circle',
417
- i18nString(UIStrings.clickToOpenInNetworkPanelMight),
418
- ():
419
- void => {
420
- void Common.Revealer.reveal(NetworkForward.UIFilter.UIRequestFilter.filters([
421
- {
422
- filterType: NetworkForward.UIFilter.FilterType.Domain,
423
- filterValue: unreachableUrl.domain(),
424
- },
425
- {
426
- filterType: null,
427
- filterValue: unreachableUrl.path,
428
- },
429
- ]));
430
- },
431
- 'unreachable-url.reveal-in-network',
432
- );
433
- }
389
+ function renderNetworkLinkForUnreachableURL(unreachableUrlString: Platform.DevToolsPath.UrlString): LitTemplate {
390
+ const unreachableUrl = Common.ParsedURL.ParsedURL.fromString(unreachableUrlString);
391
+ if (unreachableUrl) {
392
+ return ApplicationComponents.PermissionsPolicySection.renderIconLink(
393
+ 'arrow-up-down-circle',
394
+ i18nString(UIStrings.clickToOpenInNetworkPanelMight),
395
+ ():
396
+ void => {
397
+ void Common.Revealer.reveal(NetworkForward.UIFilter.UIRequestFilter.filters([
398
+ {
399
+ filterType: NetworkForward.UIFilter.FilterType.Domain,
400
+ filterValue: unreachableUrl.domain(),
401
+ },
402
+ {
403
+ filterType: null,
404
+ filterValue: unreachableUrl.path,
405
+ },
406
+ ]));
407
+ },
408
+ 'unreachable-url.reveal-in-network',
409
+ );
434
410
  }
435
411
  return nothing;
436
412
  }
437
413
 
438
- function maybeRenderOrigin(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
439
- if (frame?.securityOrigin && frame?.securityOrigin !== '://') {
414
+ function maybeRenderOrigin(securityOrigin: string|null): LitTemplate {
415
+ if (securityOrigin && securityOrigin !== '://') {
440
416
  return html`
441
417
  <devtools-report-key>${i18nString(UIStrings.origin)}</devtools-report-key>
442
418
  <devtools-report-value>
443
- <div class="text-ellipsis" title=${frame.securityOrigin}>${frame.securityOrigin}</div>
419
+ <div class="text-ellipsis" title=${securityOrigin}>${securityOrigin}</div>
444
420
  </devtools-report-value>
445
421
  `;
446
422
  }
447
423
  return nothing;
448
424
  }
449
425
 
450
- function renderOwnerElement(
451
- frame: SDK.ResourceTreeModel.ResourceTreeFrame|null, linkTargetDOMNode: SDK.DOMModel.DOMNode|null): LitTemplate {
426
+ function renderOwnerElement(linkTargetDOMNode: SDK.DOMModel.DOMNode|null): LitTemplate {
452
427
  if (linkTargetDOMNode) {
453
428
  // Disabled until https://crbug.com/1079231 is fixed.
454
429
  // clang-format off
@@ -456,14 +431,10 @@ function renderOwnerElement(
456
431
  <devtools-report-key>${i18nString(UIStrings.ownerElement)}</devtools-report-key>
457
432
  <devtools-report-value class="without-min-width">
458
433
  <div class="inline-items">
459
- <button class="link text-link" role="link" tabindex=0 title=${i18nString(UIStrings.clickToOpenInElementsPanel)}
460
- @mouseenter=${() => frame?.highlight()}
461
- @mouseleave=${() => SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight()}
462
- @click=${() => Common.Revealer.reveal(linkTargetDOMNode)}
463
- jslog=${VisualLogging.action('reveal-in-elements').track({click: true})}
464
- >
465
- &lt;${linkTargetDOMNode.nodeName().toLocaleLowerCase()}&gt;
466
- </button>
434
+ <devtools-widget .widgetConfig=${widgetConfig(PanelCommon.DOMLinkifier.DOMNodeLink, {
435
+ node: linkTargetDOMNode
436
+ })}>
437
+ </devtools-widget>
467
438
  </div>
468
439
  </devtools-report-value>
469
440
  `;
@@ -472,22 +443,24 @@ function renderOwnerElement(
472
443
  return nothing;
473
444
  }
474
445
 
475
- function maybeRenderCreationStacktrace(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
476
- const creationStackTraceData = frame?.getCreationStackTraceData();
446
+ function maybeRenderCreationStacktrace(
447
+ creationStackTraceData:
448
+ {creationStackTrace: Protocol.Runtime.StackTrace|null, creationStackTraceTarget: SDK.Target.Target}|
449
+ null): LitTemplate {
477
450
  if (creationStackTraceData?.creationStackTrace) {
478
451
  // Disabled until https://crbug.com/1079231 is fixed.
479
452
  // clang-format off
480
453
  return html`
481
454
  <devtools-report-key title=${i18nString(UIStrings.creationStackTraceExplanation)}>${
482
455
  i18nString(UIStrings.creationStackTrace)}</devtools-report-key>
483
- <devtools-report-value
484
- jslog=${VisualLogging.section('frame-creation-stack-trace')}
485
- >
486
- <devtools-resources-stack-trace .data=${{
487
- frame,
488
- buildStackTraceRows: Components.JSPresentationUtils.buildStackTraceRowsForLegacyRuntimeStackTrace,
489
- } as StackTraceData}>
490
- </devtools-resources-stack-trace>
456
+ <devtools-report-value jslog=${VisualLogging.section('frame-creation-stack-trace')}>
457
+ <devtools-widget .widgetConfig=${widgetConfig(
458
+ ApplicationComponents.StackTrace.StackTrace, { data: {
459
+ creationStackTraceData,
460
+ buildStackTraceRows: Components.JSPresentationUtils.buildStackTraceRowsForLegacyRuntimeStackTrace }
461
+ }
462
+ )}>
463
+ </devtools-widget>
491
464
  </devtools-report-value>
492
465
  `;
493
466
  // clang-format on
@@ -516,17 +489,15 @@ function getAdFrameExplanationString(explanation: Protocol.Page.AdFrameExplanati
516
489
  }
517
490
  }
518
491
 
519
- function maybeRenderAdStatus(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null): LitTemplate {
520
- if (!frame) {
521
- return nothing;
522
- }
523
- const adFrameType = frame.adFrameType();
524
- if (adFrameType === Protocol.Page.AdFrameType.None) {
492
+ function maybeRenderAdStatus(
493
+ adFrameType: Protocol.Page.AdFrameType|undefined,
494
+ adFrameStatus: Protocol.Page.AdFrameStatus|undefined): LitTemplate {
495
+ if (adFrameType === undefined || adFrameType === Protocol.Page.AdFrameType.None) {
525
496
  return nothing;
526
497
  }
527
498
  const typeStrings = getAdFrameTypeStrings(adFrameType);
528
499
  const rows = [html`<div title=${typeStrings.description}>${typeStrings.value}</div>`];
529
- for (const explanation of frame.adFrameStatus()?.explanations || []) {
500
+ for (const explanation of adFrameStatus?.explanations || []) {
530
501
  rows.push(html`<div>${getAdFrameExplanationString(explanation)}</div>`);
531
502
  }
532
503
 
@@ -543,12 +514,8 @@ function maybeRenderAdStatus(frame: SDK.ResourceTreeModel.ResourceTreeFrame|null
543
514
  }
544
515
 
545
516
  function maybeRenderCreatorAdScriptAncestry(
546
- frame: SDK.ResourceTreeModel.ResourceTreeFrame|null, target: SDK.Target.Target|null,
517
+ adFrameType: Protocol.Page.AdFrameType|null, target: SDK.Target.Target|null,
547
518
  adScriptAncestry: Protocol.Page.AdScriptAncestry|null): LitTemplate {
548
- if (!frame) {
549
- return nothing;
550
- }
551
- const adFrameType = frame.adFrameType();
552
519
  if (adFrameType === Protocol.Page.AdFrameType.None) {
553
520
  return nothing;
554
521
  }
@@ -875,27 +842,31 @@ function renderAdditionalInfoSection(frame: SDK.ResourceTreeModel.ResourceTreeFr
875
842
  `;
876
843
  }
877
844
 
878
- export class FrameDetailsReportView extends LegacyWrapper.LegacyWrapper.WrappableComponent {
879
- readonly #shadow = this.attachShadow({mode: 'open'});
845
+ export class FrameDetailsReportView extends UI.Widget.Widget {
880
846
  #frame?: SDK.ResourceTreeModel.ResourceTreeFrame;
881
847
  #target: SDK.Target.Target|null = null;
882
848
  #protocolMonitorExperimentEnabled = false;
883
849
  #permissionsPolicies: Promise<Protocol.Page.PermissionsPolicyFeatureState[]|null>|null = null;
884
850
  #linkifier = new Components.Linkifier.Linkifier();
885
851
  #adScriptAncestry: Protocol.Page.AdScriptAncestry|null = null;
852
+ #view: View;
886
853
 
887
- constructor(frame: SDK.ResourceTreeModel.ResourceTreeFrame) {
888
- super();
854
+ constructor(element?: HTMLElement, view = DEFAULT_VIEW) {
855
+ super(element, {useShadowDom: true});
856
+ this.#protocolMonitorExperimentEnabled = Root.Runtime.experiments.isEnabled('protocol-monitor');
857
+ this.#view = view;
858
+ }
859
+
860
+ set frame(frame: SDK.ResourceTreeModel.ResourceTreeFrame) {
889
861
  this.#frame = frame;
890
- void this.render();
862
+ this.requestUpdate();
891
863
  }
892
864
 
893
- connectedCallback(): void {
894
- this.parentElement?.classList.add('overflow-auto');
895
- this.#protocolMonitorExperimentEnabled = Root.Runtime.experiments.isEnabled('protocol-monitor');
865
+ get frame(): SDK.ResourceTreeModel.ResourceTreeFrame|undefined {
866
+ return this.#frame;
896
867
  }
897
868
 
898
- override async render(): Promise<void> {
869
+ override async performUpdate(): Promise<void> {
899
870
  const result = await this.#frame?.parentFrame()?.getAdScriptAncestry(this.#frame?.id);
900
871
  if (result && result.ancestryChain.length > 0) {
901
872
  this.#adScriptAncestry = result;
@@ -914,33 +885,39 @@ export class FrameDetailsReportView extends LegacyWrapper.LegacyWrapper.Wrappabl
914
885
  if (!this.#permissionsPolicies && this.#frame) {
915
886
  this.#permissionsPolicies = this.#frame.getPermissionsPolicyState();
916
887
  }
917
- await RenderCoordinator.write('FrameDetailsView render', async () => {
918
- const frame = this.#frame;
919
- if (!frame) {
920
- return;
921
- }
922
- const networkManager = frame.resourceTreeModel().target().model(SDK.NetworkManager.NetworkManager);
923
- const securityIsolationInfo = networkManager?.getSecurityIsolationStatus(frame.id);
924
- const linkTargetDOMNode = frame.getOwnerDOMNodeOrDocument();
925
- const input = {
926
- frame,
927
- target: this.#target,
928
- protocolMonitorExperimentEnabled: this.#protocolMonitorExperimentEnabled,
929
- permissionsPolicies: this.#permissionsPolicies,
930
- adScriptAncestry: this.#adScriptAncestry,
931
- linkifier: this.#linkifier,
932
- linkTargetDOMNode,
933
- trials: await frame.getOriginTrials(),
934
- securityIsolationInfo,
935
- onRevealInSources: async () => {
936
- const sourceCode = this.#uiSourceCodeForFrame(frame);
937
- if (sourceCode) {
938
- await Common.Revealer.reveal(sourceCode);
939
- }
940
- },
941
- };
942
- renderFrameDetailsView(input, this.#shadow);
943
- });
888
+ const frame = this.#frame;
889
+ if (!frame) {
890
+ return;
891
+ }
892
+ const networkManager = frame.resourceTreeModel().target().model(SDK.NetworkManager.NetworkManager);
893
+ const securityIsolationInfo = networkManager?.getSecurityIsolationStatus(frame.id);
894
+ const linkTargetDOMNode = frame.getOwnerDOMNodeOrDocument();
895
+ const frameRequest = frame.resourceForURL(frame.url)?.request;
896
+ const input = {
897
+ frame,
898
+ target: this.#target,
899
+ protocolMonitorExperimentEnabled: this.#protocolMonitorExperimentEnabled,
900
+ permissionsPolicies: this.#permissionsPolicies,
901
+ adScriptAncestry: this.#adScriptAncestry,
902
+ linkifier: this.#linkifier,
903
+ linkTargetDOMNode,
904
+ trials: await frame.getOriginTrials(),
905
+ securityIsolationInfo,
906
+ onRevealInNetwork: frameRequest ?
907
+ () => {
908
+ const requestLocation = NetworkForward.UIRequestLocation.UIRequestLocation.tab(
909
+ frameRequest, NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT);
910
+ return Common.Revealer.reveal(requestLocation);
911
+ } :
912
+ undefined,
913
+ onRevealInSources: async () => {
914
+ const sourceCode = this.#uiSourceCodeForFrame(frame);
915
+ if (sourceCode) {
916
+ await Common.Revealer.reveal(sourceCode);
917
+ }
918
+ },
919
+ };
920
+ this.#view(input, undefined, this.contentElement);
944
921
  }
945
922
 
946
923
  #uiSourceCodeForFrame(frame: SDK.ResourceTreeModel.ResourceTreeFrame): Workspace.UISourceCode.UISourceCode|null {
@@ -956,11 +933,3 @@ export class FrameDetailsReportView extends LegacyWrapper.LegacyWrapper.Wrappabl
956
933
  return null;
957
934
  }
958
935
  }
959
-
960
- customElements.define('devtools-resources-frame-details-view', FrameDetailsReportView);
961
-
962
- declare global {
963
- interface HTMLElementTagNameMap {
964
- 'devtools-resources-frame-details-view': FrameDetailsReportView;
965
- }
966
- }
@@ -2,15 +2,15 @@
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/components/icon_button/icon_button.js';
6
- import '../../../ui/legacy/legacy.js';
7
- import '../../../ui/components/adorners/adorners.js';
5
+ import '../../ui/components/icon_button/icon_button.js';
6
+ import '../../ui/legacy/legacy.js';
7
+ import '../../ui/components/adorners/adorners.js';
8
8
 
9
- import * as i18n from '../../../core/i18n/i18n.js';
10
- import * as Protocol from '../../../generated/protocol.js';
11
- import type * as TreeOutline from '../../../ui/components/tree_outline/tree_outline.js';
12
- import * as UI from '../../../ui/legacy/legacy.js';
13
- import {Directives, html, type LitTemplate, nothing, render, type TemplateResult} from '../../../ui/lit/lit.js';
9
+ import * as i18n from '../../core/i18n/i18n.js';
10
+ import * as Protocol from '../../generated/protocol.js';
11
+ import type * as TreeOutline from '../../ui/components/tree_outline/tree_outline.js';
12
+ import * as UI from '../../ui/legacy/legacy.js';
13
+ import {Directives, html, type LitTemplate, nothing, render, type TemplateResult} from '../../ui/lit/lit.js';
14
14
 
15
15
  import originTrialTokenRowsStyles from './originTrialTokenRows.css.js';
16
16
  import originTrialTreeViewStyles from './originTrialTreeView.css.js';
@@ -70,7 +70,7 @@ const UIStrings = {
70
70
  */
71
71
  noTrialTokens: 'No trial tokens',
72
72
  } as const;
73
- const str_ = i18n.i18n.registerUIStrings('panels/application/components/OriginTrialTreeView.ts', UIStrings);
73
+ const str_ = i18n.i18n.registerUIStrings('panels/application/OriginTrialTreeView.ts', UIStrings);
74
74
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
75
75
 
76
76
  type TreeNode<DataType> = TreeOutline.TreeOutlineUtils.TreeNode<DataType>;
@@ -12,6 +12,7 @@ import * as DOMStorageItemsView from './DOMStorageItemsView.js';
12
12
  import * as DOMStorageModel from './DOMStorageModel.js';
13
13
  import * as ExtensionStorageItemsView from './ExtensionStorageItemsView.js';
14
14
  import * as ExtensionStorageModel from './ExtensionStorageModel.js';
15
+ import * as FrameDetailsView from './FrameDetailsView.js';
15
16
  import * as IndexedDBModel from './IndexedDBModel.js';
16
17
  import * as IndexedDBViews from './IndexedDBViews.js';
17
18
  import * as InterestGroupStorageModel from './InterestGroupStorageModel.js';
@@ -19,6 +20,7 @@ import * as InterestGroupStorageView from './InterestGroupStorageView.js';
19
20
  import * as InterestGroupTreeElement from './InterestGroupTreeElement.js';
20
21
  import * as KeyValueStorageItemsView from './KeyValueStorageItemsView.js';
21
22
  import * as OpenedWindowDetailsView from './OpenedWindowDetailsView.js';
23
+ import * as OriginTrialTreeView from './OriginTrialTreeView.js';
22
24
  import * as PreloadingView from './preloading/PreloadingView.js';
23
25
  import * as PreloadingTreeElement from './PreloadingTreeElement.js';
24
26
  import * as ReportingApiView from './ReportingApiView.js';
@@ -47,6 +49,7 @@ export {
47
49
  DOMStorageModel,
48
50
  ExtensionStorageItemsView,
49
51
  ExtensionStorageModel,
52
+ FrameDetailsView,
50
53
  IndexedDBModel,
51
54
  IndexedDBViews,
52
55
  InterestGroupStorageModel,
@@ -54,6 +57,7 @@ export {
54
57
  InterestGroupTreeElement,
55
58
  KeyValueStorageItemsView,
56
59
  OpenedWindowDetailsView,
60
+ OriginTrialTreeView,
57
61
  PreloadingTreeElement,
58
62
  PreloadingView,
59
63
  ReportingApiView,