chrome-devtools-frontend 1.0.1555174 → 1.0.1556696

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 (156) hide show
  1. package/front_end/core/protocol_client/InspectorBackend.ts +1 -1
  2. package/front_end/core/root/Runtime.ts +0 -4
  3. package/front_end/core/sdk/DOMModel.ts +101 -7
  4. package/front_end/entrypoints/formatter_worker/FormatterActions.ts +2 -0
  5. package/front_end/entrypoints/formatter_worker/ScopeParser.ts +75 -7
  6. package/front_end/entrypoints/formatter_worker/Substitute.ts +1 -1
  7. package/front_end/generated/InspectorBackendCommands.ts +1 -1
  8. package/front_end/generated/protocol.ts +0 -1
  9. package/front_end/models/ai_assistance/AiConversation.ts +71 -10
  10. package/front_end/models/ai_assistance/ArtifactsManager.ts +67 -0
  11. package/front_end/models/ai_assistance/ConversationHandler.ts +3 -2
  12. package/front_end/models/ai_assistance/agents/AiAgent.ts +17 -27
  13. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +152 -4
  14. package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -2
  15. package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
  16. package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
  17. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +0 -2
  18. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -1
  19. package/front_end/{ui/components → models}/annotations/AnnotationRepository.ts +4 -4
  20. package/front_end/models/annotations/README.md +7 -0
  21. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
  22. package/front_end/models/greendev/Prototypes.ts +56 -0
  23. package/front_end/models/greendev/README.md +5 -0
  24. package/front_end/models/greendev/greendev.ts +5 -0
  25. package/front_end/models/stack_trace/StackTrace.ts +13 -2
  26. package/front_end/models/stack_trace/StackTraceImpl.ts +81 -6
  27. package/front_end/models/stack_trace/StackTraceModel.ts +35 -3
  28. package/front_end/models/trace/extras/TraceTree.ts +4 -2
  29. package/front_end/models/trace/insights/LCPDiscovery.ts +0 -2
  30. package/front_end/models/trace/types/TraceEvents.ts +0 -1
  31. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +116 -70
  32. package/front_end/panels/ai_assistance/aiAssistancePanel.css +16 -0
  33. package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +159 -0
  34. package/front_end/panels/ai_assistance/components/ChatView.ts +3 -2
  35. package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +7 -8
  36. package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +15 -8
  37. package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +9 -9
  38. package/front_end/panels/ai_assistance/components/artifactsViewer.css +15 -0
  39. package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +5 -6
  40. package/front_end/panels/application/AppManifestView.ts +263 -205
  41. package/front_end/panels/application/ApplicationPanelSidebar.ts +24 -57
  42. package/front_end/panels/application/OpenedWindowDetailsView.ts +2 -0
  43. package/front_end/panels/application/ServiceWorkersView.ts +2 -0
  44. package/front_end/panels/application/StorageView.ts +1 -0
  45. package/front_end/panels/application/appManifestView.css +48 -0
  46. package/front_end/panels/application/components/ProtocolHandlersView.ts +2 -2
  47. package/front_end/panels/application/preloading/PreloadingView.ts +12 -6
  48. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +230 -237
  49. package/front_end/panels/application/preloading/components/PreloadingGrid.ts +96 -79
  50. package/front_end/panels/application/preloading/components/preloadingGrid.css +26 -29
  51. package/front_end/panels/application/preloading/preloadingView.css +6 -0
  52. package/front_end/panels/common/Annotation.ts +1 -1
  53. package/front_end/panels/common/AnnotationManager.ts +1 -1
  54. package/front_end/panels/common/ExtensionView.ts +1 -0
  55. package/front_end/panels/console/ConsoleContextSelector.ts +74 -9
  56. package/front_end/panels/console/consoleContextSelector.css +31 -29
  57. package/front_end/panels/coverage/coverageListView.css +59 -57
  58. package/front_end/panels/elements/ElementsPanel.ts +1 -1
  59. package/front_end/panels/elements/ElementsTreeElement.ts +39 -1
  60. package/front_end/panels/elements/ElementsTreeOutline.ts +23 -21
  61. package/front_end/panels/elements/TopLayerContainer.ts +26 -91
  62. package/front_end/panels/explain/components/ConsoleInsight.ts +3 -3
  63. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +4 -8
  64. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +148 -97
  65. package/front_end/panels/linear_memory_inspector/components/LinearMemoryViewer.ts +1 -1
  66. package/front_end/panels/linear_memory_inspector/components/linearMemoryValueInterpreter.css +37 -35
  67. package/front_end/panels/network/NetworkItemView.ts +1 -1
  68. package/front_end/panels/network/NetworkLogView.ts +1 -1
  69. package/front_end/panels/network/NetworkPanel.ts +1 -1
  70. package/front_end/panels/recorder/RecorderController.ts +0 -1
  71. package/front_end/panels/security/SecurityPanelSidebar.ts +5 -0
  72. package/front_end/panels/settings/SettingsScreen.ts +133 -1
  73. package/front_end/panels/settings/settings-meta.ts +24 -0
  74. package/front_end/panels/settings/settingsScreen.css +4 -0
  75. package/front_end/panels/sources/UISourceCodeFrame.ts +3 -17
  76. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -8
  77. package/front_end/panels/timeline/components/TimelineSummary.ts +75 -54
  78. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +18 -26
  79. package/front_end/panels/timeline/components/insights/Cache.ts +12 -8
  80. package/front_end/panels/timeline/components/insights/DOMSize.ts +25 -21
  81. package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +7 -7
  82. package/front_end/panels/timeline/components/insights/FontDisplay.ts +7 -5
  83. package/front_end/panels/timeline/components/insights/ForcedReflow.ts +11 -9
  84. package/front_end/panels/timeline/components/insights/INPBreakdown.ts +7 -6
  85. package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -5
  86. package/front_end/panels/timeline/components/insights/InsightRenderer.ts +20 -18
  87. package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +12 -12
  88. package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +7 -7
  89. package/front_end/panels/timeline/components/insights/ModernHTTP.ts +7 -5
  90. package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +15 -13
  91. package/front_end/panels/timeline/components/insights/RenderBlocking.ts +2 -2
  92. package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +15 -14
  93. package/front_end/panels/timeline/components/insights/Table.ts +152 -130
  94. package/front_end/panels/timeline/components/insights/ThirdParties.ts +11 -9
  95. package/front_end/panels/timeline/components/timelineSummary.css +58 -57
  96. package/front_end/panels/timeline/thirdPartyTreeView.css +109 -0
  97. package/front_end/panels/timeline/timelineDetailsView.css +2 -4
  98. package/front_end/panels/timeline/timelinePanel.css +0 -110
  99. package/front_end/third_party/acorn/estree-legacy.d.ts +2 -0
  100. package/front_end/third_party/chromium/README.chromium +1 -1
  101. package/front_end/third_party/puppeteer/README.chromium +2 -2
  102. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.d.ts.map +1 -1
  103. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/CDPSession.js.map +1 -1
  104. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.d.ts.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/ElementHandle.js.map +1 -1
  106. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js.map +1 -1
  108. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  109. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  110. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Connection.d.ts.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +21 -7
  112. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.d.ts.map +1 -1
  114. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  116. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  118. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +15 -6
  119. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.d.ts.map +1 -1
  120. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/CDPSession.js.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/ElementHandle.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Connection.d.ts.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js +21 -7
  129. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/BrowserConnector.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/EventEmitter.d.ts.map +1 -1
  131. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  133. package/front_end/third_party/puppeteer/package/package.json +2 -2
  134. package/front_end/third_party/puppeteer/package/src/api/CDPSession.ts +1 -2
  135. package/front_end/third_party/puppeteer/package/src/api/ElementHandle.ts +2 -4
  136. package/front_end/third_party/puppeteer/package/src/api/Frame.ts +2 -4
  137. package/front_end/third_party/puppeteer/package/src/api/Page.ts +2 -4
  138. package/front_end/third_party/puppeteer/package/src/bidi/core/Connection.ts +3 -2
  139. package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +29 -10
  140. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +3 -3
  141. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  142. package/front_end/ui/components/report_view/ReportView.docs.ts +37 -0
  143. package/front_end/ui/components/report_view/ReportView.ts +1 -4
  144. package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
  145. package/front_end/ui/legacy/Floaty.ts +5 -9
  146. package/front_end/ui/legacy/InspectorView.ts +2 -1
  147. package/front_end/ui/legacy/ReportView.ts +5 -4
  148. package/front_end/ui/legacy/TabbedPane.ts +1 -1
  149. package/front_end/ui/legacy/ViewManager.ts +2 -32
  150. package/front_end/ui/legacy/Widget.ts +7 -0
  151. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +0 -1
  152. package/front_end/ui/legacy/reportView.css +0 -24
  153. package/front_end/ui/visual_logging/KnownContextValues.ts +7 -0
  154. package/package.json +1 -1
  155. /package/front_end/{ui/components → models}/annotations/AnnotationType.ts +0 -0
  156. /package/front_end/{ui/components → models}/annotations/annotations.ts +0 -0
@@ -1,7 +1,6 @@
1
1
  // Copyright 2022 The Chromium Authors
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
- /* eslint-disable @devtools/no-lit-render-outside-of-view */
5
4
 
6
5
  import '../../../../ui/legacy/components/data_grid/data_grid.js';
7
6
  import '../../../../ui/kit/kit.js';
@@ -11,8 +10,7 @@ import * as i18n from '../../../../core/i18n/i18n.js';
11
10
  import type * as Platform from '../../../../core/platform/platform.js';
12
11
  import * as SDK from '../../../../core/sdk/sdk.js';
13
12
  import type * as Protocol from '../../../../generated/protocol.js';
14
- import * as LegacyWrapper from '../../../../ui/components/legacy_wrapper/legacy_wrapper.js';
15
- import type * as UI from '../../../../ui/legacy/legacy.js';
13
+ import * as UI from '../../../../ui/legacy/legacy.js';
16
14
  import * as Lit from '../../../../ui/lit/lit.js';
17
15
 
18
16
  import preloadingGridStyles from './preloadingGrid.css.js';
@@ -41,11 +39,12 @@ const UIStrings = {
41
39
  const str_ = i18n.i18n.registerUIStrings('panels/application/preloading/components/PreloadingGrid.ts', UIStrings);
42
40
  export const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
43
41
 
44
- const {render, html, Directives: {styleMap}} = Lit;
42
+ const {render, html, nothing, Directives: {styleMap}} = Lit;
45
43
 
46
- export interface PreloadingGridData {
47
- rows: PreloadingGridRow[];
48
- pageURL: Platform.DevToolsPath.UrlString;
44
+ // Shorten URL if a preloading attempt is same-origin.
45
+ function urlShort(row: PreloadingGridRow, securityOrigin: string|null): string {
46
+ const url = row.pipeline.getOriginallyTriggered().key.url;
47
+ return securityOrigin && url.startsWith(securityOrigin) ? url.slice(securityOrigin.length) : url;
49
48
  }
50
49
 
51
50
  export interface PreloadingGridRow {
@@ -54,87 +53,105 @@ export interface PreloadingGridRow {
54
53
  ruleSets: Protocol.Preload.RuleSet[];
55
54
  }
56
55
 
57
- /** Grid component to show prerendering attempts. **/
58
- export class PreloadingGrid extends LegacyWrapper.LegacyWrapper.WrappableComponent<UI.Widget.VBox> {
59
- readonly #shadow = this.attachShadow({mode: 'open'});
60
- #data: PreloadingGridData|null = null;
56
+ export interface ViewInput {
57
+ rows?: PreloadingGridRow[];
58
+ pageURL?: Platform.DevToolsPath.UrlString;
59
+ onSelect?: ({rowId}: {rowId: string}) => void;
60
+ }
61
61
 
62
- connectedCallback(): void {
63
- this.#render();
62
+ type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
63
+
64
+ export const PRELOADING_GRID_DEFAULT_VIEW: View = (input, _output, target): void => {
65
+ if (!input.rows || input.pageURL === undefined) {
66
+ render(nothing, target);
67
+ return;
64
68
  }
65
69
 
66
- update(data: PreloadingGridData): void {
67
- this.#data = data;
68
- this.#render();
70
+ const {rows, pageURL} = input;
71
+ const securityOrigin = pageURL === '' ? null : (new Common.ParsedURL.ParsedURL(pageURL)).securityOrigin();
72
+
73
+ // Disabled until https://crbug.com/1079231 is fixed.
74
+ // clang-format off
75
+ render(html`
76
+ <style>${preloadingGridStyles}</style>
77
+ <div class="preloading-container">
78
+ <devtools-data-grid striped>
79
+ <table>
80
+ <tr>
81
+ <th id="url" weight="40" sortable>${i18n.i18n.lockedString('URL')}</th>
82
+ <th id="action" weight="15" sortable>${i18nString(UIStrings.action)}</th>
83
+ <th id="rule-set" weight="20" sortable>${i18nString(UIStrings.ruleSet)}</th>
84
+ <th id="status" weight="40" sortable>${i18nString(UIStrings.status)}</th>
85
+ </tr>
86
+ ${rows.map(row => {
87
+ const attempt = row.pipeline.getOriginallyTriggered();
88
+ const prefetchStatus = row.pipeline.getPrefetch()?.status;
89
+ const prerenderStatus = row.pipeline.getPrerender()?.status;
90
+ const hasWarning =
91
+ (prerenderStatus === PreloadingStatus.FAILURE &&
92
+ (prefetchStatus === PreloadingStatus.READY || prefetchStatus === PreloadingStatus.SUCCESS));
93
+ const hasError = row.pipeline.getOriginallyTriggered().status === PreloadingStatus.FAILURE;
94
+ return html`<tr @select=${() => input.onSelect?.({rowId: row.id})}>
95
+ <td title=${attempt.key.url}>${urlShort(row, securityOrigin)}</td>
96
+ <td>${capitalizedAction(attempt.action)}</td>
97
+ <td>${row.ruleSets.length === 0 ? '' : ruleSetTagOrLocationShort(row.ruleSets[0], pageURL)}</td>
98
+ <td data-value=${sortOrder(attempt)}>
99
+ <div style=${styleMap({color: hasWarning ? 'var(--sys-color-orange-bright)'
100
+ : hasError ? 'var(--sys-color-error)'
101
+ : 'var(--sys-color-on-surface)'})}>
102
+ ${(hasError || hasWarning) ? html`
103
+ <devtools-icon
104
+ name=${hasWarning ? 'warning-filled' : 'cross-circle-filled'}
105
+ class='medium'
106
+ style=${styleMap({
107
+ 'vertical-align': 'sub',
108
+ })}
109
+ ></devtools-icon>` : ''}
110
+ ${hasWarning ? i18nString(UIStrings.prefetchFallbackReady) : composedStatus(attempt)}
111
+ </div>
112
+ </td>
113
+ </tr>`;
114
+ })}
115
+ </table>
116
+ </devtools-data-grid>
117
+ </div>
118
+ `, target);
119
+ }; // clang-format on
120
+
121
+ /** Grid component to show prerendering attempts. **/
122
+ export class PreloadingGrid extends UI.Widget.VBox {
123
+ #view: View;
124
+ #rows?: PreloadingGridRow[];
125
+ #pageURL?: Platform.DevToolsPath.UrlString;
126
+ #onSelect?: ({rowId}: {rowId: string}) => void;
127
+
128
+ constructor(view?: View) {
129
+ super();
130
+ this.#view = view ?? PRELOADING_GRID_DEFAULT_VIEW;
131
+ this.requestUpdate();
69
132
  }
70
133
 
71
- #render(): void {
72
- if (!this.#data) {
73
- return;
74
- }
75
- const {rows, pageURL} = this.#data;
76
- const securityOrigin = pageURL === '' ? null : (new Common.ParsedURL.ParsedURL(pageURL)).securityOrigin();
77
-
78
- // Disabled until https://crbug.com/1079231 is fixed.
79
- // clang-format off
80
- render(html`
81
- <style>${preloadingGridStyles}</style>
82
- <div class="preloading-container">
83
- <devtools-data-grid striped>
84
- <table>
85
- <tr>
86
- <th id="url" weight="40" sortable>${i18n.i18n.lockedString('URL')}</th>
87
- <th id="action" weight="15" sortable>${i18nString(UIStrings.action)}</th>
88
- <th id="rule-set" weight="20" sortable>${i18nString(UIStrings.ruleSet)}</th>
89
- <th id="status" weight="40" sortable>${i18nString(UIStrings.status)}</th>
90
- </tr>
91
- ${rows.map(row => {
92
- const attempt = row.pipeline.getOriginallyTriggered();
93
- const prefetchStatus = row.pipeline.getPrefetch()?.status;
94
- const prerenderStatus = row.pipeline.getPrerender()?.status;
95
- const hasWarning =
96
- (prerenderStatus === PreloadingStatus.FAILURE &&
97
- (prefetchStatus === PreloadingStatus.READY || prefetchStatus === PreloadingStatus.SUCCESS));
98
- const hasError = row.pipeline.getOriginallyTriggered().status === PreloadingStatus.FAILURE;
99
- return html`<tr @select=${() => this.dispatchEvent(new CustomEvent('select', {detail: row.id}))}>
100
- <td title=${attempt.key.url}>${this.#urlShort(row, securityOrigin)}</td>
101
- <td>${capitalizedAction(attempt.action)}</td>
102
- <td>${row.ruleSets.length === 0 ? '' : ruleSetTagOrLocationShort(row.ruleSets[0], pageURL)}</td>
103
- <td data-value=${sortOrder(attempt)}>
104
- <div style=${styleMap({color: hasWarning ? 'var(--sys-color-orange-bright)'
105
- : hasError ? 'var(--sys-color-error)'
106
- : 'var(--sys-color-on-surface)'})}>
107
- ${(hasError || hasWarning) ? html`
108
- <devtools-icon
109
- name=${hasWarning ? 'warning-filled' : 'cross-circle-filled'}
110
- class='medium'
111
- style=${styleMap({
112
- 'vertical-align': 'sub',
113
- })}
114
- ></devtools-icon>` : ''}
115
- ${hasWarning ? i18nString(UIStrings.prefetchFallbackReady) : composedStatus(attempt)}
116
- </div>
117
- </td>
118
- </tr>`;
119
- })}
120
- </table>
121
- </devtools-data-grid>
122
- </div>
123
- `, this.#shadow, {host: this});
124
- // clang-format on
134
+ set rows(rows: PreloadingGridRow[]) {
135
+ this.#rows = rows;
136
+ this.requestUpdate();
125
137
  }
126
138
 
127
- // Shorten URL if a preloading attempt is same-origin.
128
- #urlShort(row: PreloadingGridRow, securityOrigin: string|null): string {
129
- const url = row.pipeline.getOriginallyTriggered().key.url;
130
- return securityOrigin && url.startsWith(securityOrigin) ? url.slice(securityOrigin.length) : url;
139
+ set pageURL(pageURL: Platform.DevToolsPath.UrlString) {
140
+ this.#pageURL = pageURL;
141
+ this.requestUpdate();
131
142
  }
132
- }
133
143
 
134
- customElements.define('devtools-resources-preloading-grid', PreloadingGrid);
144
+ set onSelect(onSelect: ({rowId}: {rowId: string}) => void) {
145
+ this.#onSelect = onSelect;
146
+ this.requestUpdate();
147
+ }
135
148
 
136
- declare global {
137
- interface HTMLElementTagNameMap {
138
- 'devtools-resources-preloading-grid': PreloadingGrid;
149
+ override performUpdate(): void {
150
+ const viewInput: ViewInput = {
151
+ rows: this.#rows,
152
+ pageURL: this.#pageURL,
153
+ onSelect: this.#onSelect?.bind(this),
154
+ };
155
+ this.#view(viewInput, undefined, this.contentElement);
139
156
  }
140
157
  }
@@ -3,37 +3,34 @@
3
3
  * Use of this source code is governed by a BSD-style license that can be
4
4
  * found in the LICENSE file.
5
5
  */
6
+ @scope to (devtools-widget > *){
7
+ .preloading-container {
8
+ overflow: auto;
9
+ height: 100%;
10
+ display: flex;
11
+ flex-direction: column;
6
12
 
7
- :host {
8
- overflow: auto;
9
- height: 100%;
10
- }
11
-
12
- .preloading-container {
13
- height: 100%;
14
- display: flex;
15
- flex-direction: column;
16
- }
13
+ devtools-data-grid {
14
+ flex: auto;
15
+ }
17
16
 
18
- .preloading-header {
19
- font-size: 15px;
20
- background-color: var(--sys-color-cdt-base-container);
21
- padding: 1px 4px;
22
- }
17
+ .inline-icon {
18
+ vertical-align: text-bottom;
19
+ }
20
+ }
23
21
 
24
- .preloading-placeholder {
25
- flex-grow: 1;
26
- display: flex;
27
- align-items: center;
28
- justify-content: center;
29
- font-size: 13px;
30
- color: var(--sys-color-token-subtle);
31
- }
32
-
33
- devtools-data-grid {
34
- flex: auto;
35
- }
22
+ .preloading-header {
23
+ font-size: 15px;
24
+ background-color: var(--sys-color-cdt-base-container);
25
+ padding: 1px 4px;
26
+ }
36
27
 
37
- .inline-icon {
38
- vertical-align: text-bottom;
28
+ .preloading-placeholder {
29
+ flex-grow: 1;
30
+ display: flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ font-size: 13px;
34
+ color: var(--sys-color-token-subtle);
35
+ }
39
36
  }
@@ -26,3 +26,9 @@
26
26
  margin: var(--sys-size-2) 0;
27
27
  }
28
28
  }
29
+
30
+ devtools-split-view {
31
+ .preloading-grid-widget-container > .vbox {
32
+ height: 100%;
33
+ }
34
+ }
@@ -4,7 +4,7 @@
4
4
  /* eslint-disable @devtools/no-imperative-dom-api */
5
5
  /* eslint-disable @devtools/no-lit-render-outside-of-view */
6
6
 
7
- import * as Annotations from '../../ui/components/annotations/annotations.js';
7
+ import * as Annotations from '../../models/annotations/annotations.js';
8
8
  import * as UI from '../../ui/legacy/legacy.js';
9
9
  import * as ThemeSupport from '../../ui/legacy/theme_support/theme_support.js';
10
10
  import {html, nothing, render} from '../../ui/lit/lit.js';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import type * as Common from '../../core/common/common.js';
6
6
  import type * as SDK from '../../core/sdk/sdk.js';
7
- import * as Annotations from '../../ui/components/annotations/annotations.js';
7
+ import * as Annotations from '../../models/annotations/annotations.js';
8
8
 
9
9
  import {Annotation} from './Annotation.js';
10
10
 
@@ -25,6 +25,7 @@ const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement)
25
25
  render(html`<iframe
26
26
  ${ref(element => {output.iframe = element as HTMLIFrameElement; })}
27
27
  src=${input.src}
28
+ allow="language-model; summarizer; translator; language-detector; writer; rewriter; proofreader; clipboard-write; autoplay"
28
29
  class=${input.className}
29
30
  @load=${input.onLoad}></iframe>`, target);
30
31
  // clang-format on
@@ -1,16 +1,17 @@
1
1
  // Copyright 2015 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-imperative-dom-api */
5
4
 
6
5
  import * as Common from '../../core/common/common.js';
7
6
  import * as i18n from '../../core/i18n/i18n.js';
8
7
  import * as Platform from '../../core/platform/platform.js';
9
8
  import * as SDK from '../../core/sdk/sdk.js';
10
9
  import * as UI from '../../ui/legacy/legacy.js';
10
+ import * as Lit from '../../ui/lit/lit.js';
11
11
 
12
12
  import consoleContextSelectorStyles from './consoleContextSelector.css.js';
13
13
 
14
+ const {render, nothing, html} = Lit;
14
15
  const UIStrings = {
15
16
  /**
16
17
  * @description Title of toolbar item in console context selector of the console panel
@@ -211,14 +212,12 @@ export class ConsoleContextSelector implements SDK.TargetManager.SDKModelObserve
211
212
  }
212
213
 
213
214
  createElementForItem(item: SDK.RuntimeModel.ExecutionContext): Element {
214
- const element = document.createElement('div');
215
- const shadowRoot = UI.UIUtils.createShadowRootWithCoreStyles(element, {cssFile: consoleContextSelectorStyles});
216
- const title = shadowRoot.createChild('div', 'title');
217
- UI.UIUtils.createTextChild(title, Platform.StringUtilities.trimEndWithMaxLength(this.titleFor(item), 100));
218
- const subTitle = shadowRoot.createChild('div', 'subtitle');
219
- UI.UIUtils.createTextChild(subTitle, this.subtitleFor(item));
220
- element.style.paddingLeft = (8 + this.depthFor(item) * 15) + 'px';
221
- return element;
215
+ const consoleContextSelectorElement = new ConsoleContextSelectorElement();
216
+ consoleContextSelectorElement.title = this.titleFor(item);
217
+ consoleContextSelectorElement.subtitle = this.subtitleFor(item);
218
+ consoleContextSelectorElement.itemDepth = this.depthFor(item);
219
+ consoleContextSelectorElement.markAsRoot();
220
+ return consoleContextSelectorElement.contentElement;
222
221
  }
223
222
 
224
223
  private subtitleFor(executionContext: SDK.RuntimeModel.ExecutionContext): string {
@@ -293,3 +292,69 @@ export class ConsoleContextSelector implements SDK.TargetManager.SDKModelObserve
293
292
  }
294
293
  }
295
294
  }
295
+
296
+ interface ViewInput {
297
+ title?: string;
298
+ subtitle?: string;
299
+ itemDepth?: number;
300
+ }
301
+
302
+ type View = (input: ViewInput, output: undefined, target: HTMLElement) => void;
303
+
304
+ const DEFAULT_VIEW: View = (input, _output, target): void => {
305
+ if (!input.title || !input.subtitle) {
306
+ render(nothing, target);
307
+ return;
308
+ }
309
+
310
+ const paddingLeft = input.itemDepth ? (8 + input.itemDepth * 15) + 'px' : undefined;
311
+
312
+ // clang-format off
313
+ render(
314
+ html`
315
+ <style>${consoleContextSelectorStyles}</style>
316
+ <div class="console-context-selector-element" style="padding-left: ${paddingLeft};">
317
+ <div class="title">${Platform.StringUtilities.trimEndWithMaxLength(input.title, 100)}</div>
318
+ <div class="subtitle">${input.subtitle}</div>
319
+ </div>
320
+ `,
321
+ target);
322
+ // clang-format on
323
+ };
324
+
325
+ export class ConsoleContextSelectorElement extends UI.Widget.Widget {
326
+ #view: View;
327
+ #title?: string;
328
+ #subtitle?: string;
329
+ #itemDepth?: number;
330
+
331
+ constructor(element?: HTMLElement, view?: View) {
332
+ super(element, {useShadowDom: true});
333
+ this.#view = view ?? DEFAULT_VIEW;
334
+ this.requestUpdate();
335
+ }
336
+
337
+ set title(title: string) {
338
+ this.#title = title;
339
+ this.requestUpdate();
340
+ }
341
+
342
+ set subtitle(subtitle: string) {
343
+ this.#subtitle = subtitle;
344
+ this.requestUpdate();
345
+ }
346
+
347
+ set itemDepth(itemDepth: number) {
348
+ this.#itemDepth = itemDepth;
349
+ this.requestUpdate();
350
+ }
351
+
352
+ override async performUpdate(): Promise<void> {
353
+ const viewInput: ViewInput = {
354
+ title: this.#title,
355
+ subtitle: this.#subtitle,
356
+ itemDepth: this.#itemDepth,
357
+ };
358
+ this.#view(viewInput, undefined, this.contentElement);
359
+ }
360
+ }
@@ -4,37 +4,39 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
- :host {
8
- padding: 2px 1px 2px 2px;
9
- white-space: nowrap;
10
- display: flex;
11
- flex-direction: column;
12
- height: 36px;
13
- justify-content: center;
14
- overflow-y: auto;
15
- }
7
+ .widget {
8
+ .console-context-selector-element{
9
+ padding: 2px 1px 2px 2px;
10
+ white-space: nowrap;
11
+ display: flex;
12
+ flex-direction: column;
13
+ height: 36px;
14
+ justify-content: center;
15
+ overflow-y: auto;
16
16
 
17
- .title {
18
- overflow: hidden;
19
- text-overflow: ellipsis;
20
- flex-grow: 0;
21
- }
17
+ .title {
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ flex-grow: 0;
21
+ }
22
22
 
23
- .badge {
24
- pointer-events: none;
25
- margin-right: 4px;
26
- display: inline-block;
27
- height: 15px;
28
- }
23
+ .subtitle {
24
+ color: var(--sys-color-token-subtle);
25
+ margin-right: 3px;
26
+ overflow: hidden;
27
+ text-overflow: ellipsis;
28
+ flex-grow: 0;
29
+ }
29
30
 
30
- .subtitle {
31
- color: var(--sys-color-token-subtle);
32
- margin-right: 3px;
33
- overflow: hidden;
34
- text-overflow: ellipsis;
35
- flex-grow: 0;
36
- }
31
+ .badge {
32
+ pointer-events: none;
33
+ margin-right: 4px;
34
+ display: inline-block;
35
+ height: 15px;
36
+ }
37
+ }
37
38
 
38
- :host(.highlighted) .subtitle {
39
- color: inherit;
39
+ &.highlighted .console-context-selector-element .subtitle {
40
+ color: inherit;
41
+ }
40
42
  }
@@ -4,80 +4,82 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
- .data-grid {
8
- border: none;
9
- }
10
-
11
- .data-grid td .url-outer {
12
- width: 100%;
13
- display: inline-flex;
14
- justify-content: flex-start;
15
- }
16
-
17
- .data-grid td .url-outer .filter-highlight {
18
- font-weight: bold;
19
- }
20
-
21
- .data-grid td .url-prefix {
22
- overflow-x: hidden;
23
- text-overflow: ellipsis;
24
- }
25
-
26
- .data-grid td .url-suffix {
27
- flex: none;
28
- }
7
+ @scope to (devtools-widget > *) {
8
+ .data-grid {
9
+ border: none;
10
+ }
29
11
 
30
- .data-grid td .bar {
31
- display: inline-block;
32
- height: 8px;
33
- border: 1px solid transparent;
34
- }
12
+ .data-grid td .url-outer {
13
+ width: 100%;
14
+ display: inline-flex;
15
+ justify-content: flex-start;
16
+ }
35
17
 
36
- .data-grid td .bar-unused-size {
37
- background-color: var(--app-color-coverage-unused);
38
- }
18
+ .data-grid td .url-outer .filter-highlight {
19
+ font-weight: bold;
20
+ }
39
21
 
40
- .data-grid td .bar-used-size {
41
- background-color: var(--app-color-coverage-used);
42
- }
22
+ .data-grid td .url-prefix {
23
+ overflow-x: hidden;
24
+ text-overflow: ellipsis;
25
+ }
43
26
 
44
- .data-grid td .percent-value {
45
- width: 7ex;
46
- display: inline-block;
47
- color: var(--sys-color-on-surface-subtle);
48
- }
27
+ .data-grid td .url-suffix {
28
+ flex: none;
29
+ }
49
30
 
50
- @media (forced-colors: active) {
51
- .data-grid td .bar-container {
52
- forced-color-adjust: none;
31
+ .data-grid td .bar {
32
+ display: inline-block;
33
+ height: 8px;
34
+ border: 1px solid transparent;
53
35
  }
54
36
 
55
37
  .data-grid td .bar-unused-size {
56
- background-color: ButtonText;
38
+ background-color: var(--app-color-coverage-unused);
57
39
  }
58
40
 
59
41
  .data-grid td .bar-used-size {
60
- background-color: ButtonFace;
42
+ background-color: var(--app-color-coverage-used);
61
43
  }
62
44
 
63
- .data-grid td .bar {
64
- border-color: ButtonText;
45
+ .data-grid td .percent-value {
46
+ width: 7ex;
47
+ display: inline-block;
48
+ color: var(--sys-color-on-surface-subtle);
65
49
  }
66
50
 
67
- .data-grid .selected td .bar {
68
- border-top-color: HighlightText;
69
- border-bottom-color: HighlightText;
70
- }
51
+ @media (forced-colors: active) {
52
+ .data-grid td .bar-container {
53
+ forced-color-adjust: none;
54
+ }
71
55
 
72
- .data-grid .selected td .bar:last-child {
73
- border-right-color: HighlightText;
74
- }
56
+ .data-grid td .bar-unused-size {
57
+ background-color: ButtonText;
58
+ }
75
59
 
76
- .data-grid .selected td .bar:first-child {
77
- border-left-color: HighlightText;
78
- }
60
+ .data-grid td .bar-used-size {
61
+ background-color: ButtonFace;
62
+ }
63
+
64
+ .data-grid td .bar {
65
+ border-color: ButtonText;
66
+ }
67
+
68
+ .data-grid .selected td .bar {
69
+ border-top-color: HighlightText;
70
+ border-bottom-color: HighlightText;
71
+ }
72
+
73
+ .data-grid .selected td .bar:last-child {
74
+ border-right-color: HighlightText;
75
+ }
76
+
77
+ .data-grid .selected td .bar:first-child {
78
+ border-left-color: HighlightText;
79
+ }
79
80
 
80
- .data-grid:focus tr.selected span.percent-value {
81
- color: HighlightText;
81
+ .data-grid:focus tr.selected span.percent-value {
82
+ color: HighlightText;
83
+ }
82
84
  }
83
85
  }
@@ -40,9 +40,9 @@ import * as Platform from '../../core/platform/platform.js';
40
40
  import * as Root from '../../core/root/root.js';
41
41
  import * as SDK from '../../core/sdk/sdk.js';
42
42
  import type * as Protocol from '../../generated/protocol.js';
43
+ import * as Annotations from '../../models/annotations/annotations.js';
43
44
  import * as PanelCommon from '../../panels/common/common.js';
44
45
  import type * as Adorners from '../../ui/components/adorners/adorners.js';
45
- import * as Annotations from '../../ui/components/annotations/annotations.js';
46
46
  import * as Buttons from '../../ui/components/buttons/buttons.js';
47
47
  import * as TreeOutline from '../../ui/components/tree_outline/tree_outline.js';
48
48
  import * as UI from '../../ui/legacy/legacy.js';