blob: 47f071c0018e11f186ec987cc9956de3e1651298 [file] [log] [blame]
// Copyright 2026 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 * as SDK from '../../core/sdk/sdk.js';
import * as Protocol from '../../generated/protocol.js';
import {
assertScreenshot,
renderElementIntoDOM,
} from '../../testing/DOMHelpers.js';
import {setupLocaleHooks} from '../../testing/LocaleHelpers.js';
import {describeWithMockConnection} from '../../testing/MockConnection.js';
import {createViewFunctionStub} from '../../testing/ViewFunctionHelpers.js';
import * as Network from './network.js';
const {RequestDeviceBoundSessionsView} = Network;
const {urlString} = Platform.DevToolsPath;
describeWithMockConnection('RequestDeviceBoundSessionsView', () => {
setupLocaleHooks();
it('renders device bound sessions', async () => {
const container = document.createElement('div');
renderElementIntoDOM(container);
RequestDeviceBoundSessionsView.DEFAULT_VIEW(
{
deviceBoundSessionUsages: [
{
sessionKey: {site: 'https://example.com', id: 'session-1'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.Deferred,
},
{
sessionKey: {site: 'https://example.com', id: 'session-2'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.NotInScope,
},
{
sessionKey: {site: 'https://example.com', id: 'session-3'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.InScopeRefreshNotYetNeeded,
},
{
sessionKey: {site: 'https://example.com', id: 'session-4'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.InScopeRefreshNotAllowed,
},
{
sessionKey: {site: 'https://example.com', id: 'session-5'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.ProactiveRefreshNotPossible,
},
{
sessionKey: {site: 'https://example.com', id: 'session-6'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.ProactiveRefreshAttempted,
},
],
},
{}, container);
await assertScreenshot('network/request_device_bound_sessions_view.png');
});
it('updates when the request headers change', async () => {
const request = SDK.NetworkRequest.NetworkRequest.create(
'requestId' as Protocol.Network.RequestId, urlString`https://www.example.com`, urlString``, null, null, null);
const view = createViewFunctionStub(RequestDeviceBoundSessionsView.RequestDeviceBoundSessionsView);
const component = new RequestDeviceBoundSessionsView.RequestDeviceBoundSessionsView(request, view);
renderElementIntoDOM(component);
component.wasShown();
assert.deepEqual(view.input.deviceBoundSessionUsages, []);
request.addExtraRequestInfo({
deviceBoundSessionUsages: [
{
sessionKey: {site: 'https://example.com', id: 'session-1'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.Deferred,
},
],
blockedRequestCookies: [],
includedRequestCookies: [],
connectTiming: {requestTime: 0},
requestHeaders: [],
} as SDK.NetworkRequest.ExtraRequestInfo);
request.dispatchEventToListeners(SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED);
assert.deepEqual(view.input.deviceBoundSessionUsages, [
{
sessionKey: {site: 'https://example.com', id: 'session-1'},
usage: Protocol.Network.DeviceBoundSessionWithUsageUsage.Deferred,
},
]);
});
});