chrome-devtools-frontend 1.0.1587572 → 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/generated/Deprecation.ts +21 -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 -5
- 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/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 -45
- package/front_end/panels/network/RequestHeadersView.ts +236 -302
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/legacy/Toolbar.ts +37 -5
- package/front_end/ui/legacy/UIUtils.ts +35 -5
- package/package.json +1 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Copyright 2022 The Chromium Authors
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
|
-
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
4
|
import '../../ui/kit/kit.js';
|
|
6
5
|
|
|
7
6
|
import * as Common from '../../core/common/common.js';
|
|
@@ -12,18 +11,15 @@ import * as SDK from '../../core/sdk/sdk.js';
|
|
|
12
11
|
import * as Persistence from '../../models/persistence/persistence.js';
|
|
13
12
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
14
13
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
15
|
-
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
16
14
|
import * as Input from '../../ui/components/input/input.js';
|
|
17
|
-
import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
|
|
18
|
-
import * as RenderCoordinator from '../../ui/components/render_coordinator/render_coordinator.js';
|
|
19
15
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
20
16
|
import * as Lit from '../../ui/lit/lit.js';
|
|
21
17
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
22
18
|
import * as Sources from '../sources/sources.js';
|
|
23
19
|
|
|
24
20
|
import * as NetworkComponents from './components/components.js';
|
|
21
|
+
import {ShowMoreDetailsWidget} from './ShowMoreDetailsWidget.js';
|
|
25
22
|
|
|
26
|
-
const RAW_HEADER_CUTOFF = 3000;
|
|
27
23
|
const {render, html} = Lit;
|
|
28
24
|
|
|
29
25
|
const UIStrings = {
|
|
@@ -91,10 +87,6 @@ const UIStrings = {
|
|
|
91
87
|
* @description Title text for a link to the Sources panel to the file containing the header override definitions
|
|
92
88
|
*/
|
|
93
89
|
revealHeaderOverrides: 'Reveal header override definitions',
|
|
94
|
-
/**
|
|
95
|
-
* @description Text to show more content
|
|
96
|
-
*/
|
|
97
|
-
showMore: 'Show more',
|
|
98
90
|
/**
|
|
99
91
|
* @description HTTP response code
|
|
100
92
|
*/
|
|
@@ -103,189 +95,224 @@ const UIStrings = {
|
|
|
103
95
|
const str_ = i18n.i18n.registerUIStrings('panels/network/RequestHeadersView.ts', UIStrings);
|
|
104
96
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
105
97
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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;
|
|
109
123
|
#showResponseHeadersText = false;
|
|
110
124
|
#showRequestHeadersText = false;
|
|
111
|
-
#showResponseHeadersTextFull = false;
|
|
112
|
-
#showRequestHeadersTextFull = false;
|
|
113
125
|
#toReveal?: {section: NetworkForward.UIRequestLocation.UIHeaderSection, header?: string} = undefined;
|
|
114
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
|
+
}
|
|
115
137
|
|
|
116
|
-
constructor(
|
|
117
|
-
super();
|
|
118
|
-
this.#
|
|
119
|
-
|
|
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);
|
|
120
156
|
}
|
|
121
157
|
|
|
122
158
|
override wasShown(): void {
|
|
123
159
|
super.wasShown();
|
|
124
|
-
this.#
|
|
125
|
-
this.#request.addEventListener(SDK.NetworkRequest.Events.FINISHED_LOADING, this.#refreshHeadersView, this);
|
|
126
|
-
this.#request.addEventListener(SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.#refreshHeadersView, this);
|
|
127
|
-
this.#request.addEventListener(
|
|
128
|
-
SDK.NetworkRequest.Events.RESPONSE_HEADERS_CHANGED, this.#resetAndRefreshHeadersView, this);
|
|
160
|
+
this.#addEventListeners();
|
|
129
161
|
this.#toReveal = undefined;
|
|
130
162
|
this.#refreshHeadersView();
|
|
131
163
|
}
|
|
132
164
|
|
|
133
165
|
override willHide(): void {
|
|
134
166
|
super.willHide();
|
|
135
|
-
this.#
|
|
136
|
-
|
|
137
|
-
|
|
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(
|
|
138
175
|
SDK.NetworkRequest.Events.REQUEST_HEADERS_CHANGED, this.#refreshHeadersView, this);
|
|
139
|
-
this.#request
|
|
176
|
+
this.#request?.removeEventListener(
|
|
140
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);
|
|
141
185
|
}
|
|
142
186
|
|
|
143
187
|
#resetAndRefreshHeadersView(): void {
|
|
144
|
-
this.#request
|
|
145
|
-
|
|
188
|
+
this.#request?.deleteAssociatedData(NetworkComponents.ResponseHeaderSection.RESPONSE_HEADER_SECTION_DATA_KEY);
|
|
189
|
+
this.requestUpdate();
|
|
146
190
|
}
|
|
147
191
|
|
|
148
192
|
#refreshHeadersView(): void {
|
|
149
|
-
|
|
193
|
+
this.requestUpdate();
|
|
150
194
|
}
|
|
151
195
|
|
|
152
196
|
revealHeader(section: NetworkForward.UIRequestLocation.UIHeaderSection, header?: string): void {
|
|
153
197
|
this.#toReveal = {section, header};
|
|
154
|
-
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
connectedCallback(): void {
|
|
158
|
-
this.#workspace.addEventListener(
|
|
159
|
-
Workspace.Workspace.Events.UISourceCodeAdded, this.#uiSourceCodeAddedOrRemoved, this);
|
|
160
|
-
this.#workspace.addEventListener(
|
|
161
|
-
Workspace.Workspace.Events.UISourceCodeRemoved, this.#uiSourceCodeAddedOrRemoved, this);
|
|
162
|
-
Common.Settings.Settings.instance()
|
|
163
|
-
.moduleSetting('persistence-network-overrides-enabled')
|
|
164
|
-
.addChangeListener(this.render, this);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
disconnectedCallback(): void {
|
|
168
|
-
this.#workspace.removeEventListener(
|
|
169
|
-
Workspace.Workspace.Events.UISourceCodeAdded, this.#uiSourceCodeAddedOrRemoved, this);
|
|
170
|
-
this.#workspace.removeEventListener(
|
|
171
|
-
Workspace.Workspace.Events.UISourceCodeRemoved, this.#uiSourceCodeAddedOrRemoved, this);
|
|
172
|
-
Common.Settings.Settings.instance()
|
|
173
|
-
.moduleSetting('persistence-network-overrides-enabled')
|
|
174
|
-
.removeChangeListener(this.render, this);
|
|
198
|
+
this.requestUpdate();
|
|
175
199
|
}
|
|
176
200
|
|
|
177
201
|
#uiSourceCodeAddedOrRemoved(event: Common.EventTarget.EventTargetEvent<Workspace.UISourceCode.UISourceCode>): void {
|
|
178
202
|
if (this.#getHeaderOverridesFileUrl() === event.data.url()) {
|
|
179
|
-
|
|
203
|
+
this.requestUpdate();
|
|
180
204
|
}
|
|
181
205
|
}
|
|
182
206
|
|
|
183
|
-
override
|
|
207
|
+
override performUpdate(): void {
|
|
184
208
|
if (!this.#request) {
|
|
185
209
|
return;
|
|
186
210
|
}
|
|
187
211
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
${this.#renderEarlyHintsHeaders()}
|
|
196
|
-
${this.#renderResponseHeaders()}
|
|
197
|
-
${this.#renderRequestHeaders()}
|
|
198
|
-
`, this.#shadow, {host: this});
|
|
199
|
-
|
|
200
|
-
// clang-format on
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
#renderEarlyHintsHeaders(): Lit.LitTemplate {
|
|
205
|
-
if (!this.#request || !this.#request.earlyHintsHeaders || this.#request.earlyHintsHeaders.length === 0) {
|
|
206
|
-
return Lit.nothing;
|
|
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
|
+
};
|
|
207
219
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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,
|
|
212
234
|
};
|
|
213
235
|
|
|
214
|
-
|
|
215
|
-
return renderCategory({
|
|
216
|
-
onToggleRawHeaders: toggleShowRaw,
|
|
217
|
-
name: 'early-hints-headers',
|
|
218
|
-
title: i18nString(UIStrings.earlyHintsHeaders),
|
|
219
|
-
headerCount: this.#request.earlyHintsHeaders.length,
|
|
220
|
-
checked: undefined,
|
|
221
|
-
additionalContent: undefined,
|
|
222
|
-
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.EARLY_HINTS,
|
|
223
|
-
loggingContext: 'early-hints-headers',
|
|
224
|
-
contents: this.#showResponseHeadersText ? this.#renderRawHeaders(this.#request.responseHeadersText, true) : html`
|
|
225
|
-
<devtools-early-hints-header-section .data=${{
|
|
226
|
-
request: this.#request,
|
|
227
|
-
toReveal: this.#toReveal,
|
|
228
|
-
} as NetworkComponents.ResponseHeaderSection.ResponseHeaderSectionData}></devtools-early-hints-header-section>
|
|
229
|
-
`
|
|
230
|
-
});
|
|
236
|
+
this.#view(input, {}, this.contentElement);
|
|
231
237
|
}
|
|
232
238
|
|
|
233
|
-
#
|
|
239
|
+
#getHeaderOverridesFileUrl(): Platform.DevToolsPath.UrlString {
|
|
234
240
|
if (!this.#request) {
|
|
235
|
-
return
|
|
241
|
+
return Platform.DevToolsPath.EmptyUrlString;
|
|
236
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
|
+
}
|
|
237
249
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
250
|
+
function renderEarlyHintsHeaders(input: ViewInput): Lit.LitTemplate {
|
|
251
|
+
if (!input.request?.earlyHintsHeaders || input.request.earlyHintsHeaders.length === 0) {
|
|
252
|
+
return Lit.nothing;
|
|
253
|
+
}
|
|
242
254
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
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`
|
|
255
287
|
<devtools-response-header-section .data=${{
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
288
|
+
request: input.request,
|
|
289
|
+
toReveal: input.toReveal,
|
|
290
|
+
} as NetworkComponents.ResponseHeaderSection.ResponseHeaderSectionData} jslog=${
|
|
291
|
+
VisualLogging.section('response-headers')}></devtools-response-header-section>
|
|
260
292
|
`
|
|
261
|
-
|
|
262
|
-
|
|
293
|
+
});
|
|
294
|
+
}
|
|
263
295
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
296
|
+
function renderHeaderOverridesLink(input: ViewInput): Lit.LitTemplate {
|
|
297
|
+
if (!input.revealHeadersFile) {
|
|
298
|
+
return Lit.nothing;
|
|
299
|
+
}
|
|
268
300
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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
|
|
273
309
|
const fileIcon = html`
|
|
274
310
|
<devtools-icon name="document" class=${'medium' + overridesSetting.get() ? 'inline-icon dot purple': 'inline-icon'}>
|
|
275
311
|
</devtools-icon>`;
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
const revealHeadersFile = (event: Event): void => {
|
|
279
|
-
event.preventDefault();
|
|
280
|
-
const uiSourceCode = this.#workspace.uiSourceCodeForURL(this.#getHeaderOverridesFileUrl());
|
|
281
|
-
if (uiSourceCode) {
|
|
282
|
-
Sources.SourcesPanel.SourcesPanel.instance().showUISourceCode(uiSourceCode);
|
|
283
|
-
void Sources.SourcesPanel.SourcesPanel.instance().revealInNavigator(uiSourceCode);
|
|
284
|
-
}
|
|
285
|
-
};
|
|
312
|
+
// clang-format on
|
|
286
313
|
|
|
287
|
-
|
|
288
|
-
|
|
314
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
315
|
+
// clang-format off
|
|
289
316
|
return html`
|
|
290
317
|
<devtools-link
|
|
291
318
|
href="https://goo.gle/devtools-override"
|
|
@@ -304,164 +331,90 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
304
331
|
${fileIcon}${Persistence.NetworkPersistenceManager.HEADERS_FILENAME}
|
|
305
332
|
</devtools-link>
|
|
306
333
|
`;
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
#getHeaderOverridesFileUrl(): Platform.DevToolsPath.UrlString {
|
|
311
|
-
if (!this.#request) {
|
|
312
|
-
return Platform.DevToolsPath.EmptyUrlString;
|
|
313
|
-
}
|
|
314
|
-
const fileUrl = Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance().fileUrlFromNetworkUrl(
|
|
315
|
-
this.#request.url(), /* ignoreInactive */ true);
|
|
316
|
-
return fileUrl.substring(0, fileUrl.lastIndexOf('/')) + '/' +
|
|
317
|
-
Persistence.NetworkPersistenceManager.HEADERS_FILENAME as Platform.DevToolsPath.UrlString;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
#renderRequestHeaders(): Lit.LitTemplate {
|
|
321
|
-
if (!this.#request) {
|
|
322
|
-
return Lit.nothing;
|
|
323
|
-
}
|
|
324
|
-
const requestHeadersText = this.#request.requestHeadersText();
|
|
325
|
-
|
|
326
|
-
const toggleShowRaw = (): void => {
|
|
327
|
-
this.#showRequestHeadersText = !this.#showRequestHeadersText;
|
|
328
|
-
void this.render();
|
|
329
|
-
};
|
|
334
|
+
// clang-format on
|
|
335
|
+
}
|
|
330
336
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
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`
|
|
342
351
|
<devtools-widget .widgetConfig=${
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
#renderRawHeaders(rawHeadersText: string, forResponseHeaders: boolean): Lit.TemplateResult {
|
|
351
|
-
const trimmed = rawHeadersText.trim();
|
|
352
|
-
const showFull = forResponseHeaders ? this.#showResponseHeadersTextFull : this.#showRequestHeadersTextFull;
|
|
353
|
-
const isShortened = !showFull && trimmed.length > RAW_HEADER_CUTOFF;
|
|
354
|
-
|
|
355
|
-
const showMore = (): void => {
|
|
356
|
-
if (forResponseHeaders) {
|
|
357
|
-
this.#showResponseHeadersTextFull = true;
|
|
358
|
-
} else {
|
|
359
|
-
this.#showRequestHeadersTextFull = true;
|
|
360
|
-
}
|
|
361
|
-
void this.render();
|
|
362
|
-
};
|
|
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
|
+
}
|
|
363
358
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
const section = contextMenu.newSection();
|
|
369
|
-
section.appendItem(i18nString(UIStrings.showMore), showMore, {jslogContext: 'show-more'});
|
|
370
|
-
void contextMenu.show();
|
|
371
|
-
}
|
|
372
|
-
};
|
|
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
|
+
}
|
|
373
363
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
}
|
|
383
|
-
}}
|
|
384
|
-
>
|
|
385
|
-
<div class="raw-headers">
|
|
386
|
-
${isShortened ? trimmed.substring(0, RAW_HEADER_CUTOFF) : trimmed}
|
|
387
|
-
</div>
|
|
388
|
-
${isShortened
|
|
389
|
-
? html`
|
|
390
|
-
<devtools-button
|
|
391
|
-
.size=${Buttons.Button.Size.SMALL}
|
|
392
|
-
.variant=${Buttons.Button.Variant.OUTLINED}
|
|
393
|
-
@click=${showMore}
|
|
394
|
-
jslog=${VisualLogging.action('raw-headers-show-more').track({
|
|
395
|
-
click: true,
|
|
396
|
-
})}
|
|
397
|
-
>${i18nString(UIStrings.showMore)}</devtools-button
|
|
398
|
-
>
|
|
399
|
-
`
|
|
400
|
-
: Lit.nothing}
|
|
401
|
-
</div>
|
|
402
|
-
`;
|
|
403
|
-
// clang-format on
|
|
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');
|
|
404
372
|
}
|
|
405
373
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
let comment = '';
|
|
421
|
-
if (this.#request.cachedInMemory()) {
|
|
422
|
-
comment = i18nString(UIStrings.fromMemoryCache);
|
|
423
|
-
} else if (this.#request.fromEarlyHints()) {
|
|
424
|
-
comment = i18nString(UIStrings.fromEarlyHints);
|
|
425
|
-
} else if (this.#request.fetchedViaServiceWorker) {
|
|
426
|
-
comment = i18nString(UIStrings.fromServiceWorker);
|
|
427
|
-
} else if (this.#request.redirectSourceSignedExchangeInfoHasNoErrors()) {
|
|
428
|
-
comment = i18nString(UIStrings.fromSignedexchange);
|
|
429
|
-
} else if (this.#request.fromPrefetchCache()) {
|
|
430
|
-
comment = i18nString(UIStrings.fromPrefetchCache);
|
|
431
|
-
} else if (this.#request.cached()) {
|
|
432
|
-
comment = i18nString(UIStrings.fromDiskCache);
|
|
433
|
-
}
|
|
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
|
+
}
|
|
434
388
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
389
|
+
if (comment) {
|
|
390
|
+
statusClasses.push('status-with-comment');
|
|
391
|
+
}
|
|
438
392
|
|
|
439
|
-
|
|
393
|
+
const statusText = [input.request.statusCode, input.request.getInferredStatusText(), comment].join(' ');
|
|
440
394
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
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
|
|
447
401
|
contents: html`<div jslog=${VisualLogging.section('general')}>
|
|
448
|
-
${
|
|
449
|
-
${
|
|
450
|
-
|
|
451
|
-
${
|
|
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),
|
|
452
406
|
statusText, 'status-code', statusClasses) : Lit.nothing}
|
|
453
|
-
${
|
|
454
|
-
|
|
455
|
-
${
|
|
456
|
-
String(
|
|
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}
|
|
457
411
|
</div>`});
|
|
458
|
-
|
|
459
|
-
}
|
|
412
|
+
// clang-format on
|
|
460
413
|
|
|
461
|
-
|
|
462
|
-
Lit.LitTemplate {
|
|
463
|
-
const isHighlighted =
|
|
464
|
-
name.toLowerCase() ===
|
|
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();
|
|
465
418
|
return html`
|
|
466
419
|
<div class="row ${isHighlighted ? 'header-highlight' : ''}">
|
|
467
420
|
<div class="header-name">${name}</div>
|
|
@@ -473,20 +426,9 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
473
426
|
</div>
|
|
474
427
|
`;
|
|
475
428
|
}
|
|
476
|
-
|
|
477
|
-
getHeaderElementById(id: string): Element|null {
|
|
478
|
-
const categories = this.#shadow.querySelectorAll('devtools-request-headers-category');
|
|
479
|
-
for (const category of categories) {
|
|
480
|
-
const element = category.querySelector(`#${id}`);
|
|
481
|
-
if (element) {
|
|
482
|
-
return element;
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
return null;
|
|
486
|
-
}
|
|
487
429
|
}
|
|
488
430
|
|
|
489
|
-
function renderCategory(data: {
|
|
431
|
+
export function renderCategory(data: {
|
|
490
432
|
name: string,
|
|
491
433
|
title: Common.UIString.LocalizedString,
|
|
492
434
|
contents: Lit.LitTemplate,
|
|
@@ -555,11 +497,3 @@ function renderCategory(data: {
|
|
|
555
497
|
expandedSetting?.set((event.target as HTMLDetailsElement).open);
|
|
556
498
|
}
|
|
557
499
|
}
|
|
558
|
-
|
|
559
|
-
customElements.define('devtools-request-headers', RequestHeadersView);
|
|
560
|
-
|
|
561
|
-
declare global {
|
|
562
|
-
interface HTMLElementTagNameMap {
|
|
563
|
-
'devtools-request-headers': RequestHeadersView;
|
|
564
|
-
}
|
|
565
|
-
}
|