chrome-devtools-frontend 1.0.1574367 → 1.0.1575635
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/.stylelintrc.json +1 -1
- package/AUTHORS +1 -0
- package/docs/contributing/settings-experiments-features.md +5 -2
- package/front_end/core/common/Settings.ts +1 -1
- package/front_end/core/host/InspectorFrontendHostAPI.ts +7 -1
- package/front_end/core/host/InspectorFrontendHostStub.ts +10 -0
- package/front_end/core/host/UserMetrics.ts +15 -0
- package/front_end/core/root/Runtime.ts +119 -39
- package/front_end/core/sdk/CSSMatchedStyles.ts +27 -0
- package/front_end/entrypoints/main/MainImpl.ts +25 -7
- package/front_end/entrypoints/node_app/app/NodeConnectionsPanel.ts +3 -2
- package/front_end/generated/InspectorBackendCommands.ts +37 -0
- package/front_end/generated/protocol-mapping.d.ts +257 -0
- package/front_end/generated/protocol-proxy-api.d.ts +256 -0
- package/front_end/generated/protocol.ts +359 -0
- package/front_end/models/ai_assistance/AiConversation.ts +31 -10
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +1 -0
- package/front_end/models/ai_assistance/agents/AiAgent.ts +29 -5
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +73 -0
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +141 -0
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +3 -3
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +5 -4
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -0
- package/front_end/models/issues_manager/CorsIssue.ts +0 -3
- package/front_end/models/javascript_metadata/NativeFunctions.js +5 -0
- package/front_end/models/live-metrics/LiveMetrics.ts +31 -51
- package/front_end/models/stack_trace/StackTrace.ts +41 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +72 -6
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatInput.ts +24 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +6 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +5 -6
- package/front_end/panels/ai_assistance/components/chatView.css +10 -0
- package/front_end/panels/application/StorageView.ts +3 -3
- package/front_end/panels/application/preloading/components/preloadingDisabledInfobar.css +1 -1
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +32 -16
- package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +1 -1
- package/front_end/panels/console/ConsoleContextSelector.ts +4 -3
- package/front_end/panels/console/ConsoleFormat.ts +31 -2
- package/front_end/panels/console/ConsoleInsightTeaser.ts +6 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +46 -2
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
- package/front_end/panels/elements/StylePropertyTreeElement.ts +63 -0
- package/front_end/panels/elements/StylesSidebarPane.ts +17 -2
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +4 -0
- package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +3 -3
- package/front_end/panels/layer_viewer/Layers3DView.ts +2 -1
- package/front_end/panels/lighthouse/LighthouseStartView.ts +7 -6
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +3 -2
- package/front_end/panels/network/RequestConditionsDrawer.ts +2 -3
- package/front_end/panels/network/SignedExchangeInfoView.ts +3 -4
- package/front_end/panels/network/components/HeaderSectionRow.css +1 -1
- package/front_end/panels/recorder/components/RecordingView.ts +2 -2
- package/front_end/panels/recorder/components/recordingView.css +5 -0
- package/front_end/panels/security/SecurityPanelSidebar.ts +10 -9
- package/front_end/panels/settings/AISettingsTab.ts +2 -1
- package/front_end/panels/settings/KeybindsSettingsTab.ts +3 -5
- package/front_end/panels/settings/SettingsScreen.ts +14 -9
- package/front_end/panels/settings/settings-meta.ts +1 -0
- package/front_end/panels/sources/CallStackSidebarPane.ts +10 -0
- package/front_end/panels/sources/DebuggerPlugin.ts +18 -12
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +4 -3
- package/front_end/panels/sources/SourcesNavigator.ts +2 -2
- package/front_end/panels/sources/SourcesPanel.ts +6 -3
- package/front_end/panels/sources/TabbedEditorContainer.ts +2 -2
- package/front_end/panels/sources/sources-meta.ts +2 -1
- package/front_end/panels/timeline/TimelinePanel.ts +2 -1
- package/front_end/panels/timeline/TimelineUIUtils.ts +2 -2
- package/front_end/panels/timeline/components/DetailsView.ts +7 -7
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -2
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +4 -4
- package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
- package/front_end/panels/whats_new/releaseNoteView.css +1 -1
- package/front_end/panels/whats_new/resources/WNDT.md +6 -6
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js +30 -25
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +30 -21
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js +31 -26
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/package.json +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +45 -44
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/buttons/Button.ts +2 -2
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
- package/front_end/ui/components/panel_feedback/panelFeedback.css +1 -1
- package/front_end/ui/kit/link/Link.ts +31 -0
- package/front_end/ui/legacy/LinkContextMenuProvider.ts +3 -5
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +336 -250
- package/front_end/ui/legacy/inspectorCommon.css +0 -1
- package/front_end/ui/legacy/legacy.ts +0 -4
- package/front_end/ui/visual_logging/KnownContextValues.ts +4 -0
- package/front_end/ui/visual_logging/LoggingDriver.ts +10 -6
- package/mcp/HostBindings.ts +6 -0
- package/package.json +1 -1
- package/front_end/ui/legacy/XElement.ts +0 -41
- package/front_end/ui/legacy/XLink.ts +0 -128
|
@@ -9,6 +9,7 @@ import type * as Common from '../../core/common/common.js';
|
|
|
9
9
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
10
10
|
import type * as Platform from '../../core/platform/platform.js';
|
|
11
11
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
12
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
12
13
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
13
14
|
|
|
14
15
|
import {type LighthouseController, type Preset, Presets, RuntimeSettings} from './LighthouseController.js';
|
|
@@ -87,8 +88,8 @@ export class StartView extends UI.Widget.Widget {
|
|
|
87
88
|
labelEl.textContent = label;
|
|
88
89
|
|
|
89
90
|
if (runtimeSetting.learnMore) {
|
|
90
|
-
const link =
|
|
91
|
-
runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more',
|
|
91
|
+
const link =
|
|
92
|
+
Link.create(runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more', 'learn-more');
|
|
92
93
|
labelEl.append(link);
|
|
93
94
|
}
|
|
94
95
|
parentElement.appendChild(labelEl);
|
|
@@ -111,8 +112,8 @@ export class StartView extends UI.Widget.Widget {
|
|
|
111
112
|
runtimeSetting.setting as Common.Settings.Setting<boolean>, runtimeSetting.description());
|
|
112
113
|
toolbar.appendToolbarItem(control);
|
|
113
114
|
if (runtimeSetting.learnMore) {
|
|
114
|
-
const link =
|
|
115
|
-
runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more',
|
|
115
|
+
const link =
|
|
116
|
+
Link.create(runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more', 'learn-more');
|
|
116
117
|
link.style.margin = '5px';
|
|
117
118
|
control.element.appendChild(link);
|
|
118
119
|
}
|
|
@@ -135,8 +136,8 @@ export class StartView extends UI.Widget.Widget {
|
|
|
135
136
|
control.setTitle(runtimeSetting.description());
|
|
136
137
|
toolbar.appendToolbarItem(control);
|
|
137
138
|
if (runtimeSetting.learnMore) {
|
|
138
|
-
const link =
|
|
139
|
-
runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more',
|
|
139
|
+
const link =
|
|
140
|
+
Link.create(runtimeSetting.learnMore, i18nString(UIStrings.learnMore), 'lighthouse-learn-more', 'learn-more');
|
|
140
141
|
link.style.marginLeft = '5px';
|
|
141
142
|
link.style.display = 'inline-flex';
|
|
142
143
|
link.style.height = 'revert';
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import * as Common from '../../core/common/common.js';
|
|
7
7
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
8
|
import type * as Platform from '../../core/platform/platform.js';
|
|
9
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
9
10
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
10
11
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
11
12
|
|
|
@@ -59,8 +60,8 @@ export class LinearMemoryInspectorPane extends Common.ObjectWrapper.eventMixin<E
|
|
|
59
60
|
|
|
60
61
|
const description = placeholder.createChild('div', 'empty-state-description');
|
|
61
62
|
description.createChild('span').textContent = i18nString(UIStrings.memoryInspectorExplanation);
|
|
62
|
-
const link =
|
|
63
|
-
MEMORY_INSPECTOR_EXPLANATION_URL, i18nString(UIStrings.learnMore), undefined,
|
|
63
|
+
const link =
|
|
64
|
+
Link.create(MEMORY_INSPECTOR_EXPLANATION_URL, i18nString(UIStrings.learnMore), undefined, 'learn-more');
|
|
64
65
|
description.appendChild(link);
|
|
65
66
|
|
|
66
67
|
return placeholder;
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
5
|
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
6
6
|
|
|
7
|
-
import '../../ui/kit/kit.js';
|
|
8
7
|
import '../../ui/legacy/legacy.js';
|
|
9
8
|
import '../../ui/components/tooltips/tooltips.js';
|
|
10
9
|
|
|
@@ -16,6 +15,7 @@ import * as SDK from '../../core/sdk/sdk.js';
|
|
|
16
15
|
import * as Logs from '../../models/logs/logs.js';
|
|
17
16
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
18
17
|
import * as uiI18n from '../../ui/i18n/i18n.js';
|
|
18
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
19
19
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
20
20
|
import {Directives, html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
|
|
21
21
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
@@ -575,8 +575,7 @@ export class RequestConditionsDrawer extends UI.Widget.VBox implements
|
|
|
575
575
|
const titles = content.createChild('div', 'blocked-url-edit-row');
|
|
576
576
|
const label = titles.createChild('label');
|
|
577
577
|
if (Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
|
|
578
|
-
const learnMore =
|
|
579
|
-
PATTERN_API_DOCS_URL, i18nString(UIStrings.learnMore), undefined, undefined, 'learn-more');
|
|
578
|
+
const learnMore = Link.create(PATTERN_API_DOCS_URL, i18nString(UIStrings.learnMore), undefined, 'learn-more');
|
|
580
579
|
learnMore.title = i18nString(UIStrings.learnMoreLabel);
|
|
581
580
|
titles.append('\xA0', learnMore);
|
|
582
581
|
label.textContent = i18nString(UIStrings.textEditPattern);
|
|
@@ -7,7 +7,7 @@ import * as Host from '../../core/host/host.js';
|
|
|
7
7
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
8
|
import type * as SDK from '../../core/sdk/sdk.js';
|
|
9
9
|
import * as Protocol from '../../generated/protocol.js';
|
|
10
|
-
import {Icon} from '../../ui/kit/kit.js';
|
|
10
|
+
import {Icon, Link} from '../../ui/kit/kit.js';
|
|
11
11
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
12
12
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
13
13
|
|
|
@@ -146,9 +146,8 @@ export class SignedExchangeInfoView extends UI.Widget.VBox {
|
|
|
146
146
|
|
|
147
147
|
const titleElement = document.createDocumentFragment();
|
|
148
148
|
titleElement.createChild('div', 'header-name').textContent = i18nString(UIStrings.signedHttpExchange);
|
|
149
|
-
const learnMoreNode =
|
|
150
|
-
'https://github.com/WICG/webpackage', i18nString(UIStrings.learnmore), 'header-toggle',
|
|
151
|
-
'learn-more');
|
|
149
|
+
const learnMoreNode = Link.create(
|
|
150
|
+
'https://github.com/WICG/webpackage', i18nString(UIStrings.learnmore), 'header-toggle', 'learn-more');
|
|
152
151
|
titleElement.appendChild(learnMoreNode);
|
|
153
152
|
const headerCategory = new Category(root, titleElement);
|
|
154
153
|
if (signedExchangeInfo.header) {
|
|
@@ -454,7 +454,7 @@ function renderTextEditor(input: ViewInput, output: ViewOutput): Lit.TemplateRes
|
|
|
454
454
|
// clang-format off
|
|
455
455
|
return html`
|
|
456
456
|
<div class="text-editor" jslog=${VisualLogging.textField().track({change: true})}>
|
|
457
|
-
<devtools-text-editor .state=${input.editorState} ${Lit.Directives.ref(
|
|
457
|
+
<devtools-text-editor .state=${input.editorState} ${Lit.Directives.ref(editor => {
|
|
458
458
|
if (!editor || !(editor instanceof TextEditor.TextEditor.TextEditor)) {
|
|
459
459
|
return;
|
|
460
460
|
}
|
|
@@ -645,7 +645,7 @@ function renderSections(input: ViewInput): Lit.LitTemplate {
|
|
|
645
645
|
)}
|
|
646
646
|
</div>
|
|
647
647
|
`;
|
|
648
|
-
|
|
648
|
+
// clang-format on
|
|
649
649
|
}
|
|
650
650
|
|
|
651
651
|
function renderHeader(input: ViewInput): Lit.LitTemplate {
|
|
@@ -323,18 +323,19 @@ export class SecurityPanelSidebar extends UI.Widget.VBox {
|
|
|
323
323
|
const icon = isOverviewElement ?
|
|
324
324
|
getSecurityStateIconForOverview(securityState, `lock-icon lock-icon-${securityState}`) :
|
|
325
325
|
getSecurityStateIconForDetailedView(securityState, `security-property security-property-${securityState}`);
|
|
326
|
-
const elementTitle = isOverviewElement ? ((): Element => {
|
|
327
|
-
const title = document.createElement('span');
|
|
328
|
-
title.classList.add('title');
|
|
329
|
-
title.textContent = i18nString(UIStrings.overview);
|
|
330
|
-
return title;
|
|
331
|
-
})() : createHighlightedUrl(element.origin() ?? Platform.DevToolsPath.EmptyUrlString, securityState);
|
|
332
326
|
|
|
333
327
|
element.setLeadingIcons([icon]);
|
|
334
|
-
|
|
335
|
-
|
|
328
|
+
|
|
329
|
+
if (isOverviewElement) {
|
|
330
|
+
element.title = i18nString(UIStrings.overview);
|
|
331
|
+
} else {
|
|
332
|
+
const elementTitle =
|
|
333
|
+
createHighlightedUrl(element.origin() ?? Platform.DevToolsPath.EmptyUrlString, securityState);
|
|
334
|
+
if (element.listItemElement.lastChild) {
|
|
335
|
+
element.listItemElement.removeChild(element.listItemElement.lastChild);
|
|
336
|
+
}
|
|
337
|
+
element.listItemElement.appendChild(elementTitle);
|
|
336
338
|
}
|
|
337
|
-
element.listItemElement.appendChild(elementTitle);
|
|
338
339
|
}
|
|
339
340
|
}
|
|
340
341
|
}
|
|
@@ -482,7 +482,8 @@ export class AISettingsTab extends UI.Widget.VBox {
|
|
|
482
482
|
|
|
483
483
|
if (this.#aiAssistanceSetting) {
|
|
484
484
|
const aiAssistanceData: AiSettingParams = {
|
|
485
|
-
settingName: i18n.i18n.lockedString(
|
|
485
|
+
settingName: i18n.i18n.lockedString(
|
|
486
|
+
AiAssistanceModel.AiUtils.isGeminiBranding() ? 'Gemini in Chrome DevTools' : 'AI assistance'),
|
|
486
487
|
iconName: AiAssistanceModel.AiUtils.getIconName(),
|
|
487
488
|
settingDescription: this.#getAiAssistanceSettingDescription(),
|
|
488
489
|
enableSettingText: i18nString(UIStrings.enableAiAssistance),
|
|
@@ -3,14 +3,12 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
5
|
|
|
6
|
-
import '../../ui/kit/kit.js';
|
|
7
|
-
|
|
8
6
|
import * as Common from '../../core/common/common.js';
|
|
9
7
|
import * as Host from '../../core/host/host.js';
|
|
10
8
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
11
9
|
import * as Platform from '../../core/platform/platform.js';
|
|
12
10
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
13
|
-
import {createIcon, type Icon} from '../../ui/kit/kit.js';
|
|
11
|
+
import {createIcon, type Icon, Link} from '../../ui/kit/kit.js';
|
|
14
12
|
import * as SettingsUI from '../../ui/legacy/components/settings_ui/settings_ui.js';
|
|
15
13
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
16
14
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
@@ -146,9 +144,9 @@ export class KeybindsSettingsTab extends UI.Widget.VBox implements UI.ListContro
|
|
|
146
144
|
UI.ARIAUtils.setLabel(this.list.element, i18nString(UIStrings.keyboardShortcutsList));
|
|
147
145
|
const footer = document.createElement('div');
|
|
148
146
|
footer.classList.add('keybinds-footer');
|
|
149
|
-
const docsLink =
|
|
147
|
+
const docsLink = Link.create(
|
|
150
148
|
'https://developer.chrome.com/docs/devtools/shortcuts/', i18nString(UIStrings.FullListOfDevtoolsKeyboard),
|
|
151
|
-
undefined,
|
|
149
|
+
undefined, 'learn-more');
|
|
152
150
|
docsLink.classList.add('docs-link');
|
|
153
151
|
footer.appendChild(docsLink);
|
|
154
152
|
const restoreDefaultShortcutsButton =
|
|
@@ -14,7 +14,7 @@ import * as Root from '../../core/root/root.js';
|
|
|
14
14
|
import * as GreenDev from '../../models/greendev/greendev.js';
|
|
15
15
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
16
16
|
import * as UIHelpers from '../../ui/helpers/helpers.js';
|
|
17
|
-
import {type Card, createIcon} from '../../ui/kit/kit.js';
|
|
17
|
+
import {type Card, createIcon, Link} from '../../ui/kit/kit.js';
|
|
18
18
|
import * as SettingsUI from '../../ui/legacy/components/settings_ui/settings_ui.js';
|
|
19
19
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
20
20
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -383,7 +383,7 @@ export class GenericSettingsTab extends UI.Widget.VBox implements SettingsTab {
|
|
|
383
383
|
|
|
384
384
|
export class ExperimentsSettingsTab extends UI.Widget.VBox implements SettingsTab {
|
|
385
385
|
#experimentsSection: Card|undefined;
|
|
386
|
-
private readonly experimentToControl = new Map<Root.Runtime.Experiment, HTMLElement>();
|
|
386
|
+
private readonly experimentToControl = new Map<Root.Runtime.Experiment|Root.Runtime.HostExperiment, HTMLElement>();
|
|
387
387
|
private readonly containerElement: HTMLElement;
|
|
388
388
|
|
|
389
389
|
constructor() {
|
|
@@ -452,12 +452,16 @@ export class ExperimentsSettingsTab extends UI.Widget.VBox implements SettingsTa
|
|
|
452
452
|
return subsection;
|
|
453
453
|
}
|
|
454
454
|
|
|
455
|
-
private createExperimentCheckbox(experiment: Root.Runtime.Experiment):
|
|
455
|
+
private createExperimentCheckbox(experiment: Root.Runtime.Experiment|Root.Runtime.HostExperiment):
|
|
456
|
+
HTMLParagraphElement {
|
|
456
457
|
const checkbox =
|
|
457
458
|
UI.UIUtils.CheckboxLabel.createWithStringLiteral(experiment.title, experiment.isEnabled(), experiment.name);
|
|
458
459
|
checkbox.classList.add('experiment-label');
|
|
459
460
|
checkbox.name = experiment.name;
|
|
460
461
|
function listener(): void {
|
|
462
|
+
if (experiment instanceof Root.Runtime.HostExperiment) {
|
|
463
|
+
Host.InspectorFrontendHost.InspectorFrontendHostInstance.setChromeFlag(experiment.aboutFlag, checkbox.checked);
|
|
464
|
+
}
|
|
461
465
|
experiment.setEnabled(checkbox.checked);
|
|
462
466
|
Host.userMetrics.experimentChanged(experiment.name, experiment.isEnabled());
|
|
463
467
|
UI.InspectorView.InspectorView.instance().displayReloadRequiredWarning(
|
|
@@ -487,8 +491,7 @@ export class ExperimentsSettingsTab extends UI.Widget.VBox implements SettingsTa
|
|
|
487
491
|
}
|
|
488
492
|
|
|
489
493
|
if (experiment.feedbackLink) {
|
|
490
|
-
const link =
|
|
491
|
-
experiment.feedbackLink, undefined, undefined, undefined, `${experiment.name}-feedback`);
|
|
494
|
+
const link = Link.create(experiment.feedbackLink, undefined, undefined, `${experiment.name}-feedback`);
|
|
492
495
|
link.textContent = i18nString(UIStrings.sendFeedback);
|
|
493
496
|
link.classList.add('feedback-link');
|
|
494
497
|
|
|
@@ -499,7 +502,7 @@ export class ExperimentsSettingsTab extends UI.Widget.VBox implements SettingsTa
|
|
|
499
502
|
}
|
|
500
503
|
|
|
501
504
|
highlightObject(experiment: Object): void {
|
|
502
|
-
if (experiment instanceof Root.Runtime.Experiment) {
|
|
505
|
+
if (experiment instanceof Root.Runtime.Experiment || experiment instanceof Root.Runtime.HostExperiment) {
|
|
503
506
|
const element = this.experimentToControl.get(experiment);
|
|
504
507
|
if (element) {
|
|
505
508
|
PanelUtils.highlightElement(element);
|
|
@@ -534,10 +537,12 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
|
|
|
534
537
|
return false;
|
|
535
538
|
}
|
|
536
539
|
}
|
|
537
|
-
export class Revealer implements
|
|
538
|
-
|
|
540
|
+
export class Revealer implements
|
|
541
|
+
Common.Revealer.Revealer<Root.Runtime.Experiment|Root.Runtime.HostExperiment|Common.Settings.Setting<unknown>> {
|
|
542
|
+
async reveal(object: Root.Runtime.Experiment|Root.Runtime.HostExperiment|Common.Settings.Setting<unknown>):
|
|
543
|
+
Promise<void> {
|
|
539
544
|
const context = UI.Context.Context.instance();
|
|
540
|
-
if (object instanceof Root.Runtime.Experiment) {
|
|
545
|
+
if (object instanceof Root.Runtime.Experiment || object instanceof Root.Runtime.HostExperiment) {
|
|
541
546
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.bringToFront();
|
|
542
547
|
await SettingsScreen.showSettingsScreen({name: 'experiments'});
|
|
543
548
|
const experimentsSettingsTab = context.flavor(ExperimentsSettingsTab);
|
|
@@ -38,6 +38,7 @@ import type * as Protocol from '../../generated/protocol.js';
|
|
|
38
38
|
import * as Bindings from '../../models/bindings/bindings.js';
|
|
39
39
|
import * as Persistence from '../../models/persistence/persistence.js';
|
|
40
40
|
import * as SourceMapScopes from '../../models/source_map_scopes/source_map_scopes.js';
|
|
41
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
41
42
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
42
43
|
import {Icon} from '../../ui/kit/kit.js';
|
|
43
44
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -243,6 +244,7 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
243
244
|
this.showMoreMessageElement.classList.add('hidden');
|
|
244
245
|
this.items.replaceAll([]);
|
|
245
246
|
UI.Context.Context.instance().setFlavor(SDK.DebuggerModel.CallFrame, null);
|
|
247
|
+
UI.Context.Context.instance().setFlavor(StackTrace.StackTrace.DebuggableFrameFlavor, null);
|
|
246
248
|
return;
|
|
247
249
|
}
|
|
248
250
|
|
|
@@ -432,6 +434,14 @@ export class CallStackSidebarPane extends UI.View.SimpleView implements UI.Conte
|
|
|
432
434
|
if (debuggerCallFrame && oldItem !== item) {
|
|
433
435
|
debuggerCallFrame.debuggerModel.setSelectedCallFrame(debuggerCallFrame);
|
|
434
436
|
UI.Context.Context.instance().setFlavor(SDK.DebuggerModel.CallFrame, debuggerCallFrame);
|
|
437
|
+
UI.Context.Context.instance().setFlavor(
|
|
438
|
+
StackTrace.StackTrace.DebuggableFrameFlavor,
|
|
439
|
+
StackTrace.StackTrace.DebuggableFrameFlavor.for({
|
|
440
|
+
uiSourceCode: item.uiLocation?.uiSourceCode,
|
|
441
|
+
line: uiLocation.lineNumber,
|
|
442
|
+
column: uiLocation.columnNumber ?? -1,
|
|
443
|
+
sdkFrame: debuggerCallFrame,
|
|
444
|
+
}));
|
|
435
445
|
if (oldItem) {
|
|
436
446
|
this.refreshItem(oldItem);
|
|
437
447
|
}
|
|
@@ -15,6 +15,7 @@ import * as Bindings from '../../models/bindings/bindings.js';
|
|
|
15
15
|
import * as Breakpoints from '../../models/breakpoints/breakpoints.js';
|
|
16
16
|
import * as Formatter from '../../models/formatter/formatter.js';
|
|
17
17
|
import * as SourceMapScopes from '../../models/source_map_scopes/source_map_scopes.js';
|
|
18
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
18
19
|
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
19
20
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
20
21
|
import * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
|
|
@@ -249,7 +250,8 @@ export class DebuggerPlugin extends Plugin {
|
|
|
249
250
|
this.ignoreListCallback = this.showIgnoreListInfobarIfNeeded.bind(this);
|
|
250
251
|
Workspace.IgnoreListManager.IgnoreListManager.instance().addChangeListener(this.ignoreListCallback);
|
|
251
252
|
|
|
252
|
-
UI.Context.Context.instance().addFlavorChangeListener(
|
|
253
|
+
UI.Context.Context.instance().addFlavorChangeListener(
|
|
254
|
+
StackTrace.StackTrace.DebuggableFrameFlavor, this.callFrameChanged, this);
|
|
253
255
|
this.liveLocationPool = new Bindings.LiveLocation.LiveLocationPool();
|
|
254
256
|
|
|
255
257
|
this.updateScriptFiles();
|
|
@@ -649,11 +651,11 @@ export class DebuggerPlugin extends Plugin {
|
|
|
649
651
|
return null;
|
|
650
652
|
}
|
|
651
653
|
|
|
652
|
-
const
|
|
653
|
-
|
|
654
|
-
if (!selectedCallFrame) {
|
|
654
|
+
const debuggableFrame = UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
655
|
+
if (!debuggableFrame) {
|
|
655
656
|
return null;
|
|
656
657
|
}
|
|
658
|
+
const selectedCallFrame = debuggableFrame.sdkFrame;
|
|
657
659
|
|
|
658
660
|
let textPosition = editor.editor.posAtCoords(event);
|
|
659
661
|
if (!textPosition) {
|
|
@@ -729,8 +731,9 @@ export class DebuggerPlugin extends Plugin {
|
|
|
729
731
|
}
|
|
730
732
|
objectPopoverHelper =
|
|
731
733
|
await ObjectUI.ObjectPopoverHelper.ObjectPopoverHelper.buildObjectPopover(result.object, popover);
|
|
732
|
-
const potentiallyUpdatedCallFrame =
|
|
733
|
-
|
|
734
|
+
const potentiallyUpdatedCallFrame =
|
|
735
|
+
UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
736
|
+
if (!objectPopoverHelper || debuggableFrame !== potentiallyUpdatedCallFrame) {
|
|
734
737
|
debuggerModel.runtimeModel().releaseObjectGroup('popover');
|
|
735
738
|
if (objectPopoverHelper) {
|
|
736
739
|
objectPopoverHelper.dispose();
|
|
@@ -988,10 +991,11 @@ export class DebuggerPlugin extends Plugin {
|
|
|
988
991
|
if (!executionContext) {
|
|
989
992
|
return null;
|
|
990
993
|
}
|
|
991
|
-
const
|
|
992
|
-
if (!
|
|
994
|
+
const debuggableFrame = UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
995
|
+
if (!debuggableFrame) {
|
|
993
996
|
return null;
|
|
994
997
|
}
|
|
998
|
+
const callFrame = debuggableFrame.sdkFrame;
|
|
995
999
|
const url = this.uiSourceCode.url();
|
|
996
1000
|
|
|
997
1001
|
const rawLocationToEditorOffset: (location: SDK.DebuggerModel.Location|null) => Promise<number|null> = location =>
|
|
@@ -1058,10 +1062,11 @@ export class DebuggerPlugin extends Plugin {
|
|
|
1058
1062
|
if (!executionContext || !this.editor) {
|
|
1059
1063
|
return;
|
|
1060
1064
|
}
|
|
1061
|
-
const
|
|
1062
|
-
if (!
|
|
1065
|
+
const debuggableFrame = UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
1066
|
+
if (!debuggableFrame) {
|
|
1063
1067
|
return;
|
|
1064
1068
|
}
|
|
1069
|
+
const callFrame = debuggableFrame.sdkFrame;
|
|
1065
1070
|
const start = callFrame.functionLocation() || callFrame.location();
|
|
1066
1071
|
const debuggerModel = callFrame.debuggerModel;
|
|
1067
1072
|
|
|
@@ -1651,10 +1656,11 @@ export class DebuggerPlugin extends Plugin {
|
|
|
1651
1656
|
|
|
1652
1657
|
private async callFrameChanged(): Promise<void> {
|
|
1653
1658
|
this.liveLocationPool.disposeAll();
|
|
1654
|
-
const
|
|
1655
|
-
if (!
|
|
1659
|
+
const debuggableFrame = UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
1660
|
+
if (!debuggableFrame) {
|
|
1656
1661
|
this.setExecutionLocation(null);
|
|
1657
1662
|
} else {
|
|
1663
|
+
const callFrame = debuggableFrame.sdkFrame;
|
|
1658
1664
|
await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
|
|
1659
1665
|
callFrame.location(), async (liveLocation: Bindings.LiveLocation.LiveLocation) => {
|
|
1660
1666
|
const uiLocation = await liveLocation.uiLocation();
|
|
@@ -34,6 +34,7 @@ import * as i18n from '../../core/i18n/i18n.js';
|
|
|
34
34
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
35
35
|
import * as Protocol from '../../generated/protocol.js';
|
|
36
36
|
import * as SourceMapScopes from '../../models/source_map_scopes/source_map_scopes.js';
|
|
37
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
37
38
|
import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
|
|
38
39
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
39
40
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -93,7 +94,7 @@ export class ScopeChainSidebarPane extends UI.Widget.VBox implements UI.ContextF
|
|
|
93
94
|
this.infoElement = document.createElement('div');
|
|
94
95
|
this.infoElement.className = 'gray-info-message';
|
|
95
96
|
this.infoElement.tabIndex = -1;
|
|
96
|
-
this.flavorChanged(UI.Context.Context.instance().flavor(
|
|
97
|
+
this.flavorChanged(UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor));
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
static instance(): ScopeChainSidebarPane {
|
|
@@ -103,7 +104,7 @@ export class ScopeChainSidebarPane extends UI.Widget.VBox implements UI.ContextF
|
|
|
103
104
|
return scopeChainSidebarPaneInstance;
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
flavorChanged(callFrame:
|
|
107
|
+
flavorChanged(callFrame: StackTrace.StackTrace.DebuggableFrameFlavor|null): void {
|
|
107
108
|
this.#scopeChainModel?.dispose();
|
|
108
109
|
this.#scopeChainModel = null;
|
|
109
110
|
|
|
@@ -116,7 +117,7 @@ export class ScopeChainSidebarPane extends UI.Widget.VBox implements UI.ContextF
|
|
|
116
117
|
// is happening (see https://crbug.com/1162416).
|
|
117
118
|
this.infoElement.textContent = i18nString(UIStrings.loading);
|
|
118
119
|
|
|
119
|
-
this.#scopeChainModel = new SourceMapScopes.ScopeChainModel.ScopeChainModel(callFrame);
|
|
120
|
+
this.#scopeChainModel = new SourceMapScopes.ScopeChainModel.ScopeChainModel(callFrame.sdkFrame);
|
|
120
121
|
this.#scopeChainModel.addEventListener(
|
|
121
122
|
SourceMapScopes.ScopeChainModel.Events.SCOPE_CHAIN_UPDATED, event => this.buildScopeTreeOutline(event.data),
|
|
122
123
|
this);
|
|
@@ -16,6 +16,7 @@ import * as Persistence from '../../models/persistence/persistence.js';
|
|
|
16
16
|
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
17
17
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
18
18
|
import * as uiI18n from '../../ui/i18n/i18n.js';
|
|
19
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
19
20
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
20
21
|
import * as Snippets from '../snippets/snippets.js';
|
|
21
22
|
|
|
@@ -188,8 +189,7 @@ export class FilesNavigatorView extends NavigatorView {
|
|
|
188
189
|
this.setPlaceholder(placeholder);
|
|
189
190
|
placeholder.link = 'https://developer.chrome.com/docs/devtools/workspaces/' as Platform.DevToolsPath.UrlString;
|
|
190
191
|
|
|
191
|
-
const link =
|
|
192
|
-
UI.XLink.XLink.create('https://goo.gle/devtools-automatic-workspace-folders', 'com.chrome.devtools.json');
|
|
192
|
+
const link = Link.create('https://goo.gle/devtools-automatic-workspace-folders', 'com.chrome.devtools.json');
|
|
193
193
|
this.#automaticFileSystemNudge =
|
|
194
194
|
uiI18n.getFormatLocalizedString(str_, UIStrings.automaticWorkspaceNudge, {PH1: link});
|
|
195
195
|
this.#automaticFileSystemNudge.classList.add('automatic-file-system-nudge');
|
|
@@ -41,6 +41,7 @@ import * as Protocol from '../../generated/protocol.js';
|
|
|
41
41
|
import * as Badges from '../../models/badges/badges.js';
|
|
42
42
|
import * as Bindings from '../../models/bindings/bindings.js';
|
|
43
43
|
import * as Breakpoints from '../../models/breakpoints/breakpoints.js';
|
|
44
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
44
45
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
45
46
|
import * as PanelCommon from '../../panels/common/common.js';
|
|
46
47
|
import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
|
|
@@ -325,7 +326,8 @@ export class SourcesPanel extends UI.Panel.Panel implements
|
|
|
325
326
|
.moduleSetting('breakpoints-active')
|
|
326
327
|
.addChangeListener(this.breakpointsActiveStateChanged, this);
|
|
327
328
|
UI.Context.Context.instance().addFlavorChangeListener(SDK.Target.Target, this.onCurrentTargetChanged, this);
|
|
328
|
-
UI.Context.Context.instance().addFlavorChangeListener(
|
|
329
|
+
UI.Context.Context.instance().addFlavorChangeListener(
|
|
330
|
+
StackTrace.StackTrace.DebuggableFrameFlavor, this.callFrameChanged, this);
|
|
329
331
|
SDK.TargetManager.TargetManager.instance().addModelListener(
|
|
330
332
|
SDK.DebuggerModel.DebuggerModel, SDK.DebuggerModel.Events.DebuggerWasEnabled, this.debuggerWasEnabled, this);
|
|
331
333
|
SDK.TargetManager.TargetManager.instance().addModelListener(
|
|
@@ -696,16 +698,17 @@ export class SourcesPanel extends UI.Panel.Panel implements
|
|
|
696
698
|
}
|
|
697
699
|
|
|
698
700
|
private async callFrameChanged(): Promise<void> {
|
|
699
|
-
const callFrame = UI.Context.Context.instance().flavor(
|
|
701
|
+
const callFrame = UI.Context.Context.instance().flavor(StackTrace.StackTrace.DebuggableFrameFlavor);
|
|
700
702
|
if (!callFrame) {
|
|
701
703
|
return;
|
|
702
704
|
}
|
|
703
705
|
if (this.executionLineLocation) {
|
|
704
706
|
this.executionLineLocation.dispose();
|
|
705
707
|
}
|
|
708
|
+
// TODO(crbug.com/465879478): Remove LiveLocation once `DebuggableFrameFlavor` is backed by a "real" StackTrace.
|
|
706
709
|
this.executionLineLocation =
|
|
707
710
|
await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createCallFrameLiveLocation(
|
|
708
|
-
callFrame.location(), this.executionLineChanged.bind(this), this.liveLocationPool);
|
|
711
|
+
callFrame.sdkFrame.location(), this.executionLineChanged.bind(this), this.liveLocationPool);
|
|
709
712
|
}
|
|
710
713
|
|
|
711
714
|
private async updateDebuggerButtonsAndStatus(): Promise<void> {
|
|
@@ -11,7 +11,7 @@ import * as Workspace from '../../models/workspace/workspace.js';
|
|
|
11
11
|
import type * as CodeMirror from '../../third_party/codemirror.next/codemirror.next.js';
|
|
12
12
|
import * as Tooltips from '../../ui/components/tooltips/tooltips.js';
|
|
13
13
|
import * as uiI18n from '../../ui/i18n/i18n.js';
|
|
14
|
-
import {Icon} from '../../ui/kit/kit.js';
|
|
14
|
+
import {Icon, Link} from '../../ui/kit/kit.js';
|
|
15
15
|
import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
|
|
16
16
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
17
17
|
import {html} from '../../ui/lit/lit.js';
|
|
@@ -639,7 +639,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
|
|
|
639
639
|
tooltip.append(uiI18n.getFormatLocalizedString(
|
|
640
640
|
str_, UIStrings.changesWereNotSavedToFileSystemToSaveAddFolderToWorkspace, {PH1: link}));
|
|
641
641
|
} else {
|
|
642
|
-
const link =
|
|
642
|
+
const link = Link.create('https://developer.chrome.com/docs/devtools/workspaces/', 'Workspace');
|
|
643
643
|
tooltip.append(uiI18n.getFormatLocalizedString(
|
|
644
644
|
str_, UIStrings.changesWereNotSavedToFileSystemToSaveSetUpYourWorkspace, {PH1: link}));
|
|
645
645
|
}
|
|
@@ -8,6 +8,7 @@ import * as i18n from '../../core/i18n/i18n.js';
|
|
|
8
8
|
import * as Root from '../../core/root/root.js';
|
|
9
9
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
10
10
|
import * as Breakpoints from '../../models/breakpoints/breakpoints.js';
|
|
11
|
+
import * as StackTrace from '../../models/stack_trace/stack_trace.js';
|
|
11
12
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
12
13
|
import * as ObjectUI from '../../ui/legacy/components/object_ui/object_ui.js';
|
|
13
14
|
import * as QuickOpen from '../../ui/legacy/components/quick_open/quick_open.js';
|
|
@@ -1984,7 +1985,7 @@ UI.Context.registerListener({
|
|
|
1984
1985
|
|
|
1985
1986
|
UI.Context.registerListener({
|
|
1986
1987
|
contextTypes() {
|
|
1987
|
-
return [
|
|
1988
|
+
return [StackTrace.StackTrace.DebuggableFrameFlavor];
|
|
1988
1989
|
},
|
|
1989
1990
|
async loadListener() {
|
|
1990
1991
|
const Sources = await loadSourcesModule();
|
|
@@ -56,6 +56,7 @@ import * as Adorners from '../../ui/components/adorners/adorners.js';
|
|
|
56
56
|
import * as Dialogs from '../../ui/components/dialogs/dialogs.js';
|
|
57
57
|
import * as LegacyWrapper from '../../ui/components/legacy_wrapper/legacy_wrapper.js';
|
|
58
58
|
import * as Snackbars from '../../ui/components/snackbars/snackbars.js';
|
|
59
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
59
60
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
60
61
|
import * as SettingsUI from '../../ui/legacy/components/settings_ui/settings_ui.js';
|
|
61
62
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -1340,7 +1341,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
|
|
|
1340
1341
|
const thirdPartyCheckbox =
|
|
1341
1342
|
this.createSettingCheckbox(this.#thirdPartyTracksSetting, i18nString(UIStrings.showDataAddedByExtensions));
|
|
1342
1343
|
|
|
1343
|
-
const localLink =
|
|
1344
|
+
const localLink = Link.create(
|
|
1344
1345
|
'https://developer.chrome.com/docs/devtools/performance/extension', i18nString(UIStrings.learnMore));
|
|
1345
1346
|
// Has to be done in JS because the element is inserted into the
|
|
1346
1347
|
// checkbox's shadow DOM so any styling into timelinePanel.css would
|
|
@@ -50,6 +50,7 @@ import * as CodeHighlighter from '../../ui/components/code_highlighter/code_high
|
|
|
50
50
|
// eslint-disable-next-line @devtools/es-modules-import
|
|
51
51
|
import codeHighlighterStyles from '../../ui/components/code_highlighter/codeHighlighter.css.js';
|
|
52
52
|
import * as uiI18n from '../../ui/i18n/i18n.js';
|
|
53
|
+
import {Link} from '../../ui/kit/kit.js';
|
|
53
54
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
54
55
|
// eslint-disable-next-line @devtools/es-modules-import
|
|
55
56
|
import imagePreviewStyles from '../../ui/legacy/components/utils/imagePreview.css.js';
|
|
@@ -833,8 +834,7 @@ export class TimelineUIUtils {
|
|
|
833
834
|
}
|
|
834
835
|
|
|
835
836
|
const html = UI.Fragment.html`<div>${
|
|
836
|
-
|
|
837
|
-
link, i18nString(UIStrings.learnMore), undefined, undefined, 'learn-more')} about ${name}.</div>`;
|
|
837
|
+
Link.create(link, i18nString(UIStrings.learnMore), undefined, 'learn-more')} about ${name}.</div>`;
|
|
838
838
|
return html as HTMLElement;
|
|
839
839
|
}
|
|
840
840
|
|
|
@@ -8,7 +8,7 @@ import * as Platform from '../../../core/platform/platform.js';
|
|
|
8
8
|
import type * as Protocol from '../../../generated/protocol.js';
|
|
9
9
|
import * as Trace from '../../../models/trace/trace.js';
|
|
10
10
|
import * as uiI18n from '../../../ui/i18n/i18n.js';
|
|
11
|
-
import
|
|
11
|
+
import {Link} from '../../../ui/kit/kit.js';
|
|
12
12
|
|
|
13
13
|
// *********************************************************************
|
|
14
14
|
// At the moment this file consists of helpers to aid in the rendering
|
|
@@ -84,9 +84,9 @@ export function buildWarningElementsForEvent(
|
|
|
84
84
|
const span = document.createElement('span');
|
|
85
85
|
switch (warning) {
|
|
86
86
|
case 'FORCED_REFLOW': {
|
|
87
|
-
const forcedReflowLink =
|
|
87
|
+
const forcedReflowLink = Link.create(
|
|
88
88
|
'https://developers.google.com/web/fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing#avoid-forced-synchronous-layouts',
|
|
89
|
-
i18nString(UIStrings.forcedReflow), undefined,
|
|
89
|
+
i18nString(UIStrings.forcedReflow), undefined, 'forced-reflow');
|
|
90
90
|
span.appendChild(
|
|
91
91
|
uiI18n.getFormatLocalizedString(str_, UIStrings.sIsALikelyPerformanceBottleneck, {PH1: forcedReflowLink}));
|
|
92
92
|
break;
|
|
@@ -102,16 +102,16 @@ export function buildWarningElementsForEvent(
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
case 'LONG_TASK': {
|
|
105
|
-
const longTaskLink =
|
|
106
|
-
'https://web.dev/optimize-long-tasks/', i18nString(UIStrings.longTask), undefined,
|
|
105
|
+
const longTaskLink = Link.create(
|
|
106
|
+
'https://web.dev/optimize-long-tasks/', i18nString(UIStrings.longTask), undefined, 'long-tasks');
|
|
107
107
|
span.appendChild(uiI18n.getFormatLocalizedString(
|
|
108
108
|
str_, UIStrings.sTookS,
|
|
109
109
|
{PH1: longTaskLink, PH2: i18n.TimeUtilities.millisToString((duration || 0), true)}));
|
|
110
110
|
break;
|
|
111
111
|
}
|
|
112
112
|
case 'LONG_INTERACTION': {
|
|
113
|
-
const longInteractionINPLink =
|
|
114
|
-
'https://web.dev/inp', i18nString(UIStrings.longInteractionINP), undefined,
|
|
113
|
+
const longInteractionINPLink =
|
|
114
|
+
Link.create('https://web.dev/inp', i18nString(UIStrings.longInteractionINP), undefined, 'long-interaction');
|
|
115
115
|
span.appendChild(uiI18n.getFormatLocalizedString(
|
|
116
116
|
str_, UIStrings.sIsLikelyPoorPageResponsiveness, {PH1: longInteractionINPLink}));
|
|
117
117
|
break;
|