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.
- package/.agents/skills/evaluate-ai-css-completion/SKILL.md +19 -9
- package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +44 -16
- package/.agents/skills/migrate-chromium-test/SKILL.md +7 -2
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +7 -1
- package/docs/ui_engineering.md +75 -42
- package/front_end/core/common/SettingRegistration.ts +0 -5
- package/front_end/core/platform/ArrayUtilities.ts +10 -0
- package/front_end/foundation/README.md +86 -0
- package/front_end/generated/InspectorBackendCommands.ts +4 -5
- package/front_end/generated/protocol.ts +20 -38
- package/front_end/models/bindings/CompilerScriptMapping.ts +5 -4
- package/front_end/models/bindings/ContentProviderBasedProject.ts +2 -3
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +4 -3
- package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
- package/front_end/models/bindings/NetworkProject.ts +10 -1
- package/front_end/models/bindings/ResourceMapping.ts +4 -3
- package/front_end/models/bindings/ResourceScriptMapping.ts +2 -1
- package/front_end/models/bindings/SASSSourceMapping.ts +4 -3
- package/front_end/models/bindings/StylesSourceMapping.ts +3 -3
- package/front_end/models/extensions/RecorderExtensionEndpoint.ts +7 -5
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +14 -5
- package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +8 -9
- package/front_end/models/issues_manager/RelatedIssue.ts +10 -8
- package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
- package/front_end/models/logs/RequestResolver.ts +2 -2
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +0 -5
- package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +1 -1
- package/front_end/models/trace/handlers/FramesHandler.ts +4 -7
- package/front_end/models/trace/handlers/ModelHandlers.ts +0 -1
- package/front_end/models/trace/handlers/RendererHandler.ts +2 -15
- package/front_end/models/trace/handlers/Threads.ts +4 -11
- package/front_end/models/trace/insights/DOMSize.ts +1 -1
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -10
- package/front_end/panels/application/ApplicationPanelSidebar.ts +0 -44
- package/front_end/panels/application/CookieItemsView.ts +1 -1
- package/front_end/panels/application/FrameDetailsView.ts +1 -1
- package/front_end/panels/application/ServiceWorkersView.ts +494 -411
- package/front_end/panels/application/application.ts +0 -6
- package/front_end/panels/application/components/components.ts +0 -2
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +1 -1
- package/front_end/panels/application/serviceWorkersView.css +40 -4
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +147 -123
- package/front_end/panels/common/ExtensionServer.ts +3 -3
- package/front_end/panels/console/ConsoleView.ts +1 -1
- package/front_end/panels/emulation/DeviceModeView.ts +139 -70
- package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +53 -12
- package/front_end/panels/network/RequestPayloadView.ts +77 -39
- package/front_end/panels/network/components/ResponseHeaderSection.ts +5 -3
- package/front_end/panels/profiler/HeapSnapshotView.ts +2 -2
- package/front_end/panels/recorder/RecorderController.ts +213 -49
- package/front_end/panels/recorder/RecorderPanel.ts +1 -1
- package/front_end/panels/sources/SourcesNavigator.ts +3 -2
- package/front_end/panels/sources/SourcesView.ts +0 -17
- package/front_end/panels/sources/UISourceCodeFrame.ts +42 -0
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +0 -17
- package/front_end/panels/timeline/ThreadAppender.ts +0 -106
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/report_view/ReportView.ts +11 -5
- package/front_end/ui/components/report_view/report.css +4 -1
- package/front_end/ui/legacy/TextPrompt.ts +49 -1
- package/front_end/ui/legacy/UIUtils.ts +11 -1
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +2 -2
- package/front_end/ui/legacy/textPrompt.css +10 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
- package/package.json +1 -1
- package/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +0 -183
- package/front_end/panels/application/InterestGroupStorageModel.ts +0 -81
- package/front_end/panels/application/InterestGroupStorageView.ts +0 -151
- package/front_end/panels/application/InterestGroupTreeElement.ts +0 -65
- package/front_end/panels/application/components/InterestGroupAccessGrid.ts +0 -135
- package/front_end/panels/application/components/interestGroupAccessGrid.css +0 -27
- package/front_end/panels/application/interestGroupStorageView.css +0 -9
- 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
|
-
|
|
79
|
-
|
|
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 = (
|
|
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
|
-
|
|
161
|
-
|
|
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,
|
|
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
|
-
|
|
203
|
-
UI.
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
230
|
-
|
|
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
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
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
|
-
|
|
301
|
-
|
|
353
|
+
#addBreakpoint(url: string, enabled = true): void {
|
|
354
|
+
SDK.DOMDebuggerModel.DOMDebuggerManager.instance().addXHRBreakpoint(url, enabled);
|
|
355
|
+
this.setBreakpoint(url);
|
|
356
|
+
}
|
|
302
357
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
358
|
+
#removeBreakpoint(url: string): void {
|
|
359
|
+
SDK.DOMDebuggerModel.DOMDebuggerManager.instance().removeXHRBreakpoint(url);
|
|
360
|
+
this.removeBreakpoint(url);
|
|
361
|
+
}
|
|
307
362
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
contextMenu.defaultSection().appendItem(
|
|
324
|
-
|
|
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
|
-
|
|
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
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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()
|
|
450
|
-
|
|
451
|
-
|
|
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;
|