chrome-devtools-frontend 1.0.1585538 → 1.0.1586699
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/common/Srcset.ts +61 -0
- package/front_end/core/common/common.ts +2 -0
- package/front_end/generated/SupportedCSSProperties.js +4 -2
- package/front_end/models/ai_assistance/AiConversation.ts +6 -2
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +12 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +13 -0
- package/front_end/panels/application/FrameDetailsView.ts +4 -9
- package/front_end/panels/console/ConsoleViewMessage.ts +2 -2
- package/front_end/panels/console/PromptBuilder.ts +15 -3
- package/front_end/panels/elements/ElementsTreeElement.ts +95 -106
- package/front_end/panels/elements/NodeStackTraceWidget.ts +3 -11
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +69 -0
- package/front_end/panels/elements/elements.ts +3 -1
- package/front_end/panels/network/RequestInitiatorView.ts +2 -10
- package/front_end/panels/network/components/RequestHeadersView.ts +85 -153
- package/front_end/panels/sources/CallStackSidebarPane.ts +3 -7
- package/front_end/panels/timeline/TimelineUIUtils.ts +2 -6
- package/front_end/panels/utils/utils.ts +13 -5
- 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/cdp/FrameManager.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +7 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- 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 +7 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +7 -7
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- 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 +2 -2
- package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/common/util.ts +9 -8
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/legacy/UIUtils.ts +31 -14
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +96 -216
- package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -3
- package/front_end/ui/legacy/components/utils/jsUtils.css +0 -9
- package/package.json +1 -1
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Copyright 2026 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
|
+
|
|
5
|
+
import * as Common from '../../core/common/common.js';
|
|
6
|
+
import * as Host from '../../core/host/host.js';
|
|
7
|
+
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
|
+
import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
|
|
9
|
+
import type * as TextEditor from '../../ui/components/text_editor/text_editor.js';
|
|
10
|
+
|
|
11
|
+
export class StylesAiCodeCompletionProvider {
|
|
12
|
+
#aidaClient: Host.AidaClient.AidaClient = new Host.AidaClient.AidaClient();
|
|
13
|
+
#aiCodeCompletionSetting = Common.Settings.Settings.instance().createSetting('ai-code-completion-enabled', false);
|
|
14
|
+
#aiCodeCompletion?: AiCodeCompletion.AiCodeCompletion.AiCodeCompletion;
|
|
15
|
+
#aiCodeCompletionConfig?: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig;
|
|
16
|
+
|
|
17
|
+
#boundOnUpdateAiCodeCompletionState = this.#updateAiCodeCompletionState.bind(this);
|
|
18
|
+
|
|
19
|
+
private constructor(aiCodeCompletionConfig: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig) {
|
|
20
|
+
const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance();
|
|
21
|
+
if (!AiCodeCompletion.AiCodeCompletion.AiCodeCompletion.isAiCodeCompletionStylesEnabled(devtoolsLocale.locale)) {
|
|
22
|
+
throw new Error('AI code completion feature in Styles is not enabled.');
|
|
23
|
+
}
|
|
24
|
+
this.#aiCodeCompletionConfig = aiCodeCompletionConfig;
|
|
25
|
+
Host.AidaClient.HostConfigTracker.instance().addEventListener(
|
|
26
|
+
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnUpdateAiCodeCompletionState);
|
|
27
|
+
this.#aiCodeCompletionSetting.addChangeListener(this.#boundOnUpdateAiCodeCompletionState);
|
|
28
|
+
void this.#updateAiCodeCompletionState();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
static createInstance(aiCodeCompletionConfig: TextEditor.AiCodeCompletionProvider.AiCodeCompletionConfig):
|
|
32
|
+
StylesAiCodeCompletionProvider {
|
|
33
|
+
return new StylesAiCodeCompletionProvider(aiCodeCompletionConfig);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
#setupAiCodeCompletion(): void {
|
|
37
|
+
if (!this.#aiCodeCompletionConfig) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (this.#aiCodeCompletion) {
|
|
41
|
+
// early return as this means that code completion was previously setup
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.#aiCodeCompletion = new AiCodeCompletion.AiCodeCompletion.AiCodeCompletion(
|
|
45
|
+
{aidaClient: this.#aidaClient}, this.#aiCodeCompletionConfig.panel, undefined,
|
|
46
|
+
this.#aiCodeCompletionConfig.completionContext.stopSequences);
|
|
47
|
+
this.#aiCodeCompletionConfig.onFeatureEnabled();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
#cleanupAiCodeCompletion(): void {
|
|
51
|
+
if (!this.#aiCodeCompletion) {
|
|
52
|
+
// early return as this means there is no code completion to clean up
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.#aiCodeCompletion = undefined;
|
|
56
|
+
this.#aiCodeCompletionConfig?.onFeatureDisabled();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async #updateAiCodeCompletionState(): Promise<void> {
|
|
60
|
+
const aidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
|
|
61
|
+
const isAvailable = aidaAvailability === Host.AidaClient.AidaAccessPreconditions.AVAILABLE;
|
|
62
|
+
const isEnabled = this.#aiCodeCompletionSetting.get();
|
|
63
|
+
if (isAvailable && isEnabled) {
|
|
64
|
+
this.#setupAiCodeCompletion();
|
|
65
|
+
} else {
|
|
66
|
+
this.#cleanupAiCodeCompletion();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
import './InspectElementModeController.js';
|
|
6
6
|
import './ColorSwatchPopoverIcon.js';
|
|
7
|
-
|
|
8
7
|
import './DOMPath.js';
|
|
9
8
|
import './ElementsSidebarPane.js';
|
|
10
9
|
import './ElementsTreeElement.js';
|
|
@@ -20,6 +19,7 @@ import './NodeStackTraceWidget.js';
|
|
|
20
19
|
import './StylePropertiesSection.js';
|
|
21
20
|
import './StylePropertyHighlighter.js';
|
|
22
21
|
import './StylesSidebarPane.js';
|
|
22
|
+
import './StylesAiCodeCompletionProvider.js';
|
|
23
23
|
import './StylePropertyTreeElement.js';
|
|
24
24
|
import './ComputedStyleWidget.js';
|
|
25
25
|
import './CSSRuleValidator.js';
|
|
@@ -59,6 +59,7 @@ import * as StylePropertiesSection from './StylePropertiesSection.js';
|
|
|
59
59
|
import * as StylePropertyHighlighter from './StylePropertyHighlighter.js';
|
|
60
60
|
import * as StylePropertyTreeElement from './StylePropertyTreeElement.js';
|
|
61
61
|
import * as StylePropertyUtils from './StylePropertyUtils.js';
|
|
62
|
+
import * as StylesAiCodeCompletionProvider from './StylesAiCodeCompletionProvider.js';
|
|
62
63
|
import * as StylesSidebarPane from './StylesSidebarPane.js';
|
|
63
64
|
import * as TopLayerContainer from './TopLayerContainer.js';
|
|
64
65
|
import * as WebCustomData from './WebCustomData.js';
|
|
@@ -94,6 +95,7 @@ export {
|
|
|
94
95
|
StylePropertyHighlighter,
|
|
95
96
|
StylePropertyTreeElement,
|
|
96
97
|
StylePropertyUtils,
|
|
98
|
+
StylesAiCodeCompletionProvider,
|
|
97
99
|
StylesSidebarPane,
|
|
98
100
|
TopLayerContainer,
|
|
99
101
|
WebCustomData,
|
|
@@ -39,8 +39,6 @@ export interface ViewInput {
|
|
|
39
39
|
initiatorGraph: Logs.NetworkLog.InitiatorGraph;
|
|
40
40
|
stackTrace: StackTrace.StackTrace.StackTrace|null;
|
|
41
41
|
request: SDK.NetworkRequest.NetworkRequest;
|
|
42
|
-
linkifier: Components.Linkifier.Linkifier;
|
|
43
|
-
target?: SDK.Target.Target;
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLElement): void => {
|
|
@@ -68,8 +66,6 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
|
|
|
68
66
|
<ul role="group">
|
|
69
67
|
<li role="treeitem">
|
|
70
68
|
<devtools-widget .widgetConfig=${widgetConfig(Components.JSPresentationUtils.StackTracePreviewContent, {
|
|
71
|
-
target: input.target,
|
|
72
|
-
linkifier: input.linkifier,
|
|
73
69
|
options: {tabStops: true},
|
|
74
70
|
stackTrace: input.stackTrace,
|
|
75
71
|
})}></devtools-widget>
|
|
@@ -165,7 +161,6 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
|
|
|
165
161
|
type View = typeof DEFAULT_VIEW;
|
|
166
162
|
|
|
167
163
|
export class RequestInitiatorView extends UI.Widget.VBox {
|
|
168
|
-
private readonly linkifier: Components.Linkifier.Linkifier;
|
|
169
164
|
private readonly request: SDK.NetworkRequest.NetworkRequest;
|
|
170
165
|
#view: View;
|
|
171
166
|
|
|
@@ -173,7 +168,6 @@ export class RequestInitiatorView extends UI.Widget.VBox {
|
|
|
173
168
|
super({jslog: `${VisualLogging.pane('initiator').track({resize: true})}`});
|
|
174
169
|
|
|
175
170
|
this.element.classList.add('request-initiator-view');
|
|
176
|
-
this.linkifier = new Components.Linkifier.Linkifier();
|
|
177
171
|
this.request = request;
|
|
178
172
|
this.#view = view;
|
|
179
173
|
}
|
|
@@ -192,8 +186,8 @@ export class RequestInitiatorView extends UI.Widget.VBox {
|
|
|
192
186
|
const networkManager = SDK.NetworkManager.NetworkManager.forRequest(request);
|
|
193
187
|
const target = networkManager?.target() ?? targetManager.primaryPageTarget() ?? targetManager.rootTarget();
|
|
194
188
|
let stackTrace: StackTrace.StackTrace.StackTrace|null = null;
|
|
195
|
-
const preview = new Components.JSPresentationUtils.StackTracePreviewContent(
|
|
196
|
-
|
|
189
|
+
const preview = new Components.JSPresentationUtils.StackTracePreviewContent();
|
|
190
|
+
preview.options = {tabStops: focusableLink};
|
|
197
191
|
if (target) {
|
|
198
192
|
stackTrace = await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()
|
|
199
193
|
.createStackTraceFromProtocolRuntime(initiator.stack, target);
|
|
@@ -219,8 +213,6 @@ export class RequestInitiatorView extends UI.Widget.VBox {
|
|
|
219
213
|
initiatorGraph,
|
|
220
214
|
stackTrace,
|
|
221
215
|
request: this.request,
|
|
222
|
-
linkifier: this.linkifier,
|
|
223
|
-
target: target || undefined,
|
|
224
216
|
};
|
|
225
217
|
|
|
226
218
|
this.#view(viewInput, undefined, this.contentElement);
|
|
@@ -195,6 +195,7 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
195
195
|
// clang-format off
|
|
196
196
|
render(html`
|
|
197
197
|
<style>${requestHeadersViewStyles}</style>
|
|
198
|
+
<style>${Input.checkboxStyles}</style>
|
|
198
199
|
${this.#renderGeneralSection()}
|
|
199
200
|
${this.#renderEarlyHintsHeaders()}
|
|
200
201
|
${this.#renderResponseHeaders()}
|
|
@@ -216,31 +217,22 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
216
217
|
};
|
|
217
218
|
|
|
218
219
|
// Disabled until https://crbug.com/1079231 is fixed.
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.EARLY_HINTS,
|
|
230
|
-
loggingContext: 'early-hints-headers',
|
|
231
|
-
} as CategoryData}
|
|
232
|
-
aria-label=${i18nString(UIStrings.earlyHintsHeaders)}
|
|
233
|
-
>
|
|
234
|
-
${this.#showResponseHeadersText ?
|
|
235
|
-
this.#renderRawHeaders(this.#request.responseHeadersText, true) : html`
|
|
220
|
+
return renderCategory({
|
|
221
|
+
onToggleRawHeaders: toggleShowRaw,
|
|
222
|
+
name: 'early-hints-headers',
|
|
223
|
+
title: i18nString(UIStrings.earlyHintsHeaders),
|
|
224
|
+
headerCount: this.#request.earlyHintsHeaders.length,
|
|
225
|
+
checked: undefined,
|
|
226
|
+
additionalContent: undefined,
|
|
227
|
+
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.EARLY_HINTS,
|
|
228
|
+
loggingContext: 'early-hints-headers',
|
|
229
|
+
contents: this.#showResponseHeadersText ? this.#renderRawHeaders(this.#request.responseHeadersText, true) : html`
|
|
236
230
|
<devtools-early-hints-header-section .data=${{
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
`
|
|
241
|
-
|
|
242
|
-
`;
|
|
243
|
-
// clang-format on
|
|
231
|
+
request: this.#request,
|
|
232
|
+
toReveal: this.#toReveal,
|
|
233
|
+
} as ResponseHeaderSectionData}></devtools-early-hints-header-section>
|
|
234
|
+
`
|
|
235
|
+
});
|
|
244
236
|
}
|
|
245
237
|
|
|
246
238
|
#renderResponseHeaders(): Lit.LitTemplate {
|
|
@@ -253,32 +245,25 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
253
245
|
void this.render();
|
|
254
246
|
};
|
|
255
247
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
loggingContext: 'response-headers',
|
|
269
|
-
} as CategoryData}
|
|
270
|
-
aria-label=${i18nString(UIStrings.responseHeaders)}
|
|
271
|
-
>
|
|
272
|
-
${this.#showResponseHeadersText ?
|
|
273
|
-
this.#renderRawHeaders(this.#request.responseHeadersText, true) : html`
|
|
248
|
+
return renderCategory({
|
|
249
|
+
onToggleRawHeaders: toggleShowRaw,
|
|
250
|
+
name: 'response-headers',
|
|
251
|
+
title: i18nString(UIStrings.responseHeaders),
|
|
252
|
+
headerCount: this.#request.sortedResponseHeaders.length,
|
|
253
|
+
checked: this.#request.responseHeadersText ? this.#showResponseHeadersText : undefined,
|
|
254
|
+
additionalContent: this.#renderHeaderOverridesLink(),
|
|
255
|
+
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.RESPONSE,
|
|
256
|
+
loggingContext: 'response-headers',
|
|
257
|
+
contents: this.#showResponseHeadersText ?
|
|
258
|
+
this.#renderRawHeaders(this.#request.responseHeadersText, true) :
|
|
259
|
+
html`
|
|
274
260
|
<devtools-response-header-section .data=${{
|
|
275
261
|
request: this.#request,
|
|
276
262
|
toReveal: this.#toReveal,
|
|
277
|
-
} as ResponseHeaderSectionData} jslog=${
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
// clang-format on
|
|
263
|
+
} as ResponseHeaderSectionData} jslog=${
|
|
264
|
+
VisualLogging.section('response-headers')}></devtools-response-header-section>
|
|
265
|
+
`
|
|
266
|
+
});
|
|
282
267
|
}
|
|
283
268
|
|
|
284
269
|
#renderHeaderOverridesLink(): Lit.LitTemplate {
|
|
@@ -348,31 +333,22 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
348
333
|
void this.render();
|
|
349
334
|
};
|
|
350
335
|
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
loggingContext: 'request-headers',
|
|
363
|
-
} as CategoryData}
|
|
364
|
-
aria-label=${i18nString(UIStrings.requestHeaders)}
|
|
365
|
-
>
|
|
366
|
-
${(this.#showRequestHeadersText && requestHeadersText) ?
|
|
367
|
-
this.#renderRawHeaders(requestHeadersText, false) : html`
|
|
336
|
+
return renderCategory({
|
|
337
|
+
onToggleRawHeaders: toggleShowRaw,
|
|
338
|
+
name: 'request-headers',
|
|
339
|
+
title: i18nString(UIStrings.requestHeaders),
|
|
340
|
+
headerCount: this.#request.requestHeaders().length,
|
|
341
|
+
checked: requestHeadersText ? this.#showRequestHeadersText : undefined,
|
|
342
|
+
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.REQUEST,
|
|
343
|
+
loggingContext: 'request-headers',
|
|
344
|
+
contents: (this.#showRequestHeadersText && requestHeadersText) ?
|
|
345
|
+
this.#renderRawHeaders(requestHeadersText, false) :
|
|
346
|
+
html`
|
|
368
347
|
<devtools-widget .widgetConfig=${UI.Widget.widgetConfig(RequestHeaderSection, {
|
|
369
348
|
request: this.#request,
|
|
370
349
|
toReveal: this.#toReveal,
|
|
371
|
-
})} jslog=${VisualLogging.section('request-headers')}></devtools-widget
|
|
372
|
-
|
|
373
|
-
</devtools-request-headers-category>
|
|
374
|
-
`;
|
|
375
|
-
// clang-format on
|
|
350
|
+
})} jslog=${VisualLogging.section('request-headers')}></devtools-widget>`
|
|
351
|
+
});
|
|
376
352
|
}
|
|
377
353
|
|
|
378
354
|
#renderRawHeaders(rawHeadersText: string, forResponseHeaders: boolean): Lit.TemplateResult {
|
|
@@ -466,19 +442,13 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
466
442
|
|
|
467
443
|
const statusText = [this.#request.statusCode, this.#request.getInferredStatusText(), comment].join(' ');
|
|
468
444
|
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.GENERAL,
|
|
477
|
-
loggingContext: 'general',
|
|
478
|
-
} as CategoryData}
|
|
479
|
-
aria-label=${i18nString(UIStrings.general)}
|
|
480
|
-
>
|
|
481
|
-
<div jslog=${VisualLogging.section('general')}>
|
|
445
|
+
return renderCategory({
|
|
446
|
+
name: 'general',
|
|
447
|
+
title: i18nString(UIStrings.general),
|
|
448
|
+
forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.GENERAL,
|
|
449
|
+
loggingContext: 'general',
|
|
450
|
+
// clang-format off
|
|
451
|
+
contents: html`<div jslog=${VisualLogging.section('general')}>
|
|
482
452
|
${this.#renderGeneralRow(i18nString(UIStrings.requestUrl), this.#request.url(), 'request-url')}
|
|
483
453
|
${this.#request.statusCode? this.#renderGeneralRow(i18nString(UIStrings.requestMethod),
|
|
484
454
|
this.#request.requestMethod, 'request-method') : Lit.nothing}
|
|
@@ -488,9 +458,7 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
488
458
|
this.#request.remoteAddress(), 'remote-address') : Lit.nothing}
|
|
489
459
|
${this.#request.referrerPolicy()? this.#renderGeneralRow(i18nString(UIStrings.referrerPolicy),
|
|
490
460
|
String(this.#request.referrerPolicy()), 'referrer-policy') : Lit.nothing}
|
|
491
|
-
</div
|
|
492
|
-
</devtools-request-headers-category>
|
|
493
|
-
`;
|
|
461
|
+
</div>`});
|
|
494
462
|
// clang-format on
|
|
495
463
|
}
|
|
496
464
|
|
|
@@ -522,87 +490,53 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
522
490
|
}
|
|
523
491
|
}
|
|
524
492
|
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
forceOpen
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
545
|
-
#expandedSetting?: Common.Settings.Setting<boolean>;
|
|
546
|
-
#title: Common.UIString.LocalizedString = Common.UIString.LocalizedEmptyString;
|
|
547
|
-
#headerCount?: number = undefined;
|
|
548
|
-
#checked: boolean|undefined = undefined;
|
|
549
|
-
#additionalContent: Lit.LitTemplate|undefined = undefined;
|
|
550
|
-
#forceOpen: boolean|undefined = undefined;
|
|
551
|
-
#loggingContext = '';
|
|
552
|
-
|
|
553
|
-
set data(data: CategoryData) {
|
|
554
|
-
this.#title = data.title;
|
|
555
|
-
this.#expandedSetting =
|
|
556
|
-
Common.Settings.Settings.instance().createSetting('request-info-' + data.name + '-category-expanded', true);
|
|
557
|
-
this.#headerCount = data.headerCount;
|
|
558
|
-
this.#checked = data.checked;
|
|
559
|
-
this.#additionalContent = data.additionalContent;
|
|
560
|
-
this.#forceOpen = data.forceOpen;
|
|
561
|
-
this.#loggingContext = data.loggingContext;
|
|
562
|
-
this.#render();
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
#onCheckboxToggle(): void {
|
|
566
|
-
this.dispatchEvent(new ToggleRawHeadersEvent());
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
#render(): void {
|
|
570
|
-
const isOpen = (this.#expandedSetting ? this.#expandedSetting.get() : true) || this.#forceOpen;
|
|
571
|
-
// Disabled until https://crbug.com/1079231 is fixed.
|
|
572
|
-
// clang-format off
|
|
573
|
-
render(html`
|
|
574
|
-
<style>${requestHeadersViewStyles}</style>
|
|
575
|
-
<style>${Input.checkboxStyles}</style>
|
|
576
|
-
<details ?open=${isOpen} @toggle=${this.#onToggle}>
|
|
493
|
+
function renderCategory(data: {
|
|
494
|
+
name: string,
|
|
495
|
+
title: Common.UIString.LocalizedString,
|
|
496
|
+
contents: Lit.LitTemplate,
|
|
497
|
+
loggingContext: string,
|
|
498
|
+
headerCount?: number,
|
|
499
|
+
checked?: boolean,
|
|
500
|
+
additionalContent?: Lit.LitTemplate,
|
|
501
|
+
forceOpen?: boolean,
|
|
502
|
+
onToggleRawHeaders?: () => void,
|
|
503
|
+
}): Lit.LitTemplate {
|
|
504
|
+
const expandedSetting =
|
|
505
|
+
Common.Settings.Settings.instance().createSetting('request-info-' + data.name + '-category-expanded', true);
|
|
506
|
+
|
|
507
|
+
const isOpen = (expandedSetting ? expandedSetting.get() : true) || data.forceOpen;
|
|
508
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
509
|
+
// clang-format off
|
|
510
|
+
return html`
|
|
511
|
+
<details ?open=${isOpen} @toggle=${onToggle} aria-label=${data.title}>
|
|
577
512
|
<summary
|
|
578
513
|
class="header"
|
|
579
|
-
@keydown=${
|
|
580
|
-
jslog=${VisualLogging.sectionHeader().track({click: true}).context(
|
|
514
|
+
@keydown=${onSummaryKeyDown}
|
|
515
|
+
jslog=${VisualLogging.sectionHeader().track({click: true}).context(data.loggingContext)}
|
|
581
516
|
>
|
|
582
517
|
<div class="header-grid-container">
|
|
583
518
|
<div>
|
|
584
|
-
${
|
|
585
|
-
html`<span class="header-count"> (${
|
|
519
|
+
${data.title}${data.headerCount !== undefined ?
|
|
520
|
+
html`<span class="header-count"> (${data.headerCount})</span>` :
|
|
586
521
|
Lit.nothing
|
|
587
522
|
}
|
|
588
523
|
</div>
|
|
589
524
|
<div class="hide-when-closed">
|
|
590
|
-
${
|
|
591
|
-
<devtools-checkbox .checked=${
|
|
525
|
+
${data.checked !== undefined ? html`
|
|
526
|
+
<devtools-checkbox .checked=${data.checked} @change=${data.onToggleRawHeaders}
|
|
592
527
|
jslog=${VisualLogging.toggle('raw-headers').track({change: true})}>
|
|
593
528
|
${i18nString(UIStrings.raw)}
|
|
594
529
|
</devtools-checkbox>` : Lit.nothing}
|
|
595
530
|
</div>
|
|
596
|
-
<div class="hide-when-closed">${
|
|
531
|
+
<div class="hide-when-closed">${data.additionalContent}</div>
|
|
597
532
|
</div>
|
|
598
533
|
</summary>
|
|
599
|
-
|
|
534
|
+
${data.contents}
|
|
600
535
|
</details>
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
}
|
|
536
|
+
`;
|
|
537
|
+
// clang-format on
|
|
604
538
|
|
|
605
|
-
|
|
539
|
+
function onSummaryKeyDown(event: KeyboardEvent): void {
|
|
606
540
|
if (!event.target) {
|
|
607
541
|
return;
|
|
608
542
|
}
|
|
@@ -621,17 +555,15 @@ export class Category extends HTMLElement {
|
|
|
621
555
|
}
|
|
622
556
|
}
|
|
623
557
|
|
|
624
|
-
|
|
625
|
-
|
|
558
|
+
function onToggle(event: Event): void {
|
|
559
|
+
expandedSetting?.set((event.target as HTMLDetailsElement).open);
|
|
626
560
|
}
|
|
627
561
|
}
|
|
628
562
|
|
|
629
563
|
customElements.define('devtools-request-headers', RequestHeadersView);
|
|
630
|
-
customElements.define('devtools-request-headers-category', Category);
|
|
631
564
|
|
|
632
565
|
declare global {
|
|
633
566
|
interface HTMLElementTagNameMap {
|
|
634
567
|
'devtools-request-headers': RequestHeadersView;
|
|
635
|
-
'devtools-request-headers-category': Category;
|
|
636
568
|
}
|
|
637
569
|
}
|
|
@@ -253,15 +253,12 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
253
253
|
|
|
254
254
|
let {maxAsyncStackChainDepth} = this;
|
|
255
255
|
let hasMore = false;
|
|
256
|
-
let previousFragment: StackTrace.StackTrace.Fragment = this.#stackTrace.syncFragment;
|
|
257
256
|
for (const asyncFragment of this.#stackTrace.asyncFragments) {
|
|
258
|
-
items.push(Item.createForAsyncHeader(
|
|
257
|
+
items.push(Item.createForAsyncHeader(this.#stackTrace, asyncFragment));
|
|
259
258
|
for (const frame of asyncFragment.frames) {
|
|
260
259
|
items.push(Item.createForFrame(frame));
|
|
261
260
|
}
|
|
262
261
|
|
|
263
|
-
previousFragment = asyncFragment;
|
|
264
|
-
|
|
265
262
|
if (--maxAsyncStackChainDepth <= 0) {
|
|
266
263
|
hasMore = asyncFragment !== this.#stackTrace.asyncFragments.at(-1);
|
|
267
264
|
break;
|
|
@@ -546,9 +543,8 @@ export class Item {
|
|
|
546
543
|
}
|
|
547
544
|
|
|
548
545
|
static createForAsyncHeader(
|
|
549
|
-
|
|
550
|
-
const description = UI.UIUtils.
|
|
551
|
-
fragment.description, previousFragment.frames.map(f => ({functionName: f.name ?? ''})));
|
|
546
|
+
stackTrace: StackTrace.StackTrace.StackTrace, fragment: StackTrace.StackTrace.AsyncFragment): Item {
|
|
547
|
+
const description = UI.UIUtils.asyncFragmentLabel(stackTrace, fragment);
|
|
552
548
|
const item = new Item(description);
|
|
553
549
|
item.isAsyncHeader = true;
|
|
554
550
|
return item;
|
|
@@ -2498,10 +2498,6 @@ export class TimelineDetailsContentHelper {
|
|
|
2498
2498
|
* contains any entries, and discards it if it's empty.
|
|
2499
2499
|
*/
|
|
2500
2500
|
async createChildStackTraceElement(runtimeStackTrace: Protocol.Runtime.StackTrace): Promise<HTMLElement|null> {
|
|
2501
|
-
if (!this.#linkifier) {
|
|
2502
|
-
return null;
|
|
2503
|
-
}
|
|
2504
|
-
|
|
2505
2501
|
// Fallback to the main page/root target. Maybe the main page has a source map we need.
|
|
2506
2502
|
// Worst case the stack is identity mapped.
|
|
2507
2503
|
const targetManager = SDK.TargetManager.TargetManager.instance();
|
|
@@ -2513,8 +2509,8 @@ export class TimelineDetailsContentHelper {
|
|
|
2513
2509
|
const stackTrace =
|
|
2514
2510
|
await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createStackTraceFromProtocolRuntime(
|
|
2515
2511
|
runtimeStackTrace, target);
|
|
2516
|
-
const callFrameContents = new LegacyComponents.JSPresentationUtils.StackTracePreviewContent(
|
|
2517
|
-
|
|
2512
|
+
const callFrameContents = new LegacyComponents.JSPresentationUtils.StackTracePreviewContent();
|
|
2513
|
+
callFrameContents.options = {tabStops: true, showColumnNumber: true};
|
|
2518
2514
|
callFrameContents.stackTrace = stackTrace;
|
|
2519
2515
|
|
|
2520
2516
|
await callFrameContents.updateComplete;
|
|
@@ -151,12 +151,20 @@ export class PanelUtils {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
if (type === Common.ResourceType.resourceTypes.Image) {
|
|
154
|
+
// clang-format off
|
|
154
155
|
return html`<div class="image icon">
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
<img
|
|
157
|
+
class="image-network-icon-preview"
|
|
158
|
+
title=${iconTitleForRequest(request)}
|
|
159
|
+
alt=${iconTitleForRequest(request)}
|
|
160
|
+
${ref(el => {
|
|
161
|
+
if (el) {
|
|
162
|
+
void request.populateImageSource(el as HTMLImageElement);
|
|
163
|
+
}
|
|
164
|
+
})}
|
|
165
|
+
/>
|
|
166
|
+
</div>`;
|
|
167
|
+
// clang-format on
|
|
160
168
|
}
|
|
161
169
|
|
|
162
170
|
// Exclude Manifest here because it has mimeType:application/json but it has its own icon
|
|
@@ -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: 649f914735bb39cbd9bfe68673921ced1cc2e71f
|
|
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.4
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License File: LICENSE
|
|
7
|
-
Revision:
|
|
7
|
+
Revision: c771d9cc0c6c3611532e18d89291c2d734f736ab
|
|
8
8
|
Security Critical: no
|
|
9
9
|
Shipped: yes
|
|
10
10
|
Update Mechanism: Autoroll
|
|
@@ -267,7 +267,7 @@ class FrameManager extends EventEmitter_js_1.EventEmitter {
|
|
|
267
267
|
frame.updateClient(target._session());
|
|
268
268
|
}
|
|
269
269
|
this.setupEventListeners(target._session());
|
|
270
|
-
void this.initialize(target._session(), frame);
|
|
270
|
+
void this.initialize(target._session(), frame).catch(util_js_1.debugError);
|
|
271
271
|
}
|
|
272
272
|
_deviceRequestPromptManager(client) {
|
|
273
273
|
let manager = this.#deviceRequestPromptManagerMap.get(client);
|