chrome-devtools-frontend 1.0.1661063 → 1.0.1662289

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 (75) hide show
  1. package/.agents/skills/evaluate-ai-css-completion/SKILL.md +19 -9
  2. package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +44 -16
  3. package/.agents/skills/migrate-chromium-test/SKILL.md +7 -2
  4. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +7 -1
  5. package/docs/ui_engineering.md +75 -42
  6. package/front_end/core/common/SettingRegistration.ts +0 -5
  7. package/front_end/core/platform/ArrayUtilities.ts +10 -0
  8. package/front_end/foundation/README.md +86 -0
  9. package/front_end/generated/InspectorBackendCommands.ts +4 -5
  10. package/front_end/generated/protocol.ts +20 -38
  11. package/front_end/models/bindings/CompilerScriptMapping.ts +5 -4
  12. package/front_end/models/bindings/ContentProviderBasedProject.ts +2 -3
  13. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +4 -3
  14. package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
  15. package/front_end/models/bindings/NetworkProject.ts +10 -1
  16. package/front_end/models/bindings/ResourceMapping.ts +4 -3
  17. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -1
  18. package/front_end/models/bindings/SASSSourceMapping.ts +4 -3
  19. package/front_end/models/bindings/StylesSourceMapping.ts +3 -3
  20. package/front_end/models/extensions/RecorderExtensionEndpoint.ts +7 -5
  21. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +14 -5
  22. package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +8 -9
  23. package/front_end/models/issues_manager/RelatedIssue.ts +10 -8
  24. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  25. package/front_end/models/logs/RequestResolver.ts +2 -2
  26. package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +0 -5
  27. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +1 -1
  28. package/front_end/models/trace/handlers/FramesHandler.ts +4 -7
  29. package/front_end/models/trace/handlers/ModelHandlers.ts +0 -1
  30. package/front_end/models/trace/handlers/RendererHandler.ts +2 -15
  31. package/front_end/models/trace/handlers/Threads.ts +4 -11
  32. package/front_end/models/trace/insights/DOMSize.ts +1 -1
  33. package/front_end/models/workspace/WorkspaceImpl.ts +1 -10
  34. package/front_end/panels/application/ApplicationPanelSidebar.ts +0 -44
  35. package/front_end/panels/application/CookieItemsView.ts +1 -1
  36. package/front_end/panels/application/FrameDetailsView.ts +1 -1
  37. package/front_end/panels/application/ServiceWorkersView.ts +494 -411
  38. package/front_end/panels/application/application.ts +0 -6
  39. package/front_end/panels/application/components/components.ts +0 -2
  40. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +1 -1
  41. package/front_end/panels/application/serviceWorkersView.css +40 -4
  42. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +147 -123
  43. package/front_end/panels/common/ExtensionServer.ts +3 -3
  44. package/front_end/panels/console/ConsoleView.ts +1 -1
  45. package/front_end/panels/emulation/DeviceModeView.ts +139 -70
  46. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  47. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +53 -12
  48. package/front_end/panels/network/RequestPayloadView.ts +77 -39
  49. package/front_end/panels/network/components/ResponseHeaderSection.ts +5 -3
  50. package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
  51. package/front_end/panels/recorder/RecorderController.ts +213 -49
  52. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  53. package/front_end/panels/sources/SourcesNavigator.ts +3 -2
  54. package/front_end/panels/sources/SourcesView.ts +0 -17
  55. package/front_end/panels/sources/UISourceCodeFrame.ts +42 -0
  56. package/front_end/panels/sources/sources.ts +0 -2
  57. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +0 -17
  58. package/front_end/panels/timeline/ThreadAppender.ts +0 -106
  59. package/front_end/third_party/chromium/README.chromium +1 -1
  60. package/front_end/ui/components/report_view/ReportView.ts +11 -5
  61. package/front_end/ui/components/report_view/report.css +4 -1
  62. package/front_end/ui/legacy/TextPrompt.ts +49 -1
  63. package/front_end/ui/legacy/UIUtils.ts +11 -1
  64. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +2 -2
  65. package/front_end/ui/legacy/textPrompt.css +10 -0
  66. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  67. package/package.json +1 -1
  68. package/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +0 -183
  69. package/front_end/panels/application/InterestGroupStorageModel.ts +0 -81
  70. package/front_end/panels/application/InterestGroupStorageView.ts +0 -151
  71. package/front_end/panels/application/InterestGroupTreeElement.ts +0 -65
  72. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +0 -135
  73. package/front_end/panels/application/components/interestGroupAccessGrid.css +0 -27
  74. package/front_end/panels/application/interestGroupStorageView.css +0 -9
  75. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +0 -149
@@ -18,9 +18,6 @@ import * as ExtensionStorageModel from './ExtensionStorageModel.js';
18
18
  import * as FrameDetailsView from './FrameDetailsView.js';
19
19
  import * as IndexedDBModel from './IndexedDBModel.js';
20
20
  import * as IndexedDBViews from './IndexedDBViews.js';
21
- import * as InterestGroupStorageModel from './InterestGroupStorageModel.js';
22
- import * as InterestGroupStorageView from './InterestGroupStorageView.js';
23
- import * as InterestGroupTreeElement from './InterestGroupTreeElement.js';
24
21
  import * as KeyValueStorageItemsView from './KeyValueStorageItemsView.js';
25
22
  import * as OpenedWindowDetailsView from './OpenedWindowDetailsView.js';
26
23
  import * as OriginTrialTreeView from './OriginTrialTreeView.js';
@@ -62,9 +59,6 @@ export {
62
59
  FrameDetailsView,
63
60
  IndexedDBModel,
64
61
  IndexedDBViews,
65
- InterestGroupStorageModel,
66
- InterestGroupStorageView,
67
- InterestGroupTreeElement,
68
62
  KeyValueStorageItemsView,
69
63
  OpenedWindowDetailsView,
70
64
  OriginTrialTreeView,
@@ -7,7 +7,6 @@ import * as BackForwardCacheView from './BackForwardCacheView.js';
7
7
  import * as BounceTrackingMitigationsView from './BounceTrackingMitigationsView.js';
8
8
  import * as CrashReportContextGrid from './CrashReportContextGrid.js';
9
9
  import * as EndpointsGrid from './EndpointsGrid.js';
10
- import * as InterestGroupAccessGrid from './InterestGroupAccessGrid.js';
11
10
  import * as PermissionsPolicySection from './PermissionsPolicySection.js';
12
11
  import * as ProtocolHandlersView from './ProtocolHandlersView.js';
13
12
  import * as ReportsGrid from './ReportsGrid.js';
@@ -23,7 +22,6 @@ export {
23
22
  BounceTrackingMitigationsView,
24
23
  CrashReportContextGrid,
25
24
  EndpointsGrid,
26
- InterestGroupAccessGrid,
27
25
  PermissionsPolicySection,
28
26
  ProtocolHandlersView,
29
27
  ReportsGrid,
@@ -243,7 +243,7 @@ export class PreloadingDetailsReportView extends LegacyWrapper.LegacyWrapper.Wra
243
243
  .data=${
244
244
  {
245
245
  affectedRequest,
246
- requestResolver: this.#data.requestResolver || new Logs.RequestResolver.RequestResolver(),
246
+ requestResolver: this.#data.requestResolver || new Logs.RequestResolver.RequestResolver(Logs.NetworkLog.NetworkLog.instance()),
247
247
  displayURL: true,
248
248
  urlToDisplay: url,
249
249
  }
@@ -96,10 +96,6 @@
96
96
  min-width: 80px;
97
97
  }
98
98
 
99
- .report-field-value {
100
- white-space: normal;
101
- }
102
-
103
99
  .report-field-value-filename,
104
100
  .service-worker-client-string {
105
101
  max-width: 400px;
@@ -162,3 +158,43 @@ devtools-icon.error-icon {
162
158
  vertical-align: bottom;
163
159
  width: var(--sys-size-7);
164
160
  }
161
+
162
+ .service-worker-toolbar {
163
+ margin-left: var(--sys-size-4);
164
+ }
165
+
166
+ .report-field {
167
+ display: flex;
168
+ padding: var(--sys-size-3) 0;
169
+ }
170
+
171
+ .report-field-name {
172
+ font: var(--sys-typescale-body5-medium);
173
+ color: var(--sys-color-on-surface-subtle);
174
+ flex: 0 0 128px;
175
+ text-align: left;
176
+ white-space: pre-wrap;
177
+ }
178
+
179
+ .report-field-value {
180
+ font: var(--sys-typescale-body4-regular);
181
+ flex: auto;
182
+ padding: 0 var(--sys-size-6);
183
+ white-space: normal;
184
+ user-select: text;
185
+ }
186
+
187
+ .service-worker-section {
188
+ border-bottom: 1px solid var(--sys-color-divider);
189
+ grid-column: 1 / 3;
190
+ padding: 0 var(--sys-size-9) 11px var(--sys-size-9);
191
+ }
192
+
193
+ .service-worker-section-container {
194
+ display: contents;
195
+ }
196
+
197
+ devtools-widget {
198
+ display: block;
199
+ }
200
+
@@ -4,14 +4,18 @@
4
4
  /* eslint-disable @devtools/no-imperative-dom-api */
5
5
 
6
6
  import * as i18n from '../../core/i18n/i18n.js';
7
+ import * as Platform from '../../core/platform/platform.js';
7
8
  import * as SDK from '../../core/sdk/sdk.js';
8
9
  import * as Protocol from '../../generated/protocol.js';
9
10
  import * as Buttons from '../../ui/components/buttons/buttons.js';
10
11
  import * as UI from '../../ui/legacy/legacy.js';
12
+ import {Directives, html, render} from '../../ui/lit/lit.js';
11
13
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
12
14
 
13
15
  import xhrBreakpointsSidebarPaneStyles from './xhrBreakpointsSidebarPane.css.js';
14
16
 
17
+ const {classMap, ifDefined, ref} = Directives;
18
+
15
19
  const UIStrings = {
16
20
  /**
17
21
  * @description Title of the 'XHR/fetch Breakpoints' tool in the bottom sidebar of the Sources tool
@@ -63,8 +67,6 @@ const str_ = i18n.i18n.registerUIStrings('panels/browser_debugger/XHRBreakpoints
63
67
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
64
68
  const containerToBreakpointEntry = new WeakMap<Element, HTMLElement>();
65
69
 
66
- const breakpointEntryToCheckbox = new WeakMap<Element, UI.UIUtils.CheckboxLabel>();
67
-
68
70
  let xhrBreakpointsSidebarPaneInstance: XHRBreakpointsSidebarPane|null = null;
69
71
 
70
72
  export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.ContextFlavorListener.ContextFlavorListener,
@@ -75,9 +77,8 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
75
77
  readonly #emptyElement: HTMLElement;
76
78
  readonly #breakpointElements: Map<string, Element>;
77
79
  readonly #addButton: UI.Toolbar.ToolbarButton;
78
- // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
79
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
- #hitBreakpoint?: any;
80
+ #hitBreakpoint?: string;
81
+ #editingBreakpoint: string|null = null;
81
82
 
82
83
  private constructor() {
83
84
  super({
@@ -138,14 +139,11 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
138
139
 
139
140
  const inputElementContainer = document.createElement('p');
140
141
  inputElementContainer.classList.add('breakpoint-condition');
141
- inputElementContainer.textContent = i18nString(UIStrings.breakWhenUrlContains);
142
142
  inputElementContainer.setAttribute('jslog', `${VisualLogging.value('condition').track({change: true})}`);
143
-
144
- const inputElement = inputElementContainer.createChild('span', 'breakpoint-condition-input');
145
- UI.ARIAUtils.setLabel(inputElement, i18nString(UIStrings.urlBreakpoint));
146
143
  this.addListElement(inputElementContainer, this.#list.element.firstChild as Element | null);
147
144
 
148
- const commit = (_element: Element, newText: string): void => {
145
+ const commit = (e: UI.TextPrompt.TextPromptElement.CommitEvent): void => {
146
+ const newText = e.detail;
149
147
  this.removeListElement(inputElementContainer);
150
148
  SDK.DOMDebuggerModel.DOMDebuggerManager.instance().addXHRBreakpoint(newText, true);
151
149
  this.setBreakpoint(newText);
@@ -157,8 +155,24 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
157
155
  this.update();
158
156
  };
159
157
 
160
- const config = new UI.InplaceEditor.Config(commit, cancel, undefined);
161
- UI.InplaceEditor.InplaceEditor.startEditing(inputElement, config);
158
+ // clang-format off
159
+ /* eslint-disable-next-line @devtools/no-lit-render-outside-of-view */
160
+ render(
161
+ html`
162
+ ${i18nString(UIStrings.breakWhenUrlContains)}
163
+ <devtools-prompt
164
+ value=""
165
+ render-as-block
166
+ ?editing=${true}
167
+ aria-label=${i18nString(UIStrings.urlBreakpoint)}
168
+ class="breakpoint-condition-input"
169
+ @commit=${commit}
170
+ @cancel=${cancel}>
171
+ </devtools-prompt>
172
+ `,
173
+ inputElementContainer
174
+ );
175
+ // clang-format on
162
176
  }
163
177
 
164
178
  heightForItem(_item: string): number {
@@ -173,15 +187,7 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
173
187
  if (this.#breakpoints.indexOf(breakKeyword) !== -1) {
174
188
  this.#list.refreshItem(breakKeyword);
175
189
  } else {
176
- this.#breakpoints.insertWithComparator(breakKeyword, (a, b) => {
177
- if (a > b) {
178
- return 1;
179
- }
180
- if (a < b) {
181
- return -1;
182
- }
183
- return 0;
184
- });
190
+ this.#breakpoints.insertWithComparator(breakKeyword, Platform.ArrayUtilities.DEFAULT_COMPARATOR);
185
191
  }
186
192
  if (!this.#list.selectedItem() || !this.hasFocus()) {
187
193
  this.#list.selectItem(this.#breakpoints.at(0));
@@ -191,54 +197,95 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
191
197
  createElementForItem(item: string): Element {
192
198
  const listItemElement = document.createElement('div');
193
199
  UI.ARIAUtils.markAsListitem(listItemElement);
194
- const element = listItemElement.createChild('div', 'breakpoint-entry');
195
- containerToBreakpointEntry.set(listItemElement, element);
196
200
  const enabled = SDK.DOMDebuggerModel.DOMDebuggerManager.instance().xhrBreakpoints().get(item) || false;
197
- UI.ARIAUtils.markAsCheckbox(element);
198
- UI.ARIAUtils.setChecked(element, enabled);
199
- element.addEventListener('contextmenu', this.contextMenu.bind(this, item), true);
200
-
201
201
  const title = item ? i18nString(UIStrings.urlContainsS, {PH1: item}) : i18nString(UIStrings.anyXhrOrFetch);
202
- const checkbox = UI.UIUtils.CheckboxLabel.create(title, enabled, undefined, undefined, /* small */ true);
203
- UI.ARIAUtils.setHidden(checkbox, true);
204
- UI.ARIAUtils.setLabel(element, title);
205
- element.appendChild(checkbox);
206
- checkbox.addEventListener('click', this.checkboxClicked.bind(this, item, enabled), false);
207
- element.addEventListener('click', event => {
208
- if (event.target === element) {
209
- this.checkboxClicked(item, enabled);
210
- }
211
- }, false);
212
- breakpointEntryToCheckbox.set(element, checkbox);
213
- checkbox.tabIndex = -1;
214
- element.tabIndex = -1;
215
- if (item === this.#list.selectedItem()) {
216
- element.tabIndex = 0;
217
- this.setDefaultFocusedElement(element);
218
- }
219
- element.addEventListener('keydown', event => {
220
- let handled = false;
221
- if (event.key === ' ') {
222
- this.checkboxClicked(item, enabled);
223
- handled = true;
224
- } else if (event.key === 'Enter') {
225
- this.labelClicked(item);
226
- handled = true;
202
+
203
+ const commit = (e: UI.TextPrompt.TextPromptElement.CommitEvent): void => {
204
+ if (this.#editingBreakpoint !== item) {
205
+ return;
227
206
  }
207
+ const newText = e.detail;
208
+ this.#editingBreakpoint = null;
209
+ this.#removeBreakpoint(item);
210
+ this.#addBreakpoint(newText, enabled);
211
+ this.#list.selectItem(newText);
212
+ this.focus();
213
+ };
228
214
 
229
- if (handled) {
230
- event.consume(true);
215
+ const cancel = (): void => {
216
+ if (this.#editingBreakpoint !== item) {
217
+ return;
231
218
  }
232
- });
219
+ this.#editingBreakpoint = null;
220
+ this.#list.refreshItem(item);
221
+ this.focus();
222
+ };
233
223
 
234
- if (item === this.#hitBreakpoint) {
235
- element.classList.add('breakpoint-hit');
236
- UI.ARIAUtils.setDescription(element, i18nString(UIStrings.breakpointHit));
237
- }
224
+ // clang-format off
225
+ /* eslint-disable-next-line @devtools/no-lit-render-outside-of-view */
226
+ render(
227
+ html`
228
+ <div class=${classMap({'breakpoint-entry': true, 'breakpoint-hit': item === this.#hitBreakpoint})}
229
+ role="checkbox"
230
+ aria-checked=${enabled ? 'true' : 'false'}
231
+ aria-label=${title}
232
+ aria-description=${ifDefined(item === this.#hitBreakpoint ? i18nString(UIStrings.breakpointHit) : undefined)}
233
+ tabindex=${item === this.#list.selectedItem() ? '0' : '-1'}
234
+ ?autofocus=${item === this.#list.selectedItem()}
235
+ ${ref((el?: Element) => {
236
+ if (el instanceof HTMLElement) {
237
+ containerToBreakpointEntry.set(listItemElement, el);
238
+ this.#breakpointElements.set(item, listItemElement);
239
+ }
240
+ })}
241
+ @click=${(event: Event) => {
242
+ if (event.target === event.currentTarget) {
243
+ this.checkboxClicked(item, enabled);
244
+ }
245
+ }}
246
+ @contextmenu=${(e: Event) => this.contextMenu(item, e)}
247
+ @keydown=${(event: KeyboardEvent) => {
248
+ let handled = false;
249
+ if (event.key === ' ') {
250
+ this.checkboxClicked(item, enabled);
251
+ handled = true;
252
+ } else if (event.key === 'Enter') {
253
+ this.#startEditing(item);
254
+ handled = true;
255
+ }
256
+ if (handled) {
257
+ event.consume(true);
258
+ }
259
+ }}>
260
+ <devtools-checkbox
261
+ class="cursor-auto"
262
+ aria-hidden="true"
263
+ .checked=${enabled}
264
+ .small=${true}
265
+ .title=${title}
266
+ @click=${(e: Event) => e.stopPropagation()}
267
+ @change=${() => this.checkboxClicked(item, enabled)}
268
+ @dblclick=${() => this.#startEditing(item)}
269
+ tabindex="-1"
270
+ jslog=${VisualLogging.toggle().track({click: true})}>
271
+ <devtools-prompt
272
+ value=${item}
273
+ render-as-block
274
+ ?editing=${item === this.#editingBreakpoint}
275
+ aria-label=${title}
276
+ class=${classMap({'breakpoint-condition-input': item === this.#editingBreakpoint})}
277
+ jslog=${VisualLogging.value('condition').track({change: true})}
278
+ @commit=${commit}
279
+ @cancel=${cancel}>
280
+ ${title}
281
+ </devtools-prompt>
282
+ </devtools-checkbox>
283
+ </div>
284
+ `,
285
+ listItemElement
286
+ );
287
+ // clang-format on
238
288
 
239
- checkbox.classList.add('cursor-auto');
240
- checkbox.addEventListener('dblclick', this.labelClicked.bind(this, item), false);
241
- this.#breakpointElements.set(item, listItemElement);
242
289
  listItemElement.setAttribute('jslog', `${VisualLogging.item().track({
243
290
  click: true,
244
291
  dblclick: true,
@@ -262,9 +309,15 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
262
309
  if (!breakpointEntryElement) {
263
310
  throw new Error('Expected breakpoint entry to be found for an element');
264
311
  }
265
- this.setDefaultFocusedElement(breakpointEntryElement);
312
+ const prompt =
313
+ _to === this.#editingBreakpoint ? toElement.querySelector('devtools-prompt') as HTMLElement | null : null;
314
+ this.setDefaultFocusedElement(prompt || breakpointEntryElement);
266
315
  breakpointEntryElement.tabIndex = 0;
267
316
  if (this.hasFocus()) {
317
+ if (prompt) {
318
+ prompt.focus();
319
+ return;
320
+ }
268
321
  breakpointEntryElement.focus();
269
322
  }
270
323
  }
@@ -297,84 +350,55 @@ export class XHRBreakpointsSidebarPane extends UI.Widget.VBox implements UI.Cont
297
350
  }
298
351
  }
299
352
 
300
- private contextMenu(breakKeyword: string, event: Event): void {
301
- const contextMenu = new UI.ContextMenu.ContextMenu(event);
353
+ #addBreakpoint(url: string, enabled = true): void {
354
+ SDK.DOMDebuggerModel.DOMDebuggerManager.instance().addXHRBreakpoint(url, enabled);
355
+ this.setBreakpoint(url);
356
+ }
302
357
 
303
- function removeBreakpoint(this: XHRBreakpointsSidebarPane): void {
304
- SDK.DOMDebuggerModel.DOMDebuggerManager.instance().removeXHRBreakpoint(breakKeyword);
305
- this.removeBreakpoint(breakKeyword);
306
- }
358
+ #removeBreakpoint(url: string): void {
359
+ SDK.DOMDebuggerModel.DOMDebuggerManager.instance().removeXHRBreakpoint(url);
360
+ this.removeBreakpoint(url);
361
+ }
307
362
 
308
- function removeAllBreakpoints(this: XHRBreakpointsSidebarPane): void {
309
- for (const url of this.#breakpointElements.keys()) {
310
- SDK.DOMDebuggerModel.DOMDebuggerManager.instance().removeXHRBreakpoint(url);
311
- this.removeBreakpoint(url);
312
- }
313
- this.update();
363
+ #removeAllBreakpoints(): void {
364
+ for (const url of this.#breakpointElements.keys()) {
365
+ this.#removeBreakpoint(url);
314
366
  }
367
+ this.update();
368
+ }
369
+
370
+ #toggleBreakpoint(url: string, checked: boolean): void {
371
+ SDK.DOMDebuggerModel.DOMDebuggerManager.instance().toggleXHRBreakpoint(url, checked);
372
+ this.#list.refreshItem(url);
373
+ this.#list.selectItem(url);
374
+ }
375
+
376
+ private contextMenu(breakKeyword: string, event: Event): void {
377
+ const contextMenu = new UI.ContextMenu.ContextMenu(event);
315
378
  const removeAllTitle = i18nString(UIStrings.removeAllBreakpoints);
316
379
 
317
380
  contextMenu.defaultSection().appendItem(
318
381
  i18nString(UIStrings.addBreakpoint), this.addButtonClicked.bind(this),
319
382
  {jslogContext: 'sources.add-xhr-fetch-breakpoint'});
320
- contextMenu.defaultSection().appendItem(
321
- i18nString(UIStrings.removeBreakpoint), removeBreakpoint.bind(this),
322
- {jslogContext: 'sources.remove-xhr-fetch-breakpoint'});
323
- contextMenu.defaultSection().appendItem(
324
- removeAllTitle, removeAllBreakpoints.bind(this), {jslogContext: 'sources.remove-all-xhr-fetch-breakpoints'});
383
+ contextMenu.defaultSection().appendItem(i18nString(UIStrings.removeBreakpoint),
384
+ this.#removeBreakpoint.bind(this, breakKeyword),
385
+ {jslogContext: 'sources.remove-xhr-fetch-breakpoint'});
386
+ contextMenu.defaultSection().appendItem(removeAllTitle, this.#removeAllBreakpoints.bind(this),
387
+ {jslogContext: 'sources.remove-all-xhr-fetch-breakpoints'});
325
388
  void contextMenu.show();
326
389
  }
327
390
 
328
391
  private checkboxClicked(breakKeyword: string, checked: boolean): void {
329
392
  const hadFocus = this.hasFocus();
330
- SDK.DOMDebuggerModel.DOMDebuggerManager.instance().toggleXHRBreakpoint(breakKeyword, !checked);
331
- this.#list.refreshItem(breakKeyword);
332
- this.#list.selectItem(breakKeyword);
393
+ this.#toggleBreakpoint(breakKeyword, !checked);
333
394
  if (hadFocus) {
334
395
  this.focus();
335
396
  }
336
397
  }
337
398
 
338
- private labelClicked(breakKeyword: string): void {
339
- const element = this.#breakpointElements.get(breakKeyword);
340
- const inputElement = document.createElement('span');
341
- inputElement.classList.add('breakpoint-condition');
342
- inputElement.textContent = breakKeyword;
343
- inputElement.setAttribute('jslog', `${VisualLogging.value('condition').track({change: true})}`);
344
- if (element) {
345
- this.#list.element.insertBefore(inputElement, element);
346
- element.classList.add('hidden');
347
- }
348
-
349
- const commit = (inputElement: Element, newText: string, _oldText: string|null, element?: Element): void => {
350
- this.removeListElement(inputElement);
351
- SDK.DOMDebuggerModel.DOMDebuggerManager.instance().removeXHRBreakpoint(breakKeyword);
352
- this.removeBreakpoint(breakKeyword);
353
- let enabled = true;
354
- if (element) {
355
- const breakpointEntryElement = containerToBreakpointEntry.get(element);
356
- const checkboxElement =
357
- breakpointEntryElement ? breakpointEntryToCheckbox.get(breakpointEntryElement) : undefined;
358
- if (checkboxElement) {
359
- enabled = checkboxElement.checked;
360
- }
361
- }
362
- SDK.DOMDebuggerModel.DOMDebuggerManager.instance().addXHRBreakpoint(newText, enabled);
363
- this.setBreakpoint(newText);
364
- this.#list.selectItem(newText);
365
- this.focus();
366
- };
367
-
368
- const cancel = (inputElement: Element, element?: Element): void => {
369
- this.removeListElement(inputElement);
370
- if (element) {
371
- element.classList.remove('hidden');
372
- }
373
- this.focus();
374
- };
375
-
376
- const config = new UI.InplaceEditor.Config(commit, cancel, element);
377
- UI.InplaceEditor.InplaceEditor.startEditing(inputElement, config);
399
+ #startEditing(item: string): void {
400
+ this.#editingBreakpoint = item;
401
+ this.#list.refreshItem(item);
378
402
  }
379
403
 
380
404
  flavorChanged(_object: Object|null): void {
@@ -446,9 +446,9 @@ export class ExtensionServer extends Common.ObjectWrapper.ObjectWrapper<EventTyp
446
446
  }
447
447
  const {pluginName, mediaType, port, capabilities} = message;
448
448
  const extensionOrigin = this.getExtensionOrigin(_shared_port);
449
- Extensions.RecorderPluginManager.RecorderPluginManager.instance().addPlugin(
450
- new Extensions.RecorderExtensionEndpoint.RecorderExtensionEndpoint(
451
- pluginName, port, capabilities, extensionOrigin, mediaType));
449
+ const recorderPluginManager = Extensions.RecorderPluginManager.RecorderPluginManager.instance();
450
+ recorderPluginManager.addPlugin(new Extensions.RecorderExtensionEndpoint.RecorderExtensionEndpoint(
451
+ pluginName, port, capabilities, extensionOrigin, recorderPluginManager, mediaType));
452
452
  return this.status.OK();
453
453
  }
454
454
 
@@ -345,7 +345,7 @@ export class ConsoleView extends UI.Widget.VBox implements
345
345
  private pendingSidebarMessages: ConsoleViewMessage[] = [];
346
346
  private userHasOpenedSidebarAtLeastOnce = false;
347
347
  private issueToolbarThrottle: Common.Throttler.Throttler;
348
- private requestResolver = new Logs.RequestResolver.RequestResolver();
348
+ private requestResolver = new Logs.RequestResolver.RequestResolver(Logs.NetworkLog.NetworkLog.instance());
349
349
  private issueResolver =
350
350
  new IssuesManager.IssueResolver.IssueResolver(IssuesManager.IssuesManager.IssuesManager.instance());
351
351
  #isDetached = false;