Skip to content

Commit 7e6df93

Browse files
paulirishDevtools-frontend LUCI CQ
authored andcommitted
RPP: Move RevealableNetworkRequest class to SDK
This class is used to link to Network panel from Performance. But, due to the subtleties of how providers and our *-meta.ts files work, the entire trace model was imported during devtools boot. Moving where the class lives means we can reduce the import dependencies needed to start up the baseline DevTools UI. Bug:390743134, 352512721 Change-Id: Ic21aa122ef4886ec16af1e852cdf1854a22e24e4 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6183081 Reviewed-by: Danil Somsikov <[email protected]> Commit-Queue: Paul Irish <[email protected]> Reviewed-by: Jack Franklin <[email protected]>
1 parent 971865f commit 7e6df93

File tree

10 files changed

+45
-66
lines changed

10 files changed

+45
-66
lines changed

config/gni/devtools_grd_files.gni

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1916,7 +1916,6 @@ grd_files_debug_sources = [
19161916
"front_end/panels/timeline/utils/Helpers.js",
19171917
"front_end/panels/timeline/utils/IgnoreList.js",
19181918
"front_end/panels/timeline/utils/ImageCache.js",
1919-
"front_end/panels/timeline/utils/NetworkRequest.js",
19201919
"front_end/panels/timeline/utils/SourceMapsResolver.js",
19211920
"front_end/panels/web_audio/AudioContextContentBuilder.js",
19221921
"front_end/panels/web_audio/AudioContextSelector.js",

front_end/core/sdk/TraceObject.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
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 * as Common from '../../core/common/common.js';
6+
import type * as Platform from '../../core/platform/platform.js';
57
import type * as Protocol from '../../generated/protocol.js';
68

9+
import type {NetworkRequest} from './NetworkRequest.js';
10+
import {ResourceTreeModel} from './ResourceTreeModel.js';
11+
712
// A thin wrapper class, mostly to enable instanceof-based revealing of traces to open in Timeline.
813
export class TraceObject {
914
readonly traceEvents: Protocol.Tracing.DataCollectedEvent['value'];
@@ -21,3 +26,30 @@ export class RevealableEvent {
2126
constructor(public event: any) {
2227
}
2328
}
29+
30+
/**
31+
* Another wrapper class for revealing network requests in Network panel. The reason is the `Open in Network panel`
32+
* option is handled by the context menu provider, which will add this option for all supporting types. And there are a
33+
* lot of context menu providers that support `SDK.NetworkRequest.NetworkRequest`, for example `Override content` by
34+
* PersistenceActions, but we so far just want the one to reveal in network panel, so add a new class which will only be
35+
* supported by Network panel.
36+
*
37+
* Also we want to have a different behavior(select the network request) from the `SDK.NetworkRequest.NetworkRequest`
38+
* (highlight the network request once).
39+
*/
40+
export class RevealableNetworkRequest {
41+
constructor(public networkRequest: NetworkRequest) {
42+
}
43+
44+
// Only Trace.Types.Events.SyntheticNetworkRequest are passed in, but we can't depend on that type from SDK
45+
static create(event: unknown): RevealableNetworkRequest|null {
46+
const syntheticNetworkRequest = event;
47+
// @ts-expect-error We don't have type checking here to confirm these events have .args.data.url.
48+
const url = syntheticNetworkRequest.args.data.url as Platform.DevToolsPath.UrlString;
49+
const urlWithoutHash = Common.ParsedURL.ParsedURL.urlWithoutHash(url) as Platform.DevToolsPath.UrlString;
50+
51+
const resource = ResourceTreeModel.resourceForURL(url) ?? ResourceTreeModel.resourceForURL(urlWithoutHash);
52+
const sdkNetworkRequest = resource?.request;
53+
return sdkNetworkRequest ? new RevealableNetworkRequest(sdkNetworkRequest) : null;
54+
}
55+
}

front_end/panels/network/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ devtools_module("network") {
7979
"../../panels/mobile_throttling:bundle",
8080
"../../panels/search:bundle",
8181
"../../panels/sources:bundle",
82-
"../../panels/timeline/utils:bundle",
8382
"../../panels/utils:bundle",
8483
"../../third_party/chromium/client-variations:bundle",
8584
"../../ui/components/expandable_list:bundle",

front_end/panels/network/NetworkPanel.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import * as UI from '../../ui/legacy/legacy.js';
5050
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
5151
import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js';
5252
import * as Search from '../search/search.js';
53-
import * as TimelineUtils from '../timeline/utils/utils.js';
5453

5554
import {Events, type RequestActivatedEvent} from './NetworkDataGridNode.js';
5655
import {NetworkItemView} from './NetworkItemView.js';
@@ -767,7 +766,7 @@ export class NetworkPanel extends UI.Panel.Panel implements
767766
appendApplicableItems(
768767
this: NetworkPanel, event: Event, contextMenu: UI.ContextMenu.ContextMenu,
769768
target: SDK.NetworkRequest.NetworkRequest|SDK.Resource.Resource|Workspace.UISourceCode.UISourceCode|
770-
TimelineUtils.NetworkRequest.TimelineNetworkRequest): void {
769+
SDK.TraceObject.RevealableNetworkRequest): void {
771770
const appendRevealItem = (request: SDK.NetworkRequest.NetworkRequest): void => {
772771
contextMenu.revealSection().appendItem(
773772
i18nString(UIStrings.openInNetworkPanel),
@@ -783,14 +782,14 @@ export class NetworkPanel extends UI.Panel.Panel implements
783782
jslogContext: 'reveal-in-network',
784783
});
785784
};
786-
const appendRevealItemAndSelect = (request: TimelineUtils.NetworkRequest.TimelineNetworkRequest): void => {
785+
const appendRevealItemAndSelect = (request: SDK.TraceObject.RevealableNetworkRequest): void => {
787786
contextMenu.revealSection().appendItem(
788787
i18nString(UIStrings.openInNetworkPanel),
789788
() => UI.ViewManager.ViewManager.instance()
790789
.showView('network')
791790
.then(this.networkLogView.resetFilter.bind(this.networkLogView))
792791
.then(this.selectAndActivateRequest.bind(
793-
this, request.request, NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT,
792+
this, request.networkRequest, NetworkForward.UIRequestLocation.UIRequestTabs.HEADERS_COMPONENT,
794793
/* FilterOptions= */ undefined)),
795794
{jslogContext: 'timeline.reveal-in-network'});
796795
};
@@ -816,7 +815,7 @@ export class NetworkPanel extends UI.Panel.Panel implements
816815
}
817816
return;
818817
}
819-
if (target instanceof TimelineUtils.NetworkRequest.TimelineNetworkRequest) {
818+
if (target instanceof SDK.TraceObject.RevealableNetworkRequest) {
820819
appendRevealItemAndSelect(target);
821820
return;
822821
}

front_end/panels/network/network-meta.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import * as SDK from '../../core/sdk/sdk.js';
1010
import * as Extensions from '../../models/extensions/extensions.js';
1111
import * as Workspace from '../../models/workspace/workspace.js';
1212
import * as UI from '../../ui/legacy/legacy.js';
13-
import * as TimelineUtils from '../timeline/utils/utils.js';
1413

1514
import * as NetworkForward from './forward/forward.js';
1615
import type * as Network from './network.js';
@@ -443,7 +442,7 @@ UI.ContextMenu.registerProvider({
443442
SDK.NetworkRequest.NetworkRequest,
444443
SDK.Resource.Resource,
445444
Workspace.UISourceCode.UISourceCode,
446-
TimelineUtils.NetworkRequest.TimelineNetworkRequest,
445+
SDK.TraceObject.RevealableNetworkRequest,
447446
];
448447
},
449448
async loadProvider() {

front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import * as i18n from '../../core/i18n/i18n.js';
66
import * as Platform from '../../core/platform/platform.js';
7+
import * as SDK from '../../core/sdk/sdk.js';
78
import * as Trace from '../../models/trace/trace.js';
89
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
910
import * as UI from '../../ui/legacy/legacy.js';
@@ -141,7 +142,7 @@ export class TimelineFlameChartNetworkDataProvider implements PerfUI.FlameChart.
141142
if (!networkRequest || !Trace.Types.Events.isSyntheticNetworkRequest(networkRequest)) {
142143
return;
143144
}
144-
const timelineNetworkRequest = TimelineUtils.NetworkRequest.createTimelineNetworkRequest(networkRequest);
145+
const timelineNetworkRequest = SDK.TraceObject.RevealableNetworkRequest.create(networkRequest);
145146
const contextMenu = new UI.ContextMenu.ContextMenu(event);
146147
contextMenu.appendApplicableItems(timelineNetworkRequest);
147148
return contextMenu;

front_end/panels/timeline/components/NetworkRequestDetails.ts

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ import '../../../ui/components/request_link_icon/request_link_icon.js';
66

77
import * as i18n from '../../../core/i18n/i18n.js';
88
import type * as Platform from '../../../core/platform/platform.js';
9-
import type * as SDK from '../../../core/sdk/sdk.js';
9+
import * as SDK from '../../../core/sdk/sdk.js';
1010
import * as Helpers from '../../../models/trace/helpers/helpers.js';
1111
import * as Trace from '../../../models/trace/trace.js';
1212
import * as LegacyComponents from '../../../ui/legacy/components/utils/utils.js';
1313
import * as UI from '../../../ui/legacy/legacy.js';
1414
import * as LitHtml from '../../../ui/lit-html/lit-html.js';
15-
import * as TimelineUtils from '../utils/utils.js';
15+
import type * as TimelineUtils from '../utils/utils.js';
1616

1717
import NetworkRequestDetailsStyles from './networkRequestDetails.css.js';
1818
import networkRequestTooltipStyles from './networkRequestTooltip.css.js';
@@ -168,28 +168,22 @@ export class NetworkRequestDetails extends HTMLElement {
168168
const linkifiedURL = LegacyComponents.Linkifier.Linkifier.linkifyURL(
169169
this.#networkRequest.args.data.url as Platform.DevToolsPath.UrlString, options);
170170

171-
const networkRequest = TimelineUtils.NetworkRequest.getNetworkRequest(this.#networkRequest);
171+
// Potentially link to request within Network Panel
172+
const networkRequest = SDK.TraceObject.RevealableNetworkRequest.create(this.#networkRequest);
172173
if (networkRequest) {
173174
linkifiedURL.addEventListener('contextmenu', (event: MouseEvent) => {
174175
if (!this.#networkRequest) {
175176
return;
176177
}
177-
// Add a wrapper class here.
178-
// The main reason is the `Open in Network panel` option is handled by the context menu provider, which will
179-
// add this option for all supporting types. And there are a lot of context menu providers that support
180-
// `SDK.NetworkRequest.NetworkRequest`, for example `Override content` by PersistenceActions, but we so far just
181-
// want the one to reveal in network panel, so add a new class which will only be supported by Network panel.
182-
// Also we want to have a different behavior(select the network request) from the
183-
// `SDK.NetworkRequest.NetworkRequest` (highlight the network request once).
184178
const contextMenu = new UI.ContextMenu.ContextMenu(event);
185-
contextMenu.appendApplicableItems(new TimelineUtils.NetworkRequest.TimelineNetworkRequest(networkRequest));
179+
contextMenu.appendApplicableItems(networkRequest);
186180
void contextMenu.show();
187181
});
188182

189183
// clang-format off
190184
const urlElement = html`
191185
${linkifiedURL}
192-
<devtools-request-link-icon .data=${{request: networkRequest}}>
186+
<devtools-request-link-icon .data=${{request: networkRequest.networkRequest}}>
193187
</devtools-request-link-icon>
194188
`;
195189
// clang-format on

front_end/panels/timeline/utils/BUILD.gn

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ devtools_module("utils") {
1414
"Helpers.ts",
1515
"IgnoreList.ts",
1616
"ImageCache.ts",
17-
"NetworkRequest.ts",
1817
"SourceMapsResolver.ts",
1918
]
2019

@@ -26,7 +25,6 @@ devtools_module("utils") {
2625
"../../../models/bindings:bundle",
2726
"../../../models/crux-manager:bundle",
2827
"../../../models/source_map_scopes:bundle",
29-
"../../../models/timeline_model:bundle",
3028
"../../../models/trace:bundle",
3129
"../../../models/workspace:bundle",
3230
"../../../panels/mobile_throttling:bundle",

front_end/panels/timeline/utils/NetworkRequest.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

front_end/panels/timeline/utils/utils.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import * as EntryStyles from './EntryStyles.js';
88
import * as Helpers from './Helpers.js';
99
import * as IgnoreList from './IgnoreList.js';
1010
import * as ImageCache from './ImageCache.js';
11-
import * as NetworkRequest from './NetworkRequest.js';
1211
import * as SourceMapsResolver from './SourceMapsResolver.js';
1312

1413
export {
@@ -19,6 +18,5 @@ export {
1918
Helpers,
2019
IgnoreList,
2120
ImageCache,
22-
NetworkRequest,
2321
SourceMapsResolver,
2422
};

0 commit comments

Comments
 (0)