chrome-devtools-frontend 1.0.1571573 → 1.0.1573331
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/front_end/Images/geminiInDevTools.png +0 -0
- package/front_end/Images/geminiInDevTools_2x.png +0 -0
- package/front_end/Images/src/database-off.svg +1 -0
- package/front_end/Images/src/lock-person.svg +1 -1
- package/front_end/core/common/Debouncer.ts +10 -1
- package/front_end/core/common/SettingRegistration.ts +1 -1
- package/front_end/core/host/AidaClient.ts +8 -0
- package/front_end/core/host/InspectorFrontendHostAPI.ts +0 -6
- package/front_end/core/host/UserMetrics.ts +0 -30
- package/front_end/core/root/ExperimentNames.ts +30 -0
- package/front_end/core/root/Runtime.ts +12 -27
- package/front_end/core/root/root.ts +2 -0
- package/front_end/core/sdk/CSSModel.ts +36 -13
- package/front_end/core/sdk/CSSProperty.ts +1 -1
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +9 -0
- package/front_end/core/sdk/CookieModel.ts +2 -1
- package/front_end/core/sdk/DOMModel.ts +1 -1
- package/front_end/core/sdk/DebuggerModel.ts +1 -1
- package/front_end/core/sdk/IsolateManager.ts +0 -7
- package/front_end/core/sdk/OverlayModel.ts +1 -1
- package/front_end/core/sdk/SourceMap.ts +1 -1
- package/front_end/devtools_compatibility.js +0 -6
- package/front_end/entrypoints/main/MainImpl.ts +34 -25
- package/front_end/entrypoints/main/main-meta.ts +1 -1
- package/front_end/generated/SupportedCSSProperties.js +4 -8
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +0 -180
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +7 -7
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +4 -4
- package/front_end/models/ai_assistance/ai_assistance.ts +0 -2
- package/front_end/models/breakpoints/BreakpointManager.ts +3 -3
- package/front_end/models/issues_manager/ContrastCheckTrigger.ts +2 -2
- package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
- package/front_end/models/trace/EventsSerializer.ts +5 -1
- package/front_end/models/trace/types/TraceEvents.ts +4 -0
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +1 -1
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +1 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +8 -63
- package/front_end/panels/ai_assistance/PatchWidget.ts +3 -4
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +1 -1
- package/front_end/panels/ai_assistance/aiAssistancePanel.css +0 -16
- package/front_end/panels/ai_assistance/ai_assistance.ts +0 -1
- package/front_end/panels/ai_assistance/components/ChatView.ts +123 -108
- package/front_end/panels/ai_assistance/components/PerformanceAgentMarkdownRenderer.ts +1 -145
- package/front_end/panels/application/AppManifestView.ts +5 -5
- package/front_end/panels/application/DeviceBoundSessionsModel.ts +55 -4
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +46 -1
- package/front_end/panels/application/FrameDetailsView.ts +10 -10
- package/front_end/panels/application/components/BackForwardCacheView.ts +6 -8
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +4 -3
- package/front_end/panels/application/components/ProtocolHandlersView.ts +5 -6
- package/front_end/panels/application/components/ReportsGrid.ts +8 -9
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +5 -4
- package/front_end/panels/application/components/TrustTokensView.ts +4 -6
- package/front_end/panels/application/preloading/PreloadingView.ts +9 -8
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +237 -230
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +3 -2
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +6 -10
- package/front_end/panels/application/resourcesSidebar.css +8 -0
- package/front_end/panels/autofill/AutofillView.ts +4 -3
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +1 -1
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +35 -4
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +2 -2
- package/front_end/panels/common/BadgeNotification.ts +18 -14
- package/front_end/panels/common/GdpSignUpDialog.ts +5 -6
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +192 -0
- package/front_end/panels/common/aiCodeGenerationTeaser.css +16 -1
- package/front_end/panels/common/common.ts +1 -0
- package/front_end/panels/common/geminiRebrandPromoDialog.css +47 -0
- package/front_end/panels/console/ConsoleInsightTeaser.ts +3 -3
- package/front_end/panels/console/ErrorStackParser.ts +11 -16
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
- package/front_end/panels/elements/ComputedStyleModel.ts +7 -54
- package/front_end/panels/elements/ElementsPanel.ts +33 -6
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.ts +16 -8
- package/front_end/panels/elements/StylePropertyTreeElement.ts +67 -32
- package/front_end/panels/elements/StylesSidebarPane.ts +28 -11
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +3 -2
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +3 -2
- package/front_end/panels/elements/elements-meta.ts +1 -1
- package/front_end/panels/explain/components/ConsoleInsight.ts +7 -7
- package/front_end/panels/issues/IssueView.ts +6 -6
- package/front_end/panels/network/RequestConditionsDrawer.ts +8 -7
- package/front_end/panels/network/RequestCookiesView.ts +3 -4
- package/front_end/panels/network/RequestTimingView.ts +3 -8
- package/front_end/panels/network/components/HeaderSectionRow.ts +3 -2
- package/front_end/panels/network/components/RequestHeaderSection.ts +3 -1
- package/front_end/panels/network/components/RequestHeadersView.ts +2 -2
- package/front_end/panels/profiler/HeapProfileView.ts +3 -3
- package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
- package/front_end/panels/profiler/IsolateSelector.ts +1 -2
- package/front_end/panels/profiler/profiler-meta.ts +3 -3
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
- package/front_end/panels/recorder/RecorderController.ts +4 -9
- package/front_end/panels/recorder/components/CreateRecordingView.ts +6 -6
- package/front_end/panels/recorder/components/RecordingView.ts +0 -38
- package/front_end/panels/recorder/components/ReplaySection.ts +0 -14
- package/front_end/panels/recorder/components/StepEditor.ts +2 -40
- package/front_end/panels/recorder/recorderController.css +3 -3
- package/front_end/panels/security/CookieReportView.ts +17 -17
- package/front_end/panels/security/cookieControlsView.css +1 -1
- package/front_end/panels/security/cookieReportView.css +1 -1
- package/front_end/panels/settings/AISettingsTab.ts +8 -10
- package/front_end/panels/settings/components/SyncSection.ts +1 -1
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +4 -12
- package/front_end/panels/settings/settings-meta.ts +1 -1
- package/front_end/panels/sources/BreakpointEditDialog.ts +4 -3
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +1 -1
- package/front_end/panels/sources/NavigatorView.ts +4 -4
- package/front_end/panels/sources/SourcesPanel.ts +5 -4
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +3 -2
- package/front_end/panels/timeline/ThreadAppender.ts +2 -1
- package/front_end/panels/timeline/TimelineController.ts +3 -3
- package/front_end/panels/timeline/TimelinePanel.ts +6 -4
- package/front_end/panels/timeline/TimelineUIUtils.ts +2 -2
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +4 -4
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +13 -6
- package/front_end/panels/timeline/components/LiveMetricsView.ts +13 -9
- package/front_end/panels/timeline/components/exportTraceOptions.css +1 -1
- package/front_end/panels/timeline/components/fieldSettingsDialog.css +1 -1
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +2 -19
- package/front_end/panels/timeline/components/insights/InsightRenderer.ts +3 -4
- package/front_end/panels/timeline/components/insights/baseInsightComponent.css +0 -5
- package/front_end/panels/timeline/components/liveMetricsView.css +1 -1
- package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/buttons/button.css +4 -0
- package/front_end/ui/components/markdown_view/CodeBlock.ts +1 -1
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +1 -1
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +5 -5
- package/front_end/ui/components/panel_feedback/previewToggle.css +2 -2
- package/front_end/ui/components/text_editor/AiCodeGenerationParser.ts +27 -8
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +36 -6
- package/front_end/ui/components/text_editor/AutocompleteHistory.ts +33 -1
- package/front_end/ui/legacy/ActionRegistration.ts +1 -1
- package/front_end/ui/legacy/ContextMenu.ts +2 -2
- package/front_end/ui/legacy/EmptyWidget.ts +3 -3
- package/front_end/ui/legacy/LinkContextMenuProvider.ts +42 -0
- package/front_end/ui/legacy/ViewRegistration.ts +1 -1
- package/front_end/ui/legacy/XLink.ts +0 -27
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +4 -4
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +1 -1
- package/front_end/ui/legacy/inspectorCommon.css +2 -1
- package/front_end/ui/legacy/legacy.ts +3 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/front_end/ui/visual_logging/LoggingDriver.ts +3 -0
- package/package.json +1 -1
- package/front_end/models/ai_assistance/ArtifactsManager.ts +0 -67
- package/front_end/panels/ai_assistance/components/ArtifactsViewer.ts +0 -183
- package/front_end/panels/ai_assistance/components/CollapsibleAssistanceContentWidget.ts +0 -89
- package/front_end/panels/ai_assistance/components/PerformanceAgentFlameChart.ts +0 -133
- package/front_end/panels/ai_assistance/components/artifactsViewer.css +0 -15
- package/front_end/panels/ai_assistance/components/collapsibleAssistanceContentWidget.css +0 -32
|
@@ -576,14 +576,17 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
576
576
|
const nodeId = this.node()?.id;
|
|
577
577
|
const parentNodeId = this.matchedStyles?.getParentLayoutNodeId();
|
|
578
578
|
|
|
579
|
-
const [computedStyles, parentsComputedStyles] =
|
|
580
|
-
|
|
579
|
+
const [computedStyles, parentsComputedStyles, computedStyleExtraFields] = await Promise.all([
|
|
580
|
+
this.fetchComputedStylesFor(nodeId), this.fetchComputedStylesFor(parentNodeId),
|
|
581
|
+
this.fetchComputedStyleExtraFieldsFor(nodeId)
|
|
582
|
+
]);
|
|
581
583
|
|
|
582
584
|
if (signal.aborted) {
|
|
583
585
|
return;
|
|
584
586
|
}
|
|
585
587
|
|
|
586
|
-
await this.innerRebuildUpdate(
|
|
588
|
+
await this.innerRebuildUpdate(
|
|
589
|
+
signal, this.matchedStyles, computedStyles, parentsComputedStyles, computedStyleExtraFields);
|
|
587
590
|
|
|
588
591
|
if (signal.aborted) {
|
|
589
592
|
return;
|
|
@@ -633,6 +636,15 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
633
636
|
return await node.domModel().cssModel().getComputedStyle(nodeId);
|
|
634
637
|
}
|
|
635
638
|
|
|
639
|
+
private async fetchComputedStyleExtraFieldsFor(nodeId: Protocol.DOM.NodeId|undefined):
|
|
640
|
+
Promise<Protocol.CSS.ComputedStyleExtraFields|null> {
|
|
641
|
+
const node = this.node();
|
|
642
|
+
if (node === null || nodeId === undefined) {
|
|
643
|
+
return null;
|
|
644
|
+
}
|
|
645
|
+
return await node.domModel().cssModel().getComputedStyleExtraFields(nodeId);
|
|
646
|
+
}
|
|
647
|
+
|
|
636
648
|
override onResize(): void {
|
|
637
649
|
void this.resizeThrottler.schedule(this.#resize.bind(this));
|
|
638
650
|
}
|
|
@@ -914,7 +926,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
914
926
|
|
|
915
927
|
private async innerRebuildUpdate(
|
|
916
928
|
signal: AbortSignal, matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles|null,
|
|
917
|
-
computedStyles: Map<string, string>|null, parentsComputedStyles: Map<string, string>|null
|
|
929
|
+
computedStyles: Map<string, string>|null, parentsComputedStyles: Map<string, string>|null,
|
|
930
|
+
computedStyleExtraFields: Protocol.CSS.ComputedStyleExtraFields|null): Promise<void> {
|
|
918
931
|
// ElementsSidebarPane's throttler schedules this method. Usually,
|
|
919
932
|
// rebuild is suppressed while editing (see onCSSModelChanged()), but we need a
|
|
920
933
|
// 'force' flag since the currently running throttler process cannot be canceled.
|
|
@@ -940,7 +953,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
940
953
|
}
|
|
941
954
|
|
|
942
955
|
const blocks = await this.rebuildSectionsForMatchedStyleRules(
|
|
943
|
-
(matchedStyles as SDK.CSSMatchedStyles.CSSMatchedStyles), computedStyles, parentsComputedStyles
|
|
956
|
+
(matchedStyles as SDK.CSSMatchedStyles.CSSMatchedStyles), computedStyles, parentsComputedStyles,
|
|
957
|
+
computedStyleExtraFields);
|
|
944
958
|
|
|
945
959
|
if (signal.aborted) {
|
|
946
960
|
return;
|
|
@@ -1023,13 +1037,16 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
1023
1037
|
|
|
1024
1038
|
rebuildSectionsForMatchedStyleRulesForTest(
|
|
1025
1039
|
matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles, computedStyles: Map<string, string>|null,
|
|
1026
|
-
parentsComputedStyles: Map<string, string>|null
|
|
1027
|
-
|
|
1040
|
+
parentsComputedStyles: Map<string, string>|null,
|
|
1041
|
+
computedStyleExtraFields: Protocol.CSS.ComputedStyleExtraFields|null): Promise<SectionBlock[]> {
|
|
1042
|
+
return this.rebuildSectionsForMatchedStyleRules(
|
|
1043
|
+
matchedStyles, computedStyles, parentsComputedStyles, computedStyleExtraFields);
|
|
1028
1044
|
}
|
|
1029
1045
|
|
|
1030
1046
|
private async rebuildSectionsForMatchedStyleRules(
|
|
1031
1047
|
matchedStyles: SDK.CSSMatchedStyles.CSSMatchedStyles, computedStyles: Map<string, string>|null,
|
|
1032
|
-
parentsComputedStyles: Map<string, string>|null
|
|
1048
|
+
parentsComputedStyles: Map<string, string>|null,
|
|
1049
|
+
computedStyleExtraFields: Protocol.CSS.ComputedStyleExtraFields|null): Promise<SectionBlock[]> {
|
|
1033
1050
|
if (this.idleCallbackManager) {
|
|
1034
1051
|
this.idleCallbackManager.discard();
|
|
1035
1052
|
}
|
|
@@ -1077,8 +1094,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
1077
1094
|
style.type === SDK.CSSStyleDeclaration.Type.Animation;
|
|
1078
1095
|
if (lastBlock && (!isTransitionOrAnimationStyle || style.allProperties().length > 0)) {
|
|
1079
1096
|
this.idleCallbackManager.schedule(() => {
|
|
1080
|
-
const section =
|
|
1081
|
-
|
|
1097
|
+
const section = new StylePropertiesSection(
|
|
1098
|
+
this, matchedStyles, style, sectionIdx, computedStyles, parentsComputedStyles, computedStyleExtraFields);
|
|
1082
1099
|
sectionIdx++;
|
|
1083
1100
|
lastBlock.sections.push(section);
|
|
1084
1101
|
});
|
|
@@ -1151,7 +1168,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
|
1151
1168
|
const lastBlock = blocks[blocks.length - 1];
|
|
1152
1169
|
this.idleCallbackManager.schedule(() => {
|
|
1153
1170
|
const section = new HighlightPseudoStylePropertiesSection(
|
|
1154
|
-
this, matchedStyles, style, sectionIdx, computedStyles, parentsComputedStyles);
|
|
1171
|
+
this, matchedStyles, style, sectionIdx, computedStyles, parentsComputedStyles, computedStyleExtraFields);
|
|
1155
1172
|
sectionIdx++;
|
|
1156
1173
|
lastBlock.sections.push(section);
|
|
1157
1174
|
});
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
5
|
|
|
6
|
+
import '../../../ui/kit/kit.js';
|
|
6
7
|
import '../../../ui/legacy/legacy.js';
|
|
7
8
|
|
|
8
9
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
@@ -51,9 +52,9 @@ export class CSSHintDetailsView extends HTMLElement {
|
|
|
51
52
|
` : ''}
|
|
52
53
|
${link ? html`
|
|
53
54
|
<div class="footer">
|
|
54
|
-
<
|
|
55
|
+
<devtools-link id="learn-more" href=${link} class="clickable underlined unbreakable-text">
|
|
55
56
|
${i18nString(UIStrings.learnMore)}
|
|
56
|
-
</
|
|
57
|
+
</devtools-link>
|
|
57
58
|
</div>
|
|
58
59
|
`: ''}
|
|
59
60
|
</div>
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
5
|
|
|
6
|
+
import '../../../ui/kit/kit.js';
|
|
6
7
|
import '../../../ui/legacy/legacy.js';
|
|
7
8
|
|
|
8
9
|
import * as Common from '../../../core/common/common.js';
|
|
@@ -250,13 +251,13 @@ export class CSSPropertyDocsView extends HTMLElement {
|
|
|
250
251
|
` : nothing}
|
|
251
252
|
${link ? html`
|
|
252
253
|
<div class="docs-popup-section footer">
|
|
253
|
-
<
|
|
254
|
+
<devtools-link
|
|
254
255
|
id="learn-more"
|
|
255
256
|
href=${link}
|
|
256
257
|
class="clickable underlined unbreakable-text"
|
|
257
258
|
>
|
|
258
259
|
${i18nString(UIStrings.learnMore)}
|
|
259
|
-
</
|
|
260
|
+
</devtools-link>
|
|
260
261
|
<devtools-checkbox
|
|
261
262
|
@change=${this.#dontShowChanged}
|
|
262
263
|
jslog=${VisualLogging.toggle('css-property-doc').track({ change: true })}>
|
|
@@ -238,7 +238,7 @@ UI.ViewManager.registerViewExtension({
|
|
|
238
238
|
});
|
|
239
239
|
|
|
240
240
|
UI.ViewManager.registerViewExtension({
|
|
241
|
-
experiment: Root.
|
|
241
|
+
experiment: Root.ExperimentNames.ExperimentName.CAPTURE_NODE_CREATION_STACKS,
|
|
242
242
|
location: UI.ViewManager.ViewLocationValues.ELEMENTS_SIDEBAR,
|
|
243
243
|
id: 'elements.dom-creation',
|
|
244
244
|
commandPrompt: i18nLazyString(UIStrings.showStackTrace),
|
|
@@ -300,7 +300,7 @@ function renderSearchButton(onSearch: ViewInput['callbacks']['onSearch']): Lit.T
|
|
|
300
300
|
|
|
301
301
|
function renderLearnMoreAboutInsights(): Lit.TemplateResult {
|
|
302
302
|
// clang-format off
|
|
303
|
-
return html`<devtools-link href=${LEARN_MORE_URL} class="link"
|
|
303
|
+
return html`<devtools-link href=${LEARN_MORE_URL} class="link" jslogcontext="learn-more">
|
|
304
304
|
${i18nString(UIStrings.learnMore)}
|
|
305
305
|
</devtools-link>`;
|
|
306
306
|
// clang-format on
|
|
@@ -321,7 +321,7 @@ function maybeRenderSources(
|
|
|
321
321
|
<devtools-link
|
|
322
322
|
href=${url}
|
|
323
323
|
class=${Directives.classMap({link: true, highlighted: index === highlightedCitationIndex})}
|
|
324
|
-
|
|
324
|
+
jslogcontext="references.console-insights"
|
|
325
325
|
${Directives.ref(e => { output.citationLinks[index] = e as HTMLElement; })}
|
|
326
326
|
@animationend=${onCitationAnimationEnd}
|
|
327
327
|
>
|
|
@@ -347,7 +347,7 @@ function maybeRenderRelatedContent(relatedUrls: string[], directCitationUrls: st
|
|
|
347
347
|
<devtools-link
|
|
348
348
|
href=${relatedUrl}
|
|
349
349
|
class="link"
|
|
350
|
-
|
|
350
|
+
jslogcontext="references.console-insights"
|
|
351
351
|
>
|
|
352
352
|
${relatedUrl}
|
|
353
353
|
</devtools-link>
|
|
@@ -454,12 +454,12 @@ function renderConsentReminder(noLogging: boolean): Lit.TemplateResult {
|
|
|
454
454
|
<div>Use of this feature is subject to the <devtools-link
|
|
455
455
|
href=${TERMS_OF_SERVICE_URL}
|
|
456
456
|
class="link"
|
|
457
|
-
|
|
457
|
+
jslogcontext="terms-of-service.console-insights">
|
|
458
458
|
Google Terms of Service
|
|
459
459
|
</devtools-link> and <devtools-link
|
|
460
460
|
href=${PRIVACY_POLICY_URL}
|
|
461
461
|
class="link"
|
|
462
|
-
|
|
462
|
+
jslogcontext="privacy-policy.console-insights">
|
|
463
463
|
Google Privacy Policy
|
|
464
464
|
</devtools-link>
|
|
465
465
|
</div>
|
|
@@ -471,7 +471,7 @@ function renderConsentReminder(noLogging: boolean): Lit.TemplateResult {
|
|
|
471
471
|
<devtools-link
|
|
472
472
|
href=${CODE_SNIPPET_WARNING_URL}
|
|
473
473
|
class="link"
|
|
474
|
-
|
|
474
|
+
jslogcontext="code-snippets-explainer.console-insights"
|
|
475
475
|
>Use generated code snippets with caution</devtools-link>
|
|
476
476
|
</div>
|
|
477
477
|
</div>`;
|
|
@@ -515,7 +515,7 @@ function renderDisclaimer(noLogging: boolean, onDisclaimerSettingsLink: () => vo
|
|
|
515
515
|
jslog=${VisualLogging.action('open-ai-settings').track({click: true})}>
|
|
516
516
|
Open settings
|
|
517
517
|
</button> or <devtools-link href=${LEARN_MORE_URL}
|
|
518
|
-
class="link"
|
|
518
|
+
class="link" jslogcontext="learn-more">
|
|
519
519
|
learn more
|
|
520
520
|
</devtools-link>
|
|
521
521
|
</span>`;
|
|
@@ -16,7 +16,7 @@ import * as IssueCounter from '../../ui/components/issue_counter/issue_counter.j
|
|
|
16
16
|
import * as MarkdownView from '../../ui/components/markdown_view/markdown_view.js';
|
|
17
17
|
import {Icon} from '../../ui/kit/kit.js';
|
|
18
18
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
19
|
-
import
|
|
19
|
+
import {html, render} from '../../ui/lit/lit.js';
|
|
20
20
|
|
|
21
21
|
import {AffectedBlockedByResponseView} from './AffectedBlockedByResponseView.js';
|
|
22
22
|
import {AffectedCookiesView, AffectedRawCookieLinesView} from './AffectedCookiesView.js';
|
|
@@ -452,12 +452,12 @@ export class IssueView extends UI.TreeOutline.TreeElement {
|
|
|
452
452
|
|
|
453
453
|
const linkList = linkWrapper.listItemElement.createChild('ul', 'link-list');
|
|
454
454
|
for (const description of this.#description.links) {
|
|
455
|
-
const link = UI.Fragment.html`<x-link class="link devtools-link" tabindex="0" href=${description.link}>${
|
|
456
|
-
i18nString(UIStrings.learnMoreS, {PH1: description.linkTitle})}</x-link>` as UI.XLink.XLink;
|
|
457
|
-
link.setAttribute('jslog', `${VisualLogging.link('learn-more').track({click: true})}`);
|
|
458
|
-
|
|
459
455
|
const linkListItem = linkList.createChild('li');
|
|
460
|
-
|
|
456
|
+
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
457
|
+
render(
|
|
458
|
+
html`<devtools-link class="link devtools-link" href=${description.link} jslogcontext="learn-more">${
|
|
459
|
+
i18nString(UIStrings.learnMoreS, {PH1: description.linkTitle})}</devtools-link>`,
|
|
460
|
+
linkListItem);
|
|
461
461
|
}
|
|
462
462
|
this.appendChild(linkWrapper);
|
|
463
463
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
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';
|
|
7
8
|
import '../../ui/legacy/legacy.js';
|
|
8
9
|
import '../../ui/components/tooltips/tooltips.js';
|
|
9
10
|
|
|
@@ -23,7 +24,7 @@ import * as PanelUtils from '../utils/utils.js';
|
|
|
23
24
|
|
|
24
25
|
import requestConditionsDrawerStyles from './requestConditionsDrawer.css.js';
|
|
25
26
|
|
|
26
|
-
const {ref} = Directives;
|
|
27
|
+
const {ref, live} = Directives;
|
|
27
28
|
const {widgetConfig} = UI.Widget;
|
|
28
29
|
|
|
29
30
|
const UIStrings = {
|
|
@@ -325,13 +326,13 @@ export class AffectedCountWidget extends UI.Widget.Widget {
|
|
|
325
326
|
}
|
|
326
327
|
|
|
327
328
|
function learnMore(): LitTemplate {
|
|
328
|
-
return html`<
|
|
329
|
+
return html`<devtools-link
|
|
329
330
|
href=${NETWORK_REQUEST_BLOCKING_EXPLANATION_URL}
|
|
330
331
|
tabindex=0
|
|
331
332
|
class=devtools-link
|
|
332
|
-
|
|
333
|
+
.jslogContext=${'learn-more'}>
|
|
333
334
|
${i18nString(UIStrings.learnMore)}
|
|
334
|
-
</
|
|
335
|
+
</devtools-link>`;
|
|
335
336
|
}
|
|
336
337
|
|
|
337
338
|
export class RequestConditionsDrawer extends UI.Widget.VBox implements
|
|
@@ -438,10 +439,10 @@ export class RequestConditionsDrawer extends UI.Widget.VBox implements
|
|
|
438
439
|
// clang-format off
|
|
439
440
|
html`
|
|
440
441
|
<input class=blocked-url-checkbox
|
|
441
|
-
@
|
|
442
|
+
@change=${toggle}
|
|
442
443
|
type=checkbox
|
|
443
444
|
title=${i18nString(UIStrings.enableThrottlingToggleLabel, {PH1: constructorStringOrWildcardURL})}
|
|
444
|
-
.checked=${enabled}
|
|
445
|
+
.checked=${live(enabled)}
|
|
445
446
|
.disabled=${!editable || !originalOrUpgradedURLPattern}
|
|
446
447
|
jslog=${VisualLogging.toggle().track({ change: true })}>
|
|
447
448
|
<devtools-button
|
|
@@ -518,7 +519,7 @@ export class RequestConditionsDrawer extends UI.Widget.VBox implements
|
|
|
518
519
|
// clang-format off
|
|
519
520
|
html`
|
|
520
521
|
<input class=blocked-url-checkbox
|
|
521
|
-
@
|
|
522
|
+
@change=${toggle}
|
|
522
523
|
type=checkbox
|
|
523
524
|
.checked=${condition.enabled}
|
|
524
525
|
.disabled=${!editable}
|
|
@@ -121,10 +121,9 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
|
|
|
121
121
|
` : Lit.nothing}
|
|
122
122
|
|
|
123
123
|
<div class="cookies-panel-item site-has-cookies-in-other-partition ${input.siteHasCookieInOtherPartition ? '' : 'hidden'}">
|
|
124
|
-
${uiI18n.
|
|
125
|
-
PH1:
|
|
126
|
-
|
|
127
|
-
undefined, 'learn-more'),})}
|
|
124
|
+
${uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.siteHasCookieInOtherPartition, {
|
|
125
|
+
PH1: html`<devtools-link href="https://developer.chrome.com/en/docs/privacy-sandbox/chips/" .jslogContext=${'learn-more'}>${i18nString(UIStrings.learnMore)}</devtools-link>`
|
|
126
|
+
})}
|
|
128
127
|
</div>
|
|
129
128
|
|
|
130
129
|
<div class="request-cookies-title ${input.responseCookies.cookies.length ? '' : 'hidden'}"
|
|
@@ -504,7 +504,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
504
504
|
<devtools-link
|
|
505
505
|
href="https://developer.chrome.com/docs/devtools/network/reference/#timing-explanation"
|
|
506
506
|
class=devtools-link
|
|
507
|
-
|
|
507
|
+
jslogcontext="explanation">
|
|
508
508
|
${i18nString(UIStrings.explanation)}
|
|
509
509
|
</devtools-link>
|
|
510
510
|
<td></td>
|
|
@@ -528,13 +528,8 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
528
528
|
${input.serverTimings.length === 0 ? html`
|
|
529
529
|
<tr>
|
|
530
530
|
<td colspan=3>
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
'https://web.dev/custom-metrics/#server-timing-api',
|
|
534
|
-
i18nString(UIStrings.theServerTimingApi),
|
|
535
|
-
undefined,
|
|
536
|
-
undefined,
|
|
537
|
-
'server-timing-api')})}
|
|
531
|
+
${uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.duringDevelopmentYouCanUseSToAdd, {PH1:
|
|
532
|
+
html`<devtools-link href="https://web.dev/custom-metrics/#server-timing-api" .jslogContext=${'server-timing-api'}>${i18nString(UIStrings.theServerTimingApi)}</devtools-link>`})}
|
|
538
533
|
</td>
|
|
539
534
|
</tr>` : nothing}
|
|
540
535
|
</table>`,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
/* eslint-disable @devtools/no-lit-render-outside-of-view */
|
|
5
5
|
|
|
6
|
+
import '../../../ui/kit/kit.js';
|
|
6
7
|
import '../../../ui/legacy/legacy.js';
|
|
7
8
|
|
|
8
9
|
import * as Host from '../../../core/host/host.js';
|
|
@@ -339,11 +340,11 @@ export class HeaderSectionRow extends HTMLElement {
|
|
|
339
340
|
// Disabled until https://crbug.com/1079231 is fixed.
|
|
340
341
|
// clang-format off
|
|
341
342
|
return html`
|
|
342
|
-
<
|
|
343
|
+
<devtools-link href=${blockedDetails.link.url} class="link">
|
|
343
344
|
<devtools-icon name="open-externally" class="inline-icon extra-large" style="color: var(--icon-link);">
|
|
344
345
|
</devtools-icon
|
|
345
346
|
>${i18nString(UIStrings.learnMore)}
|
|
346
|
-
</
|
|
347
|
+
</devtools-link>
|
|
347
348
|
`;
|
|
348
349
|
// clang-format on
|
|
349
350
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
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
4
|
|
|
5
|
+
import '../../../ui/kit/kit.js';
|
|
6
|
+
|
|
5
7
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
6
8
|
import * as Platform from '../../../core/platform/platform.js';
|
|
7
9
|
import type * as SDK from '../../../core/sdk/sdk.js';
|
|
@@ -81,7 +83,7 @@ function renderProvisionalHeadersWarning(isRequestCached: boolean): Lit.LitTempl
|
|
|
81
83
|
<div class="explanation" title=${cautionTitle}>
|
|
82
84
|
<devtools-icon class="inline-icon medium" name='warning-filled'>
|
|
83
85
|
</devtools-icon>
|
|
84
|
-
${cautionText} <
|
|
86
|
+
${cautionText} <devtools-link href="https://developer.chrome.com/docs/devtools/network/reference/#provisional-headers" class="link">${i18nString(UIStrings.learnMore)}</devtools-link>
|
|
85
87
|
</div>
|
|
86
88
|
</div>
|
|
87
89
|
</div>
|
|
@@ -310,7 +310,7 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
310
310
|
<devtools-link
|
|
311
311
|
href="https://goo.gle/devtools-override"
|
|
312
312
|
class="link devtools-link"
|
|
313
|
-
|
|
313
|
+
jslogcontext="devtools-override"
|
|
314
314
|
>
|
|
315
315
|
<devtools-icon name="help" class="inline-icon medium">
|
|
316
316
|
</devtools-icon>
|
|
@@ -319,7 +319,7 @@ export class RequestHeadersView extends LegacyWrapper.LegacyWrapper.WrappableCom
|
|
|
319
319
|
@click=${revealHeadersFile}
|
|
320
320
|
class="link devtools-link"
|
|
321
321
|
title=${UIStrings.revealHeaderOverrides}
|
|
322
|
-
|
|
322
|
+
jslogcontext="reveal-header-overrides"
|
|
323
323
|
>
|
|
324
324
|
${fileIcon}${Persistence.NetworkPersistenceManager.HEADERS_FILENAME}
|
|
325
325
|
</devtools-link>
|
|
@@ -144,7 +144,7 @@ export class HeapProfileView extends ProfileView implements UI.SearchableView.Se
|
|
|
144
144
|
|
|
145
145
|
this.timelineOverview = new HeapTimelineOverview();
|
|
146
146
|
|
|
147
|
-
if (Root.Runtime.experiments.isEnabled(Root.
|
|
147
|
+
if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE)) {
|
|
148
148
|
this.timelineOverview.addEventListener(Events.IDS_RANGE_CHANGED, this.onIdsRangeChanged.bind(this));
|
|
149
149
|
this.timelineOverview.show(this.element, this.element.firstChild);
|
|
150
150
|
this.timelineOverview.start();
|
|
@@ -368,7 +368,7 @@ export class SamplingHeapProfileType extends SamplingHeapProfileTypeBase {
|
|
|
368
368
|
}
|
|
369
369
|
|
|
370
370
|
override hasTemporaryView(): boolean {
|
|
371
|
-
return Root.Runtime.experiments.isEnabled(Root.
|
|
371
|
+
return Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE);
|
|
372
372
|
}
|
|
373
373
|
|
|
374
374
|
override startSampling(): void {
|
|
@@ -378,7 +378,7 @@ export class SamplingHeapProfileType extends SamplingHeapProfileTypeBase {
|
|
|
378
378
|
}
|
|
379
379
|
|
|
380
380
|
void heapProfilerModel.startSampling();
|
|
381
|
-
if (Root.Runtime.experiments.isEnabled(Root.
|
|
381
|
+
if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.SAMPLING_HEAP_PROFILER_TIMELINE)) {
|
|
382
382
|
this.updateTimer = window.setTimeout(() => {
|
|
383
383
|
void this.updateStats();
|
|
384
384
|
}, this.updateIntervalMs);
|
|
@@ -1338,7 +1338,7 @@ export class HeapSnapshotProfileType extends
|
|
|
1338
1338
|
|
|
1339
1339
|
override customContent(): Element|null {
|
|
1340
1340
|
const showOptionToExposeInternalsInHeapSnapshot = Root.Runtime.experiments.isEnabled(
|
|
1341
|
-
Root.
|
|
1341
|
+
Root.ExperimentNames.ExperimentName.SHOW_OPTION_TO_EXPOSE_INTERNALS_IN_HEAP_SNAPSHOT);
|
|
1342
1342
|
const exposeInternalsInHeapSnapshotCheckbox =
|
|
1343
1343
|
SettingsUI.SettingsUI.createSettingCheckbox(i18nString(UIStrings.exposeInternals), this.exposeInternals);
|
|
1344
1344
|
this.customContentInternal = exposeInternalsInHeapSnapshotCheckbox;
|
|
@@ -88,6 +88,7 @@ export class IsolateSelector extends UI.Widget.VBox implements UI.ListControl.Li
|
|
|
88
88
|
this.totalTrendDiv, i18nString(UIStrings.totalPageJsHeapSizeChangeTrend, {PH1: trendIntervalMinutes}));
|
|
89
89
|
UI.Tooltip.Tooltip.install(this.totalValueDiv, i18nString(UIStrings.totalPageJsHeapSizeAcrossAllVm));
|
|
90
90
|
|
|
91
|
+
SDK.IsolateManager.IsolateManager.instance().observeIsolates(this);
|
|
91
92
|
SDK.TargetManager.TargetManager.instance().addEventListener(
|
|
92
93
|
SDK.TargetManager.Events.NAME_CHANGED, this.targetChanged, this);
|
|
93
94
|
SDK.TargetManager.TargetManager.instance().addEventListener(
|
|
@@ -96,7 +97,6 @@ export class IsolateSelector extends UI.Widget.VBox implements UI.ListControl.Li
|
|
|
96
97
|
|
|
97
98
|
override wasShown(): void {
|
|
98
99
|
super.wasShown();
|
|
99
|
-
SDK.IsolateManager.IsolateManager.instance().observeIsolates(this);
|
|
100
100
|
SDK.IsolateManager.IsolateManager.instance().addEventListener(
|
|
101
101
|
SDK.IsolateManager.Events.MEMORY_CHANGED, this.heapStatsChanged, this);
|
|
102
102
|
}
|
|
@@ -105,7 +105,6 @@ export class IsolateSelector extends UI.Widget.VBox implements UI.ListControl.Li
|
|
|
105
105
|
super.willHide();
|
|
106
106
|
SDK.IsolateManager.IsolateManager.instance().removeEventListener(
|
|
107
107
|
SDK.IsolateManager.Events.MEMORY_CHANGED, this.heapStatsChanged, this);
|
|
108
|
-
SDK.IsolateManager.IsolateManager.instance().unobserveIsolates(this);
|
|
109
108
|
}
|
|
110
109
|
|
|
111
110
|
isolateAdded(isolate: SDK.IsolateManager.Isolate): void {
|
|
@@ -101,7 +101,7 @@ UI.ViewManager.registerViewExtension({
|
|
|
101
101
|
const Profiler = await loadProfilerModule();
|
|
102
102
|
return Profiler.LiveHeapProfileView.LiveHeapProfileView.instance();
|
|
103
103
|
},
|
|
104
|
-
experiment: Root.
|
|
104
|
+
experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
UI.ActionRegistration.registerActionExtension({
|
|
@@ -115,7 +115,7 @@ UI.ActionRegistration.registerActionExtension({
|
|
|
115
115
|
return new Profiler.LiveHeapProfileView.ActionDelegate();
|
|
116
116
|
},
|
|
117
117
|
category: UI.ActionRegistration.ActionCategory.MEMORY,
|
|
118
|
-
experiment: Root.
|
|
118
|
+
experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
|
|
119
119
|
options: [
|
|
120
120
|
{
|
|
121
121
|
value: true,
|
|
@@ -136,7 +136,7 @@ UI.ActionRegistration.registerActionExtension({
|
|
|
136
136
|
return new Profiler.LiveHeapProfileView.ActionDelegate();
|
|
137
137
|
},
|
|
138
138
|
category: UI.ActionRegistration.ActionCategory.MEMORY,
|
|
139
|
-
experiment: Root.
|
|
139
|
+
experiment: Root.ExperimentNames.ExperimentName.LIVE_HEAP_PROFILE,
|
|
140
140
|
title: i18nLazyString(UIStrings.startRecordingHeapAllocationsAndReload),
|
|
141
141
|
});
|
|
142
142
|
|
|
@@ -44,5 +44,5 @@ UI.ViewManager.registerViewExtension({
|
|
|
44
44
|
const ProtocolMonitor = await loadProtocolMonitorModule();
|
|
45
45
|
return new ProtocolMonitor.ProtocolMonitor.ProtocolMonitorImpl();
|
|
46
46
|
},
|
|
47
|
-
experiment: Root.
|
|
47
|
+
experiment: Root.ExperimentNames.ExperimentName.PROTOCOL_MONITOR,
|
|
48
48
|
});
|
|
@@ -692,7 +692,6 @@ export class RecorderController extends LitElement {
|
|
|
692
692
|
const indexToInsertAt = currentIndex + (position === Components.StepView.AddStepPosition.BEFORE ? 0 : 1);
|
|
693
693
|
steps.splice(indexToInsertAt, 0, {type: Models.Schema.StepType.WaitForElement, selectors: ['body']});
|
|
694
694
|
const recording = {...this.currentRecording, flow: {...this.currentRecording.flow, steps}};
|
|
695
|
-
Host.userMetrics.recordingEdited(Host.UserMetrics.RecordingEdited.STEP_ADDED);
|
|
696
695
|
this.#stepBreakpointIndexes = new Set([...this.#stepBreakpointIndexes.values()].map(breakpointIndex => {
|
|
697
696
|
if (indexToInsertAt > breakpointIndex) {
|
|
698
697
|
return breakpointIndex;
|
|
@@ -723,7 +722,6 @@ export class RecorderController extends LitElement {
|
|
|
723
722
|
const currentIndex = steps.indexOf(event.step);
|
|
724
723
|
steps.splice(currentIndex, 1);
|
|
725
724
|
const flow = {...this.currentRecording.flow, steps};
|
|
726
|
-
Host.userMetrics.recordingEdited(Host.UserMetrics.RecordingEdited.STEP_REMOVED);
|
|
727
725
|
this.#stepBreakpointIndexes = new Set([...this.#stepBreakpointIndexes.values()]
|
|
728
726
|
.map(breakpointIndex => {
|
|
729
727
|
if (currentIndex > breakpointIndex) {
|
|
@@ -958,10 +956,8 @@ export class RecorderController extends LitElement {
|
|
|
958
956
|
await this.#exportContent(converter.getFilename(this.currentRecording.flow), content);
|
|
959
957
|
const builtInMetric = CONVERTER_ID_TO_METRIC[converter.getId()];
|
|
960
958
|
if (builtInMetric) {
|
|
961
|
-
Host.userMetrics.recordingExported(builtInMetric);
|
|
962
959
|
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.recordingExported));
|
|
963
960
|
} else if (converter.getId().startsWith(Converters.ExtensionConverter.EXTENSION_PREFIX)) {
|
|
964
|
-
Host.userMetrics.recordingExported(Host.UserMetrics.RecordingExported.TO_EXTENSION);
|
|
965
961
|
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.recordingExported));
|
|
966
962
|
} else {
|
|
967
963
|
throw new Error('Could not find a metric for the export option with id = ' + id);
|
|
@@ -993,7 +989,6 @@ export class RecorderController extends LitElement {
|
|
|
993
989
|
this.#setCurrentRecording(
|
|
994
990
|
await this.#storage.updateRecording(this.currentRecording.storageName, flow),
|
|
995
991
|
{keepBreakpoints: true, updateSession: true});
|
|
996
|
-
Host.userMetrics.recordingAssertion(Host.UserMetrics.RecordingAssertion.ASSERTION_ADDED);
|
|
997
992
|
await this.updateComplete;
|
|
998
993
|
// FIXME: call a method on the recording view widget.
|
|
999
994
|
await this.#recordingView?.updateComplete;
|
|
@@ -1195,9 +1190,9 @@ export class RecorderController extends LitElement {
|
|
|
1195
1190
|
<div class="empty-state-description">
|
|
1196
1191
|
<span>${i18nString(UIStrings.recordingDescription)}</span>
|
|
1197
1192
|
<devtools-link
|
|
1198
|
-
class="
|
|
1193
|
+
class="devtools-link"
|
|
1199
1194
|
href=${RECORDER_EXPLANATION_URL}
|
|
1200
|
-
|
|
1195
|
+
jslogcontext="learn-more"
|
|
1201
1196
|
>${i18nString(UIStrings.learnMore)}</devtools-link>
|
|
1202
1197
|
</div>
|
|
1203
1198
|
<devtools-button .variant=${Buttons.Button.Variant.TONAL} jslogContext=${Actions.RecorderActions.CREATE_RECORDING} @click=${this.#onCreateNewRecording}>${i18nString(UIStrings.createRecording)}</devtools-button>
|
|
@@ -1473,9 +1468,9 @@ export class RecorderController extends LitElement {
|
|
|
1473
1468
|
}
|
|
1474
1469
|
></devtools-button>
|
|
1475
1470
|
<div class="feedback">
|
|
1476
|
-
<devtools-link class="
|
|
1471
|
+
<devtools-link class="devtools-link" title=${i18nString(UIStrings.sendFeedback)} href=${
|
|
1477
1472
|
FEEDBACK_URL
|
|
1478
|
-
}
|
|
1473
|
+
} jslogcontext="feedback">${i18nString(UIStrings.sendFeedback)}</devtools-link>
|
|
1479
1474
|
</div>
|
|
1480
1475
|
<div class="separator"></div>
|
|
1481
1476
|
<devtools-shortcut-dialog
|
|
@@ -211,13 +211,13 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
|
|
|
211
211
|
/>
|
|
212
212
|
<label class="row-label" for="selector-attribute">
|
|
213
213
|
<span>${i18nString(UIStrings.selectorAttribute)}</span>
|
|
214
|
-
<
|
|
214
|
+
<devtools-link
|
|
215
215
|
class="link" href="https://g.co/devtools/recorder#selector"
|
|
216
216
|
title=${i18nString(UIStrings.learnMore)}
|
|
217
|
-
|
|
217
|
+
.jslogContext=${'recorder-selector-help'}>
|
|
218
218
|
<devtools-icon name="help">
|
|
219
219
|
</devtools-icon>
|
|
220
|
-
</
|
|
220
|
+
</devtools-link>
|
|
221
221
|
</label>
|
|
222
222
|
<input
|
|
223
223
|
value=${selectorAttribute}
|
|
@@ -232,13 +232,13 @@ export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLE
|
|
|
232
232
|
/>
|
|
233
233
|
<label class="row-label">
|
|
234
234
|
<span>${i18nString(UIStrings.selectorTypes)}</span>
|
|
235
|
-
<
|
|
235
|
+
<devtools-link
|
|
236
236
|
class="link" href="https://g.co/devtools/recorder#selector"
|
|
237
237
|
title=${i18nString(UIStrings.learnMore)}
|
|
238
|
-
|
|
238
|
+
.jslogContext=${'recorder-selector-help'}>
|
|
239
239
|
<devtools-icon name="help">
|
|
240
240
|
</devtools-icon>
|
|
241
|
-
</
|
|
241
|
+
</devtools-link>
|
|
242
242
|
</label>
|
|
243
243
|
<div class="checkbox-container">
|
|
244
244
|
${repeat(selectorTypes, item => {
|
|
@@ -177,38 +177,6 @@ const networkConditionPresets = [
|
|
|
177
177
|
SDK.NetworkManager.Fast4GConditions,
|
|
178
178
|
];
|
|
179
179
|
|
|
180
|
-
function converterIdToFlowMetric(
|
|
181
|
-
converterId: string,
|
|
182
|
-
): Host.UserMetrics.RecordingCopiedToClipboard {
|
|
183
|
-
switch (converterId) {
|
|
184
|
-
case Models.ConverterIds.ConverterIds.PUPPETEER:
|
|
185
|
-
case Models.ConverterIds.ConverterIds.PUPPETEER_FIREFOX:
|
|
186
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_PUPPETEER;
|
|
187
|
-
case Models.ConverterIds.ConverterIds.JSON:
|
|
188
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_JSON;
|
|
189
|
-
case Models.ConverterIds.ConverterIds.REPLAY:
|
|
190
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_REPLAY;
|
|
191
|
-
default:
|
|
192
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_RECORDING_WITH_EXTENSION;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
function converterIdToStepMetric(
|
|
197
|
-
converterId: string,
|
|
198
|
-
): Host.UserMetrics.RecordingCopiedToClipboard {
|
|
199
|
-
switch (converterId) {
|
|
200
|
-
case Models.ConverterIds.ConverterIds.PUPPETEER:
|
|
201
|
-
case Models.ConverterIds.ConverterIds.PUPPETEER_FIREFOX:
|
|
202
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_PUPPETEER;
|
|
203
|
-
case Models.ConverterIds.ConverterIds.JSON:
|
|
204
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_JSON;
|
|
205
|
-
case Models.ConverterIds.ConverterIds.REPLAY:
|
|
206
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_REPLAY;
|
|
207
|
-
default:
|
|
208
|
-
return Host.UserMetrics.RecordingCopiedToClipboard.COPIED_STEP_WITH_EXTENSION;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
180
|
function renderSettings({
|
|
213
181
|
settings,
|
|
214
182
|
replaySettingsExpanded,
|
|
@@ -1193,8 +1161,6 @@ export class RecordingView extends UI.Widget.Widget {
|
|
|
1193
1161
|
}
|
|
1194
1162
|
|
|
1195
1163
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(text);
|
|
1196
|
-
const metric = step ? converterIdToStepMetric(converter.getId()) : converterIdToFlowMetric(converter.getId());
|
|
1197
|
-
Host.userMetrics.recordingCopiedToClipboard(metric);
|
|
1198
1164
|
}
|
|
1199
1165
|
|
|
1200
1166
|
#onCopyStepEvent(event: CopyStepEvent): void {
|
|
@@ -1223,10 +1189,6 @@ export class RecordingView extends UI.Widget.Widget {
|
|
|
1223
1189
|
|
|
1224
1190
|
showCodeToggle = (): void => {
|
|
1225
1191
|
this.#showCodeView = !this.#showCodeView;
|
|
1226
|
-
Host.userMetrics.recordingCodeToggled(
|
|
1227
|
-
this.#showCodeView ? Host.UserMetrics.RecordingCodeToggled.CODE_SHOWN :
|
|
1228
|
-
Host.UserMetrics.RecordingCodeToggled.CODE_HIDDEN,
|
|
1229
|
-
);
|
|
1230
1192
|
void this.#convertToCode();
|
|
1231
1193
|
};
|
|
1232
1194
|
|