chrome-devtools-frontend 1.0.1625854 → 1.0.1626437

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 (27) hide show
  1. package/front_end/core/host/AidaClient.ts +1 -1
  2. package/front_end/core/host/AidaClientTypes.ts +2 -0
  3. package/front_end/core/host/AidaGcaTranslation.ts +2 -2
  4. package/front_end/core/sdk/CSSMetadata.ts +60 -55
  5. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +11 -2
  6. package/front_end/models/ai_assistance/StorageItem.ts +16 -0
  7. package/front_end/models/ai_assistance/agents/StorageAgent.ts +82 -0
  8. package/front_end/models/ai_assistance/ai_assistance.ts +4 -0
  9. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +9 -37
  10. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +26 -3
  11. package/front_end/models/javascript_metadata/NativeFunctions.js +0 -4
  12. package/front_end/models/web_mcp/WebMCPModel.ts +11 -2
  13. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +6 -1
  14. package/front_end/panels/application/WebMCPView.ts +74 -16
  15. package/front_end/panels/application/webMCPView.css +13 -2
  16. package/front_end/panels/elements/StandaloneStylesContainer.ts +3 -0
  17. package/front_end/panels/elements/StylePropertyTreeElement.ts +35 -2
  18. package/front_end/panels/elements/StylesContainer.ts +1 -0
  19. package/front_end/panels/elements/StylesSidebarPane.ts +10 -4
  20. package/front_end/panels/emulation/DeviceModeToolbar.ts +7 -3
  21. package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -1
  22. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +179 -145
  23. package/front_end/panels/timeline/timelineTreeView.css +2 -2
  24. package/front_end/third_party/chromium/README.chromium +1 -1
  25. package/front_end/ui/components/tooltips/Tooltip.ts +3 -3
  26. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  27. package/package.json +1 -1
@@ -49,6 +49,7 @@ import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
49
49
  import objectValueStyles from '../../ui/legacy/components/object_ui/objectValue.css.js';
50
50
  import * as Components from '../../ui/legacy/components/utils/utils.js';
51
51
  import * as UI from '../../ui/legacy/legacy.js';
52
+ import {Directives, html, render} from '../../ui/lit/lit.js';
52
53
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
53
54
 
54
55
  import {UISourceCodeFrame} from './UISourceCodeFrame.js';
@@ -95,25 +96,98 @@ const UIStrings = {
95
96
  const str_ = i18n.i18n.registerUIStrings('panels/sources/WatchExpressionsSidebarPane.ts', UIStrings);
96
97
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
97
98
  let watchExpressionsSidebarPaneInstance: WatchExpressionsSidebarPane;
99
+ const {repeat} = Directives;
100
+ interface ViewInput {
101
+ onCopyWatchExpression(watchExpression: WatchExpression): void;
102
+ onDeleteAll(): unknown;
103
+ onAddExpression(): unknown;
104
+ watchExpressions: WatchExpression[];
105
+ }
106
+ type View = (input: ViewInput, output: object, target: HTMLElement) => void;
107
+ export const DEFAULT_VIEW: View = (input, output, target) => {
108
+ const onContextMenu = (watchExpression: WatchExpression|undefined, event: Event): void => {
109
+ const contextMenu = new UI.ContextMenu.ContextMenu(event);
110
+ const isEditing = input.watchExpressions.some(e => e.isEditing());
111
+
112
+ if (!isEditing) {
113
+ contextMenu.debugSection().appendItem(
114
+ i18nString(UIStrings.addWatchExpression), input.onAddExpression, {jslogContext: 'add-watch-expression'});
115
+ }
116
+
117
+ if (input.watchExpressions.length > 1) {
118
+ contextMenu.debugSection().appendItem(
119
+ i18nString(UIStrings.deleteAllWatchExpressions), input.onDeleteAll,
120
+ {jslogContext: 'delete-all-watch-expressions'});
121
+ }
122
+
123
+ if (watchExpression) {
124
+ if (!watchExpression.isEditing()) {
125
+ contextMenu.editSection().appendItem(
126
+ i18nString(UIStrings.deleteWatchExpression), watchExpression.updateExpression.bind(watchExpression, null),
127
+ {jslogContext: 'delete-watch-expression'});
128
+ }
129
+
130
+ if (!watchExpression.isEditing() && watchExpression.result &&
131
+ (watchExpression.result.type === 'number' || watchExpression.result.type === 'string')) {
132
+ contextMenu.clipboardSection().appendItem(
133
+ i18nString(UIStrings.copyValue), () => input.onCopyWatchExpression(watchExpression),
134
+ {jslogContext: 'copy-watch-expression-value'});
135
+ }
98
136
 
99
- export class WatchExpressionsSidebarPane extends UI.Widget.VBox implements
100
- UI.ActionRegistration.ActionDelegate, UI.Toolbar.ItemsProvider,
101
- UI.ContextMenu.Provider<ObjectUI.ObjectPropertiesSection.ObjectPropertyTreeElement|UISourceCodeFrame> {
137
+ contextMenu.appendApplicableItems(watchExpression.result);
138
+ }
139
+ void contextMenu.show();
140
+ event.consume();
141
+ };
142
+
143
+ for (const watchExpression of input.watchExpressions) {
144
+ watchExpression.treeElement().listItemElement.oncontextmenu = onContextMenu.bind(undefined, watchExpression);
145
+ watchExpression.treeElement().childrenListElement.oncontextmenu = onContextMenu.bind(undefined, watchExpression);
146
+ }
147
+
148
+ render(
149
+ // clang-format off
150
+ html`
151
+ ${input.watchExpressions.length === 0
152
+ ? html`<div class=gray-info-message tabindex=-1 >
153
+ ${i18nString(UIStrings.noWatchExpressions)}
154
+ </div>`
155
+ : html`<devtools-tree hide-overflow show-selection-on-keyboard-focus .template=${html`
156
+ <ul role=tree class="source-code object-properties-section">
157
+ <style>${ObjectUI.ObjectPropertiesSection.objectValueStyles}</style>
158
+ <style>${ObjectUI.ObjectPropertiesSection.objectPropertiesSectionStyles}</style>
159
+ <style>${watchExpressionsSidebarPaneStyles}</style>
160
+ ${repeat(input.watchExpressions,
161
+ e => html`<devtools-tree-wrapper .treeElement=${e.treeElement()}></devtools-tree-wrapper>`)}
162
+ </ul>`}>
163
+ </devtools-tree>`
164
+ }`,
165
+ // clang-format on
166
+ target, {
167
+ container: {
168
+ classes: ['watch-expressions'],
169
+ attributes: {
170
+ jslog: `${VisualLogging.section('sources.watch')}`,
171
+ 'aria-label': i18nString(UIStrings.addWatchExpression)
172
+ },
173
+ listeners: {contextmenu: onContextMenu.bind(undefined, undefined)}
174
+ }
175
+ });
176
+ };
177
+
178
+ export class WatchExpressionsSidebarPane extends UI.Widget.VBox implements UI.ActionRegistration.ActionDelegate,
179
+ UI.Toolbar.ItemsProvider {
102
180
  #watchExpressions: WatchExpression[];
103
- private emptyElement!: HTMLElement;
104
181
  #watchExpressionsSetting: Common.Settings.Setting<string[]>;
105
182
  private readonly addButton: UI.Toolbar.ToolbarButton;
106
183
  private readonly refreshButton: UI.Toolbar.ToolbarButton;
107
- private readonly treeOutline: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeOutline;
108
- private readonly expandController: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeExpandController;
109
184
  private readonly linkifier: Components.Linkifier.Linkifier;
185
+ #view: View;
186
+ #expandControllers = new Map<string, ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker>();
110
187
  constructor() {
111
188
  super({useShadowDom: true});
112
189
  this.registerRequiredCSS(watchExpressionsSidebarPaneStyles, objectValueStyles);
113
190
 
114
- // TODO(szuend): Replace with a Set once the web test
115
- // panels/sources/debugger-ui/watch-expressions-preserve-expansion.js is either converted
116
- // to an e2e test or no longer accesses this variable directly.
117
191
  this.#watchExpressions = [];
118
192
  this.#watchExpressionsSetting =
119
193
  Common.Settings.Settings.instance().createLocalSetting<string[]>('watch-expressions', []);
@@ -127,24 +201,15 @@ export class WatchExpressionsSidebarPane extends UI.Widget.VBox implements
127
201
  this.refreshButton = new UI.Toolbar.ToolbarButton(
128
202
  i18nString(UIStrings.refreshWatchExpressions), 'refresh', undefined, 'refresh-watch-expressions');
129
203
  this.refreshButton.setSize(Buttons.Button.Size.SMALL);
130
- this.refreshButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.requestUpdate, this);
131
-
132
- this.contentElement.classList.add('watch-expressions');
133
- this.contentElement.setAttribute('jslog', `${VisualLogging.section('sources.watch')}`);
134
- this.contentElement.addEventListener('contextmenu', this.contextMenu.bind(this), false);
135
- this.treeOutline = new ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeOutline();
136
- this.treeOutline.registerRequiredCSS(watchExpressionsSidebarPaneStyles);
137
- this.treeOutline.setHideOverflow(true);
138
-
139
- this.treeOutline.setShowSelectionOnKeyboardFocus(/* show */ true);
140
- this.expandController =
141
- new ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeExpandController(this.treeOutline);
204
+ this.refreshButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.#refreshExpressions, this);
142
205
 
143
- UI.Context.Context.instance().addFlavorChangeListener(SDK.RuntimeModel.ExecutionContext, this.requestUpdate, this);
144
206
  UI.Context.Context.instance().addFlavorChangeListener(
145
- StackTrace.StackTrace.DebuggableFrameFlavor, this.requestUpdate, this);
207
+ SDK.RuntimeModel.ExecutionContext, this.#refreshExpressions, this);
208
+ UI.Context.Context.instance().addFlavorChangeListener(
209
+ StackTrace.StackTrace.DebuggableFrameFlavor, this.#refreshExpressions, this);
146
210
  this.linkifier = new Components.Linkifier.Linkifier();
147
- this.requestUpdate();
211
+ this.#view = DEFAULT_VIEW;
212
+ this.#refreshExpressions();
148
213
  }
149
214
 
150
215
  static instance(): WatchExpressionsSidebarPane {
@@ -162,15 +227,6 @@ export class WatchExpressionsSidebarPane extends UI.Widget.VBox implements
162
227
  return [this.addButton, this.refreshButton];
163
228
  }
164
229
 
165
- override focus(): void {
166
- if (this.hasFocus()) {
167
- return;
168
- }
169
- if (this.#watchExpressions.length > 0) {
170
- this.treeOutline.forceSelect();
171
- }
172
- }
173
-
174
230
  private saveExpressions(): void {
175
231
  const toSave = [];
176
232
  for (let i = 0; i < this.#watchExpressions.length; i++) {
@@ -185,102 +241,99 @@ export class WatchExpressionsSidebarPane extends UI.Widget.VBox implements
185
241
 
186
242
  private async addButtonClicked(): Promise<void> {
187
243
  await UI.ViewManager.ViewManager.instance().showView('sources.watch');
188
- this.emptyElement.classList.add('hidden');
189
- this.createWatchExpression(null).startEditing();
244
+ const watchExpression = this.createWatchExpression(null);
245
+ this.requestUpdate();
246
+ // This synchronization is only needed because startEditing is imperative and
247
+ // requires the tree element to be in the DOM. This can be removed once the
248
+ // prompt is migrated to Lit.
249
+ await this.updateComplete;
250
+ watchExpression.startEditing();
190
251
  }
191
252
 
192
- override async performUpdate(): Promise<void> {
253
+ #refreshExpressions(): void {
193
254
  this.linkifier.reset();
194
- this.contentElement.removeChildren();
195
- this.treeOutline.removeChildren();
255
+ for (const expression of this.#watchExpressions) {
256
+ expression.removeEventListener(Events.EXPRESSION_UPDATED, this.watchExpressionUpdated, this);
257
+ }
196
258
  this.#watchExpressions = [];
197
- this.emptyElement = this.contentElement.createChild('div', 'gray-info-message');
198
- this.emptyElement.textContent = i18nString(UIStrings.noWatchExpressions);
199
- this.emptyElement.tabIndex = -1;
200
259
  const watchExpressionStrings = this.#watchExpressionsSetting.get();
201
- if (watchExpressionStrings.length) {
202
- this.emptyElement.classList.add('hidden');
203
- }
260
+
261
+ const oldExpandControllers = this.#expandControllers;
262
+ this.#expandControllers = new Map();
263
+
204
264
  for (let i = 0; i < watchExpressionStrings.length; ++i) {
205
265
  const expression = watchExpressionStrings[i];
206
266
  if (!expression) {
207
267
  continue;
208
268
  }
209
269
 
270
+ const controller = oldExpandControllers.get(expression);
271
+ if (controller) {
272
+ this.#expandControllers.set(expression, controller);
273
+ }
274
+
210
275
  this.createWatchExpression(expression);
211
276
  }
277
+ this.requestUpdate();
278
+ }
279
+
280
+ override async performUpdate(): Promise<void> {
212
281
  await Promise.all(this.#watchExpressions.map(we => we.updateComplete));
282
+ this.#view(
283
+ {
284
+ watchExpressions: this.watchExpressions,
285
+ onDeleteAll: this.deleteAllButtonClicked.bind(this),
286
+ onAddExpression: this.addButtonClicked.bind(this),
287
+ onCopyWatchExpression: watchExpression => {
288
+ if (watchExpression.result?.description) {
289
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(watchExpression.result.description);
290
+ }
291
+ }
292
+ },
293
+ {}, this.contentElement);
294
+ }
295
+
296
+ #getExpandController(expression: string|null): ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker {
297
+ if (expression === null) {
298
+ return new ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker();
299
+ }
300
+ let expandController = this.#expandControllers.get(expression);
301
+ if (!expandController) {
302
+ expandController = new ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker();
303
+ this.#expandControllers.set(expression, expandController);
304
+ }
305
+ return expandController;
213
306
  }
214
307
 
215
308
  private createWatchExpression(expression: string|null): WatchExpression {
216
- this.contentElement.appendChild(this.treeOutline.element);
217
- const watchExpression = new WatchExpression(expression, this.expandController, this.linkifier);
218
- UI.ARIAUtils.setLabel(this.contentElement, i18nString(UIStrings.addWatchExpression));
309
+ const expandController = this.#getExpandController(expression);
310
+ const watchExpression = new WatchExpression(expression, expandController, this.linkifier);
219
311
  watchExpression.addEventListener(Events.EXPRESSION_UPDATED, this.watchExpressionUpdated, this);
220
- this.treeOutline.appendChild(watchExpression.treeElement());
221
312
  this.#watchExpressions.push(watchExpression);
222
313
  return watchExpression;
223
314
  }
224
315
 
225
316
  private watchExpressionUpdated({data: watchExpression}: Common.EventTarget.EventTargetEvent<WatchExpression>): void {
226
- if (!watchExpression.expression()) {
317
+ const expression = watchExpression.expression();
318
+ if (!expression) {
227
319
  Platform.ArrayUtilities.removeElement(this.#watchExpressions, watchExpression);
228
- this.treeOutline.removeChild(watchExpression.treeElement());
229
- this.emptyElement.classList.toggle('hidden', Boolean(this.#watchExpressions.length));
230
- if (this.#watchExpressions.length === 0) {
231
- this.treeOutline.element.remove();
232
- }
233
320
  }
234
321
 
235
322
  this.saveExpressions();
236
- }
237
-
238
- private contextMenu(event: MouseEvent): void {
239
- const contextMenu = new UI.ContextMenu.ContextMenu(event);
240
- this.populateContextMenu(contextMenu, event);
241
- void contextMenu.show();
242
- }
243
-
244
- private populateContextMenu(contextMenu: UI.ContextMenu.ContextMenu, event: MouseEvent): void {
245
- let isEditing = false;
246
- for (const watchExpression of this.#watchExpressions) {
247
- isEditing = isEditing || watchExpression.isEditing();
248
- }
249
-
250
- if (!isEditing) {
251
- contextMenu.debugSection().appendItem(
252
- i18nString(UIStrings.addWatchExpression), this.addButtonClicked.bind(this),
253
- {jslogContext: 'add-watch-expression'});
254
- }
255
-
256
- if (this.#watchExpressions.length > 1) {
257
- contextMenu.debugSection().appendItem(
258
- i18nString(UIStrings.deleteAllWatchExpressions), this.deleteAllButtonClicked.bind(this),
259
- {jslogContext: 'delete-all-watch-expressions'});
260
- }
261
-
262
- const treeElement = this.treeOutline.treeElementFromEvent(event);
263
- if (!treeElement) {
264
- return;
265
- }
266
- const currentWatchExpression =
267
- this.#watchExpressions.find(watchExpression => treeElement.hasAncestorOrSelf(watchExpression.treeElement()));
268
- if (currentWatchExpression) {
269
- currentWatchExpression.populateContextMenu(contextMenu, event);
270
- }
323
+ this.requestUpdate();
271
324
  }
272
325
 
273
326
  private deleteAllButtonClicked(): void {
274
327
  this.#watchExpressions = [];
275
328
  this.saveExpressions();
276
- this.requestUpdate();
329
+ this.#refreshExpressions();
277
330
  }
278
331
 
279
332
  private async focusAndAddExpressionToWatch(expression: string): Promise<void> {
280
333
  await UI.ViewManager.ViewManager.instance().showView('sources.watch');
281
334
  this.createWatchExpression(expression);
282
335
  this.saveExpressions();
283
- this.requestUpdate();
336
+ this.#refreshExpressions();
284
337
  }
285
338
 
286
339
  handleAction(_context: UI.Context.Context, _actionId: string): boolean {
@@ -326,32 +379,35 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
326
379
  private nameElement!: Element;
327
380
  private valueElement!: Element;
328
381
  #expression: string|null;
329
- private readonly expandController: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeExpandController;
382
+ readonly #expandController: ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker;
330
383
  private element: HTMLDivElement;
331
384
  private editing: boolean;
332
385
  private linkifier: Components.Linkifier.Linkifier;
333
386
  private textPrompt?: ObjectPropertyPrompt;
334
- private result?: SDK.RemoteObject.RemoteObject|null;
387
+ #result?: SDK.RemoteObject.RemoteObject|null;
335
388
  private preventClickTimeout?: number;
336
389
  #updateComplete: Promise<void> = Promise.resolve();
337
390
  constructor(
338
- expression: string|null,
339
- expandController: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSectionsTreeExpandController,
391
+ expression: string|null, expandController: ObjectUI.ObjectPropertiesSection.ObjectTreeExpansionTracker,
340
392
  linkifier: Components.Linkifier.Linkifier) {
341
393
  super();
342
394
 
343
395
  this.#expression = expression;
344
- this.expandController = expandController;
396
+ this.#expandController = expandController;
345
397
  this.element = document.createElement('div');
346
398
  this.element.classList.add('watch-expression');
347
399
  this.element.classList.add('monospace');
348
400
  this.editing = false;
349
401
  this.linkifier = linkifier;
350
402
 
351
- this.createWatchExpression();
403
+ void this.createWatchExpression();
352
404
  this.update();
353
405
  }
354
406
 
407
+ get result(): SDK.RemoteObject.RemoteObject|null {
408
+ return this.#result ?? null;
409
+ }
410
+
355
411
  get updateComplete(): Promise<void> {
356
412
  return this.#updateComplete;
357
413
  }
@@ -392,16 +448,17 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
392
448
  update(): void {
393
449
  const currentExecutionContext = UI.Context.Context.instance().flavor(SDK.RuntimeModel.ExecutionContext);
394
450
  if (currentExecutionContext && this.#expression) {
395
- this.#updateComplete = this.#evaluateExpression(currentExecutionContext, this.#expression).then(result => {
396
- if ('object' in result) {
397
- this.createWatchExpression(result.object, result.exceptionDetails);
398
- } else {
399
- this.createWatchExpression();
400
- }
401
- });
451
+ this.#updateComplete = this.#evaluateExpression(currentExecutionContext, this.#expression)
452
+ .then(async result => {
453
+ if ('object' in result) {
454
+ await this.createWatchExpression(result.object, result.exceptionDetails);
455
+ } else {
456
+ await this.createWatchExpression();
457
+ }
458
+ })
459
+ .catch(() => {});
402
460
  } else {
403
- this.createWatchExpression();
404
- this.#updateComplete = Promise.resolve();
461
+ this.#updateComplete = this.createWatchExpression();
405
462
  }
406
463
  }
407
464
 
@@ -454,8 +511,8 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
454
511
  }
455
512
 
456
513
  updateExpression(newExpression: string|null): void {
457
- if (this.#expression) {
458
- this.expandController.stopWatchSectionsWithId(this.#expression);
514
+ if (this.#expression !== newExpression && newExpression) {
515
+ this.#expandController.clear();
459
516
  }
460
517
  this.#expression = newExpression;
461
518
  this.update();
@@ -468,13 +525,13 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
468
525
  this.updateExpression(null);
469
526
  }
470
527
 
471
- createWatchExpression(result?: SDK.RemoteObject.RemoteObject, exceptionDetails?: Protocol.Runtime.ExceptionDetails):
472
- void {
473
- this.result = result || null;
528
+ async createWatchExpression(
529
+ result?: SDK.RemoteObject.RemoteObject, exceptionDetails?: Protocol.Runtime.ExceptionDetails): Promise<void> {
530
+ this.#result = result || null;
474
531
 
475
532
  this.element.removeChildren();
476
533
  const oldTreeElement = this.#treeElement;
477
- this.createWatchExpressionTreeElement(result, exceptionDetails);
534
+ await this.#createWatchExpressionTreeElement(result, exceptionDetails);
478
535
  if (oldTreeElement?.parent) {
479
536
  const root = oldTreeElement.parent;
480
537
  const index = root.indexOfChild(oldTreeElement);
@@ -530,20 +587,20 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
530
587
  return headerElement;
531
588
  }
532
589
 
533
- private createWatchExpressionTreeElement(
534
- expressionValue?: SDK.RemoteObject.RemoteObject, exceptionDetails?: Protocol.Runtime.ExceptionDetails): void {
590
+ async #createWatchExpressionTreeElement(
591
+ expressionValue?: SDK.RemoteObject.RemoteObject,
592
+ exceptionDetails?: Protocol.Runtime.ExceptionDetails): Promise<void> {
535
593
  const headerElement = this.createWatchExpressionHeader(expressionValue, exceptionDetails);
536
594
 
537
595
  if (!exceptionDetails && expressionValue && expressionValue.hasChildren && !expressionValue.customPreview()) {
538
596
  headerElement.classList.add('watch-expression-object-header');
539
- this.#treeElement = new ObjectUI.ObjectPropertiesSection.RootElement(
540
- new ObjectUI.ObjectPropertiesSection.ObjectTree(expressionValue, {
541
- readOnly: true,
542
- propertiesMode: ObjectUI.ObjectPropertiesSection.ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
543
- }),
544
- this.linkifier);
545
- this.expandController.watchSection(
546
- (this.#expression as string), (this.#treeElement as ObjectUI.ObjectPropertiesSection.RootElement));
597
+ const objectTree = new ObjectUI.ObjectPropertiesSection.ObjectTree(expressionValue, {
598
+ readOnly: true,
599
+ propertiesMode: ObjectUI.ObjectPropertiesSection.ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
600
+ expansionTracker: this.#expandController,
601
+ });
602
+ await this.#expandController.apply(objectTree);
603
+ this.#treeElement = new ObjectUI.ObjectPropertiesSection.RootElement(objectTree, this.linkifier);
547
604
  this.#treeElement.toggleOnClick = false;
548
605
  this.#treeElement.listItemElement.addEventListener('click', this.onSectionClick.bind(this), false);
549
606
  this.#treeElement.listItemElement.addEventListener('dblclick', this.dblClickOnWatchExpression.bind(this));
@@ -593,29 +650,6 @@ export class WatchExpression extends Common.ObjectWrapper.ObjectWrapper<EventTyp
593
650
  }
594
651
  }
595
652
 
596
- populateContextMenu(contextMenu: UI.ContextMenu.ContextMenu, event: Event): void {
597
- if (!this.isEditing()) {
598
- contextMenu.editSection().appendItem(
599
- i18nString(UIStrings.deleteWatchExpression), this.updateExpression.bind(this, null),
600
- {jslogContext: 'delete-watch-expression'});
601
- }
602
-
603
- if (!this.isEditing() && this.result && (this.result.type === 'number' || this.result.type === 'string')) {
604
- contextMenu.clipboardSection().appendItem(
605
- i18nString(UIStrings.copyValue), this.copyValueButtonClicked.bind(this),
606
- {jslogContext: 'copy-watch-expression-value'});
607
- }
608
-
609
- const target = UI.UIUtils.deepElementFromEvent(event);
610
- if (target && this.valueElement.isSelfOrAncestor(target) && this.result) {
611
- contextMenu.appendApplicableItems(this.result);
612
- }
613
- }
614
-
615
- private copyValueButtonClicked(): void {
616
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(this.valueElement.textContent);
617
- }
618
-
619
653
  private static readonly watchObjectGroupId = 'watch-group';
620
654
  }
621
655
 
@@ -18,7 +18,7 @@
18
18
  }
19
19
 
20
20
  .timeline-tree-view .data-grid .data-container {
21
- overflow-y: scroll;
21
+ overflow: scroll;
22
22
  }
23
23
 
24
24
  .timeline-tree-view .data-grid.data-grid-fits-viewport .corner {
@@ -26,6 +26,7 @@
26
26
  }
27
27
 
28
28
  .timeline-tree-view .data-grid table.data {
29
+ width: max-content;
29
30
  background: var(--sys-color-cdt-base-container);
30
31
  }
31
32
 
@@ -111,7 +112,6 @@
111
112
 
112
113
  .timeline-tree-view .data-grid .name-container .activity-link {
113
114
  flex: auto;
114
- text-align: right;
115
115
  overflow: hidden;
116
116
  text-overflow: ellipsis;
117
117
  margin-left: 5px;
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: c58b221c291aacb234a72b730d833c62745fafff
4
+ Revision: 6bd698412997c22fb10551e3080f738503d6869b
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -627,9 +627,9 @@ export class Tooltip extends HTMLElement {
627
627
  throw new Error('Anchor must be an HTMLElement.');
628
628
  }
629
629
  this.#anchor = anchor;
630
- if (this.variant === 'rich' && describedbyAnchor) {
631
- console.warn(`The anchor for tooltip ${
632
- id} was defined with "aria-describedby". For rich tooltips "aria-details" is more appropriate.`);
630
+ if (this.variant === 'rich' && !detailsAnchor) {
631
+ console.warn(
632
+ `"aria-details" was not defined for tooltip ${id}. For rich tooltips "aria-details" should be defined.`);
633
633
  }
634
634
  }
635
635
 
@@ -1136,6 +1136,7 @@ export const knownContextValues = new Set([
1136
1136
  'css-font-palette',
1137
1137
  'css-function',
1138
1138
  'css-layers',
1139
+ 'css-list-style-type',
1139
1140
  'css-location',
1140
1141
  'css-overview',
1141
1142
  'css-overview.cancel-processing',
package/package.json CHANGED
@@ -105,5 +105,5 @@
105
105
  "ip-address": "10.1.0",
106
106
  "basic-ftp": "5.2.2"
107
107
  },
108
- "version": "1.0.1625854"
108
+ "version": "1.0.1626437"
109
109
  }