chrome-devtools-frontend 1.0.1645245 → 1.0.1646714
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/devtools-source-maps/SKILL.md +124 -0
- package/SECURITY.md +1 -1
- package/docs/README.md +1 -0
- package/docs/using_source_maps.md +159 -0
- package/front_end/core/host/AidaClientTypes.ts +2 -0
- package/front_end/core/host/UserMetrics.ts +2 -1
- package/front_end/core/root/Runtime.ts +10 -0
- package/front_end/core/sdk/DebuggerModel.ts +7 -9
- package/front_end/core/sdk/NetworkRequest.ts +0 -24
- package/front_end/generated/InspectorBackendCommands.ts +1 -1
- package/front_end/generated/SupportedCSSProperties.js +279 -0
- package/front_end/generated/protocol.ts +0 -1
- package/front_end/models/ai_assistance/AiAgent2.ts +43 -11
- package/front_end/models/ai_assistance/AiConversation.ts +4 -2
- package/front_end/models/ai_assistance/AiOrigins.ts +63 -2
- package/front_end/models/ai_assistance/README.md +15 -4
- package/front_end/models/ai_assistance/agents/AiAgent.ts +2 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +2 -2
- package/front_end/models/ai_assistance/agents/FileAgent.ts +9 -42
- package/front_end/models/ai_assistance/agents/NetworkAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +9 -133
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +10 -2
- package/front_end/models/ai_assistance/agents/README.md +7 -0
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +45 -0
- package/front_end/models/ai_assistance/ai_assistance.ts +8 -0
- package/front_end/models/ai_assistance/contexts/FileContext.ts +45 -0
- package/front_end/models/ai_assistance/contexts/RequestContext.snapshot.txt +48 -0
- package/front_end/models/ai_assistance/contexts/RequestContext.ts +116 -0
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +2 -1
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +2 -0
- package/front_end/models/ai_assistance/skills/network.md +16 -0
- package/front_end/models/ai_assistance/skills/styling.md +1 -1
- package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +118 -0
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +124 -0
- package/front_end/models/ai_assistance/tools/README.md +1 -1
- package/front_end/models/ai_assistance/tools/Tool.ts +2 -0
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +4 -0
- package/front_end/models/emulation/EmulatedDevices.ts +430 -12
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +15 -11
- package/front_end/models/web_mcp/WebMCPModel.ts +8 -48
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +14 -13
- package/front_end/panels/ai_assistance/components/ChatInput.ts +4 -4
- package/front_end/panels/application/ApplicationPanelSidebar.ts +25 -0
- package/front_end/panels/application/WebMCPTreeElement.ts +8 -0
- package/front_end/panels/application/WebMCPView.ts +40 -70
- package/front_end/panels/application/components/AdsView.ts +31 -28
- package/front_end/panels/application/components/adsView.css +6 -0
- package/front_end/panels/common/ExtensionServer.ts +5 -0
- package/front_end/panels/profiler/IsolateSelector.ts +4 -2
- package/front_end/panels/profiler/ProfileLauncherView.ts +194 -126
- package/front_end/panels/profiler/ProfilesPanel.ts +1 -3
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/legacy/components/utils/Linkifier.ts +10 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +9 -0
- package/package.json +1 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
// Copyright 2011 The Chromium Authors
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
|
-
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
4
|
|
|
6
5
|
import * as Common from '../../core/common/common.js';
|
|
7
6
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
7
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
9
8
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
9
|
+
import {html, nothing, render} from '../../ui/lit/lit.js';
|
|
10
|
+
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
10
11
|
|
|
11
12
|
import {IsolateSelector} from './IsolateSelector.js';
|
|
12
13
|
import type {ProfileType} from './ProfileHeader.js';
|
|
@@ -41,166 +42,233 @@ const UIStrings = {
|
|
|
41
42
|
} as const;
|
|
42
43
|
const str_ = i18n.i18n.registerUIStrings('panels/profiler/ProfileLauncherView.ts', UIStrings);
|
|
43
44
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
45
|
+
const {widget, widgetRef} = UI.Widget;
|
|
46
|
+
|
|
47
|
+
interface ProfileTypeEntry {
|
|
48
|
+
profileType: ProfileType;
|
|
49
|
+
selected: boolean;
|
|
50
|
+
customContent: Element|null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface ViewInput {
|
|
54
|
+
headerText: string;
|
|
55
|
+
profileTypes: ProfileTypeEntry[];
|
|
56
|
+
controlButtonText: string;
|
|
57
|
+
controlButtonDisabled: boolean;
|
|
58
|
+
controlButtonTooltip: string;
|
|
59
|
+
isProfiling: boolean;
|
|
60
|
+
isolateSelector: IsolateSelector|null;
|
|
61
|
+
onControlClick: () => void;
|
|
62
|
+
onLoadClick: () => void;
|
|
63
|
+
onProfileTypeChange: (profileType: ProfileType) => void;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface ViewOutput {
|
|
67
|
+
isolateSelector: IsolateSelector;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export type View = (input: ViewInput, output: ViewOutput, target: HTMLElement) => void;
|
|
71
|
+
|
|
72
|
+
// clang-format off
|
|
73
|
+
export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
74
|
+
render(html`
|
|
75
|
+
<style>${profileLauncherViewStyles}</style>
|
|
76
|
+
<div class="profile-launcher-view-content vbox">
|
|
77
|
+
<div class="vbox">
|
|
78
|
+
<h1>${input.headerText}</h1>
|
|
79
|
+
<form role="radiogroup" aria-label=${input.headerText}>
|
|
80
|
+
${input.profileTypes.map(entry => {
|
|
81
|
+
const radioId = `profile-type-${entry.profileType.id}`;
|
|
82
|
+
const customContent = entry.customContent;
|
|
83
|
+
return html`
|
|
84
|
+
<input id=${radioId} type="radio" name="profile-type"
|
|
85
|
+
.checked=${entry.selected}
|
|
86
|
+
?disabled=${input.isProfiling}
|
|
87
|
+
@change=${() => input.onProfileTypeChange(entry.profileType)}
|
|
88
|
+
jslog=${VisualLogging.toggle().track({change: true}).context('profiler.profile-type')}
|
|
89
|
+
/>
|
|
90
|
+
<label for=${radioId}>${entry.profileType.name}</label>
|
|
91
|
+
<p>${entry.profileType.description}</p>
|
|
92
|
+
${customContent ? html`
|
|
93
|
+
<p>
|
|
94
|
+
<span role="group" aria-labelledby=${radioId}>
|
|
95
|
+
${customContent}
|
|
96
|
+
</span>
|
|
97
|
+
</p>
|
|
98
|
+
` : nothing}
|
|
99
|
+
`;
|
|
100
|
+
})}
|
|
101
|
+
</form>
|
|
102
|
+
</div>
|
|
103
|
+
<div class="vbox profile-isolate-selector-block">
|
|
104
|
+
<h1>${i18nString(UIStrings.selectJavascriptVmInstance)}</h1>
|
|
105
|
+
<div class="vbox profile-launcher-target-list profile-launcher-target-list-container">
|
|
106
|
+
<devtools-widget
|
|
107
|
+
${widget(IsolateSelector)}
|
|
108
|
+
${widgetRef(IsolateSelector, e => {output.isolateSelector = e;})}
|
|
109
|
+
></devtools-widget>
|
|
110
|
+
</div>
|
|
111
|
+
${input.isolateSelector?.totalMemoryElement() ?? nothing}
|
|
112
|
+
</div>
|
|
113
|
+
<div class="hbox profile-launcher-buttons">
|
|
114
|
+
<devtools-button
|
|
115
|
+
.variant=${Buttons.Button.Variant.OUTLINED}
|
|
116
|
+
.iconName=${'import'}
|
|
117
|
+
@click=${input.onLoadClick}
|
|
118
|
+
.jslogContext=${'profiler.load-from-file'}
|
|
119
|
+
>${i18nString(UIStrings.load)}</devtools-button>
|
|
120
|
+
<devtools-button
|
|
121
|
+
.variant=${Buttons.Button.Variant.PRIMARY}
|
|
122
|
+
?disabled=${input.controlButtonDisabled}
|
|
123
|
+
title=${input.controlButtonTooltip}
|
|
124
|
+
@click=${input.onControlClick}
|
|
125
|
+
.jslogContext=${'profiler.heap-toggle-recording'}
|
|
126
|
+
>${input.controlButtonText}</devtools-button>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
`, target);
|
|
130
|
+
};
|
|
131
|
+
// clang-format on
|
|
132
|
+
|
|
44
133
|
export class ProfileLauncherView extends Common.ObjectWrapper.eventMixin<EventTypes, typeof UI.Widget.VBox>(
|
|
45
134
|
UI.Widget.VBox) {
|
|
46
135
|
readonly panel: ProfilesPanel;
|
|
47
|
-
#contentElement: HTMLElement;
|
|
48
136
|
readonly selectedProfileTypeSetting: Common.Settings.Setting<string>;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}>;
|
|
58
|
-
isProfiling?: boolean;
|
|
59
|
-
isInstantProfile?: boolean;
|
|
60
|
-
isEnabled?: boolean;
|
|
61
|
-
|
|
62
|
-
constructor(profilesPanel: ProfilesPanel) {
|
|
63
|
-
super();
|
|
64
|
-
this.registerRequiredCSS(profileLauncherViewStyles);
|
|
137
|
+
readonly #view: View;
|
|
138
|
+
#isolateSelector: IsolateSelector|null = null;
|
|
139
|
+
#profileTypes = new Map<string, ProfileType>();
|
|
140
|
+
#isProfiling = false;
|
|
141
|
+
#isInstantProfile = false;
|
|
142
|
+
#isEnabled = false;
|
|
143
|
+
#recordButtonEnabled = true;
|
|
144
|
+
#selectedTypeId = '';
|
|
65
145
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
this.#contentElement = this.element.createChild('div', 'profile-launcher-view-content vbox');
|
|
146
|
+
constructor(profilesPanel: ProfilesPanel, view: View = DEFAULT_VIEW) {
|
|
147
|
+
super({classes: ['profile-launcher-view']});
|
|
69
148
|
|
|
70
|
-
|
|
149
|
+
this.#view = view;
|
|
150
|
+
this.panel = profilesPanel;
|
|
71
151
|
this.selectedProfileTypeSetting = Common.Settings.Settings.instance().createSetting('selected-profile-type', 'CPU');
|
|
72
|
-
this.profileTypeHeaderElement = profileTypeSelectorElement.createChild('h1');
|
|
73
|
-
this.profileTypeSelectorForm = profileTypeSelectorElement.createChild('form');
|
|
74
|
-
UI.ARIAUtils.markAsRadioGroup(this.profileTypeSelectorForm);
|
|
75
|
-
|
|
76
|
-
const isolateSelectorElement = this.#contentElement.createChild('div', 'vbox profile-isolate-selector-block');
|
|
77
|
-
isolateSelectorElement.createChild('h1').textContent = i18nString(UIStrings.selectJavascriptVmInstance);
|
|
78
|
-
const isolateSelector = new IsolateSelector();
|
|
79
|
-
const isolateSelectorElementChild = isolateSelectorElement.createChild('div', 'vbox profile-launcher-target-list');
|
|
80
|
-
isolateSelectorElementChild.classList.add('profile-launcher-target-list-container');
|
|
81
|
-
isolateSelector.show(isolateSelectorElementChild);
|
|
82
|
-
isolateSelectorElement.appendChild(isolateSelector.totalMemoryElement());
|
|
83
|
-
|
|
84
|
-
const buttonsDiv = this.#contentElement.createChild('div', 'hbox profile-launcher-buttons');
|
|
85
|
-
this.controlButton = UI.UIUtils.createTextButton('', this.controlButtonClicked.bind(this), {
|
|
86
|
-
jslogContext: 'profiler.heap-toggle-recording',
|
|
87
|
-
variant: Buttons.Button.Variant.PRIMARY,
|
|
88
|
-
});
|
|
89
|
-
this.loadButton = new Buttons.Button.Button();
|
|
90
|
-
this.loadButton
|
|
91
|
-
.data = {iconName: 'import', variant: Buttons.Button.Variant.OUTLINED, jslogContext: 'profiler.load-from-file'};
|
|
92
|
-
this.loadButton.textContent = i18nString(UIStrings.load);
|
|
93
|
-
this.loadButton.addEventListener('click', this.loadButtonClicked.bind(this));
|
|
94
|
-
buttonsDiv.appendChild(this.loadButton);
|
|
95
|
-
buttonsDiv.appendChild(this.controlButton);
|
|
96
|
-
this.recordButtonEnabled = true;
|
|
97
|
-
|
|
98
|
-
this.typeIdToOptionElementAndProfileType = new Map();
|
|
99
152
|
}
|
|
100
153
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
154
|
+
override wasShown(): void {
|
|
155
|
+
super.wasShown();
|
|
156
|
+
this.requestUpdate();
|
|
104
157
|
}
|
|
105
158
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
} else {
|
|
110
|
-
this.controlButton.setAttribute('disabled', '');
|
|
111
|
-
}
|
|
112
|
-
UI.Tooltip.Tooltip.install(
|
|
113
|
-
this.controlButton, this.recordButtonEnabled ? '' : UI.UIUtils.anotherProfilerActiveLabel());
|
|
114
|
-
if (this.isInstantProfile) {
|
|
115
|
-
this.controlButton.classList.remove('running');
|
|
116
|
-
this.controlButton.textContent = i18nString(UIStrings.takeSnapshot);
|
|
117
|
-
} else if (this.isProfiling) {
|
|
118
|
-
this.controlButton.classList.add('running');
|
|
119
|
-
this.controlButton.textContent = i18nString(UIStrings.stop);
|
|
120
|
-
} else {
|
|
121
|
-
this.controlButton.classList.remove('running');
|
|
122
|
-
this.controlButton.textContent = i18nString(UIStrings.start);
|
|
123
|
-
}
|
|
124
|
-
for (const {optionElement} of this.typeIdToOptionElementAndProfileType.values()) {
|
|
125
|
-
optionElement.disabled = Boolean(this.isProfiling);
|
|
126
|
-
}
|
|
159
|
+
#getHeaderText(): string {
|
|
160
|
+
return this.#profileTypes.size > 1 ? i18nString(UIStrings.selectProfilingType) :
|
|
161
|
+
(this.#profileTypes.values().next().value?.name ?? '');
|
|
127
162
|
}
|
|
128
163
|
|
|
129
164
|
profileStarted(): void {
|
|
130
|
-
this
|
|
131
|
-
this.
|
|
165
|
+
this.#isProfiling = true;
|
|
166
|
+
this.requestUpdate();
|
|
132
167
|
}
|
|
133
168
|
|
|
134
169
|
profileFinished(): void {
|
|
135
|
-
this
|
|
136
|
-
this.
|
|
170
|
+
this.#isProfiling = false;
|
|
171
|
+
this.requestUpdate();
|
|
137
172
|
}
|
|
138
173
|
|
|
139
174
|
updateProfileType(profileType: ProfileType, recordButtonEnabled: boolean): void {
|
|
140
|
-
this
|
|
141
|
-
this
|
|
142
|
-
this
|
|
143
|
-
this.
|
|
175
|
+
this.#isInstantProfile = profileType.isInstantProfile();
|
|
176
|
+
this.#recordButtonEnabled = recordButtonEnabled;
|
|
177
|
+
this.#isEnabled = profileType.isEnabled();
|
|
178
|
+
this.requestUpdate();
|
|
144
179
|
}
|
|
145
180
|
|
|
146
181
|
addProfileType(profileType: ProfileType): void {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
this.
|
|
150
|
-
radio.addEventListener('change', this.profileTypeChanged.bind(this, profileType), false);
|
|
151
|
-
const descriptionElement = this.profileTypeSelectorForm.createChild('p');
|
|
152
|
-
descriptionElement.textContent = profileType.description;
|
|
153
|
-
UI.ARIAUtils.setDescription(radio, profileType.description);
|
|
154
|
-
const customContent = profileType.customContent();
|
|
155
|
-
if (customContent) {
|
|
156
|
-
customContent.setAttribute('role', 'group');
|
|
157
|
-
customContent.setAttribute('aria-labelledby', `${radio.id}`);
|
|
158
|
-
this.profileTypeSelectorForm.createChild('p').appendChild(customContent);
|
|
159
|
-
profileType.setCustomContentEnabled(false);
|
|
160
|
-
}
|
|
161
|
-
const headerText = this.typeIdToOptionElementAndProfileType.size > 1 ? i18nString(UIStrings.selectProfilingType) :
|
|
162
|
-
profileType.name;
|
|
163
|
-
this.profileTypeHeaderElement.textContent = headerText;
|
|
164
|
-
UI.ARIAUtils.setLabel(this.profileTypeSelectorForm, headerText);
|
|
182
|
+
this.#profileTypes.set(profileType.id, profileType);
|
|
183
|
+
profileType.setCustomContentEnabled(false);
|
|
184
|
+
this.requestUpdate();
|
|
165
185
|
}
|
|
166
186
|
|
|
167
187
|
restoreSelectedProfileType(): void {
|
|
168
188
|
let typeId = this.selectedProfileTypeSetting.get();
|
|
169
|
-
if (!this.
|
|
170
|
-
typeId = this.
|
|
189
|
+
if (!this.#profileTypes.has(typeId)) {
|
|
190
|
+
typeId = this.#profileTypes.keys().next().value as string;
|
|
171
191
|
this.selectedProfileTypeSetting.set(typeId);
|
|
172
192
|
}
|
|
173
193
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
optionElementAndProfileType.optionElement.checked = true;
|
|
179
|
-
const type = optionElementAndProfileType.profileType;
|
|
180
|
-
for (const [id, {profileType}] of this.typeIdToOptionElementAndProfileType) {
|
|
181
|
-
const enabled = (id === typeId);
|
|
182
|
-
profileType.setCustomContentEnabled(enabled);
|
|
194
|
+
this.#selectedTypeId = typeId;
|
|
195
|
+
const selectedType = this.#profileTypes.get(typeId);
|
|
196
|
+
if (!selectedType) {
|
|
197
|
+
return;
|
|
183
198
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
this.
|
|
199
|
+
for (const [id, profileType] of this.#profileTypes) {
|
|
200
|
+
profileType.setCustomContentEnabled(id === typeId);
|
|
201
|
+
}
|
|
202
|
+
this.dispatchEventToListeners(Events.PROFILE_TYPE_SELECTED, selectedType);
|
|
203
|
+
this.requestUpdate();
|
|
189
204
|
}
|
|
190
205
|
|
|
191
|
-
profileTypeChanged(profileType: ProfileType): void {
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
type.setCustomContentEnabled(false);
|
|
206
|
+
#profileTypeChanged(profileType: ProfileType): void {
|
|
207
|
+
const previousTypeId = this.#selectedTypeId;
|
|
208
|
+
const previousType = this.#profileTypes.get(previousTypeId);
|
|
209
|
+
if (previousType) {
|
|
210
|
+
previousType.setCustomContentEnabled(false);
|
|
211
|
+
}
|
|
198
212
|
profileType.setCustomContentEnabled(true);
|
|
199
|
-
this
|
|
200
|
-
this.isInstantProfile = profileType.isInstantProfile();
|
|
201
|
-
this.isEnabled = profileType.isEnabled();
|
|
202
|
-
this.updateControls();
|
|
213
|
+
this.#selectedTypeId = profileType.id;
|
|
203
214
|
this.selectedProfileTypeSetting.set(profileType.id);
|
|
215
|
+
this.#isInstantProfile = profileType.isInstantProfile();
|
|
216
|
+
this.#isEnabled = profileType.isEnabled();
|
|
217
|
+
this.dispatchEventToListeners(Events.PROFILE_TYPE_SELECTED, profileType);
|
|
218
|
+
this.requestUpdate();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
override performUpdate(): void {
|
|
222
|
+
const profileTypeEntries: ProfileTypeEntry[] = [];
|
|
223
|
+
for (const [id, profileType] of this.#profileTypes) {
|
|
224
|
+
const selected = id === this.#selectedTypeId;
|
|
225
|
+
const customContent = profileType.customContent();
|
|
226
|
+
profileType.setCustomContentEnabled(selected);
|
|
227
|
+
profileTypeEntries.push({
|
|
228
|
+
profileType,
|
|
229
|
+
selected,
|
|
230
|
+
customContent,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const controlButtonText = this.#isInstantProfile ?
|
|
235
|
+
i18nString(UIStrings.takeSnapshot) :
|
|
236
|
+
(this.#isProfiling ? i18nString(UIStrings.stop) : i18nString(UIStrings.start));
|
|
237
|
+
const controlButtonDisabled = !(this.#isEnabled && this.#recordButtonEnabled);
|
|
238
|
+
const controlButtonTooltip = this.#recordButtonEnabled ? '' : UI.UIUtils.anotherProfilerActiveLabel();
|
|
239
|
+
const that = this;
|
|
240
|
+
|
|
241
|
+
this.#view(
|
|
242
|
+
{
|
|
243
|
+
headerText: this.#getHeaderText(),
|
|
244
|
+
profileTypes: profileTypeEntries,
|
|
245
|
+
controlButtonText,
|
|
246
|
+
controlButtonDisabled,
|
|
247
|
+
controlButtonTooltip,
|
|
248
|
+
isProfiling: this.#isProfiling,
|
|
249
|
+
isolateSelector: this.#isolateSelector,
|
|
250
|
+
onControlClick: () => {
|
|
251
|
+
this.panel.toggleRecord();
|
|
252
|
+
},
|
|
253
|
+
onLoadClick: () => {
|
|
254
|
+
const loadFromFileAction = UI.ActionRegistry.ActionRegistry.instance().getAction('profiler.load-from-file');
|
|
255
|
+
void loadFromFileAction.execute();
|
|
256
|
+
},
|
|
257
|
+
onProfileTypeChange: (profileType: ProfileType) => {
|
|
258
|
+
this.#profileTypeChanged(profileType);
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
set isolateSelector(isolateSelector: IsolateSelector) {
|
|
263
|
+
if (that.#isolateSelector === isolateSelector) {
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
that.#isolateSelector = isolateSelector;
|
|
267
|
+
that.requestUpdate();
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
this.contentElement,
|
|
271
|
+
);
|
|
204
272
|
}
|
|
205
273
|
}
|
|
206
274
|
|
|
@@ -357,7 +357,7 @@ export class ProfilesPanel extends UI.Panel.PanelWithSidebar implements DataDisp
|
|
|
357
357
|
reset(): void {
|
|
358
358
|
this.profileTypes.forEach(type => type.reset());
|
|
359
359
|
|
|
360
|
-
|
|
360
|
+
this.closeVisibleView();
|
|
361
361
|
|
|
362
362
|
this.profileGroups = {};
|
|
363
363
|
this.updateToggleRecordAction(false);
|
|
@@ -365,8 +365,6 @@ export class ProfilesPanel extends UI.Panel.PanelWithSidebar implements DataDisp
|
|
|
365
365
|
|
|
366
366
|
this.sidebarTree.element.classList.remove('some-expandable');
|
|
367
367
|
|
|
368
|
-
this.launcherView.detach();
|
|
369
|
-
this.profileViews.removeChildren();
|
|
370
368
|
this.profileViewToolbar.removeToolbarItems();
|
|
371
369
|
|
|
372
370
|
this.profilesItemTreeElement.select();
|
|
@@ -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:
|
|
4
|
+
Revision: 744630f612b7b708c9a70d6dae9fc47270c18db4
|
|
5
5
|
Update Mechanism: Manual (https://crbug.com/428069060)
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
License File: LICENSE
|
|
@@ -240,6 +240,7 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
|
|
|
240
240
|
userMetric: options?.userMetric,
|
|
241
241
|
jslogContext: options?.jslogContext || 'script-location',
|
|
242
242
|
omitOrigin: options?.omitOrigin,
|
|
243
|
+
allowPrivileged: options?.allowPrivileged,
|
|
243
244
|
} satisfies LinkifyURLOptions;
|
|
244
245
|
const {columnNumber, className = ''} = linkifyURLOptions;
|
|
245
246
|
if (sourceURL) {
|
|
@@ -313,6 +314,7 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
|
|
|
313
314
|
tabStop: options?.tabStop,
|
|
314
315
|
userMetric: options?.userMetric,
|
|
315
316
|
jslogContext: options?.jslogContext || 'script-source-url',
|
|
317
|
+
allowPrivileged: options?.allowPrivileged,
|
|
316
318
|
};
|
|
317
319
|
|
|
318
320
|
return scriptLink || Linkifier.linkifyURL(sourceURL, linkifyURLOptions);
|
|
@@ -593,6 +595,8 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
|
|
|
593
595
|
const lineNumber = options.lineNumber;
|
|
594
596
|
const columnNumber = options.columnNumber;
|
|
595
597
|
const showColumnNumber = options.showColumnNumber;
|
|
598
|
+
const isPrivileged = Common.ParsedURL.schemeIs(url, 'chrome:') || Common.ParsedURL.schemeIs(url, 'file:') ||
|
|
599
|
+
Common.ParsedURL.schemeIs(url, 'devtools:');
|
|
596
600
|
const preventClick = options.preventClick;
|
|
597
601
|
const maxLength = options.maxLength || UI.UIUtils.MaxLengthForDisplayedURLs;
|
|
598
602
|
const bypassURLTrimming = options.bypassURLTrimming;
|
|
@@ -629,6 +633,10 @@ export class Linkifier extends Common.ObjectWrapper.ObjectWrapper<EventTypes> im
|
|
|
629
633
|
linkText += ':' + (columnNumber + 1);
|
|
630
634
|
}
|
|
631
635
|
}
|
|
636
|
+
if (isPrivileged && !options?.allowPrivileged) {
|
|
637
|
+
return html`<span class=${className}>${linkText}</span>`;
|
|
638
|
+
}
|
|
639
|
+
|
|
632
640
|
const title = linkText !== url ? url : '';
|
|
633
641
|
const linkOptions = {
|
|
634
642
|
maxLength,
|
|
@@ -1170,6 +1178,7 @@ interface LinkInfo {
|
|
|
1170
1178
|
}
|
|
1171
1179
|
|
|
1172
1180
|
export interface LinkifyURLOptions {
|
|
1181
|
+
allowPrivileged?: boolean;
|
|
1173
1182
|
text?: string;
|
|
1174
1183
|
className?: string;
|
|
1175
1184
|
lineNumber?: number;
|
|
@@ -1187,6 +1196,7 @@ export interface LinkifyURLOptions {
|
|
|
1187
1196
|
}
|
|
1188
1197
|
|
|
1189
1198
|
export interface LinkifyOptions {
|
|
1199
|
+
allowPrivileged?: boolean;
|
|
1190
1200
|
className?: string;
|
|
1191
1201
|
columnNumber?: number;
|
|
1192
1202
|
showColumnNumber?: boolean;
|
|
@@ -345,6 +345,7 @@ export const knownContextValues = new Set([
|
|
|
345
345
|
'addedSize',
|
|
346
346
|
'additive-symbols',
|
|
347
347
|
'adorner-settings',
|
|
348
|
+
'ads',
|
|
348
349
|
'af',
|
|
349
350
|
'affected-cookies',
|
|
350
351
|
'affected-documents',
|
|
@@ -1998,6 +1999,8 @@ export const knownContextValues = new Set([
|
|
|
1998
1999
|
'i-pad-pro',
|
|
1999
2000
|
'i-phone-12-pro',
|
|
2000
2001
|
'i-phone-14-pro-max',
|
|
2002
|
+
'i-phone-15-pro-max',
|
|
2003
|
+
'i-phone-16-pro-max',
|
|
2001
2004
|
'i-phone-se',
|
|
2002
2005
|
'i-phone-xr',
|
|
2003
2006
|
'icons',
|
|
@@ -3068,7 +3071,11 @@ export const knownContextValues = new Set([
|
|
|
3068
3071
|
'perspective-origin',
|
|
3069
3072
|
'picture-in-picture',
|
|
3070
3073
|
'ping',
|
|
3074
|
+
'pixel-10',
|
|
3071
3075
|
'pixel-7',
|
|
3076
|
+
'pixel-8',
|
|
3077
|
+
'pixel-9',
|
|
3078
|
+
'pixel-9-pro-xl',
|
|
3072
3079
|
'pl',
|
|
3073
3080
|
'place-content',
|
|
3074
3081
|
'place-items',
|
|
@@ -3891,7 +3898,9 @@ export const knownContextValues = new Set([
|
|
|
3891
3898
|
'storage',
|
|
3892
3899
|
'storage-bucket',
|
|
3893
3900
|
'storage-buckets',
|
|
3901
|
+
'storage-cookie',
|
|
3894
3902
|
'storage-default',
|
|
3903
|
+
'storage-domstorage',
|
|
3895
3904
|
'storage-items-view.clear-all',
|
|
3896
3905
|
'storage-items-view.delete-selected',
|
|
3897
3906
|
'storage-items-view.refresh',
|
package/package.json
CHANGED