chrome-devtools-frontend
Version:
Chrome DevTools UI
170 lines (133 loc) • 6.56 kB
text/typescript
// Copyright 2022 The Chromium Authors. All rights reserved.
// 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 Platform from '../../core/platform/platform.js';
import * as SDK from '../../core/sdk/sdk.js';
import type * as Protocol from '../../generated/protocol.js';
import {renderElementIntoDOM} from '../../testing/DOMHelpers.js';
import {
deinitializeGlobalVars,
describeWithEnvironment,
} from '../../testing/EnvironmentHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {setUpEnvironment} from '../../testing/OverridesHelpers.js';
import type * as UI from '../../ui/legacy/legacy.js';
import * as NetworkForward from './forward/forward.js';
import * as Network from './network.js';
const {urlString} = Platform.DevToolsPath;
function renderNetworkItemView(request?: SDK.NetworkRequest.NetworkRequest): Network.NetworkItemView.NetworkItemView {
if (!request) {
request = SDK.NetworkRequest.NetworkRequest.create(
'requestId' as Protocol.Network.RequestId, urlString`https://www.example.com/foo.html`, urlString``, null, null,
null);
}
const networkItemView =
new Network.NetworkItemView.NetworkItemView(request, {} as Network.NetworkTimeCalculator.NetworkTimeCalculator);
const div = document.createElement('div');
renderElementIntoDOM(div);
networkItemView.markAsRoot();
networkItemView.show(div);
return networkItemView;
}
function getOverrideIndicator(tabs: UI.TabbedPane.TabbedPaneTab[], tabId: string): HTMLElement|null {
const tab = tabs.find(tab => tab.id === tabId)?.tabElement;
const statusDot = tab?.querySelector('.status-dot');
return statusDot ? statusDot as HTMLElement : null;
}
describeWithMockConnection('NetworkItemView', () => {
beforeEach(() => {
setUpEnvironment();
});
afterEach(async () => {
await deinitializeGlobalVars();
});
it('reveals header in RequestHeadersView', async () => {
const networkItemView = renderNetworkItemView();
const headersViewComponent = networkItemView.getHeadersViewComponent();
assert.exists(headersViewComponent);
const headersViewComponentSpy = sinon.spy(headersViewComponent, 'revealHeader');
sinon.assert.notCalled(headersViewComponentSpy);
networkItemView.revealHeader(NetworkForward.UIRequestLocation.UIHeaderSection.RESPONSE, 'headerName');
sinon.assert.calledWith(
headersViewComponentSpy, NetworkForward.UIRequestLocation.UIHeaderSection.RESPONSE, 'headerName');
networkItemView.detach();
});
});
describeWithEnvironment('NetworkItemView', () => {
let request: SDK.NetworkRequest.NetworkRequest;
beforeEach(async () => {
request = SDK.NetworkRequest.NetworkRequest.create(
'requestId' as Protocol.Network.RequestId, urlString`https://www.example.com`, urlString``, null, null, null);
request.statusCode = 200;
});
it('shows indicator for overriden headers and responses', () => {
request.setWasIntercepted(true);
request.hasOverriddenContent = true;
request.responseHeaders = [{name: 'foo', value: 'overridden'}];
request.originalResponseHeaders = [{name: 'foo', value: 'original'}];
const networkItemView = renderNetworkItemView(request);
const headersIndicator = getOverrideIndicator(networkItemView['tabs'], 'headers-component');
const responseIndicator = getOverrideIndicator(networkItemView['tabs'], 'response');
networkItemView.detach();
assert.isNotNull(headersIndicator);
assert.isNotNull(responseIndicator);
});
it('shows indicator for overriden headers', () => {
request.setWasIntercepted(true);
request.responseHeaders = [{name: 'foo', value: 'overridden'}];
request.originalResponseHeaders = [{name: 'foo', value: 'original'}];
const networkItemView = renderNetworkItemView(request);
const headersIndicator = getOverrideIndicator(networkItemView['tabs'], 'headers-component');
const responseIndicator = getOverrideIndicator(networkItemView['tabs'], 'response');
networkItemView.detach();
assert.isNotNull(headersIndicator);
assert.isNull(responseIndicator);
});
it('shows indicator for overriden content', () => {
request.setWasIntercepted(true);
request.hasOverriddenContent = true;
const networkItemView = renderNetworkItemView(request);
const headersIndicator = getOverrideIndicator(networkItemView['tabs'], 'headers-component');
const responseIndicator = getOverrideIndicator(networkItemView['tabs'], 'response');
networkItemView.detach();
assert.isNull(headersIndicator);
assert.isNotNull(responseIndicator);
});
it('does not show indicator for unoverriden request', () => {
const networkItemView = renderNetworkItemView(request);
const headersIndicator = getOverrideIndicator(networkItemView['tabs'], 'headers-component');
const responseIndicator = getOverrideIndicator(networkItemView['tabs'], 'response');
networkItemView.detach();
assert.isNull(headersIndicator);
assert.isNull(responseIndicator);
});
it('shows the Response and EventSource tab for text/event-stream requests', () => {
request.mimeType = 'text/event-stream';
const networkItemView = renderNetworkItemView(request);
assert.isTrue(networkItemView.hasTab(NetworkForward.UIRequestLocation.UIRequestTabs.EVENT_SOURCE));
assert.isTrue(networkItemView.hasTab(NetworkForward.UIRequestLocation.UIRequestTabs.RESPONSE));
networkItemView.detach();
});
it('shows the ConnectionInfo tab for DirectSocket requests', () => {
request.setResourceType(Common.ResourceType.resourceTypes.DirectSocket);
request.directSocketInfo = {
type: SDK.NetworkRequest.DirectSocketType.TCP,
status: SDK.NetworkRequest.DirectSocketStatus.OPENING,
createOptions: {
remoteAddr: '127.0.0.1',
remotePort: 2545,
noDelay: false,
keepAliveDelay: 1000,
sendBufferSize: 1002,
receiveBufferSize: 1003,
dnsQueryType: undefined,
}
};
const networkItemView = renderNetworkItemView(request);
assert.isTrue(networkItemView.hasTab(NetworkForward.UIRequestLocation.UIRequestTabs.DIRECT_SOCKET_CONNECTION));
assert.isTrue(networkItemView.hasTab(NetworkForward.UIRequestLocation.UIRequestTabs.INITIATOR));
assert.isTrue(networkItemView.hasTab(NetworkForward.UIRequestLocation.UIRequestTabs.TIMING));
networkItemView.detach();
});
});