chrome-devtools-frontend 1.0.1578486 → 1.0.1579812

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 (96) hide show
  1. package/docs/cookbook/devtools_on_devtools.md +2 -2
  2. package/docs/feature-specs/elements-gutter-decorators.md +40 -0
  3. package/docs/feature-specs/elements-tree-selection-and-hover.md +31 -0
  4. package/docs/feature-specs/images/elements-gutter-decorators-multiple.png +0 -0
  5. package/docs/get_the_code.md +3 -3
  6. package/front_end/core/common/Revealer.ts +0 -5
  7. package/front_end/core/sdk/ConsoleModel.ts +0 -3
  8. package/front_end/generated/ARIAProperties.js +0 -6
  9. package/front_end/generated/InspectorBackendCommands.ts +1 -1
  10. package/front_end/generated/protocol.ts +1 -0
  11. package/front_end/models/ai_assistance/AiConversation.ts +42 -22
  12. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +30 -0
  13. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +79 -0
  14. package/front_end/models/issues_manager/CookieIssue.ts +0 -1
  15. package/front_end/models/issues_manager/IssuesManager.ts +2 -15
  16. package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
  17. package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +5 -3
  18. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +33 -27
  19. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +0 -1
  20. package/front_end/panels/ai_assistance/components/ChatInput.ts +38 -18
  21. package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -4
  22. package/front_end/panels/ai_assistance/components/ChatView.ts +2 -0
  23. package/front_end/panels/ai_assistance/components/chatInput.css +10 -3
  24. package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -1
  25. package/front_end/panels/application/DeviceBoundSessionsView.ts +51 -76
  26. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +1 -0
  27. package/front_end/panels/application/components/BackForwardCacheView.ts +4 -2
  28. package/front_end/panels/application/preloading/components/RuleSetDetailsView.css +0 -5
  29. package/front_end/panels/autofill/AutofillView.ts +1 -1
  30. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +1 -0
  31. package/front_end/panels/common/AiCodeGenerationTeaser.ts +2 -2
  32. package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +4 -4
  33. package/front_end/panels/console/ConsoleViewMessage.ts +1 -32
  34. package/front_end/panels/console/consoleView.css +0 -5
  35. package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +78 -0
  36. package/front_end/panels/elements/ElementsTreeElement.ts +93 -121
  37. package/front_end/panels/elements/ElementsTreeOutline.ts +1 -0
  38. package/front_end/panels/elements/LayoutPane.ts +8 -7
  39. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
  40. package/front_end/panels/elements/components/StylePropertyEditor.ts +2 -1
  41. package/front_end/panels/elements/elements.ts +3 -0
  42. package/front_end/panels/elements/elementsTreeOutline.css +16 -5
  43. package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
  44. package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
  45. package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
  46. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +1 -1
  47. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +1 -1
  48. package/front_end/panels/media/PlayerListView.ts +14 -2
  49. package/front_end/panels/media/playerListView.css +5 -0
  50. package/front_end/panels/network/NetworkItemView.ts +2 -1
  51. package/front_end/panels/network/NetworkLogView.ts +2 -5
  52. package/front_end/panels/network/NetworkLogViewColumns.ts +19 -7
  53. package/front_end/panels/network/RequestInitiatorView.ts +20 -4
  54. package/front_end/panels/network/RequestPayloadView.ts +253 -280
  55. package/front_end/panels/network/ShowMoreDetailsWidget.ts +3 -3
  56. package/front_end/panels/network/components/RequestHeaderSection.ts +1 -1
  57. package/front_end/panels/network/requestPayloadTree.css +6 -3
  58. package/front_end/panels/network/requestPayloadView.css +1 -0
  59. package/front_end/panels/protocol_monitor/JSONEditor.ts +1 -1
  60. package/front_end/panels/recorder/components/RecordingListView.ts +1 -1
  61. package/front_end/panels/recorder/components/StepEditor.ts +3 -3
  62. package/front_end/panels/security/SecurityPanel.ts +0 -16
  63. package/front_end/panels/security/security-meta.ts +1 -15
  64. package/front_end/panels/settings/EditFileSystemView.ts +8 -8
  65. package/front_end/panels/settings/KeybindsSettingsTab.ts +2 -1
  66. package/front_end/panels/settings/SettingsScreen.ts +4 -4
  67. package/front_end/panels/sources/CallStackSidebarPane.ts +1 -1
  68. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  69. package/front_end/panels/timeline/components/BreadcrumbsUI.ts +1 -1
  70. package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +1 -1
  71. package/front_end/panels/timeline/overlays/OverlaysImpl.ts +47 -26
  72. package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +121 -39
  73. package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +106 -101
  74. package/front_end/third_party/chromium/README.chromium +1 -1
  75. package/front_end/ui/components/buttons/Button.ts +1 -1
  76. package/front_end/ui/components/suggestion_input/SuggestionInput.ts +7 -12
  77. package/front_end/ui/components/tree_outline/TreeOutline.ts +1 -1
  78. package/front_end/ui/legacy/InplaceEditor.ts +1 -1
  79. package/front_end/ui/legacy/InspectorView.ts +6 -5
  80. package/front_end/ui/legacy/ListControl.ts +2 -1
  81. package/front_end/ui/legacy/ListWidget.ts +1 -1
  82. package/front_end/ui/legacy/SoftContextMenu.ts +2 -1
  83. package/front_end/ui/legacy/Treeoutline.ts +82 -22
  84. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +4 -2
  85. package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +59 -9
  86. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +28 -15
  87. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -1
  88. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +2 -2
  89. package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
  90. package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +3 -3
  91. package/front_end/ui/legacy/components/source_frame/JSONView.ts +2 -3
  92. package/front_end/ui/legacy/softDropDown.css +7 -1
  93. package/front_end/ui/visual_logging/Debugging.ts +1 -1
  94. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  95. package/mcp/mcp.ts +2 -0
  96. package/package.json +1 -1
@@ -217,14 +217,25 @@ select {
217
217
  }
218
218
 
219
219
  .elements-gutter-decoration {
220
- position: absolute;
221
- top: 3px;
222
- left: 2px;
223
220
  height: 9px;
224
221
  width: 9px;
225
222
  border-radius: 5px;
226
- border: 1px solid var(--sys-color-orange-bright);
227
- background-color: var(--sys-color-orange-bright);
223
+ border: 1px solid var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
224
+ background-color: var(--decoration-color); /* stylelint-disable-line plugin/use_theme_colors */
225
+ }
226
+
227
+ .elements-gutter-decoration-container {
228
+ display: flex;
229
+ position: absolute;
230
+ top: 0;
231
+ left: 1px;
232
+ width: 15px;
233
+ height: 15px;
234
+ align-items: center;
235
+ }
236
+
237
+ .elements-gutter-decoration + .elements-gutter-decoration {
238
+ margin-left: -6px;
228
239
  }
229
240
 
230
241
  .elements-gutter-decoration.elements-has-decorated-children {
@@ -197,7 +197,7 @@ export class LighthouseReportRenderer {
197
197
  continue;
198
198
  }
199
199
 
200
- auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`)}`);
200
+ auditEl.setAttribute('jslog', `${VisualLogging.item(`lighthouse.audit.${id}`).track({resize: true})}`);
201
201
 
202
202
  let state: string|undefined;
203
203
  for (const className of auditEl.classList) {
@@ -182,7 +182,7 @@ export class StartView extends UI.Widget.Widget {
182
182
  <form class="lighthouse-start-view">
183
183
  <header class="hbox">
184
184
  <div class="lighthouse-logo"></div>
185
- <div class="lighthouse-title">${i18nString(UIStrings.generateLighthouseReport)}</div>
185
+ <h1 class="lighthouse-title">${i18nString(UIStrings.generateLighthouseReport)}</h1>
186
186
  <div class="lighthouse-start-button-container" $="start-button-container">${this.startButton}</div>
187
187
  </header>
188
188
  <div $="help-text" class="lighthouse-help-text hidden"></div>
@@ -26,6 +26,12 @@
26
26
  margin-bottom: 16px;
27
27
  }
28
28
 
29
+ .lighthouse-start-view .lighthouse-title {
30
+ margin: 0;
31
+ font-size: inherit;
32
+ font-weight: normal;
33
+ }
34
+
29
35
  .lighthouse-logo {
30
36
  width: 75px;
31
37
  height: 75px;
@@ -60,7 +60,7 @@ function renderEndiannessSetting(
60
60
  data-endianness="true" @change=${(e: Event) => onEndiannessChanged((e.target as HTMLSelectElement).value as Endianness)}>
61
61
  ${[Endianness.LITTLE, Endianness.BIG].map(endianness => {
62
62
  return html`<option value=${endianness} .selected=${currentEndiannes === endianness}
63
- jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true})}>${
63
+ jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(endianness)).track({click: true, resize: true})}>${
64
64
  i18n.i18n.lockedString(endianness)}</option>`;
65
65
  })}
66
66
  </select>
@@ -104,7 +104,7 @@ export const DEFAULT_VIEW: View = (input: ViewInput, _output: undefined, target:
104
104
  ${VALUE_TYPE_MODE_LIST.filter(x => isValidMode(type, x)).map(mode => {
105
105
  return html`
106
106
  <option value=${mode} .selected=${input.valueTypeModes.get(type) === mode}
107
- jslog=${VisualLogging.item(mode).track({click: true})}>${
107
+ jslog=${VisualLogging.item(mode).track({click: true, resize: true})}>${
108
108
  i18n.i18n.lockedString(mode)}
109
109
  </option>`;
110
110
  })}
@@ -5,6 +5,7 @@
5
5
  import '../../ui/kit/kit.js';
6
6
 
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
+ import * as Platform from '../../core/platform/platform.js';
8
9
  import type * as Protocol from '../../generated/protocol.js';
9
10
  import * as UI from '../../ui/legacy/legacy.js';
10
11
  import {Directives, html, render} from '../../ui/lit/lit.js';
@@ -61,7 +62,8 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
61
62
  render(
62
63
  html`
63
64
  <style>${playerListViewStyles}</style>
64
- <div class="player-entry-header">${i18nString(UIStrings.players)}</div>
65
+ <div class="player-entry-header" id="players-header">${i18nString(UIStrings.players)}</div>
66
+ <div role="listbox" aria-labelledby="players-header">
65
67
  ${input.players.map(player => {
66
68
  const isSelected = player.playerID === input.selectedPlayerID;
67
69
  return html`
@@ -71,9 +73,18 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
71
73
  selected: isSelected,
72
74
  'force-white-icons': isSelected,
73
75
  })}
76
+ tabindex="0"
74
77
  @click=${() => input.onPlayerClick(player.playerID)}
78
+ @keydown=${(e: KeyboardEvent) => {
79
+ if (Platform.KeyboardUtilities.isEnterOrSpaceKey(e)) {
80
+ e.preventDefault();
81
+ input.onPlayerClick(player.playerID);
82
+ }
83
+ }}
75
84
  @contextmenu=${(e: Event) => input.onPlayerContextMenu(player.playerID, e)}
76
- jslog=${VisualLogging.item('player').track({click: true})}>
85
+ role="option"
86
+ aria-selected=${isSelected}
87
+ jslog=${VisualLogging.item('player').track({click: true, resize: true})}>
77
88
  <div class="player-entry-status-icon vbox">
78
89
  <div class="player-entry-status-icon-centering">
79
90
  <devtools-icon name=${player.iconName}></devtools-icon>
@@ -84,6 +95,7 @@ const DEFAULT_VIEW: View = (input, _output, target) => {
84
95
  </div>
85
96
  `;
86
97
  })}
98
+ </div>
87
99
  `,
88
100
  target
89
101
  );
@@ -34,6 +34,11 @@ li.storage-group-list-item::before {
34
34
  background: var(--sys-color-state-hover-on-subtle);
35
35
  }
36
36
 
37
+ &:focus-visible {
38
+ outline: var(--sys-size-2) solid var(--sys-color-state-focus-ring);
39
+ outline-offset: calc(var(--sys-size-2) * -1);
40
+ }
41
+
37
42
  &.selected {
38
43
  background: var(--sys-color-tonal-container);
39
44
  color: var(--sys-color-on-tonal-container);
@@ -345,7 +345,8 @@ export class NetworkItemView extends UI.TabbedPane.TabbedPane {
345
345
  return;
346
346
  }
347
347
  if (this.#request.queryParameters || await this.#request.requestFormData()) {
348
- this.#payloadView = new RequestPayloadView(this.#request);
348
+ this.#payloadView = new RequestPayloadView();
349
+ this.#payloadView.request = this.#request;
349
350
  this.appendTab(
350
351
  NetworkForward.UIRequestLocation.UIRequestTabs.PAYLOAD, i18nString(UIStrings.payload), this.#payloadView,
351
352
  i18nString(UIStrings.payload), /* userGesture=*/ void 0,
@@ -1451,17 +1451,14 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1451
1451
  }
1452
1452
 
1453
1453
  private removeNodeAndMaybeAncestors(node: NetworkRequestNode): void {
1454
- let parent: NetworkNode|
1455
- (DataGrid.DataGrid.DataGridNode<DataGrid.ViewportDataGrid.ViewportDataGridNode<
1456
- DataGrid.SortableDataGrid.SortableDataGridNode<NetworkNode>>>|
1457
- null) = node.parent;
1454
+ let parent = node.parent;
1458
1455
  if (!parent) {
1459
1456
  return;
1460
1457
  }
1461
1458
  parent.removeChild(node);
1462
1459
  while (parent && !parent.hasChildren() && parent.dataGrid && parent.dataGrid.rootNode() !== parent) {
1463
1460
  const grandparent = (parent.parent as NetworkNode);
1464
- grandparent.removeChild(parent);
1461
+ grandparent.removeChild(parent as NetworkNode);
1465
1462
  parent = grandparent;
1466
1463
  }
1467
1464
  }
@@ -6,6 +6,7 @@
6
6
  import * as Common from '../../core/common/common.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import type * as NetworkTimeCalculator from '../../models/network_time_calculator/network_time_calculator.js';
9
+ import * as StackTrace from '../../models/stack_trace/stack_trace.js';
9
10
  import {Icon} from '../../ui/kit/kit.js';
10
11
  import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
11
12
  import * as Components from '../../ui/legacy/components/utils/utils.js';
@@ -409,7 +410,8 @@ export class NetworkLogViewColumns {
409
410
 
410
411
  private createWaterfallHeader(): void {
411
412
  this.waterfallHeaderElement = this.waterfallColumn.contentElement.createChild('div', 'network-waterfall-header');
412
- this.waterfallHeaderElement.setAttribute('jslog', `${VisualLogging.tableHeader('waterfall').track({click: true})}`);
413
+ this.waterfallHeaderElement.setAttribute(
414
+ 'jslog', `${VisualLogging.tableHeader('waterfall').track({click: true, resize: true})}`);
413
415
  this.waterfallHeaderElement.addEventListener('click', waterfallHeaderClicked.bind(this));
414
416
  this.waterfallHeaderElement.addEventListener('contextmenu', event => {
415
417
  const contextMenu = new UI.ContextMenu.ContextMenu(event);
@@ -880,20 +882,30 @@ export class NetworkLogViewColumns {
880
882
  if (!request) {
881
883
  return null;
882
884
  }
885
+ let descriptor: Common.EventTarget.EventDescriptor|undefined = undefined;
883
886
  return {
884
887
  box: anchor.boxInWindow(),
885
888
  show: async (popover: UI.GlassPane.GlassPane) => {
886
- this.popupLinkifier.addEventListener(Components.Linkifier.Events.LIVE_LOCATION_UPDATED, () => {
887
- popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
888
- });
889
- const content = RequestInitiatorView.createStackTracePreview((request), this.popupLinkifier, false);
889
+ const content = await RequestInitiatorView.createStackTracePreview((request), this.popupLinkifier, false);
890
890
  if (!content) {
891
891
  return false;
892
892
  }
893
- content.show(popover.contentElement);
893
+ descriptor = content.stackTrace?.addEventListener(StackTrace.StackTrace.Events.UPDATED, async () => {
894
+ await content.preview.updateComplete;
895
+ popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
896
+ });
897
+ content.preview.show(popover.contentElement);
898
+ await content.preview.updateComplete.then(() => {
899
+ popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MEASURE_CONTENT);
900
+ });
894
901
  return true;
895
902
  },
896
- hide: this.popupLinkifier.reset.bind(this.popupLinkifier),
903
+ hide: () => {
904
+ this.popupLinkifier.reset();
905
+ if (descriptor) {
906
+ Common.EventTarget.removeEventListeners([descriptor]);
907
+ }
908
+ },
897
909
  };
898
910
  }
899
911
 
@@ -5,7 +5,9 @@
5
5
 
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
7
  import * as SDK from '../../core/sdk/sdk.js';
8
+ import * as Bindings from '../../models/bindings/bindings.js';
8
9
  import * as Logs from '../../models/logs/logs.js';
10
+ import type * as StackTrace from '../../models/stack_trace/stack_trace.js';
9
11
  import * as Components from '../../ui/legacy/components/utils/utils.js';
10
12
  import * as UI from '../../ui/legacy/legacy.js';
11
13
  import * as Lit from '../../ui/lit/lit.js';
@@ -172,17 +174,31 @@ export class RequestInitiatorView extends UI.Widget.VBox {
172
174
  this.#view = view;
173
175
  }
174
176
 
175
- static createStackTracePreview(
177
+ static async createStackTracePreview(
176
178
  request: SDK.NetworkRequest.NetworkRequest, linkifier: Components.Linkifier.Linkifier,
177
- focusableLink?: boolean): Components.JSPresentationUtils.StackTracePreviewContent|null {
179
+ focusableLink?: boolean): Promise<{
180
+ preview: Components.JSPresentationUtils.StackTracePreviewContent,
181
+ stackTrace: StackTrace.StackTrace.StackTrace|null,
182
+ }|null> {
178
183
  const initiator = request.initiator();
179
184
  if (!initiator?.stack) {
180
185
  return null;
181
186
  }
182
187
  const networkManager = SDK.NetworkManager.NetworkManager.forRequest(request);
183
188
  const target = networkManager ? networkManager.target() : undefined;
184
- return new Components.JSPresentationUtils.StackTracePreviewContent(
185
- undefined, target, linkifier, {runtimeStackTrace: initiator.stack, tabStops: focusableLink});
189
+ if (target) {
190
+ const stackTrace = await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()
191
+ .createStackTraceFromProtocolRuntime(initiator.stack, target);
192
+ const preview = new Components.JSPresentationUtils.StackTracePreviewContent(
193
+ undefined, target, linkifier, {tabStops: focusableLink});
194
+ preview.stackTrace = stackTrace;
195
+ return {preview, stackTrace};
196
+ }
197
+ return {
198
+ preview: new Components.JSPresentationUtils.StackTracePreviewContent(
199
+ undefined, target, linkifier, {runtimeStackTrace: initiator.stack, tabStops: focusableLink}),
200
+ stackTrace: null
201
+ };
186
202
  }
187
203
 
188
204
  override performUpdate(): void {