chrome-devtools-frontend 1.0.1586699 → 1.0.1587905
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/front_end/core/sdk/ScopeTreeCache.ts +4 -0
- package/front_end/entrypoint_template.html +5 -1
- package/front_end/generated/Deprecation.ts +21 -0
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/protocol.ts +2 -0
- package/front_end/models/ai_assistance/AiConversation.ts +5 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +16 -4
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +7 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +0 -2
- package/front_end/panels/ai_assistance/components/ChatInput.ts +36 -31
- package/front_end/panels/ai_assistance/components/chatInput.css +6 -9
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +3 -6
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +11 -3
- package/front_end/panels/common/DOMLinkifier.ts +6 -1
- package/front_end/panels/elements/ComputedStyleWidget.ts +25 -2
- package/front_end/panels/elements/ElementsPanel.ts +114 -15
- package/front_end/panels/elements/PropertiesWidget.ts +40 -2
- package/front_end/panels/elements/StylesSidebarPane.ts +26 -3
- package/front_end/panels/network/NetworkDataGridNode.ts +4 -0
- package/front_end/panels/network/NetworkItemView.ts +6 -44
- package/front_end/panels/network/RequestHeadersView.ts +499 -0
- package/front_end/panels/network/components/RequestHeaderSection.ts +3 -0
- package/front_end/panels/network/components/components.ts +0 -2
- package/front_end/panels/network/network.ts +3 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/package.json +1 -1
- package/front_end/third_party/puppeteer/package/src/revisions.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/legacy/Toolbar.ts +37 -5
- package/front_end/ui/legacy/UIUtils.ts +35 -5
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +113 -133
- package/package.json +1 -1
- package/front_end/panels/network/components/RequestHeadersView.ts +0 -569
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
// Copyright 2022 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import '../../ui/kit/kit.js';
|
|
5
|
+
|
|
6
|
+
import * as Common from '../../core/common/common.js';
|
|
7
|
+
import * as Host from '../../core/host/host.js';
|
|
8
|
+
import * as i18n from '../../core/i18n/i18n.js';
|
|
9
|
+
import * as Platform from '../../core/platform/platform.js';
|
|
10
|
+
import * as SDK from '../../core/sdk/sdk.js';
|
|
11
|
+
import * as Persistence from '../../models/persistence/persistence.js';
|
|
12
|
+
import * as Workspace from '../../models/workspace/workspace.js';
|
|
13
|
+
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
14
|
+
import * as Input from '../../ui/components/input/input.js';
|
|
15
|
+
import * as UI from '../../ui/legacy/legacy.js';
|
|
16
|
+
import * as Lit from '../../ui/lit/lit.js';
|
|
17
|
+
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
18
|
+
import * as Sources from '../sources/sources.js';
|
|
19
|
+
|
|
20
|
+
import * as NetworkComponents from './components/components.js';
|
|
21
|
+
import {ShowMoreDetailsWidget} from './ShowMoreDetailsWidget.js';
|
|
22
|
+
|
|
23
|
+
const {render, html} = Lit;
|
|
24
|
+
|
|
25
|
+
const UIStrings = {
|
|
26
|
+
/**
|
|
27
|
+
* @description Text in Request Headers View of the Network panel
|
|
28
|
+
*/
|
|
29
|
+
fromDiskCache: '(from disk cache)',
|
|
30
|
+
/**
|
|
31
|
+
* @description Text in Request Headers View of the Network panel
|
|
32
|
+
*/
|
|
33
|
+
fromMemoryCache: '(from memory cache)',
|
|
34
|
+
/**
|
|
35
|
+
* @description Text in Request Headers View of the Network panel
|
|
36
|
+
*/
|
|
37
|
+
fromEarlyHints: '(from early hints)',
|
|
38
|
+
/**
|
|
39
|
+
* @description Text in Request Headers View of the Network panel
|
|
40
|
+
*/
|
|
41
|
+
fromPrefetchCache: '(from prefetch cache)',
|
|
42
|
+
/**
|
|
43
|
+
* @description Text in Request Headers View of the Network panel
|
|
44
|
+
*/
|
|
45
|
+
fromServiceWorker: '(from `service worker`)',
|
|
46
|
+
/**
|
|
47
|
+
* @description Text in Request Headers View of the Network panel
|
|
48
|
+
*/
|
|
49
|
+
fromSignedexchange: '(from signed-exchange)',
|
|
50
|
+
/**
|
|
51
|
+
* @description Section header for a list of the main aspects of a http request
|
|
52
|
+
*/
|
|
53
|
+
general: 'General',
|
|
54
|
+
/**
|
|
55
|
+
* @description Label for a checkbox to switch between raw and parsed headers
|
|
56
|
+
*/
|
|
57
|
+
raw: 'Raw',
|
|
58
|
+
/**
|
|
59
|
+
* @description Text in Request Headers View of the Network panel
|
|
60
|
+
*/
|
|
61
|
+
referrerPolicy: 'Referrer Policy',
|
|
62
|
+
/**
|
|
63
|
+
* @description Text in Network Log View Columns of the Network panel
|
|
64
|
+
*/
|
|
65
|
+
remoteAddress: 'Remote Address',
|
|
66
|
+
/**
|
|
67
|
+
* @description Text in Request Headers View of the Network panel
|
|
68
|
+
*/
|
|
69
|
+
requestHeaders: 'Request Headers',
|
|
70
|
+
/**
|
|
71
|
+
* @description The HTTP method of a request
|
|
72
|
+
*/
|
|
73
|
+
requestMethod: 'Request Method',
|
|
74
|
+
/**
|
|
75
|
+
* @description The URL of a request
|
|
76
|
+
*/
|
|
77
|
+
requestUrl: 'Request URL',
|
|
78
|
+
/**
|
|
79
|
+
* @description A context menu item in the Network Log View Columns of the Network panel
|
|
80
|
+
*/
|
|
81
|
+
responseHeaders: 'Response headers',
|
|
82
|
+
/**
|
|
83
|
+
* @description A context menu item in the Network Log View Columns of the Network panel
|
|
84
|
+
*/
|
|
85
|
+
earlyHintsHeaders: 'Early hints headers',
|
|
86
|
+
/**
|
|
87
|
+
* @description Title text for a link to the Sources panel to the file containing the header override definitions
|
|
88
|
+
*/
|
|
89
|
+
revealHeaderOverrides: 'Reveal header override definitions',
|
|
90
|
+
/**
|
|
91
|
+
* @description HTTP response code
|
|
92
|
+
*/
|
|
93
|
+
statusCode: 'Status Code',
|
|
94
|
+
} as const;
|
|
95
|
+
const str_ = i18n.i18n.registerUIStrings('panels/network/RequestHeadersView.ts', UIStrings);
|
|
96
|
+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
97
|
+
|
|
98
|
+
interface ViewInput {
|
|
99
|
+
showRequestHeadersText: boolean;
|
|
100
|
+
showResponseHeadersText: boolean;
|
|
101
|
+
request: SDK.NetworkRequest.NetworkRequest;
|
|
102
|
+
toggleShowRawResponseHeaders: () => void;
|
|
103
|
+
toggleShowRawRequestHeaders: () => void;
|
|
104
|
+
revealHeadersFile?: () => void;
|
|
105
|
+
toReveal?: {section: NetworkForward.UIRequestLocation.UIHeaderSection, header?: string};
|
|
106
|
+
}
|
|
107
|
+
type View = (input: ViewInput, output: object, target: HTMLElement) => void;
|
|
108
|
+
export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
109
|
+
render(
|
|
110
|
+
html`
|
|
111
|
+
<style>${NetworkComponents.RequestHeaderSection.requestHeadersViewStyles}</style>
|
|
112
|
+
<style>${Input.checkboxStyles}</style>
|
|
113
|
+
${renderGeneralSection(input)}
|
|
114
|
+
${renderEarlyHintsHeaders(input)}
|
|
115
|
+
${renderResponseHeaders(input)}
|
|
116
|
+
${renderRequestHeaders(input)}
|
|
117
|
+
`,
|
|
118
|
+
target);
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export class RequestHeadersView extends UI.Widget.Widget {
|
|
122
|
+
#request?: SDK.NetworkRequest.NetworkRequest;
|
|
123
|
+
#showResponseHeadersText = false;
|
|
124
|
+
#showRequestHeadersText = false;
|
|
125
|
+
#toReveal?: {section: NetworkForward.UIRequestLocation.UIHeaderSection, header?: string} = undefined;
|
|
126
|
+
readonly #workspace = Workspace.Workspace.WorkspaceImpl.instance();
|
|
127
|
+
#view: View;
|
|
128
|
+
get request(): SDK.NetworkRequest.NetworkRequest|undefined {
|
|
129
|
+
return this.#request;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
set request(val) {
|
|
133
|
+
this.#removeEventListeners();
|
|
134
|
+
this.#request = val;
|
|
135
|
+
this.#addEventListeners();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
constructor(target?: HTMLElement, view = DEFAULT_VIEW) {
|
|
139
|
+
super({jslog: `${VisualLogging.pane('headers').track({resize: true})}`});
|
|
140
|
+
this.#view = view;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
#addEventListeners(): void {
|
|
144
|
+
this.#request?.addEventListener(SDK.NetworkRequest.Events.REMOTE_ADDRESS_CHANGED, this.#refreshHeadersView, this);
|
|
145
|
+
this.#request?.addEventListener(SDK.NetworkRequest.Events.FINISHED_LOADING, this.#refreshHeadersView, this);
|
|
146
|
+
this.#request?.addEventListener(SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.#refreshHeadersView, this);
|
|
147
|
+
this.#request?.addEventListener(
|
|
148
|
+
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.#resetAndRefreshHeadersView, this);
|
|
149
|
+
this.#workspace.addEventListener(
|
|
150
|
+
Workspace.Workspace.Events.UISourceCodeAdded, this.#uiSourceCodeAddedOrRemoved, this);
|
|
151
|
+
this.#workspace.addEventListener(
|
|
152
|
+
Workspace.Workspace.Events.UISourceCodeRemoved, this.#uiSourceCodeAddedOrRemoved, this);
|
|
153
|
+
Common.Settings.Settings.instance()
|
|
154
|
+
.moduleSetting('persistence-network-overrides-enabled')
|
|
155
|
+
.addChangeListener(this.requestUpdate, this);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
override wasShown(): void {
|
|
159
|
+
super.wasShown();
|
|
160
|
+
this.#addEventListeners();
|
|
161
|
+
this.#toReveal = undefined;
|
|
162
|
+
this.#refreshHeadersView();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
override willHide(): void {
|
|
166
|
+
super.willHide();
|
|
167
|
+
this.#removeEventListeners();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
#removeEventListeners(): void {
|
|
171
|
+
this.#request?.removeEventListener(
|
|
172
|
+
SDK.NetworkRequest.Events.REMOTE_ADDRESS_CHANGED, this.#refreshHeadersView, this);
|
|
173
|
+
this.#request?.removeEventListener(SDK.NetworkRequest.Events.FINISHED_LOADING, this.#refreshHeadersView, this);
|
|
174
|
+
this.#request?.removeEventListener(
|
|
175
|
+
SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.#refreshHeadersView, this);
|
|
176
|
+
this.#request?.removeEventListener(
|
|
177
|
+
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.#resetAndRefreshHeadersView, this);
|
|
178
|
+
this.#workspace.removeEventListener(
|
|
179
|
+
Workspace.Workspace.Events.UISourceCodeAdded, this.#uiSourceCodeAddedOrRemoved, this);
|
|
180
|
+
this.#workspace.removeEventListener(
|
|
181
|
+
Workspace.Workspace.Events.UISourceCodeRemoved, this.#uiSourceCodeAddedOrRemoved, this);
|
|
182
|
+
Common.Settings.Settings.instance()
|
|
183
|
+
.moduleSetting('persistence-network-overrides-enabled')
|
|
184
|
+
.removeChangeListener(this.requestUpdate, this);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
#resetAndRefreshHeadersView(): void {
|
|
188
|
+
this.#request?.deleteAssociatedData(NetworkComponents.ResponseHeaderSection.RESPONSE_HEADER_SECTION_DATA_KEY);
|
|
189
|
+
this.requestUpdate();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
#refreshHeadersView(): void {
|
|
193
|
+
this.requestUpdate();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
revealHeader(section: NetworkForward.UIRequestLocation.UIHeaderSection, header?: string): void {
|
|
197
|
+
this.#toReveal = {section, header};
|
|
198
|
+
this.requestUpdate();
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
#uiSourceCodeAddedOrRemoved(event: Common.EventTarget.EventTargetEvent<Workspace.UISourceCode.UISourceCode>): void {
|
|
202
|
+
if (this.#getHeaderOverridesFileUrl() === event.data.url()) {
|
|
203
|
+
this.requestUpdate();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
override performUpdate(): void {
|
|
208
|
+
if (!this.#request) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
let revealHeadersFile;
|
|
213
|
+
const uiSourceCode = this.#workspace.uiSourceCodeForURL(this.#getHeaderOverridesFileUrl());
|
|
214
|
+
if (uiSourceCode) {
|
|
215
|
+
revealHeadersFile = (): void => {
|
|
216
|
+
Sources.SourcesPanel.SourcesPanel.instance().showUISourceCode(uiSourceCode);
|
|
217
|
+
void Sources.SourcesPanel.SourcesPanel.instance().revealInNavigator(uiSourceCode);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const input: ViewInput = {
|
|
221
|
+
toggleShowRawResponseHeaders: (): void => {
|
|
222
|
+
this.#showResponseHeadersText = !this.#showResponseHeadersText;
|
|
223
|
+
this.requestUpdate();
|
|
224
|
+
},
|
|
225
|
+
toggleShowRawRequestHeaders: (): void => {
|
|
226
|
+
this.#showRequestHeadersText = !this.#showRequestHeadersText;
|
|
227
|
+
this.requestUpdate();
|
|
228
|
+
},
|
|
229
|
+
revealHeadersFile,
|
|
230
|
+
request: this.#request,
|
|
231
|
+
toReveal: this.#toReveal,
|
|
232
|
+
showResponseHeadersText: this.#showResponseHeadersText,
|
|
233
|
+
showRequestHeadersText: this.#showRequestHeadersText,
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
this.#view(input, {}, this.contentElement);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
#getHeaderOverridesFileUrl(): Platform.DevToolsPath.UrlString {
|
|
240
|
+
if (!this.#request) {
|
|
241
|
+
return Platform.DevToolsPath.EmptyUrlString;
|
|
242
|
+
}
|
|
243
|
+
const fileUrl = Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance().fileUrlFromNetworkUrl(
|
|
244
|
+
this.#request.url(), /* ignoreInactive */ true);
|
|
245
|
+
return fileUrl.substring(0, fileUrl.lastIndexOf('/')) + '/' +
|
|
246
|
+
Persistence.NetworkPersistenceManager.HEADERS_FILENAME as Platform.DevToolsPath.UrlString;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function renderEarlyHintsHeaders(input: ViewInput): Lit.LitTemplate {
|
|
251
|
+
if (!input.request?.earlyHintsHeaders || input.request.earlyHintsHeaders.length === 0) {
|
|
252
|
+
return Lit.nothing;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
256
|
+
return renderCategory({
|
|
257
|
+
onToggleRawHeaders: input.toggleShowRawResponseHeaders,
|
|
258
|
+
name: 'early-hints-headers',
|
|
259
|
+
title: i18nString(UIStrings.earlyHintsHeaders),
|
|
260
|
+
headerCount: input.request.earlyHintsHeaders.length,
|
|
261
|
+
checked: undefined,
|
|
262
|
+
additionalContent: undefined,
|
|
263
|
+
forceOpen: input.toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.EARLY_HINTS,
|
|
264
|
+
loggingContext: 'early-hints-headers',
|
|
265
|
+
contents: input.showResponseHeadersText ? renderRawHeaders(input.request.responseHeadersText) : html`
|
|
266
|
+
<devtools-early-hints-header-section .data=${{
|
|
267
|
+
request: input.request,
|
|
268
|
+
toReveal: input.toReveal,
|
|
269
|
+
} as NetworkComponents.ResponseHeaderSection.ResponseHeaderSectionData}></devtools-early-hints-header-section>
|
|
270
|
+
`
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function renderResponseHeaders(input: ViewInput): Lit.LitTemplate {
|
|
275
|
+
return renderCategory({
|
|
276
|
+
onToggleRawHeaders: input.toggleShowRawResponseHeaders,
|
|
277
|
+
name: 'response-headers',
|
|
278
|
+
title: i18nString(UIStrings.responseHeaders),
|
|
279
|
+
headerCount: input.request.sortedResponseHeaders.length,
|
|
280
|
+
checked: input.request.responseHeadersText ? input.showResponseHeadersText : undefined,
|
|
281
|
+
additionalContent: renderHeaderOverridesLink(input),
|
|
282
|
+
forceOpen: input.toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.RESPONSE,
|
|
283
|
+
loggingContext: 'response-headers',
|
|
284
|
+
contents: input.showResponseHeadersText ?
|
|
285
|
+
renderRawHeaders(input.request.responseHeadersText) :
|
|
286
|
+
html`
|
|
287
|
+
<devtools-response-header-section .data=${{
|
|
288
|
+
request: input.request,
|
|
289
|
+
toReveal: input.toReveal,
|
|
290
|
+
} as NetworkComponents.ResponseHeaderSection.ResponseHeaderSectionData} jslog=${
|
|
291
|
+
VisualLogging.section('response-headers')}></devtools-response-header-section>
|
|
292
|
+
`
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function renderHeaderOverridesLink(input: ViewInput): Lit.LitTemplate {
|
|
297
|
+
if (!input.revealHeadersFile) {
|
|
298
|
+
return Lit.nothing;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const revealHeadersFile = (event: Event): void => {
|
|
302
|
+
event.preventDefault();
|
|
303
|
+
input.revealHeadersFile?.();
|
|
304
|
+
};
|
|
305
|
+
const overridesSetting: Common.Settings.Setting<boolean> =
|
|
306
|
+
Common.Settings.Settings.instance().moduleSetting('persistence-network-overrides-enabled');
|
|
307
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
308
|
+
// clang-format off
|
|
309
|
+
const fileIcon = html`
|
|
310
|
+
<devtools-icon name="document" class=${'medium' + overridesSetting.get() ? 'inline-icon dot purple': 'inline-icon'}>
|
|
311
|
+
</devtools-icon>`;
|
|
312
|
+
// clang-format on
|
|
313
|
+
|
|
314
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
315
|
+
// clang-format off
|
|
316
|
+
return html`
|
|
317
|
+
<devtools-link
|
|
318
|
+
href="https://goo.gle/devtools-override"
|
|
319
|
+
class="link devtools-link"
|
|
320
|
+
jslogcontext="devtools-override"
|
|
321
|
+
>
|
|
322
|
+
<devtools-icon name="help" class="inline-icon medium">
|
|
323
|
+
</devtools-icon>
|
|
324
|
+
</devtools-link>
|
|
325
|
+
<devtools-link
|
|
326
|
+
@click=${revealHeadersFile}
|
|
327
|
+
class="link devtools-link"
|
|
328
|
+
title=${UIStrings.revealHeaderOverrides}
|
|
329
|
+
jslogcontext="reveal-header-overrides"
|
|
330
|
+
>
|
|
331
|
+
${fileIcon}${Persistence.NetworkPersistenceManager.HEADERS_FILENAME}
|
|
332
|
+
</devtools-link>
|
|
333
|
+
`;
|
|
334
|
+
// clang-format on
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
function renderRequestHeaders(input: ViewInput): Lit.LitTemplate {
|
|
338
|
+
const requestHeadersText = input.request.requestHeadersText();
|
|
339
|
+
|
|
340
|
+
return renderCategory({
|
|
341
|
+
onToggleRawHeaders: input.toggleShowRawRequestHeaders,
|
|
342
|
+
name: 'request-headers',
|
|
343
|
+
title: i18nString(UIStrings.requestHeaders),
|
|
344
|
+
headerCount: input.request.requestHeaders().length,
|
|
345
|
+
checked: requestHeadersText ? input.showRequestHeadersText : undefined,
|
|
346
|
+
forceOpen: input.toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.REQUEST,
|
|
347
|
+
loggingContext: 'request-headers',
|
|
348
|
+
contents: (input.showRequestHeadersText && requestHeadersText) ?
|
|
349
|
+
renderRawHeaders(requestHeadersText) :
|
|
350
|
+
html`
|
|
351
|
+
<devtools-widget .widgetConfig=${
|
|
352
|
+
UI.Widget.widgetConfig(NetworkComponents.RequestHeaderSection.RequestHeaderSection, {
|
|
353
|
+
request: input.request,
|
|
354
|
+
toReveal: input.toReveal,
|
|
355
|
+
})} jslog=${VisualLogging.section('request-headers')}></devtools-widget>`
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function renderRawHeaders(text: string): Lit.TemplateResult {
|
|
360
|
+
return html`<div class="row raw-headers-row"><devtools-widget class=raw-headers .widgetConfig=${
|
|
361
|
+
UI.Widget.widgetConfig(ShowMoreDetailsWidget, {text})}></devtools-widget></div>`;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
function renderGeneralSection(input: ViewInput): Lit.LitTemplate {
|
|
365
|
+
const statusClasses = ['status'];
|
|
366
|
+
if (input.request.statusCode < 300 || input.request.statusCode === 304) {
|
|
367
|
+
statusClasses.push('green-circle');
|
|
368
|
+
} else if (input.request.statusCode < 400) {
|
|
369
|
+
statusClasses.push('yellow-circle');
|
|
370
|
+
} else {
|
|
371
|
+
statusClasses.push('red-circle');
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
let comment = '';
|
|
375
|
+
if (input.request.cachedInMemory()) {
|
|
376
|
+
comment = i18nString(UIStrings.fromMemoryCache);
|
|
377
|
+
} else if (input.request.fromEarlyHints()) {
|
|
378
|
+
comment = i18nString(UIStrings.fromEarlyHints);
|
|
379
|
+
} else if (input.request.fetchedViaServiceWorker) {
|
|
380
|
+
comment = i18nString(UIStrings.fromServiceWorker);
|
|
381
|
+
} else if (input.request.redirectSourceSignedExchangeInfoHasNoErrors()) {
|
|
382
|
+
comment = i18nString(UIStrings.fromSignedexchange);
|
|
383
|
+
} else if (input.request.fromPrefetchCache()) {
|
|
384
|
+
comment = i18nString(UIStrings.fromPrefetchCache);
|
|
385
|
+
} else if (input.request.cached()) {
|
|
386
|
+
comment = i18nString(UIStrings.fromDiskCache);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
if (comment) {
|
|
390
|
+
statusClasses.push('status-with-comment');
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
const statusText = [input.request.statusCode, input.request.getInferredStatusText(), comment].join(' ');
|
|
394
|
+
|
|
395
|
+
return renderCategory({
|
|
396
|
+
name: 'general',
|
|
397
|
+
title: i18nString(UIStrings.general),
|
|
398
|
+
forceOpen: input.toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.GENERAL,
|
|
399
|
+
loggingContext: 'general',
|
|
400
|
+
// clang-format off
|
|
401
|
+
contents: html`<div jslog=${VisualLogging.section('general')}>
|
|
402
|
+
${renderGeneralRow(i18nString(UIStrings.requestUrl), input.request.url(), 'request-url')}
|
|
403
|
+
${input.request.statusCode? renderGeneralRow(i18nString(UIStrings.requestMethod),
|
|
404
|
+
input.request.requestMethod, 'request-method') : Lit.nothing}
|
|
405
|
+
${input.request.statusCode? renderGeneralRow(i18nString(UIStrings.statusCode),
|
|
406
|
+
statusText, 'status-code', statusClasses) : Lit.nothing}
|
|
407
|
+
${input.request.remoteAddress()? renderGeneralRow(i18nString(UIStrings.remoteAddress),
|
|
408
|
+
input.request.remoteAddress(), 'remote-address') : Lit.nothing}
|
|
409
|
+
${input.request.referrerPolicy()? renderGeneralRow(i18nString(UIStrings.referrerPolicy),
|
|
410
|
+
String(input.request.referrerPolicy()), 'referrer-policy') : Lit.nothing}
|
|
411
|
+
</div>`});
|
|
412
|
+
// clang-format on
|
|
413
|
+
|
|
414
|
+
function renderGeneralRow(
|
|
415
|
+
name: Common.UIString.LocalizedString, value: string, id: string, classNames?: string[]): Lit.LitTemplate {
|
|
416
|
+
const isHighlighted = input.toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.GENERAL &&
|
|
417
|
+
name.toLowerCase() === input.toReveal?.header?.toLowerCase();
|
|
418
|
+
return html`
|
|
419
|
+
<div class="row ${isHighlighted ? 'header-highlight' : ''}">
|
|
420
|
+
<div class="header-name">${name}</div>
|
|
421
|
+
<div
|
|
422
|
+
id=${id}
|
|
423
|
+
class="header-value ${classNames?.join(' ')}"
|
|
424
|
+
@copy=${() => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
|
425
|
+
>${value}</div>
|
|
426
|
+
</div>
|
|
427
|
+
`;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
export function renderCategory(data: {
|
|
432
|
+
name: string,
|
|
433
|
+
title: Common.UIString.LocalizedString,
|
|
434
|
+
contents: Lit.LitTemplate,
|
|
435
|
+
loggingContext: string,
|
|
436
|
+
headerCount?: number,
|
|
437
|
+
checked?: boolean,
|
|
438
|
+
additionalContent?: Lit.LitTemplate,
|
|
439
|
+
forceOpen?: boolean,
|
|
440
|
+
onToggleRawHeaders?: () => void,
|
|
441
|
+
}): Lit.LitTemplate {
|
|
442
|
+
const expandedSetting =
|
|
443
|
+
Common.Settings.Settings.instance().createSetting('request-info-' + data.name + '-category-expanded', true);
|
|
444
|
+
|
|
445
|
+
const isOpen = (expandedSetting ? expandedSetting.get() : true) || data.forceOpen;
|
|
446
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
447
|
+
// clang-format off
|
|
448
|
+
return html`
|
|
449
|
+
<details ?open=${isOpen} @toggle=${onToggle} aria-label=${data.title}>
|
|
450
|
+
<summary
|
|
451
|
+
class="header"
|
|
452
|
+
@keydown=${onSummaryKeyDown}
|
|
453
|
+
jslog=${VisualLogging.sectionHeader().track({click: true}).context(data.loggingContext)}
|
|
454
|
+
>
|
|
455
|
+
<div class="header-grid-container">
|
|
456
|
+
<div>
|
|
457
|
+
${data.title}${data.headerCount !== undefined ?
|
|
458
|
+
html`<span class="header-count"> (${data.headerCount})</span>` :
|
|
459
|
+
Lit.nothing
|
|
460
|
+
}
|
|
461
|
+
</div>
|
|
462
|
+
<div class="hide-when-closed">
|
|
463
|
+
${data.checked !== undefined ? html`
|
|
464
|
+
<devtools-checkbox .checked=${data.checked} @change=${data.onToggleRawHeaders}
|
|
465
|
+
jslog=${VisualLogging.toggle('raw-headers').track({change: true})}>
|
|
466
|
+
${i18nString(UIStrings.raw)}
|
|
467
|
+
</devtools-checkbox>` : Lit.nothing}
|
|
468
|
+
</div>
|
|
469
|
+
<div class="hide-when-closed">${data.additionalContent}</div>
|
|
470
|
+
</div>
|
|
471
|
+
</summary>
|
|
472
|
+
${data.contents}
|
|
473
|
+
</details>
|
|
474
|
+
`;
|
|
475
|
+
// clang-format on
|
|
476
|
+
|
|
477
|
+
function onSummaryKeyDown(event: KeyboardEvent): void {
|
|
478
|
+
if (!event.target) {
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
const summaryElement = event.target as HTMLElement;
|
|
482
|
+
const detailsElement = summaryElement.parentElement as HTMLDetailsElement;
|
|
483
|
+
if (!detailsElement) {
|
|
484
|
+
throw new Error('<details> element is not found for a <summary> element');
|
|
485
|
+
}
|
|
486
|
+
switch (event.key) {
|
|
487
|
+
case 'ArrowLeft':
|
|
488
|
+
detailsElement.open = false;
|
|
489
|
+
break;
|
|
490
|
+
case 'ArrowRight':
|
|
491
|
+
detailsElement.open = true;
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
function onToggle(event: Event): void {
|
|
497
|
+
expandedSetting?.set((event.target as HTMLDetailsElement).open);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
@@ -14,6 +14,9 @@ import * as NetworkForward from '../forward/forward.js';
|
|
|
14
14
|
|
|
15
15
|
import {EditingAllowedStatus, type HeaderDescriptor} from './HeaderSectionRow.js';
|
|
16
16
|
import requestHeaderSectionStyles from './RequestHeaderSection.css.js';
|
|
17
|
+
import requestHeadersViewStyles from './RequestHeadersView.css.js';
|
|
18
|
+
|
|
19
|
+
export {requestHeadersViewStyles};
|
|
17
20
|
|
|
18
21
|
const {render, html} = Lit;
|
|
19
22
|
|
|
@@ -6,7 +6,6 @@ import * as DirectSocketConnectionView from './DirectSocketConnectionView.js';
|
|
|
6
6
|
import * as EditableSpan from './EditableSpan.js';
|
|
7
7
|
import * as HeaderSectionRow from './HeaderSectionRow.js';
|
|
8
8
|
import * as RequestHeaderSection from './RequestHeaderSection.js';
|
|
9
|
-
import * as RequestHeadersView from './RequestHeadersView.js';
|
|
10
9
|
import * as RequestTrustTokensView from './RequestTrustTokensView.js';
|
|
11
10
|
import * as ResponseHeaderSection from './ResponseHeaderSection.js';
|
|
12
11
|
|
|
@@ -15,7 +14,6 @@ export {
|
|
|
15
14
|
EditableSpan,
|
|
16
15
|
HeaderSectionRow,
|
|
17
16
|
RequestHeaderSection,
|
|
18
|
-
RequestHeadersView,
|
|
19
17
|
RequestTrustTokensView,
|
|
20
18
|
ResponseHeaderSection,
|
|
21
19
|
};
|
|
@@ -18,6 +18,7 @@ import './NetworkSearchScope.js';
|
|
|
18
18
|
import './NetworkWaterfallColumn.js';
|
|
19
19
|
import './RequestCookiesView.js';
|
|
20
20
|
import './RequestHTMLView.js';
|
|
21
|
+
import './RequestHeadersView.js';
|
|
21
22
|
import './RequestInitiatorView.js';
|
|
22
23
|
import './RequestResponseView.js';
|
|
23
24
|
import './RequestPreviewView.js';
|
|
@@ -44,6 +45,7 @@ import * as NetworkWaterfallColumn from './NetworkWaterfallColumn.js';
|
|
|
44
45
|
import * as RequestConditionsDrawer from './RequestConditionsDrawer.js';
|
|
45
46
|
import * as RequestCookiesView from './RequestCookiesView.js';
|
|
46
47
|
import * as RequestDeviceBoundSessionsView from './RequestDeviceBoundSessionsView.js';
|
|
48
|
+
import * as RequestHeadersView from './RequestHeadersView.js';
|
|
47
49
|
import * as RequestHTMLView from './RequestHTMLView.js';
|
|
48
50
|
import * as RequestInitiatorView from './RequestInitiatorView.js';
|
|
49
51
|
import * as RequestPayloadView from './RequestPayloadView.js';
|
|
@@ -72,6 +74,7 @@ export {
|
|
|
72
74
|
RequestConditionsDrawer,
|
|
73
75
|
RequestCookiesView,
|
|
74
76
|
RequestDeviceBoundSessionsView,
|
|
77
|
+
RequestHeadersView,
|
|
75
78
|
RequestHTMLView,
|
|
76
79
|
RequestInitiatorView,
|
|
77
80
|
RequestPayloadView,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Name: Dependencies sourced from the upstream `chromium` repository
|
|
2
2
|
URL: https://chromium.googlesource.com/chromium/src
|
|
3
3
|
Version: N/A
|
|
4
|
-
Revision:
|
|
4
|
+
Revision: e991bb058bdc3021ea1576fee0a80a7ecd0ef566
|
|
5
5
|
Update Mechanism: Manual (https://crbug.com/428069060)
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
License File: LICENSE
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Name: Puppeteer Core
|
|
2
2
|
Short Name: Puppeteer Core
|
|
3
3
|
URL: https://github.com/puppeteer/puppeteer/tree/main/packages/puppeteer-core
|
|
4
|
-
Version: 24.37.
|
|
4
|
+
Version: 24.37.5
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License File: LICENSE
|
|
7
|
-
Revision:
|
|
7
|
+
Revision: fcb37e3b3a4f6b55b6f81a40811243260bcea16f
|
|
8
8
|
Security Critical: no
|
|
9
9
|
Shipped: yes
|
|
10
10
|
Update Mechanism: Autoroll
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
export declare const PUPPETEER_REVISIONS: Readonly<{
|
|
10
|
-
chrome: "145.0.7632.
|
|
11
|
-
'chrome-headless-shell': "145.0.7632.
|
|
10
|
+
chrome: "145.0.7632.77";
|
|
11
|
+
'chrome-headless-shell': "145.0.7632.77";
|
|
12
12
|
firefox: "stable_147.0.4";
|
|
13
13
|
}>;
|
|
14
14
|
//# sourceMappingURL=revisions.d.ts.map
|
|
@@ -10,8 +10,8 @@ exports.PUPPETEER_REVISIONS = void 0;
|
|
|
10
10
|
* @internal
|
|
11
11
|
*/
|
|
12
12
|
exports.PUPPETEER_REVISIONS = Object.freeze({
|
|
13
|
-
chrome: '145.0.7632.
|
|
14
|
-
'chrome-headless-shell': '145.0.7632.
|
|
13
|
+
chrome: '145.0.7632.77',
|
|
14
|
+
'chrome-headless-shell': '145.0.7632.77',
|
|
15
15
|
firefox: 'stable_147.0.4',
|
|
16
16
|
});
|
|
17
17
|
//# sourceMappingURL=revisions.js.map
|
|
@@ -8,6 +8,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
8
8
|
exports.packageVersion = void 0;
|
|
9
9
|
// If moved update release-please config
|
|
10
10
|
// x-release-please-start-version
|
|
11
|
-
exports.packageVersion = '24.37.
|
|
11
|
+
exports.packageVersion = '24.37.5';
|
|
12
12
|
// x-release-please-end
|
|
13
13
|
//# sourceMappingURL=version.js.map
|
|
@@ -3050,7 +3050,7 @@ var Puppeteer = function (exports, _PuppeteerURL, _LazyArg, _ARIAQueryHandler, _
|
|
|
3050
3050
|
*/
|
|
3051
3051
|
// If moved update release-please config
|
|
3052
3052
|
// x-release-please-start-version
|
|
3053
|
-
const packageVersion = '24.37.
|
|
3053
|
+
const packageVersion = '24.37.5';
|
|
3054
3054
|
// x-release-please-end
|
|
3055
3055
|
|
|
3056
3056
|
/**
|
|
@@ -25247,8 +25247,8 @@ var Puppeteer = function (exports, _PuppeteerURL, _LazyArg, _ARIAQueryHandler, _
|
|
|
25247
25247
|
* @internal
|
|
25248
25248
|
*/
|
|
25249
25249
|
const PUPPETEER_REVISIONS = Object.freeze({
|
|
25250
|
-
chrome: '145.0.7632.
|
|
25251
|
-
'chrome-headless-shell': '145.0.7632.
|
|
25250
|
+
chrome: '145.0.7632.77',
|
|
25251
|
+
'chrome-headless-shell': '145.0.7632.77',
|
|
25252
25252
|
firefox: 'stable_147.0.4'
|
|
25253
25253
|
});
|
|
25254
25254
|
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
export declare const PUPPETEER_REVISIONS: Readonly<{
|
|
10
|
-
chrome: "145.0.7632.
|
|
11
|
-
'chrome-headless-shell': "145.0.7632.
|
|
10
|
+
chrome: "145.0.7632.77";
|
|
11
|
+
'chrome-headless-shell': "145.0.7632.77";
|
|
12
12
|
firefox: "stable_147.0.4";
|
|
13
13
|
}>;
|
|
14
14
|
//# sourceMappingURL=revisions.d.ts.map
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
export const PUPPETEER_REVISIONS = Object.freeze({
|
|
10
|
-
chrome: '145.0.7632.
|
|
11
|
-
'chrome-headless-shell': '145.0.7632.
|
|
10
|
+
chrome: '145.0.7632.77',
|
|
11
|
+
'chrome-headless-shell': '145.0.7632.77',
|
|
12
12
|
firefox: 'stable_147.0.4',
|
|
13
13
|
});
|
|
14
14
|
//# sourceMappingURL=revisions.js.map
|