// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Common from '../../core/common/common.js'; import * as SDK from '../../core/sdk/sdk.js'; import {createIcon} from '../../ui/kit/kit.js'; import type * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js'; import * as UI from '../../ui/legacy/legacy.js'; import {NetworkGroupNode} from './NetworkDataGridNode.js'; import type {GroupLookupInterface, NetworkLogView} from './NetworkLogView.js'; export class NetworkFrameGrouper implements GroupLookupInterface { private parentView: NetworkLogView; private readonly activeGroups: Map; constructor(parentView: NetworkLogView) { this.parentView = parentView; this.activeGroups = new Map(); } groupNodeForRequest(request: SDK.NetworkRequest.NetworkRequest): NetworkGroupNode|null { const frame = SDK.ResourceTreeModel.ResourceTreeModel.frameForRequest(request); if (!frame || frame.isOutermostFrame()) { return null; } let groupNode = this.activeGroups.get(frame); if (groupNode) { return groupNode; } groupNode = new FrameGroupNode(this.parentView, frame); this.activeGroups.set(frame, groupNode); return groupNode; } reset(): void { this.activeGroups.clear(); } } export class FrameGroupNode extends NetworkGroupNode { private readonly frame: SDK.ResourceTreeModel.ResourceTreeFrame; constructor(parentView: NetworkLogView, frame: SDK.ResourceTreeModel.ResourceTreeFrame) { super(parentView); this.frame = frame; } override displayName(): string { return new Common.ParsedURL.ParsedURL(this.frame.url).domain() || this.frame.name || '