Skip to content

Commit ff9bf3f

Browse files
danilsomsikovDevtools-frontend LUCI CQ
authored andcommitted
Adopt UI eng vision in panels/utils
Bug: 407751425 Change-Id: I7a3d289904c1661b75dacf0fb1c9d4047f000083 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6520599 Auto-Submit: Danil Somsikov <dsv@chromium.org> Commit-Queue: Alex Rudenko <alexrudenko@chromium.org> Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
1 parent 6e4e34a commit ff9bf3f

File tree

13 files changed

+103
-96
lines changed

13 files changed

+103
-96
lines changed

front_end/models/ai_assistance/agents/AiAgent.test.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {mockAidaClient} from '../../../testing/AiAssistanceHelpers.js';
77
import {
88
describeWithEnvironment,
99
} from '../../../testing/EnvironmentHelpers.js';
10+
import {html, type TemplateResult} from '../../../ui/lit/lit.js';
1011
import * as AiAssistance from '../ai_assistance.js';
1112

1213
const {AiAgent, ResponseType, ConversationContext, ErrorType} = AiAssistance;
@@ -21,8 +22,8 @@ function mockConversationContext(): AiAssistance.ConversationContext<unknown> {
2122
return null;
2223
}
2324

24-
override getIcon(): HTMLElement {
25-
return document.createElement('span');
25+
override getIcon(): TemplateResult {
26+
return html`<span></span>`;
2627
}
2728

2829
override getTitle(): string {
@@ -359,7 +360,7 @@ describeWithEnvironment('AiAgent', () => {
359360
describe('ConversationContext', () => {
360361
function getTestContext(origin: string) {
361362
class TestContext extends ConversationContext<undefined> {
362-
override getIcon(): HTMLElement {
363+
override getIcon(): TemplateResult {
363364
throw new Error('Method not implemented.');
364365
}
365366
override getTitle(): string {

front_end/models/ai_assistance/agents/AiAgent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ export interface ConversationSuggestion {
151151
export abstract class ConversationContext<T> {
152152
abstract getOrigin(): string;
153153
abstract getItem(): T;
154-
abstract getIcon(): HTMLElement|undefined;
154+
abstract getIcon(): Lit.TemplateResult|undefined;
155155
abstract getTitle(opts?: {disabled: boolean}): string|ReturnType<typeof Lit.Directives.until>;
156156

157157
isOriginAllowed(agentOrigin: string|undefined): boolean {

front_end/models/ai_assistance/agents/FileAgent.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as Host from '../../../core/host/host.js';
66
import * as i18n from '../../../core/i18n/i18n.js';
77
import * as Root from '../../../core/root/root.js';
88
import * as PanelUtils from '../../../panels/utils/utils.js';
9+
import type {TemplateResult} from '../../../ui/lit/lit.js';
910
import type * as Workspace from '../../workspace/workspace.js';
1011
import {FileFormatter} from '../data_formatters/FileFormatter.js';
1112

@@ -91,7 +92,7 @@ export class FileContext extends ConversationContext<Workspace.UISourceCode.UISo
9192
return this.#file;
9293
}
9394

94-
override getIcon(): HTMLElement {
95+
override getIcon(): TemplateResult {
9596
return PanelUtils.PanelUtils.getIconForSourceFile(this.#file);
9697
}
9798

front_end/models/ai_assistance/agents/NetworkAgent.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as i18n from '../../../core/i18n/i18n.js';
77
import * as Root from '../../../core/root/root.js';
88
import type * as SDK from '../../../core/sdk/sdk.js';
99
import * as PanelUtils from '../../../panels/utils/utils.js';
10+
import type {TemplateResult} from '../../../ui/lit/lit.js';
1011
import {NetworkRequestFormatter} from '../data_formatters/NetworkRequestFormatter.js';
1112

1213
import {
@@ -108,7 +109,7 @@ export class RequestContext extends ConversationContext<SDK.NetworkRequest.Netwo
108109
return this.#request;
109110
}
110111

111-
override getIcon(): HTMLElement {
112+
override getIcon(): TemplateResult {
112113
return PanelUtils.PanelUtils.getIconForNetworkRequest(this.#request);
113114
}
114115

front_end/models/ai_assistance/agents/PerformanceAgent.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import '../../../ui/components/icon_button/icon_button.js';
6+
57
import * as Common from '../../../core/common/common.js';
68
import * as Host from '../../../core/host/host.js';
79
import * as i18n from '../../../core/i18n/i18n.js';
810
import * as Root from '../../../core/root/root.js';
911
import * as TimelineUtils from '../../../panels/timeline/utils/utils.js';
10-
import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
12+
import {html, type TemplateResult} from '../../../ui/lit/lit.js';
1113
import * as Trace from '../../trace/trace.js';
1214

1315
import {
@@ -173,11 +175,9 @@ export class CallTreeContext extends ConversationContext<TimelineUtils.AICallTre
173175
return this.#callTree;
174176
}
175177

176-
override getIcon(): HTMLElement {
177-
const icon = IconButton.Icon.create('performance', 'icon');
178-
icon.style.color = 'var(--sys-color-on-surface-subtle)';
179-
icon.title = 'Performance';
180-
return icon;
178+
override getIcon(): TemplateResult {
179+
return html`<devtools-icon name="performance" title="Performance"
180+
style="color: var(--sys-color-on-surface-subtle);"></devtools-icon>`;
181181
}
182182

183183
override getTitle(): string {

front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as i18n from '../../../core/i18n/i18n.js';
77
import * as Platform from '../../../core/platform/platform.js';
88
import * as Root from '../../../core/root/root.js';
99
import * as TimelineUtils from '../../../panels/timeline/utils/utils.js';
10-
import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
10+
import {html, type TemplateResult} from '../../../ui/lit/lit.js';
1111
import {PerformanceInsightFormatter, TraceEventFormatter} from '../data_formatters/PerformanceInsightFormatter.js';
1212
import {debugLog} from '../debug.js';
1313

@@ -121,11 +121,9 @@ export class InsightContext extends ConversationContext<TimelineUtils.InsightAIC
121121
return this.#insight;
122122
}
123123

124-
override getIcon(): HTMLElement {
125-
const icon = IconButton.Icon.create('performance', 'icon');
126-
icon.style.color = 'var(--sys-color-on-surface-subtle)';
127-
icon.title = 'Performance';
128-
return icon;
124+
override getIcon(): TemplateResult {
125+
return html`<devtools-icon name="performance" title="Performance"
126+
style="color: var(--sys-color-on-surface-subtle);"></devtools-icon>`;
129127
}
130128

131129
override getTitle(): string {

front_end/panels/changes/CombinedDiffView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ interface SingleDiffViewInput {
4242
fileName: string;
4343
fileUrl: string;
4444
mimeType: string;
45-
icon: HTMLElement;
45+
icon: Lit.TemplateResult;
4646
diff: Diff.Diff.DiffArray;
4747
copied: boolean;
4848
selectedFileUrl?: string;

front_end/panels/network/NetworkDataGridNode.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
5353
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
5454
import * as Components from '../../ui/legacy/components/utils/utils.js';
5555
import * as UI from '../../ui/legacy/legacy.js';
56+
import {render} from '../../ui/lit/lit.js';
5657
import {PanelUtils} from '../utils/utils.js';
5758

5859
import type {NetworkTimeCalculator} from './NetworkTimeCalculator.js';
@@ -1107,7 +1108,8 @@ export class NetworkRequestNode extends NetworkNode {
11071108

11081109
// render icons
11091110
const iconElement = PanelUtils.getIconForNetworkRequest(this.requestInternal);
1110-
cell.appendChild(iconElement);
1111+
// eslint-disable-next-line rulesdir/no-lit-render-outside-of-view
1112+
render(iconElement, cell);
11111113

11121114
// render Ask AI button
11131115
const aiButtonContainer = this.createAiButtonIfAvailable();

front_end/panels/utils/utils.test.ts

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import * as Common from '../../core/common/common.js';
66
import * as Platform from '../../core/platform/platform.js';
77
import * as SDK from '../../core/sdk/sdk.js';
88
import type * as Protocol from '../../generated/protocol.js';
9+
import {renderElementIntoDOM} from '../../testing/DOMHelpers.js';
910
import {describeWithEnvironment} from '../../testing/EnvironmentHelpers.js';
1011
import * as Diff from '../../third_party/diff/diff.js';
12+
import {render} from '../../ui/lit/lit.js';
1113

1214
import * as PanelUtils from './utils.js';
1315

@@ -75,12 +77,20 @@ describeWithEnvironment('panels/utils', () => {
7577
});
7678

7779
describe('getIconForNetworkRequest', () => {
80+
function renderIcon(request: SDK.NetworkRequest.NetworkRequest): HTMLElement {
81+
const container = document.createElement('div');
82+
renderElementIntoDOM(container);
83+
render(PanelUtils.PanelUtils.getIconForNetworkRequest(request), container);
84+
assert.instanceOf(container.firstElementChild, HTMLElement);
85+
return container.firstElementChild;
86+
}
87+
7888
it('creates an error red icon for request with status code 404', async () => {
7989
const request = SDK.NetworkRequest.NetworkRequest.create(
8090
'requestId' as Protocol.Network.RequestId, urlString`https://www.example.com`, urlString``, null, null, null);
8191
request.statusCode = 404;
8292

83-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
93+
const iconElement = renderIcon(request);
8494
const iconImage = iconElement.getAttribute('name');
8595
assert.strictEqual('cross-circle-filled', iconImage);
8696

@@ -95,7 +105,7 @@ describeWithEnvironment('panels/utils', () => {
95105
request.setResourceType(Common.ResourceType.resourceTypes.Document);
96106
request.mimeType = 'text/html';
97107

98-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
108+
const iconElement = renderIcon(request);
99109
const iconImage = iconElement.getAttribute('name');
100110
assert.strictEqual('file-document', iconImage);
101111

@@ -110,7 +120,7 @@ describeWithEnvironment('panels/utils', () => {
110120
request.setResourceType(Common.ResourceType.resourceTypes.Media);
111121
request.mimeType = 'audio/mpeg';
112122

113-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
123+
const iconElement = renderIcon(request);
114124
const iconImage = iconElement.getAttribute('name');
115125
assert.strictEqual('file-media', iconImage);
116126
});
@@ -122,7 +132,7 @@ describeWithEnvironment('panels/utils', () => {
122132
request.setResourceType(Common.ResourceType.resourceTypes.Wasm);
123133
request.mimeType = 'application/wasm';
124134

125-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
135+
const iconElement = renderIcon(request);
126136
const iconImage = iconElement.getAttribute('name');
127137
assert.strictEqual('file-wasm', iconImage);
128138
});
@@ -134,7 +144,7 @@ describeWithEnvironment('panels/utils', () => {
134144
request.setResourceType(Common.ResourceType.resourceTypes.WebSocket);
135145
request.mimeType = '';
136146

137-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
147+
const iconElement = renderIcon(request);
138148
const iconImage = iconElement.getAttribute('name');
139149
assert.strictEqual('file-websocket', iconImage);
140150
});
@@ -146,7 +156,7 @@ describeWithEnvironment('panels/utils', () => {
146156
request.setResourceType(Common.ResourceType.resourceTypes.Fetch);
147157
request.mimeType = '';
148158

149-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
159+
const iconElement = renderIcon(request);
150160
const iconImage = iconElement.getAttribute('name');
151161
assert.strictEqual('file-fetch-xhr', iconImage);
152162
});
@@ -158,7 +168,7 @@ describeWithEnvironment('panels/utils', () => {
158168
request.setResourceType(Common.ResourceType.resourceTypes.XHR);
159169
request.mimeType = 'application/octet-stream';
160170

161-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
171+
const iconElement = renderIcon(request);
162172
const iconImage = iconElement.getAttribute('name');
163173
assert.strictEqual('file-fetch-xhr', iconImage);
164174
});
@@ -170,7 +180,7 @@ describeWithEnvironment('panels/utils', () => {
170180
request.setResourceType(Common.ResourceType.resourceTypes.XHR);
171181
request.mimeType = 'image/svg+xml';
172182

173-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
183+
const iconElement = renderIcon(request);
174184
const imagePreview = iconElement.querySelector('.image-network-icon-preview') as HTMLImageElement;
175185

176186
assert.instanceOf(iconElement, HTMLDivElement);
@@ -184,7 +194,7 @@ describeWithEnvironment('panels/utils', () => {
184194
request.setResourceType(Common.ResourceType.resourceTypes.Fetch);
185195
request.mimeType = 'text/html';
186196

187-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
197+
const iconElement = renderIcon(request);
188198
const iconImage = iconElement.getAttribute('name');
189199
assert.strictEqual('file-document', iconImage);
190200
});
@@ -196,7 +206,7 @@ describeWithEnvironment('panels/utils', () => {
196206
request.setResourceType(Common.ResourceType.resourceTypes.Preflight);
197207
request.mimeType = 'text/plain';
198208

199-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
209+
const iconElement = renderIcon(request);
200210
const iconImage = iconElement.getAttribute('name');
201211
assert.strictEqual('file-generic', iconImage);
202212
});
@@ -208,7 +218,7 @@ describeWithEnvironment('panels/utils', () => {
208218
request.setResourceType(Common.ResourceType.resourceTypes.Other);
209219
request.mimeType = 'application/javascript';
210220

211-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
221+
const iconElement = renderIcon(request);
212222
const iconImage = iconElement.getAttribute('name');
213223
assert.strictEqual('file-script', iconImage);
214224
});
@@ -220,7 +230,7 @@ describeWithEnvironment('panels/utils', () => {
220230
request.setResourceType(Common.ResourceType.resourceTypes.Fetch);
221231
request.mimeType = 'application/json';
222232

223-
const iconElement = PanelUtils.PanelUtils.getIconForNetworkRequest(request);
233+
const iconElement = renderIcon(request);
224234
const iconImage = iconElement.getAttribute('name');
225235
assert.strictEqual('file-json', iconImage);
226236
});

0 commit comments

Comments
 (0)