[go: nahoru, domu]

blob: 41a8045356ff09032bbc266146ef2daa5e53d94f [file] [log] [blame]
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';
import {EnumeratedHistogram} from './InspectorFrontendHostAPI.js';
export class UserMetrics {
#panelChangedSinceLaunch: boolean;
#firedLaunchHistogram: boolean;
#launchPanelName: string;
constructor() {
this.#panelChangedSinceLaunch = false;
this.#firedLaunchHistogram = false;
this.#launchPanelName = '';
}
breakpointWithConditionAdded(breakpointWithConditionAdded: BreakpointWithConditionAdded): void {
if (breakpointWithConditionAdded >= BreakpointWithConditionAdded.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.BreakpointWithConditionAdded, breakpointWithConditionAdded,
BreakpointWithConditionAdded.MaxValue);
}
breakpointEditDialogRevealedFrom(breakpointEditDialogRevealedFrom: BreakpointEditDialogRevealedFrom): void {
if (breakpointEditDialogRevealedFrom >= BreakpointEditDialogRevealedFrom.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.BreakpointEditDialogRevealedFrom, breakpointEditDialogRevealedFrom,
BreakpointEditDialogRevealedFrom.MaxValue);
}
panelShown(panelName: string): void {
const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;
InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelShown, code, PanelCodes.MaxValue);
// Store that the user has changed the panel so we know launch histograms should not be fired.
this.#panelChangedSinceLaunch = true;
}
/**
* Fired when a panel is closed (regardless if it exists in the main panel or the drawer)
*/
panelClosed(panelName: string): void {
const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;
InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelClosed, code, PanelCodes.MaxValue);
// Store that the user has changed the panel so we know launch histograms should not be fired.
this.#panelChangedSinceLaunch = true;
}
sidebarPaneShown(sidebarPaneName: string): void {
const code = SidebarPaneCodes[sidebarPaneName as keyof typeof SidebarPaneCodes] || 0;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.SidebarPaneShown, code, SidebarPaneCodes.MaxValue);
}
settingsPanelShown(settingsViewId: string): void {
this.panelShown('settings-' + settingsViewId);
}
sourcesPanelFileOpened(mediaType?: string): void {
const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.SourcesPanelFileOpened, code, MediaTypes.MaxValue);
}
networkPanelResponsePreviewOpened(mediaType: string): void {
const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.NetworkPanelResponsePreviewOpened, code, MediaTypes.MaxValue);
}
actionTaken(action: Action): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.ActionTaken, action, Action.MaxValue);
}
panelLoaded(panelName: string, histogramName: string): void {
if (this.#firedLaunchHistogram || panelName !== this.#launchPanelName) {
return;
}
this.#firedLaunchHistogram = true;
// Use rAF and window.setTimeout to ensure the marker is fired after layout and rendering.
// This will give the most accurate representation of the tool being ready for a user.
requestAnimationFrame(() => {
window.setTimeout(() => {
// Mark the load time so that we can pinpoint it more easily in a trace.
performance.mark(histogramName);
// If the user has switched panel before we finished loading, ignore the histogram,
// since the launch timings will have been affected and are no longer valid.
if (this.#panelChangedSinceLaunch) {
return;
}
// This fires the event for the appropriate launch histogram.
// The duration is measured as the time elapsed since the time origin of the document.
InspectorFrontendHostInstance.recordPerformanceHistogram(histogramName, performance.now());
}, 0);
});
}
setLaunchPanel(panelName: string|null): void {
this.#launchPanelName = (panelName as string);
}
keybindSetSettingChanged(keybindSet: string): void {
const value = KeybindSetSettings[keybindSet as keyof typeof KeybindSetSettings] || 0;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.KeybindSetSettingChanged, value, KeybindSetSettings.MaxValue);
}
keyboardShortcutFired(actionId: string): void {
const action =
KeyboardShortcutAction[actionId as keyof typeof KeyboardShortcutAction] || KeyboardShortcutAction.OtherShortcut;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.KeyboardShortcutFired, action, KeyboardShortcutAction.MaxValue);
}
issuesPanelOpenedFrom(issueOpener: IssueOpener): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.IssuesPanelOpenedFrom, issueOpener, IssueOpener.MaxValue);
}
issuesPanelIssueExpanded(issueExpandedCategory: string|undefined): void {
if (issueExpandedCategory === undefined) {
return;
}
const issueExpanded = IssueExpanded[issueExpandedCategory as keyof typeof IssueExpanded];
if (issueExpanded === undefined) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.IssuesPanelIssueExpanded, issueExpanded, IssueExpanded.MaxValue);
}
issuesPanelResourceOpened(issueCategory: string, type: string): void {
const key = issueCategory + type;
const value = IssueResourceOpened[key as keyof typeof IssueResourceOpened];
if (value === undefined) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.IssuesPanelResourceOpened, value, IssueResourceOpened.MaxValue);
}
issueCreated(code: string): void {
const issueCreated = IssueCreated[code as keyof typeof IssueCreated];
if (issueCreated === undefined) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.IssueCreated, issueCreated, IssueCreated.MaxValue);
}
experimentEnabledAtLaunch(experimentId: string): void {
const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];
if (experiment === undefined) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.ExperimentEnabledAtLaunch, experiment, DevtoolsExperiments.MaxValue);
}
experimentChanged(experimentId: string, isEnabled: boolean): void {
const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];
if (experiment === undefined) {
return;
}
const actionName = isEnabled ? EnumeratedHistogram.ExperimentEnabled : EnumeratedHistogram.ExperimentDisabled;
InspectorFrontendHostInstance.recordEnumeratedHistogram(actionName, experiment, DevtoolsExperiments.MaxValue);
}
developerResourceLoaded(developerResourceLoaded: DeveloperResourceLoaded): void {
if (developerResourceLoaded >= DeveloperResourceLoaded.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.DeveloperResourceLoaded, developerResourceLoaded, DeveloperResourceLoaded.MaxValue);
}
developerResourceScheme(developerResourceScheme: DeveloperResourceScheme): void {
if (developerResourceScheme >= DeveloperResourceScheme.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.DeveloperResourceScheme, developerResourceScheme, DeveloperResourceScheme.MaxValue);
}
linearMemoryInspectorRevealedFrom(linearMemoryInspectorRevealedFrom: LinearMemoryInspectorRevealedFrom): void {
if (linearMemoryInspectorRevealedFrom >= LinearMemoryInspectorRevealedFrom.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.LinearMemoryInspectorRevealedFrom, linearMemoryInspectorRevealedFrom,
LinearMemoryInspectorRevealedFrom.MaxValue);
}
linearMemoryInspectorTarget(linearMemoryInspectorTarget: LinearMemoryInspectorTarget): void {
if (linearMemoryInspectorTarget >= LinearMemoryInspectorTarget.MaxValue) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.LinearMemoryInspectorTarget, linearMemoryInspectorTarget,
LinearMemoryInspectorTarget.MaxValue);
}
language(language: Intl.UnicodeBCP47LocaleIdentifier): void {
const languageCode = Language[language as keyof typeof Language];
if (languageCode === undefined) {
return;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.Language, languageCode, Language.MaxValue);
}
syncSetting(devtoolsSyncSettingEnabled: boolean): void {
InspectorFrontendHostInstance.getSyncInformation(syncInfo => {
let settingValue = SyncSetting.ChromeSyncDisabled;
if (syncInfo.isSyncActive && !syncInfo.arePreferencesSynced) {
settingValue = SyncSetting.ChromeSyncSettingsDisabled;
} else if (syncInfo.isSyncActive && syncInfo.arePreferencesSynced) {
settingValue = devtoolsSyncSettingEnabled ? SyncSetting.DevToolsSyncSettingEnabled :
SyncSetting.DevToolsSyncSettingDisabled;
}
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.SyncSetting, settingValue, SyncSetting.MaxValue);
});
}
recordingToggled(value: RecordingToggled): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingToggled, value, RecordingToggled.MaxValue);
}
recordingReplayFinished(value: RecordingReplayFinished): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingReplayFinished, value, RecordingReplayFinished.MaxValue);
}
recordingReplaySpeed(value: RecordingReplaySpeed): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingReplaySpeed, value, RecordingReplaySpeed.MaxValue);
}
recordingReplayStarted(value: RecordingReplayStarted): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingReplayStarted, value, RecordingReplayStarted.MaxValue);
}
recordingEdited(value: RecordingEdited): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingEdited, value, RecordingEdited.MaxValue);
}
recordingExported(value: RecordingExported): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingExported, value, RecordingExported.MaxValue);
}
recordingCodeToggled(value: RecordingCodeToggled): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingCodeToggled, value, RecordingCodeToggled.MaxValue);
}
recordingCopiedToClipboard(value: RecordingCopiedToClipboard): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.RecordingCopiedToClipboard, value, RecordingCopiedToClipboard.MaxValue);
}
styleTextCopied(value: StyleTextCopied): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.StyleTextCopied, value, StyleTextCopied.MaxValue);
}
manifestSectionSelected(sectionTitle: string): void {
const code =
ManifestSectionCodes[sectionTitle as keyof typeof ManifestSectionCodes] || ManifestSectionCodes.OtherSection;
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.ManifestSectionSelected, code, ManifestSectionCodes.MaxValue);
}
cssHintShown(type: CSSHintType): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.CSSHintShown, type, CSSHintType.MaxValue);
}
lighthouseModeRun(type: LighthouseModeRun): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.LighthouseModeRun, type, LighthouseModeRun.MaxValue);
}
colorConvertedFrom(type: ColorConvertedFrom): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.ColorConvertedFrom, type, ColorConvertedFrom.MaxValue);
}
colorPickerOpenedFrom(type: ColorPickerOpenedFrom): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.ColorPickerOpenedFrom, type, ColorPickerOpenedFrom.MaxValue);
}
cssPropertyDocumentation(type: CSSPropertyDocumentation): void {
InspectorFrontendHostInstance.recordEnumeratedHistogram(
EnumeratedHistogram.CSSPropertyDocumentation, type, CSSPropertyDocumentation.MaxValue);
}
}
/**
* The numeric enum values are not necessarily continuous! It is possible that
* values have been removed, which results in gaps in the sequence of values.
* When adding a new value:
* 1. Add an entry to the bottom of the enum before 'MaxValue'.
* 2. Set the value of the new entry to the current value of 'MaxValue'.
* 2. Increment the value of 'MaxValue' by 1.
* When removing a value which is no longer needed:
* 1. Delete the line with the unneeded value
* 2. Do not update any 'MaxValue' or any other value.
*/
// Codes below are used to collect UMA histograms in the Chromium port.
// Do not change the values below, additional actions are needed on the Chromium side
// in order to add more codes.
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum Action {
WindowDocked = 1,
WindowUndocked = 2,
ScriptsBreakpointSet = 3,
TimelineStarted = 4,
ProfilesCPUProfileTaken = 5,
ProfilesHeapProfileTaken = 6,
ConsoleEvaluated = 8,
FileSavedInWorkspace = 9,
DeviceModeEnabled = 10,
AnimationsPlaybackRateChanged = 11,
RevisionApplied = 12,
FileSystemDirectoryContentReceived = 13,
StyleRuleEdited = 14,
CommandEvaluatedInConsolePanel = 15,
DOMPropertiesExpanded = 16,
ResizedViewInResponsiveMode = 17,
TimelinePageReloadStarted = 18,
ConnectToNodeJSFromFrontend = 19,
ConnectToNodeJSDirectly = 20,
CpuThrottlingEnabled = 21,
CpuProfileNodeFocused = 22,
CpuProfileNodeExcluded = 23,
SelectFileFromFilePicker = 24,
SelectCommandFromCommandMenu = 25,
ChangeInspectedNodeInElementsPanel = 26,
StyleRuleCopied = 27,
CoverageStarted = 28,
LighthouseStarted = 29,
LighthouseFinished = 30,
ShowedThirdPartyBadges = 31,
LighthouseViewTrace = 32,
FilmStripStartedRecording = 33,
CoverageReportFiltered = 34,
CoverageStartedPerBlock = 35,
'SettingsOpenedFromGear-deprecated' = 36,
'SettingsOpenedFromMenu-deprecated' = 37,
'SettingsOpenedFromCommandMenu-deprecated' = 38,
TabMovedToDrawer = 39,
TabMovedToMainPanel = 40,
CaptureCssOverviewClicked = 41,
VirtualAuthenticatorEnvironmentEnabled = 42,
SourceOrderViewActivated = 43,
UserShortcutAdded = 44,
ShortcutRemoved = 45,
ShortcutModified = 46,
CustomPropertyLinkClicked = 47,
CustomPropertyEdited = 48,
ServiceWorkerNetworkRequestClicked = 49,
ServiceWorkerNetworkRequestClosedQuickly = 50,
NetworkPanelServiceWorkerRespondWith = 51,
NetworkPanelCopyValue = 52,
ConsoleSidebarOpened = 53,
PerfPanelTraceImported = 54,
PerfPanelTraceExported = 55,
StackFrameRestarted = 56,
CaptureTestProtocolClicked = 57,
BreakpointRemovedFromRemoveButton = 58,
BreakpointGroupExpandedStateChanged = 59,
MaxValue = 60,
}
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum PanelCodes {
elements = 1,
resources = 2,
network = 3,
sources = 4,
timeline = 5,
heap_profiler = 6,
console = 8,
layers = 9,
'console-view' = 10,
'animations' = 11,
'network.config' = 12,
'rendering' = 13,
'sensors' = 14,
'sources.search' = 15,
security = 16,
js_profiler = 17,
lighthouse = 18,
'coverage' = 19,
'protocol-monitor' = 20,
'remote-devices' = 21,
'web-audio' = 22,
'changes.changes' = 23,
'performance.monitor' = 24,
'release-note' = 25,
'live_heap_profile' = 26,
'sources.quick' = 27,
'network.blocked-urls' = 28,
'settings-preferences' = 29,
'settings-workspace' = 30,
'settings-experiments' = 31,
'settings-blackbox' = 32,
'settings-devices' = 33,
'settings-throttling-conditions' = 34,
'settings-emulation-locations' = 35,
'settings-shortcuts' = 36,
'issues-pane' = 37,
'settings-keybinds' = 38,
'cssoverview' = 39,
'chrome_recorder' = 40,
'trust_tokens' = 41,
'reporting_api' = 42,
'interest_groups' = 43,
'back_forward_cache' = 44,
'service_worker_cache' = 45,
'background_service_backgroundFetch' = 46,
'background_service_backgroundSync' = 47,
'background_service_pushMessaging' = 48,
'background_service_notifications' = 49,
'background_service_paymentHandler' = 50,
'background_service_periodicBackgroundSync' = 51,
'service_workers' = 52,
'app_manifest' = 53,
'storage' = 54,
'cookies' = 55,
'frame_details' = 56,
'frame_resource' = 57,
'frame_window' = 58,
'frame_worker' = 59,
'dom_storage' = 60,
'indexed_db' = 61,
'web_sql' = 62,
'performance_insights' = 63,
'preloading' = 64,
MaxValue = 65,
}
/* eslint-enable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum SidebarPaneCodes {
'OtherSidebarPane' = 0,
'Styles' = 1,
'Computed' = 2,
'elements.layout' = 3,
'elements.eventListeners' = 4,
'elements.domBreakpoints' = 5,
'elements.domProperties' = 6,
'accessibility.view' = 7,
MaxValue = 8,
}
/* eslint-enable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum MediaTypes {
Unknown = 0,
'text/javascript' = 1,
'text/css' = 2,
'text/html' = 3,
'application/xml' = 4,
'application/wasm' = 5,
'application/manifest+json' = 6,
'application/x-aspx' = 7,
'application/jsp' = 8,
'text/x-c++src' = 9,
'text/x-coffeescript' = 10,
'application/vnd.dart' = 11,
'text/typescript' = 12,
'text/typescript-jsx' = 13,
'application/json' = 14,
'text/x-csharp' = 15,
'text/x-java' = 16,
'text/x-less' = 17,
'application/x-httpd-php' = 18,
'text/x-python' = 19,
'text/x-sh' = 20,
'text/x-gss' = 21,
'text/x-sass' = 22,
'text/x-scss' = 23,
'text/markdown' = 24,
'text/x-clojure' = 25,
'text/jsx' = 26,
'text/x-go' = 27,
'text/x-kotlin' = 28,
'text/x-scala' = 29,
'text/x.svelte' = 30,
MaxValue = 31,
}
/* eslint-enable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum KeybindSetSettings {
'devToolsDefault' = 0,
'vsCode' = 1,
MaxValue = 2,
}
/* eslint-enable @typescript-eslint/naming-convention */
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum KeyboardShortcutAction {
OtherShortcut = 0,
'commandMenu.show' = 1,
'console.clear' = 2,
'console.show' = 3,
'debugger.step' = 4,
'debugger.step-into' = 5,
'debugger.step-out' = 6,
'debugger.step-over' = 7,
'debugger.toggle-breakpoint' = 8,
'debugger.toggle-breakpoint-enabled' = 9,
'debugger.toggle-pause' = 10,
'elements.edit-as-html' = 11,
'elements.hide-element' = 12,
'elements.redo' = 13,
'elements.toggle-element-search' = 14,
'elements.undo' = 15,
'main.search-in-panel.find' = 16,
'main.toggle-drawer' = 17,
'network.hide-request-details' = 18,
'network.search' = 19,
'network.toggle-recording' = 20,
'quickOpen.show' = 21,
'settings.show' = 22,
'sources.search' = 23,
'background-service.toggle-recording' = 24,
'components.collect-garbage' = 25,
'console.clear.history' = 26,
'console.create-pin' = 27,
'coverage.start-with-reload' = 28,
'coverage.toggle-recording' = 29,
'debugger.breakpoint-input-window' = 30,
'debugger.evaluate-selection' = 31,
'debugger.next-call-frame' = 32,
'debugger.previous-call-frame' = 33,
'debugger.run-snippet' = 34,
'debugger.toggle-breakpoints-active' = 35,
'elements.capture-area-screenshot' = 36,
'emulation.capture-full-height-screenshot' = 37,
'emulation.capture-node-screenshot' = 38,
'emulation.capture-screenshot' = 39,
'emulation.show-sensors' = 40,
'emulation.toggle-device-mode' = 41,
'help.release-notes' = 42,
'help.report-issue' = 43,
'input.start-replaying' = 44,
'input.toggle-pause' = 45,
'input.toggle-recording' = 46,
'inspector_main.focus-debuggee' = 47,
'inspector_main.hard-reload' = 48,
'inspector_main.reload' = 49,
'live-heap-profile.start-with-reload' = 50,
'live-heap-profile.toggle-recording' = 51,
'main.debug-reload' = 52,
'main.next-tab' = 53,
'main.previous-tab' = 54,
'main.search-in-panel.cancel' = 55,
'main.search-in-panel.find-next' = 56,
'main.search-in-panel.find-previous' = 57,
'main.toggle-dock' = 58,
'main.zoom-in' = 59,
'main.zoom-out' = 60,
'main.zoom-reset' = 61,
'network-conditions.network-low-end-mobile' = 62,
'network-conditions.network-mid-tier-mobile' = 63,
'network-conditions.network-offline' = 64,
'network-conditions.network-online' = 65,
'profiler.heap-toggle-recording' = 66,
'profiler.js-toggle-recording' = 67,
'resources.clear' = 68,
'settings.documentation' = 69,
'settings.shortcuts' = 70,
'sources.add-folder-to-workspace' = 71,
'sources.add-to-watch' = 72,
'sources.close-all' = 73,
'sources.close-editor-tab' = 74,
'sources.create-snippet' = 75,
'sources.go-to-line' = 76,
'sources.go-to-member' = 77,
'sources.jump-to-next-location' = 78,
'sources.jump-to-previous-location' = 79,
'sources.rename' = 80,
'sources.save' = 81,
'sources.save-all' = 82,
'sources.switch-file' = 83,
'timeline.jump-to-next-frame' = 84,
'timeline.jump-to-previous-frame' = 85,
'timeline.load-from-file' = 86,
'timeline.next-recording' = 87,
'timeline.previous-recording' = 88,
'timeline.record-reload' = 89,
'timeline.save-to-file' = 90,
'timeline.show-history' = 91,
'timeline.toggle-recording' = 92,
'sources.increment-css' = 93,
'sources.increment-css-by-ten' = 94,
'sources.decrement-css' = 95,
'sources.decrement-css-by-ten' = 96,
'layers.reset-view' = 97,
'layers.pan-mode' = 98,
'layers.rotate-mode' = 99,
'layers.zoom-in' = 100,
'layers.zoom-out' = 101,
'layers.up' = 102,
'layers.down' = 103,
'layers.left' = 104,
'layers.right' = 105,
'help.report-translation-issue' = 106,
'rendering.toggle-prefers-color-scheme' = 107,
'chrome_recorder.start-recording' = 108,
'chrome_recorder.replay-recording' = 109,
'chrome_recorder.toggle-code-view' = 110,
'chrome_recorder.copy-recording-or-step' = 111,
MaxValue = 112,
}
/* eslint-enable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum IssueOpener {
ConsoleInfoBar = 0,
LearnMoreLinkCOEP = 1,
StatusBarIssuesCounter = 2,
HamburgerMenu = 3,
Adorner = 4,
CommandMenu = 5,
MaxValue = 6,
}
/**
* This list should contain the currently active Devtools Experiments,
* gaps are expected.
*/
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum DevtoolsExperiments {
'applyCustomStylesheet' = 0,
'captureNodeCreationStacks' = 1,
'sourcesPrettyPrint' = 2,
'inputEventsOnTimelineOverview' = 10,
'liveHeapProfile' = 11,
'protocolMonitor' = 13,
'developerResourcesView' = 15,
'recordCoverageWithPerformanceTracing' = 16,
'samplingHeapProfilerTimeline' = 17,
'showOptionToExposeInternalsInHeapSnapshot' = 18,
'sourceOrderViewer' = 20,
'webauthnPane' = 22,
'timelineEventInitiators' = 24,
'timelineInvalidationTracking' = 26,
'timelineShowAllEvents' = 27,
'timelineV8RuntimeCallStats' = 28,
'timelineReplayEvent' = 30,
'wasmDWARFDebugging' = 31,
'dualScreenSupport' = 32,
'keyboardShortcutEditor' = 35,
'APCA' = 39,
'cspViolationsView' = 40,
'fontEditor' = 41,
'fullAccessibilityTree' = 42,
'ignoreListJSFramesOnTimeline' = 43,
'contrastIssues' = 44,
'experimentalCookieFeatures' = 45,
'groupAndHideIssuesByKind' = 51,
'cssTypeComponentLength' = 52,
'preciseChanges' = 53,
'bfcacheDisplayTree' = 54,
'stylesPaneCSSChanges' = 55,
'headerOverrides' = 56,
'evaluateExpressionsWithSourceMaps' = 58,
'eyedropperColorPicker' = 60,
'instrumentationBreakpoints' = 61,
'cssAuthoringHints' = 62,
'authoredDeployedGrouping' = 63,
'importantDOMProperties' = 64,
'justMyCode' = 65,
'breakpointView' = 66,
'timelineAsConsoleProfileResultPanel' = 67,
'preloadingStatusPanel' = 68,
'disableColorFormatSetting' = 69,
// Increment this when new experiments are added.
'MaxValue' = 71,
}
/* eslint-enable @typescript-eslint/naming-convention */
export const enum BreakpointWithConditionAdded {
Logpoint = 0,
ConditionalBreakpoint = 1,
MaxValue = 2,
}
export const enum BreakpointEditDialogRevealedFrom {
BreakpointSidebarContextMenu = 0,
BreakpointSidebarEditButton = 1,
BreakpointMarkerContextMenu = 2,
LineGutterContextMenu = 3,
KeyboardShortcut = 4,
MaxValue = 5,
}
export const enum ColorConvertedFrom {
ColorSwatch = 0,
ColorPicker = 1,
MaxValue = 2,
}
export const enum ColorPickerOpenedFrom {
SourcesPanel = 0,
StylesPane = 1,
MaxValue = 2,
}
export const enum CSSPropertyDocumentation {
Shown = 0,
ToggledOn = 1,
ToggledOff = 2,
MaxValue = 3,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum IssueExpanded {
CrossOriginEmbedderPolicy = 0,
MixedContent = 1,
Cookie = 2,
HeavyAd = 3,
ContentSecurityPolicy = 4,
Other = 5,
MaxValue = 6,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum IssueResourceOpened {
CrossOriginEmbedderPolicyRequest = 0,
CrossOriginEmbedderPolicyElement = 1,
MixedContentRequest = 2,
SameSiteCookieCookie = 3,
SameSiteCookieRequest = 4,
HeavyAdElement = 5,
ContentSecurityPolicyDirective = 6,
ContentSecurityPolicyElement = 7,
CrossOriginEmbedderPolicyLearnMore = 8,
MixedContentLearnMore = 9,
SameSiteCookieLearnMore = 10,
HeavyAdLearnMore = 11,
ContentSecurityPolicyLearnMore = 12,
MaxValue = 13,
}
/**
* This list should contain the currently active issue types,
* gaps are expected.
*/
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum IssueCreated {
MixedContentIssue = 0,
'ContentSecurityPolicyIssue::kInlineViolation' = 1,
'ContentSecurityPolicyIssue::kEvalViolation' = 2,
'ContentSecurityPolicyIssue::kURLViolation' = 3,
'ContentSecurityPolicyIssue::kTrustedTypesSinkViolation' = 4,
'ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation' = 5,
'HeavyAdIssue::NetworkTotalLimit' = 6,
'HeavyAdIssue::CpuTotalLimit' = 7,
'HeavyAdIssue::CpuPeakLimit' = 8,
'CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader' = 9,
'CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage' = 10,
'CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin' = 11,
'CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep' = 12,
'CrossOriginEmbedderPolicyIssue::CorpNotSameSite' = 13,
'CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie' = 14,
'CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie' = 15,
'CookieIssue::WarnSameSiteNoneInsecure::ReadCookie' = 16,
'CookieIssue::WarnSameSiteNoneInsecure::SetCookie' = 17,
'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure' = 18,
'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure' = 19,
'CookieIssue::WarnCrossDowngrade::ReadCookie::Secure' = 20,
'CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure' = 21,
'CookieIssue::WarnCrossDowngrade::SetCookie::Secure' = 22,
'CookieIssue::WarnCrossDowngrade::SetCookie::Insecure' = 23,
'CookieIssue::ExcludeNavigationContextDowngrade::Secure' = 24,
'CookieIssue::ExcludeNavigationContextDowngrade::Insecure' = 25,
'CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure' = 26,
'CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure' = 27,
'CookieIssue::ExcludeContextDowngrade::SetCookie::Secure' = 28,
'CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure' = 29,
'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie' = 30,
'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie' = 31,
'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie' = 32,
'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie' = 33,
'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie' = 34,
'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie' = 35,
'SharedArrayBufferIssue::TransferIssue' = 36,
'SharedArrayBufferIssue::CreationIssue' = 37,
'TrustedWebActivityIssue::kHttpError' = 38,
'TrustedWebActivityIssue::kUnavailableOffline' = 39,
'TrustedWebActivityIssue::kDigitalAssetLinks' = 40,
LowTextContrastIssue = 41,
'CorsIssue::InsecurePrivateNetwork' = 42,
'CorsIssue::InvalidHeaders' = 44,
'CorsIssue::WildcardOriginWithCredentials' = 45,
'CorsIssue::PreflightResponseInvalid' = 46,
'CorsIssue::OriginMismatch' = 47,
'CorsIssue::AllowCredentialsRequired' = 48,
'CorsIssue::MethodDisallowedByPreflightResponse' = 49,
'CorsIssue::HeaderDisallowedByPreflightResponse' = 50,
'CorsIssue::RedirectContainsCredentials' = 51,
'CorsIssue::DisallowedByMode' = 52,
'CorsIssue::CorsDisabledScheme' = 53,
'CorsIssue::PreflightMissingAllowExternal' = 54,
'CorsIssue::PreflightInvalidAllowExternal' = 55,
'CorsIssue::NoCorsRedirectModeNotFollow' = 57,
'QuirksModeIssue::QuirksMode' = 58,
'QuirksModeIssue::LimitedQuirksMode' = 59,
DeprecationIssue = 60,
'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,
'ClientHintIssue::MetaTagModifiedHTML' = 62,
'CorsIssue::PreflightAllowPrivateNetworkError' = 63,
MaxValue = 64,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum DeveloperResourceLoaded {
LoadThroughPageViaTarget = 0,
LoadThroughPageViaFrame = 1,
LoadThroughPageFailure = 2,
LoadThroughPageFallback = 3,
FallbackAfterFailure = 4,
FallbackPerOverride = 5,
FallbackPerProtocol = 6,
FallbackFailure = 7,
MaxValue = 8,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum DeveloperResourceScheme {
SchemeOther = 0,
SchemeUnknown = 1,
SchemeHttp = 2,
SchemeHttps = 3,
SchemeHttpLocalhost = 4,
SchemeHttpsLocalhost = 5,
SchemeData = 6,
SchemeFile = 7,
SchemeBlob = 8,
MaxValue = 9,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum LinearMemoryInspectorRevealedFrom {
ContextMenu = 0,
MemoryIcon = 1,
MaxValue = 2,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum LinearMemoryInspectorTarget {
DWARFInspectableAddress = 0,
ArrayBuffer = 1,
DataView = 2,
TypedArray = 3,
WebAssemblyMemory = 4,
MaxValue = 5,
}
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717) = Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum Language {
'af' = 1,
'am' = 2,
'ar' = 3,
'as' = 4,
'az' = 5,
'be' = 6,
'bg' = 7,
'bn' = 8,
'bs' = 9,
'ca' = 10,
'cs' = 11,
'cy' = 12,
'da' = 13,
'de' = 14,
'el' = 15,
'en-GB' = 16,
'en-US' = 17,
'es-419' = 18,
'es' = 19,
'et' = 20,
'eu' = 21,
'fa' = 22,
'fi' = 23,
'fil' = 24,
'fr-CA' = 25,
'fr' = 26,
'gl' = 27,
'gu' = 28,
'he' = 29,
'hi' = 30,
'hr' = 31,
'hu' = 32,
'hy' = 33,
'id' = 34,
'is' = 35,
'it' = 36,
'ja' = 37,
'ka' = 38,
'kk' = 39,
'km' = 40,
'kn' = 41,
'ko' = 42,
'ky' = 43,
'lo' = 44,
'lt' = 45,
'lv' = 46,
'mk' = 47,
'ml' = 48,
'mn' = 49,
'mr' = 50,
'ms' = 51,
'my' = 52,
'ne' = 53,
'nl' = 54,
'no' = 55,
'or' = 56,
'pa' = 57,
'pl' = 58,
'pt-PT' = 59,
'pt' = 60,
'ro' = 61,
'ru' = 62,
'si' = 63,
'sk' = 64,
'sl' = 65,
'sq' = 66,
'sr-Latn' = 67,
'sr' = 68,
'sv' = 69,
'sw' = 70,
'ta' = 71,
'te' = 72,
'th' = 73,
'tr' = 74,
'uk' = 75,
'ur' = 76,
'uz' = 77,
'vi' = 78,
'zh' = 79,
'zh-HK' = 80,
'zh-TW' = 81,
'zu' = 82,
MaxValue = 83,
}
/* eslint-enable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum SyncSetting {
ChromeSyncDisabled = 1,
ChromeSyncSettingsDisabled = 2,
DevToolsSyncSettingDisabled = 3,
DevToolsSyncSettingEnabled = 4,
MaxValue = 5,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingToggled {
RecordingStarted = 1,
RecordingFinished = 2,
MaxValue = 3,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingReplayFinished {
Success = 1,
TimeoutErrorSelectors = 2,
TimeoutErrorTarget = 3,
OtherError = 4,
MaxValue = 5,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingReplaySpeed {
Normal = 1,
Slow = 2,
VerySlow = 3,
ExtremelySlow = 4,
MaxValue = 5,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingReplayStarted {
ReplayOnly = 1,
ReplayWithPerformanceTracing = 2,
ReplayViaExtension = 3,
MaxValue = 4,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingEdited {
SelectorPickerUsed = 1,
StepAdded = 2,
StepRemoved = 3,
SelectorAdded = 4,
SelectorRemoved = 5,
SelectorPartAdded = 6,
SelectorPartEdited = 7,
SelectorPartRemoved = 8,
TypeChanged = 9,
OtherEditing = 10,
MaxValue = 11,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingExported {
ToPuppeteer = 1,
ToJSON = 2,
ToPuppeteerReplay = 3,
ToExtension = 4,
ToLighthouse = 5,
MaxValue = 6,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingCodeToggled {
CodeShown = 1,
CodeHidden = 2,
MaxValue = 3,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum RecordingCopiedToClipboard {
CopiedRecordingWithPuppeteer = 1,
CopiedRecordingWithJSON = 2,
CopiedRecordingWithReplay = 3,
CopiedRecordingWithExtension = 4,
CopiedStepWithPuppeteer = 5,
CopiedStepWithJSON = 6,
CopiedStepWithReplay = 7,
CopiedStepWithExtension = 8,
MaxValue = 9,
}
/* eslint-disable @typescript-eslint/naming-convention */
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum ConsoleShowsCorsErrors {
'false' = 0,
'true' = 1,
MaxValue = 2,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum StyleTextCopied {
DeclarationViaChangedLine = 1,
AllChangesViaStylesPane = 2,
DeclarationViaContextMenu = 3,
PropertyViaContextMenu = 4,
ValueViaContextMenu = 5,
DeclarationAsJSViaContextMenu = 6,
RuleViaContextMenu = 7,
AllDeclarationsViaContextMenu = 8,
AllDeclarationsAsJSViaContextMenu = 9,
SelectorViaContextMenu = 10,
MaxValue = 11,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum ManifestSectionCodes {
OtherSection = 0,
'Identity' = 1,
'Presentation' = 2,
'Protocol Handlers' = 3,
'Icons' = 4,
MaxValue = 5,
}
// The names here match the CSSRuleValidator names in CSSRuleValidator.ts.
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum CSSHintType {
Other = 0,
AlignContent = 1,
FlexItem = 2,
FlexContainer = 3,
GridContainer = 4,
GridItem = 5,
FlexGrid = 6,
MulticolFlexGrid = 7,
Padding = 8,
Position = 9,
ZIndex = 10,
Sizing = 11,
FlexOrGridItem = 12,
MaxValue = 13,
}
// TODO(crbug.com/1167717): Make this a const enum again
// eslint-disable-next-line rulesdir/const_enum
export enum LighthouseModeRun {
Navigation = 0,
Timespan = 1,
Snapshot = 2,
LegacyNavigation = 3,
MaxValue = 4,
}
/* eslint-enable @typescript-eslint/naming-convention */