UNPKG

chrome-devtools-frontend

Version:
510 lines (414 loc) • 17.3 kB
// Copyright (c) 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import type * as Platform from '../../core/platform/platform.js'; import type * as Common from '../common/common.js'; import type * as Root from '../root/root.js'; export enum Events { /* eslint-disable @typescript-eslint/naming-convention -- Accessed from web_tests */ AppendedToURL = 'appendedToURL', CanceledSaveURL = 'canceledSaveURL', ColorThemeChanged = 'colorThemeChanged', ContextMenuCleared = 'contextMenuCleared', ContextMenuItemSelected = 'contextMenuItemSelected', DeviceCountUpdated = 'deviceCountUpdated', DevicesDiscoveryConfigChanged = 'devicesDiscoveryConfigChanged', DevicesPortForwardingStatusChanged = 'devicesPortForwardingStatusChanged', DevicesUpdated = 'devicesUpdated', DispatchMessage = 'dispatchMessage', DispatchMessageChunk = 'dispatchMessageChunk', EnterInspectElementMode = 'enterInspectElementMode', EyeDropperPickedColor = 'eyeDropperPickedColor', FileSystemsLoaded = 'fileSystemsLoaded', FileSystemRemoved = 'fileSystemRemoved', FileSystemAdded = 'fileSystemAdded', FileSystemFilesChangedAddedRemoved = 'FileSystemFilesChangedAddedRemoved', IndexingTotalWorkCalculated = 'indexingTotalWorkCalculated', IndexingWorked = 'indexingWorked', IndexingDone = 'indexingDone', KeyEventUnhandled = 'keyEventUnhandled', ReloadInspectedPage = 'reloadInspectedPage', RevealSourceLine = 'revealSourceLine', SavedURL = 'savedURL', SearchCompleted = 'searchCompleted', SetInspectedTabId = 'setInspectedTabId', SetUseSoftMenu = 'setUseSoftMenu', ShowPanel = 'showPanel', /* eslint-enable @typescript-eslint/naming-convention */ } export const EventDescriptors = [ [Events.AppendedToURL, 'appendedToURL', ['url']], [Events.CanceledSaveURL, 'canceledSaveURL', ['url']], [Events.ColorThemeChanged, 'colorThemeChanged', []], [Events.ContextMenuCleared, 'contextMenuCleared', []], [Events.ContextMenuItemSelected, 'contextMenuItemSelected', ['id']], [Events.DeviceCountUpdated, 'deviceCountUpdated', ['count']], [Events.DevicesDiscoveryConfigChanged, 'devicesDiscoveryConfigChanged', ['config']], [Events.DevicesPortForwardingStatusChanged, 'devicesPortForwardingStatusChanged', ['status']], [Events.DevicesUpdated, 'devicesUpdated', ['devices']], [Events.DispatchMessage, 'dispatchMessage', ['messageObject']], [Events.DispatchMessageChunk, 'dispatchMessageChunk', ['messageChunk', 'messageSize']], [Events.EnterInspectElementMode, 'enterInspectElementMode', []], [Events.EyeDropperPickedColor, 'eyeDropperPickedColor', ['color']], [Events.FileSystemsLoaded, 'fileSystemsLoaded', ['fileSystems']], [Events.FileSystemRemoved, 'fileSystemRemoved', ['fileSystemPath']], [Events.FileSystemAdded, 'fileSystemAdded', ['errorMessage', 'fileSystem']], [Events.FileSystemFilesChangedAddedRemoved, 'fileSystemFilesChangedAddedRemoved', ['changed', 'added', 'removed']], [Events.IndexingTotalWorkCalculated, 'indexingTotalWorkCalculated', ['requestId', 'fileSystemPath', 'totalWork']], [Events.IndexingWorked, 'indexingWorked', ['requestId', 'fileSystemPath', 'worked']], [Events.IndexingDone, 'indexingDone', ['requestId', 'fileSystemPath']], [Events.KeyEventUnhandled, 'keyEventUnhandled', ['event']], [Events.ReloadInspectedPage, 'reloadInspectedPage', ['hard']], [Events.RevealSourceLine, 'revealSourceLine', ['url', 'lineNumber', 'columnNumber']], [Events.SavedURL, 'savedURL', ['url', 'fileSystemPath']], [Events.SearchCompleted, 'searchCompleted', ['requestId', 'fileSystemPath', 'files']], [Events.SetInspectedTabId, 'setInspectedTabId', ['tabId']], [Events.SetUseSoftMenu, 'setUseSoftMenu', ['useSoftMenu']], [Events.ShowPanel, 'showPanel', ['panelName']], ] as const; export interface DispatchMessageChunkEvent { messageChunk: string; messageSize: number; } export interface EyeDropperPickedColorEvent { r: number; g: number; b: number; a: number; } export interface DevToolsFileSystem { type: ''|'automatic'|'snippets'|'overrides'; fileSystemName: string; rootURL: string; fileSystemPath: Platform.DevToolsPath.RawPathString; } export interface FileSystemAddedEvent { errorMessage?: string; fileSystem: DevToolsFileSystem|null; } export interface FilesChangedEvent { changed: Platform.DevToolsPath.RawPathString[]; added: Platform.DevToolsPath.RawPathString[]; removed: Platform.DevToolsPath.RawPathString[]; } export interface IndexingEvent { requestId: number; fileSystemPath: string; } export interface IndexingTotalWorkCalculatedEvent extends IndexingEvent { totalWork: number; } export interface IndexingWorkedEvent extends IndexingEvent { worked: number; } export interface KeyEventUnhandledEvent { type: string; key: string; keyCode: number; modifiers: number; } export interface RevealSourceLineEvent { url: Platform.DevToolsPath.UrlString; lineNumber: number; columnNumber: number; } export interface SavedURLEvent { url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString; fileSystemPath: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString; } export interface SearchCompletedEvent { requestId: number; files: Platform.DevToolsPath.RawPathString[]; } export interface DoAidaConversationResult { statusCode?: number; headers?: Record<string, string>; netError?: number; netErrorName?: string; error?: string; detail?: string; } export interface AidaClientResult { response?: string; error?: string; detail?: string; } export interface VisualElementImpression { id: number; type: number; parent?: number; context?: number; width?: number; height?: number; } export interface ImpressionEvent { impressions: VisualElementImpression[]; } export interface ResizeEvent { veid: number; width?: number; height?: number; } export interface ClickEvent { veid: number; mouseButton?: number; context?: number; doubleClick: boolean; } export interface HoverEvent { veid: number; time?: number; context?: number; } export interface DragEvent { veid: number; context?: number; } export interface ChangeEvent { veid: number; context?: number; } export interface KeyDownEvent { veid?: number; context?: number; } export interface SettingAccessEvent { name: number; // eslint-disable-next-line @typescript-eslint/naming-convention numeric_value?: number; // eslint-disable-next-line @typescript-eslint/naming-convention string_value?: number; } export interface FunctionCallEvent { name: number; context?: number; } // While `EventDescriptors` are used to dynamically dispatch host binding events, // the `EventTypes` "type map" is used for type-checking said events by TypeScript. // `EventTypes` is not used at runtime. // Please note that the "dispatch" side can't be type-checked as the dispatch is // done dynamically. export interface EventTypes { [Events.AppendedToURL]: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString; [Events.CanceledSaveURL]: Platform.DevToolsPath.UrlString; [Events.ColorThemeChanged]: void; [Events.ContextMenuCleared]: void; [Events.ContextMenuItemSelected]: number; [Events.DeviceCountUpdated]: number; [Events.DevicesDiscoveryConfigChanged]: Adb.Config; [Events.DevicesPortForwardingStatusChanged]: void; [Events.DevicesUpdated]: void; [Events.DispatchMessage]: string; [Events.DispatchMessageChunk]: DispatchMessageChunkEvent; [Events.EnterInspectElementMode]: void; [Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent; [Events.FileSystemsLoaded]: DevToolsFileSystem[]; [Events.FileSystemRemoved]: Platform.DevToolsPath.RawPathString; [Events.FileSystemAdded]: FileSystemAddedEvent; [Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent; [Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent; [Events.IndexingWorked]: IndexingWorkedEvent; [Events.IndexingDone]: IndexingEvent; [Events.KeyEventUnhandled]: KeyEventUnhandledEvent; [Events.ReloadInspectedPage]: boolean; [Events.RevealSourceLine]: RevealSourceLineEvent; [Events.SavedURL]: SavedURLEvent; [Events.SearchCompleted]: SearchCompletedEvent; [Events.SetInspectedTabId]: string; [Events.SetUseSoftMenu]: boolean; [Events.ShowPanel]: string; } export interface InspectorFrontendHostAPI { events: Common.EventTarget.EventTarget<EventTypes>; connectAutomaticFileSystem( fileSystemPath: Platform.DevToolsPath.RawPathString, fileSystemUUID: string, addIfMissing: boolean, callback: (result: {success: boolean}) => void, ): void; disconnectAutomaticFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void; addFileSystem(type?: string): void; loadCompleted(): void; indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void; /** * Requests inspected page to be placed atop of the inspector frontend with specified bounds. */ setInspectedPageBounds(bounds: { x: number, y: number, width: number, height: number, }): void; showCertificateViewer(certChain: string[]): void; setWhitelistedShortcuts(shortcuts: string): void; setEyeDropperActive(active: boolean): void; inspectElementCompleted(): void; openInNewTab(url: Platform.DevToolsPath.UrlString): void; openSearchResultsInNewTab(query: string): void; showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void; removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void; requestFileSystems(): void; save(url: Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean, isBase64: boolean): void; append(url: Platform.DevToolsPath.UrlString, content: string): void; close(url: Platform.DevToolsPath.UrlString): void; searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void; stopIndexing(requestId: number): void; bringToFront(): void; closeWindow(): void; /** * Don't use directly - use {@link CopyToClipboard.copyTextToClipboard} instead. * @deprecated Marked to restrict usage. */ copyText(text: string|null|undefined): void; inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void; isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null; loadNetworkResource( url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void; registerPreference(name: string, options: {synced?: boolean}): void; getPreferences(callback: (arg0: Record<string, string>) => void): void; getPreference(name: string, callback: (arg0: string) => void): void; setPreference(name: string, value: string): void; removePreference(name: string): void; clearPreferences(): void; getSyncInformation(callback: (arg0: SyncInformation) => void): void; getHostConfig(callback: (arg0: Root.Runtime.HostConfig) => void): void; upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void; platform(): string; recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number): void; recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void; recordPerformanceHistogram(histogramName: string, duration: number): void; recordUserMetricsAction(umaName: string): void; sendMessageToBackend(message: string): void; setDevicesDiscoveryConfig(config: Adb.Config): void; setDevicesUpdatesEnabled(enabled: boolean): void; openRemotePage(browserId: string, url: string): void; openNodeFrontend(): void; setInjectedScriptForOrigin(origin: string, script: string): void; setIsDocked(isDocked: boolean, callback: () => void): void; showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void; canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void; zoomFactor(): number; zoomIn(): void; zoomOut(): void; resetZoom(): void; showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void; reattach(callback: () => void): void; readyForTest(): void; connectionReady(): void; setOpenNewWindowForPopups(value: boolean): void; isHostedMode(): boolean; setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void; initialTargetId(): Promise<string|null>; doAidaConversation: (request: string, streamId: number, cb: (result: DoAidaConversationResult) => void) => void; registerAidaClientEvent: (request: string, cb: (result: AidaClientResult) => void) => void; recordImpression(event: ImpressionEvent): void; recordClick(event: ClickEvent): void; recordHover(event: HoverEvent): void; recordDrag(event: DragEvent): void; recordChange(event: ChangeEvent): void; recordKeyDown(event: KeyDownEvent): void; recordSettingAccess(event: SettingAccessEvent): void; recordFunctionCall(event: FunctionCallEvent): void; } export interface AcceleratorDescriptor { keyCode: number; modifiers: number; } export interface ContextMenuDescriptor { type: 'checkbox'|'item'|'separator'|'subMenu'; id?: number; label?: string; accelerator?: AcceleratorDescriptor; isExperimentalFeature?: boolean; enabled?: boolean; checked?: boolean; isDevToolsPerformanceMenuItem?: boolean; subItems?: ContextMenuDescriptor[]; shortcut?: string; jslogContext?: string; } export interface LoadNetworkResourceResult { statusCode: number; headers?: Record<string, string>; netError?: number; netErrorName?: string; urlValid?: boolean; messageOverride?: string; } export interface ExtensionDescriptor { startPage: string; name: string; exposeExperimentalAPIs: boolean; hostsPolicy?: ExtensionHostsPolicy; allowFileAccess?: boolean; } export interface ExtensionHostsPolicy { runtimeAllowedHosts: string[]; runtimeBlockedHosts: string[]; } export interface ShowSurveyResult { surveyShown: boolean; } export interface CanShowSurveyResult { canShowSurvey: boolean; } export interface SyncInformation { /** Whether Chrome Sync is enabled and active */ isSyncActive: boolean; /** Whether syncing of Chrome Settings is enabled via Chrome Sync is enabled */ arePreferencesSynced?: boolean; /** The email of the account used for syncing */ accountEmail?: string; /** The image of the account used for syncing. Its a base64 encoded PNG */ accountImage?: string; /** The full name of the account used for syncing */ accountFullName?: string; /** Whether Chrome Sync is paused, equivalent to the user being logged out automatically */ isSyncPaused?: boolean; } /** * Enum for recordPerformanceHistogram * Warning: There is another definition of this enum in the DevTools code * base, keep them in sync: * front_end/devtools_compatibility.js */ export const enum EnumeratedHistogram { /* eslint-disable @typescript-eslint/naming-convention -- Shadows a legacy enum */ // LINT.IfChange(EnumeratedHistogram) ActionTaken = 'DevTools.ActionTaken', PanelShown = 'DevTools.PanelShown', KeyboardShortcutFired = 'DevTools.KeyboardShortcutFired', IssueCreated = 'DevTools.IssueCreated', IssuesPanelIssueExpanded = 'DevTools.IssuesPanelIssueExpanded', IssuesPanelOpenedFrom = 'DevTools.IssuesPanelOpenedFrom', IssuesPanelResourceOpened = 'DevTools.IssuesPanelResourceOpened', KeybindSetSettingChanged = 'DevTools.KeybindSetSettingChanged', ExperimentEnabledAtLaunch = 'DevTools.ExperimentEnabledAtLaunch', ExperimentDisabledAtLaunch = 'DevTools.ExperimentDisabledAtLaunch', ExperimentEnabled = 'DevTools.ExperimentEnabled', ExperimentDisabled = 'DevTools.ExperimentDisabled', DeveloperResourceLoaded = 'DevTools.DeveloperResourceLoaded', DeveloperResourceScheme = 'DevTools.DeveloperResourceScheme', Language = 'DevTools.Language', SyncSetting = 'DevTools.SyncSetting', RecordingAssertion = 'DevTools.RecordingAssertion', RecordingCodeToggled = 'DevTools.RecordingCodeToggled', RecordingCopiedToClipboard = 'DevTools.RecordingCopiedToClipboard', RecordingEdited = 'DevTools.RecordingEdited', RecordingExported = 'DevTools.RecordingExported', RecordingReplayFinished = 'DevTools.RecordingReplayFinished', RecordingReplaySpeed = 'DevTools.RecordingReplaySpeed', RecordingReplayStarted = 'DevTools.RecordingReplayStarted', RecordingToggled = 'DevTools.RecordingToggled', SourcesPanelFileDebugged = 'DevTools.SourcesPanelFileDebugged', SourcesPanelFileOpened = 'DevTools.SourcesPanelFileOpened', NetworkPanelResponsePreviewOpened = 'DevTools.NetworkPanelResponsePreviewOpened', TimelineNavigationSettingState = 'DevTools.TimelineNavigationSettingState', CSSHintShown = 'DevTools.CSSHintShown', LighthouseModeRun = 'DevTools.LighthouseModeRun', LighthouseCategoryUsed = 'DevTools.LighthouseCategoryUsed', SwatchActivated = 'DevTools.SwatchActivated', AnimationPlaybackRateChanged = 'DevTools.AnimationPlaybackRateChanged', // LINT.ThenChange(/front_end/devtools_compatibility.js:EnumeratedHistogram) }