chrome-devtools-frontend 1.0.1660788 → 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 (177) hide show
  1. package/.agents/skills/evaluate-ai-css-completion/SKILL.md +143 -0
  2. package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +104 -0
  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/eslint.config.mjs +7 -0
  7. package/extension-api/ExtensionAPI.d.ts +88 -0
  8. package/front_end/core/common/SettingRegistration.ts +0 -5
  9. package/front_end/core/host/InspectorFrontendHost.ts +1 -0
  10. package/front_end/core/host/InspectorFrontendHostStub.ts +2 -0
  11. package/front_end/core/platform/ArrayUtilities.ts +10 -0
  12. package/front_end/core/platform/StringUtilities.ts +20 -4
  13. package/front_end/core/sdk/CPUThrottlingManager.ts +2 -0
  14. package/front_end/core/sdk/DOMDebuggerModel.ts +2 -0
  15. package/front_end/core/sdk/DOMModel.ts +1 -0
  16. package/front_end/core/sdk/DebuggerModel.ts +4 -4
  17. package/front_end/core/sdk/EventBreakpointsModel.ts +2 -0
  18. package/front_end/core/sdk/FrameManager.ts +1 -0
  19. package/front_end/core/sdk/IsolateManager.ts +1 -0
  20. package/front_end/core/sdk/NetworkManager.ts +2 -0
  21. package/front_end/core/sdk/NetworkRequest.ts +1 -0
  22. package/front_end/core/sdk/PageResourceLoader.ts +2 -0
  23. package/front_end/core/sdk/SourceMap.ts +5 -5
  24. package/front_end/core/sdk/SourceMapManager.ts +3 -2
  25. package/front_end/core/sdk/TargetManager.ts +4 -0
  26. package/front_end/entrypoints/main/MainImpl.ts +2 -1
  27. package/front_end/foundation/README.md +86 -0
  28. package/front_end/generated/InspectorBackendCommands.ts +4 -5
  29. package/front_end/generated/protocol.ts +20 -38
  30. package/front_end/models/bindings/CompilerScriptMapping.ts +5 -5
  31. package/front_end/models/bindings/ContentProviderBasedProject.ts +2 -3
  32. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +3 -3
  33. package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
  34. package/front_end/models/bindings/ResourceMapping.ts +3 -3
  35. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -2
  36. package/front_end/models/bindings/SASSSourceMapping.ts +3 -3
  37. package/front_end/models/bindings/TempFile.ts +8 -3
  38. package/front_end/models/extensions/ExtensionAPI.ts +110 -46
  39. package/front_end/models/extensions/RecorderExtensionEndpoint.ts +7 -5
  40. package/front_end/models/formatter/ScriptFormatter.ts +8 -11
  41. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +14 -5
  42. package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +8 -9
  43. package/front_end/models/issues_manager/CookieIssue.ts +21 -9
  44. package/front_end/models/issues_manager/Issue.ts +3 -4
  45. package/front_end/models/issues_manager/IssueAggregator.ts +0 -9
  46. package/front_end/models/issues_manager/IssueResolver.ts +2 -2
  47. package/front_end/models/issues_manager/IssuesManager.ts +136 -137
  48. package/front_end/models/issues_manager/RelatedIssue.ts +10 -8
  49. package/front_end/models/issues_manager/issues_manager.ts +0 -2
  50. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  51. package/front_end/models/logs/RequestResolver.ts +2 -2
  52. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +12 -9
  53. package/front_end/models/trace/handlers/FramesHandler.ts +4 -7
  54. package/front_end/models/trace/handlers/ModelHandlers.ts +0 -1
  55. package/front_end/models/trace/handlers/RendererHandler.ts +2 -15
  56. package/front_end/models/trace/handlers/Threads.ts +4 -11
  57. package/front_end/models/trace/insights/DOMSize.ts +1 -1
  58. package/front_end/models/workspace_diff/WorkspaceDiff.ts +10 -4
  59. package/front_end/panels/ai_assistance/components/ChatMessage.ts +2 -1
  60. package/front_end/panels/application/ApplicationPanelSidebar.ts +0 -44
  61. package/front_end/panels/application/CookieItemsView.ts +1 -1
  62. package/front_end/panels/application/ServiceWorkersView.ts +494 -411
  63. package/front_end/panels/application/WebMCPView.ts +38 -43
  64. package/front_end/panels/application/application.ts +0 -6
  65. package/front_end/panels/application/components/AdsView.ts +201 -30
  66. package/front_end/panels/application/components/adsView.css +25 -0
  67. package/front_end/panels/application/components/components.ts +0 -2
  68. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +1 -1
  69. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -2
  70. package/front_end/panels/application/serviceWorkersView.css +40 -4
  71. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +147 -123
  72. package/front_end/panels/common/ExtensionServer.ts +3 -3
  73. package/front_end/panels/console/ConsoleView.ts +3 -2
  74. package/front_end/panels/console/PromptBuilder.ts +2 -1
  75. package/front_end/panels/emulation/DeviceModeView.ts +164 -113
  76. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  77. package/front_end/panels/issues/IssueView.ts +0 -2
  78. package/front_end/panels/issues/IssuesPane.ts +1 -8
  79. package/front_end/panels/js_timeline/js_timeline-meta.ts +3 -2
  80. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +53 -12
  81. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +3 -3
  82. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -5
  83. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +4 -4
  84. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +2 -2
  85. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
  86. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +3 -3
  87. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +8 -9
  88. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +2 -2
  89. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  90. package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
  91. package/front_end/panels/network/RequestPayloadView.ts +92 -52
  92. package/front_end/panels/network/RequestTimingView.ts +95 -127
  93. package/front_end/panels/network/components/ResponseHeaderSection.ts +5 -3
  94. package/front_end/panels/profiler/HeapSnapshotView.ts +3 -3
  95. package/front_end/panels/profiler/WritableProfileHeader.ts +2 -2
  96. package/front_end/panels/recorder/{components/ControlButton.ts → ControlButton.ts} +9 -10
  97. package/front_end/panels/recorder/{components/CreateRecordingView.ts → CreateRecordingView.ts} +48 -47
  98. package/front_end/panels/recorder/{components/ExtensionView.ts → ExtensionView.ts} +8 -8
  99. package/front_end/panels/recorder/RecorderController.ts +302 -127
  100. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  101. package/front_end/panels/recorder/{components/RecordingListView.ts → RecordingListView.ts} +19 -20
  102. package/front_end/panels/recorder/{components/RecordingView.ts → RecordingView.ts} +88 -88
  103. package/front_end/panels/recorder/{components/ReplaySection.ts → ReplaySection.ts} +11 -11
  104. package/front_end/panels/recorder/{components/SelectorPicker.ts → SelectorPicker.ts} +13 -13
  105. package/front_end/panels/recorder/{components/StepEditor.ts → StepEditor.ts} +15 -15
  106. package/front_end/panels/recorder/{components/StepView.ts → StepView.ts} +10 -10
  107. package/front_end/panels/recorder/{components/TimelineSection.ts → TimelineSection.ts} +2 -2
  108. package/front_end/panels/recorder/recorder.ts +23 -1
  109. package/front_end/panels/recorder/util/util.ts +113 -0
  110. package/front_end/panels/sources/SourcesView.ts +0 -17
  111. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  112. package/front_end/panels/sources/UISourceCodeFrame.ts +42 -0
  113. package/front_end/panels/sources/sources.ts +0 -2
  114. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +0 -17
  115. package/front_end/panels/timeline/IsolateSelector.ts +10 -8
  116. package/front_end/panels/timeline/ThreadAppender.ts +0 -106
  117. package/front_end/panels/timeline/TimelinePanel.ts +18 -7
  118. package/front_end/panels/timeline/TimelineUIUtils.ts +144 -129
  119. package/front_end/panels/timeline/timeline-meta.ts +3 -2
  120. package/front_end/third_party/chromium/README.chromium +1 -1
  121. package/front_end/ui/components/report_view/ReportView.ts +11 -5
  122. package/front_end/ui/components/report_view/report.css +4 -1
  123. package/front_end/ui/legacy/TextPrompt.ts +49 -1
  124. package/front_end/ui/legacy/Treeoutline.ts +3 -0
  125. package/front_end/ui/legacy/UIUtils.ts +11 -1
  126. package/front_end/ui/legacy/Widget.ts +14 -15
  127. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +2 -2
  128. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +11 -7
  129. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -1
  130. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +10 -1
  131. package/front_end/ui/legacy/textPrompt.css +10 -0
  132. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  133. package/package.json +1 -1
  134. package/front_end/models/issues_manager/AttributionReportingIssue.ts +0 -247
  135. package/front_end/models/issues_manager/descriptions/arInsecureContext.md +0 -7
  136. package/front_end/models/issues_manager/descriptions/arInvalidInfoHeader.md +0 -5
  137. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +0 -5
  138. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +0 -5
  139. package/front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +0 -5
  140. package/front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +0 -5
  141. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -5
  142. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +0 -6
  143. package/front_end/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +0 -5
  144. package/front_end/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +0 -5
  145. package/front_end/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +0 -5
  146. package/front_end/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +0 -5
  147. package/front_end/models/issues_manager/descriptions/arNoWebOrOsSupport.md +0 -4
  148. package/front_end/models/issues_manager/descriptions/arOsSourceIgnored.md +0 -18
  149. package/front_end/models/issues_manager/descriptions/arOsTriggerIgnored.md +0 -19
  150. package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +0 -8
  151. package/front_end/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +0 -9
  152. package/front_end/models/issues_manager/descriptions/arSourceIgnored.md +0 -13
  153. package/front_end/models/issues_manager/descriptions/arTriggerIgnored.md +0 -12
  154. package/front_end/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +0 -10
  155. package/front_end/models/issues_manager/descriptions/arWebAndOsHeaders.md +0 -11
  156. package/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +0 -183
  157. package/front_end/panels/application/InterestGroupStorageModel.ts +0 -81
  158. package/front_end/panels/application/InterestGroupStorageView.ts +0 -151
  159. package/front_end/panels/application/InterestGroupTreeElement.ts +0 -65
  160. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +0 -135
  161. package/front_end/panels/application/components/interestGroupAccessGrid.css +0 -27
  162. package/front_end/panels/application/interestGroupStorageView.css +0 -9
  163. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +0 -182
  164. package/front_end/panels/recorder/components/components.ts +0 -25
  165. package/front_end/panels/recorder/components/util.ts +0 -116
  166. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +0 -149
  167. /package/front_end/panels/recorder/{components/controlButton.css → controlButton.css} +0 -0
  168. /package/front_end/panels/recorder/{components/createRecordingView.css → createRecordingView.css} +0 -0
  169. /package/front_end/panels/recorder/{components/extensionView.css → extensionView.css} +0 -0
  170. /package/front_end/panels/recorder/{components/recordingListView.css → recordingListView.css} +0 -0
  171. /package/front_end/panels/recorder/{components/recordingView.css → recordingView.css} +0 -0
  172. /package/front_end/panels/recorder/{components/replaySection.css → replaySection.css} +0 -0
  173. /package/front_end/panels/recorder/{components/selectorPicker.css → selectorPicker.css} +0 -0
  174. /package/front_end/panels/recorder/{components/startView.css → startView.css} +0 -0
  175. /package/front_end/panels/recorder/{components/stepEditor.css → stepEditor.css} +0 -0
  176. /package/front_end/panels/recorder/{components/stepView.css → stepView.css} +0 -0
  177. /package/front_end/panels/recorder/{components/timelineSection.css → timelineSection.css} +0 -0
@@ -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,8 +345,9 @@ 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();
349
- private issueResolver = new IssuesManager.IssueResolver.IssueResolver();
348
+ private requestResolver = new Logs.RequestResolver.RequestResolver(Logs.NetworkLog.NetworkLog.instance());
349
+ private issueResolver =
350
+ new IssuesManager.IssueResolver.IssueResolver(IssuesManager.IssuesManager.IssuesManager.instance());
350
351
  #isDetached = false;
351
352
  #onIssuesCountUpdateBound = this.#onIssuesCountUpdate.bind(this);
352
353
  #collapseAllButton: UI.Toolbar.ToolbarButton;
@@ -68,8 +68,9 @@ export class PromptBuilder {
68
68
  const firstNewline = text.indexOf('\n');
69
69
  if (text.length > MAX_CODE_SIZE && (firstNewline < 0 || firstNewline > MAX_CODE_SIZE)) {
70
70
  // Use formatter
71
+ const settings = runtimeModel.target().targetManager().settings;
71
72
  const {formattedContent, formattedMapping} = await Formatter.ScriptFormatter.formatScriptContent(
72
- mappedLocation?.uiSourceCode.mimeType() ?? 'text/javascript', text);
73
+ settings, mappedLocation?.uiSourceCode.mimeType() ?? 'text/javascript', text);
73
74
  const [lineNumber, columnNumber] =
74
75
  formattedMapping.originalToFormatted(mappedLocation?.lineNumber ?? 0, mappedLocation?.columnNumber ?? 0);
75
76
  return {text: formattedContent, columnNumber, lineNumber};