blob: 60dc37a6101b67c605487450c9a462c62e3920d0 [file] [log] [blame]
// Copyright 2022 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 Platform from '../../../core/platform/platform.js';
import type * as SDK from '../../../core/sdk/sdk.js';
import {
assertScreenshot,
renderElementIntoDOM,
} from '../../../testing/DOMHelpers.js';
import {describeWithEnvironment} from '../../../testing/EnvironmentHelpers.js';
import {createViewFunctionStub} from '../../../testing/ViewFunctionHelpers.js';
import * as NetworkForward from '../forward/forward.js';
import * as NetworkComponents from './components.js';
async function renderRequestHeaderSection(request: SDK.NetworkRequest.NetworkRequest) {
const view = createViewFunctionStub(NetworkComponents.RequestHeaderSection.RequestHeaderSection);
const widget = new NetworkComponents.RequestHeaderSection.RequestHeaderSection(undefined, view);
renderElementIntoDOM(widget.contentElement);
widget.request = request;
await view.nextInput;
return {view, widget};
}
describeWithEnvironment('RequestHeaderSection', () => {
it('renders provisional headers warning', async () => {
const request = {
cachedInMemory: () => true,
cached: () => false,
requestHeaders: () =>
[{name: ':method', value: 'GET'},
{name: 'accept-encoding', value: 'gzip, deflate, br'},
{name: 'cache-control', value: 'no-cache'},
],
requestHeadersText: () => undefined,
} as unknown as SDK.NetworkRequest.NetworkRequest;
const {view} = await renderRequestHeaderSection(request);
const input = view.input;
assert.isTrue(input.isProvisionalHeaders);
});
it('sorts headers alphabetically', async () => {
const request = {
cachedInMemory: () => true,
cached: () => false,
requestHeaders: () =>
[{name: 'Ab', value: 'second'},
{name: 'test', value: 'fifth'},
{name: 'name', value: 'fourth'},
{name: 'abc', value: 'third'},
{name: 'aa', value: 'first'},
],
requestHeadersText: () => 'placeholderText',
} as unknown as SDK.NetworkRequest.NetworkRequest;
const {view} = await renderRequestHeaderSection(request);
const headers = view.input.headers.map(header => [header.name, header.value]);
assert.deepEqual(headers, [
['aa', 'first'],
['ab', 'second'],
['abc', 'third'],
['name', 'fourth'],
['test', 'fifth'],
]);
});
it('highlights the requested header', async () => {
const request = {
cachedInMemory: () => true,
cached: () => false,
requestHeaders: () =>
[{name: 'Ab', value: 'second'},
{name: 'test', value: 'fifth'},
{name: 'name', value: 'fourth'},
{name: 'abc', value: 'third'},
{name: 'aa', value: 'first'},
],
requestHeadersText: () => 'placeholderText',
} as unknown as SDK.NetworkRequest.NetworkRequest;
const {view, widget} = await renderRequestHeaderSection(request);
widget.toReveal = {section: NetworkForward.UIRequestLocation.UIHeaderSection.REQUEST, header: 'Ab'};
await view.nextInput;
const headers = view.input.headers;
const highlightedHeader = headers.find(header => header.name === 'ab');
assert.isTrue(highlightedHeader?.highlight);
});
it('correctly sets cached state', async () => {
const request = {
cachedInMemory: () => true,
cached: () => false,
requestHeaders: () => [],
requestHeadersText: () => undefined,
} as unknown as SDK.NetworkRequest.NetworkRequest;
const {view, widget} = await renderRequestHeaderSection(request);
assert.isTrue(view.input.isRequestCached);
const request2 = {
...request,
cachedInMemory: () => false,
cached: () => true,
} as unknown as SDK.NetworkRequest.NetworkRequest;
widget.request = request2;
const input2 = await view.nextInput;
assert.isTrue(input2.isRequestCached);
const request3 = {
...request,
cachedInMemory: () => false,
cached: () => false,
} as unknown as SDK.NetworkRequest.NetworkRequest;
widget.request = request3;
const input3 = await view.nextInput;
assert.isFalse(input3.isRequestCached);
});
it('renders correctly', async () => {
const container = document.createElement('div');
renderElementIntoDOM(container);
NetworkComponents.RequestHeaderSection.DEFAULT_VIEW(
{
headers: [
{
name: Platform.StringUtilities.toLowerCaseString('Referer'),
value: 'https://example.com',
valueEditable: NetworkComponents.HeaderSectionRow.EditingAllowedStatus.FORBIDDEN,
},
{
name: Platform.StringUtilities.toLowerCaseString('User-agent'),
value: 'Chrome',
valueEditable: NetworkComponents.HeaderSectionRow.EditingAllowedStatus.ENABLED,
}
],
isProvisionalHeaders: true,
isRequestCached: true,
},
undefined, container);
await assertScreenshot('network/request_header_section_default.png');
});
});