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.
Files changed (51) hide show
  1. package/front_end/core/common/Srcset.ts +61 -0
  2. package/front_end/core/common/common.ts +2 -0
  3. package/front_end/generated/SupportedCSSProperties.js +4 -2
  4. package/front_end/models/ai_assistance/AiConversation.ts +6 -2
  5. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +12 -0
  6. package/front_end/models/javascript_metadata/NativeFunctions.js +2 -2
  7. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -0
  8. package/front_end/panels/ai_assistance/components/ChatView.ts +13 -0
  9. package/front_end/panels/application/FrameDetailsView.ts +4 -9
  10. package/front_end/panels/console/ConsoleViewMessage.ts +2 -2
  11. package/front_end/panels/console/PromptBuilder.ts +15 -3
  12. package/front_end/panels/elements/ElementsTreeElement.ts +95 -106
  13. package/front_end/panels/elements/NodeStackTraceWidget.ts +3 -11
  14. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +69 -0
  15. package/front_end/panels/elements/elements.ts +3 -1
  16. package/front_end/panels/network/RequestInitiatorView.ts +2 -10
  17. package/front_end/panels/network/components/RequestHeadersView.ts +85 -153
  18. package/front_end/panels/sources/CallStackSidebarPane.ts +3 -7
  19. package/front_end/panels/timeline/TimelineUIUtils.ts +2 -6
  20. package/front_end/panels/utils/utils.ts +13 -5
  21. package/front_end/third_party/chromium/README.chromium +1 -1
  22. package/front_end/third_party/puppeteer/README.chromium +2 -2
  23. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js +1 -1
  24. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/FrameManager.js.map +1 -1
  25. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.d.ts.map +1 -1
  26. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js +7 -7
  27. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/util.js.map +1 -1
  28. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
  29. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
  30. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
  31. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
  32. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +7 -7
  33. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js +1 -1
  34. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/FrameManager.js.map +1 -1
  35. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.d.ts.map +1 -1
  36. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js +7 -7
  37. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/util.js.map +1 -1
  38. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
  39. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
  40. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
  41. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
  42. package/front_end/third_party/puppeteer/package/package.json +2 -2
  43. package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +1 -1
  44. package/front_end/third_party/puppeteer/package/src/common/util.ts +9 -8
  45. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  46. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  47. package/front_end/ui/legacy/UIUtils.ts +31 -14
  48. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +96 -216
  49. package/front_end/ui/legacy/components/utils/Linkifier.ts +7 -3
  50. package/front_end/ui/legacy/components/utils/jsUtils.css +0 -9
  51. 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
- undefined, target ?? undefined, linkifier, {tabStops: focusableLink});
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
- // clang-format off
220
- return html`
221
- <devtools-request-headers-category
222
- @togglerawevent=${toggleShowRaw}
223
- .data=${{
224
- name: 'early-hints-headers',
225
- title: i18nString(UIStrings.earlyHintsHeaders),
226
- headerCount: this.#request.earlyHintsHeaders.length,
227
- checked: undefined,
228
- additionalContent: undefined,
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
- request: this.#request,
238
- toReveal: this.#toReveal,
239
- } as ResponseHeaderSectionData}></devtools-early-hints-header-section>
240
- `}
241
- </devtools-request-headers-category>
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
- // Disabled until https://crbug.com/1079231 is fixed.
257
- // clang-format off
258
- return html`
259
- <devtools-request-headers-category
260
- @togglerawevent=${toggleShowRaw}
261
- .data=${{
262
- name: 'response-headers',
263
- title: i18nString(UIStrings.responseHeaders),
264
- headerCount: this.#request.sortedResponseHeaders.length,
265
- checked: this.#request.responseHeadersText ? this.#showResponseHeadersText : undefined,
266
- additionalContent: this.#renderHeaderOverridesLink(),
267
- forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.RESPONSE,
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=${VisualLogging.section('response-headers')}></devtools-response-header-section>
278
- `}
279
- </devtools-request-headers-category>
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
- // Disabled until https://crbug.com/1079231 is fixed.
352
- // clang-format off
353
- return html`
354
- <devtools-request-headers-category
355
- @togglerawevent=${toggleShowRaw}
356
- .data=${{
357
- name: 'request-headers',
358
- title: i18nString(UIStrings.requestHeaders),
359
- headerCount: this.#request.requestHeaders().length,
360
- checked: requestHeadersText? this.#showRequestHeadersText : undefined,
361
- forceOpen: this.#toReveal?.section === NetworkForward.UIRequestLocation.UIHeaderSection.REQUEST,
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
- // Disabled until https://crbug.com/1079231 is fixed.
470
- // clang-format off
471
- return html`
472
- <devtools-request-headers-category
473
- .data=${{
474
- name: 'general',
475
- title: i18nString(UIStrings.general),
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
- export class ToggleRawHeadersEvent extends Event {
526
- static readonly eventName = 'togglerawevent';
527
-
528
- constructor() {
529
- super(ToggleRawHeadersEvent.eventName, {});
530
- }
531
- }
532
-
533
- export interface CategoryData {
534
- name: string;
535
- title: Common.UIString.LocalizedString;
536
- headerCount?: number;
537
- checked?: boolean;
538
- additionalContent?: Lit.LitTemplate;
539
- forceOpen?: boolean;
540
- loggingContext: string;
541
- }
542
-
543
- export class Category extends HTMLElement {
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=${this.#onSummaryKeyDown}
580
- jslog=${VisualLogging.sectionHeader().track({click: true}).context(this.#loggingContext)}
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
- ${this.#title}${this.#headerCount !== undefined ?
585
- html`<span class="header-count"> (${this.#headerCount})</span>` :
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
- ${this.#checked !== undefined ? html`
591
- <devtools-checkbox .checked=${this.#checked} @change=${this.#onCheckboxToggle}
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">${this.#additionalContent}</div>
531
+ <div class="hide-when-closed">${data.additionalContent}</div>
597
532
  </div>
598
533
  </summary>
599
- <slot></slot>
534
+ ${data.contents}
600
535
  </details>
601
- `, this.#shadow, {host: this});
602
- // clang-format on
603
- }
536
+ `;
537
+ // clang-format on
604
538
 
605
- #onSummaryKeyDown(event: KeyboardEvent): void {
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
- #onToggle(event: Event): void {
625
- this.#expandedSetting?.set((event.target as HTMLDetailsElement).open);
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(asyncFragment, previousFragment));
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
- fragment: StackTrace.StackTrace.AsyncFragment, previousFragment: StackTrace.StackTrace.Fragment): Item {
550
- const description = UI.UIUtils.asyncStackTraceLabel(
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
- undefined, target, this.#linkifier, {tabStops: true, showColumnNumber: true});
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
- <img class="image-network-icon-preview"
156
- title=${iconTitleForRequest(request)}
157
- alt=${iconTitleForRequest(request)}
158
- ${ref(e => request.populateImageSource(e as HTMLImageElement))}>
159
- </div>`;
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: 1b64dcefe38cd6a1d49f95075bd448eae1c3cd57
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.3
4
+ Version: 24.37.4
5
5
  License: Apache-2.0
6
6
  License File: LICENSE
7
- Revision: eee111bedbbf719ce27f356f4f5307646b13b0eb
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);