mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-02 00:09:30 +01:00
* profile * wip * use status bar * clean * clean * clean * chore: add netlog category for network tracing --------- Co-authored-by: deepak1556 <hop2deep@gmail.com>
307 lines
11 KiB
TypeScript
307 lines
11 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { VSBuffer } from '../../../base/common/buffer.js';
|
|
import { Event } from '../../../base/common/event.js';
|
|
import { URI } from '../../../base/common/uri.js';
|
|
import { MessageBoxOptions, MessageBoxReturnValue, OpenDevToolsOptions, OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from '../../../base/parts/sandbox/common/electronTypes.js';
|
|
import { ISerializableCommandAction } from '../../action/common/action.js';
|
|
import { INativeOpenDialogOptions } from '../../dialogs/common/dialogs.js';
|
|
import { createDecorator } from '../../instantiation/common/instantiation.js';
|
|
import { IV8Profile } from '../../profiling/common/profiling.js';
|
|
import { AuthInfo, Credentials } from '../../request/common/request.js';
|
|
import { IPartsSplash } from '../../theme/common/themeService.js';
|
|
import { IColorScheme, IOpenedAuxiliaryWindow, IOpenedMainWindow, IOpenEmptyWindowOptions, IOpenWindowOptions, IPoint, IRectangle, IWindowOpenable } from '../../window/common/window.js';
|
|
|
|
export interface IToastOptions {
|
|
readonly id: string;
|
|
|
|
readonly title: string;
|
|
readonly body?: string;
|
|
|
|
readonly actions?: readonly string[];
|
|
|
|
readonly silent?: boolean;
|
|
}
|
|
|
|
export interface IToastResult {
|
|
readonly supported: boolean;
|
|
|
|
readonly clicked: boolean;
|
|
readonly actionIndex?: number;
|
|
}
|
|
|
|
export interface ICPUProperties {
|
|
model: string;
|
|
speed: number;
|
|
}
|
|
|
|
export interface IOSProperties {
|
|
type: string;
|
|
release: string;
|
|
arch: string;
|
|
platform: string;
|
|
cpus: ICPUProperties[];
|
|
}
|
|
|
|
export interface IOSStatistics {
|
|
totalmem: number;
|
|
freemem: number;
|
|
loadavg: number[];
|
|
}
|
|
|
|
export interface INativeHostOptions {
|
|
readonly targetWindowId?: number;
|
|
}
|
|
|
|
export const enum FocusMode {
|
|
|
|
/**
|
|
* (Default) Transfer focus to the target window
|
|
* when the editor is focused.
|
|
*/
|
|
Transfer,
|
|
|
|
/**
|
|
* Transfer focus to the target window when the
|
|
* editor is focused, otherwise notify the user that
|
|
* the app has activity (macOS/Windows only).
|
|
*/
|
|
Notify,
|
|
|
|
/**
|
|
* Force the window to be focused, even if the editor
|
|
* is not currently focused.
|
|
*/
|
|
Force,
|
|
}
|
|
|
|
export interface ICommonNativeHostService {
|
|
|
|
readonly _serviceBrand: undefined;
|
|
|
|
// Properties
|
|
readonly windowId: number;
|
|
|
|
// Events
|
|
readonly onDidOpenMainWindow: Event<number>;
|
|
|
|
readonly onDidMaximizeWindow: Event<number>;
|
|
readonly onDidUnmaximizeWindow: Event<number>;
|
|
|
|
readonly onDidFocusMainWindow: Event<number>;
|
|
readonly onDidBlurMainWindow: Event<number>;
|
|
|
|
readonly onDidChangeWindowFullScreen: Event<{ windowId: number; fullscreen: boolean }>;
|
|
readonly onDidChangeWindowAlwaysOnTop: Event<{ windowId: number; alwaysOnTop: boolean }>;
|
|
|
|
readonly onDidFocusMainOrAuxiliaryWindow: Event<number>;
|
|
readonly onDidBlurMainOrAuxiliaryWindow: Event<number>;
|
|
|
|
readonly onDidChangeDisplay: Event<void>;
|
|
|
|
readonly onDidSuspendOS: Event<void>;
|
|
readonly onDidResumeOS: Event<unknown>;
|
|
|
|
readonly onDidChangeOnBatteryPower: Event<boolean>;
|
|
readonly onDidChangeThermalState: Event<ThermalState>;
|
|
readonly onDidChangeSpeedLimit: Event<number>;
|
|
readonly onWillShutdownOS: Event<void>;
|
|
readonly onDidLockScreen: Event<void>;
|
|
readonly onDidUnlockScreen: Event<void>;
|
|
|
|
readonly onDidChangeColorScheme: Event<IColorScheme>;
|
|
|
|
readonly onDidChangePassword: Event<{ readonly service: string; readonly account: string }>;
|
|
|
|
readonly onDidTriggerWindowSystemContextMenu: Event<{ readonly windowId: number; readonly x: number; readonly y: number }>;
|
|
|
|
// Window
|
|
getWindows(options: { includeAuxiliaryWindows: true }): Promise<Array<IOpenedMainWindow | IOpenedAuxiliaryWindow>>;
|
|
getWindows(options: { includeAuxiliaryWindows: false }): Promise<Array<IOpenedMainWindow>>;
|
|
getWindowCount(): Promise<number>;
|
|
getActiveWindowId(): Promise<number | undefined>;
|
|
getActiveWindowPosition(): Promise<IRectangle | undefined>;
|
|
getNativeWindowHandle(windowId: number): Promise<VSBuffer | undefined>;
|
|
|
|
openWindow(options?: IOpenEmptyWindowOptions): Promise<void>;
|
|
openWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise<void>;
|
|
|
|
openAgentsWindow(): Promise<void>;
|
|
|
|
isFullScreen(options?: INativeHostOptions): Promise<boolean>;
|
|
toggleFullScreen(options?: INativeHostOptions): Promise<void>;
|
|
|
|
getCursorScreenPoint(): Promise<{ readonly point: IPoint; readonly display: IRectangle }>;
|
|
|
|
isMaximized(options?: INativeHostOptions): Promise<boolean>;
|
|
maximizeWindow(options?: INativeHostOptions): Promise<void>;
|
|
unmaximizeWindow(options?: INativeHostOptions): Promise<void>;
|
|
minimizeWindow(options?: INativeHostOptions): Promise<void>;
|
|
moveWindowTop(options?: INativeHostOptions): Promise<void>;
|
|
positionWindow(position: IRectangle, options?: INativeHostOptions): Promise<void>;
|
|
|
|
isWindowAlwaysOnTop(options?: INativeHostOptions): Promise<boolean>;
|
|
toggleWindowAlwaysOnTop(options?: INativeHostOptions): Promise<void>;
|
|
setWindowAlwaysOnTop(alwaysOnTop: boolean, options?: INativeHostOptions): Promise<void>;
|
|
|
|
updateWindowControls(options: INativeHostOptions & { height?: number; backgroundColor?: string; foregroundColor?: string; dimmed?: boolean }): Promise<void>;
|
|
|
|
updateWindowAccentColor(color: 'default' | 'off' | string, inactiveColor: string | undefined): Promise<void>;
|
|
|
|
setMinimumSize(width: number | undefined, height: number | undefined): Promise<void>;
|
|
|
|
saveWindowSplash(splash: IPartsSplash): Promise<void>;
|
|
|
|
setBackgroundThrottling(allowed: boolean): Promise<void>;
|
|
|
|
/**
|
|
* Make the window focused.
|
|
* @param options specify the specific window to focus and the focus mode.
|
|
* Defaults to {@link FocusMode.Transfer}.
|
|
*/
|
|
focusWindow(options?: INativeHostOptions & { mode?: FocusMode }): Promise<void>;
|
|
|
|
// Dialogs
|
|
showMessageBox(options: MessageBoxOptions & INativeHostOptions): Promise<MessageBoxReturnValue>;
|
|
showSaveDialog(options: SaveDialogOptions & INativeHostOptions): Promise<SaveDialogReturnValue>;
|
|
showOpenDialog(options: OpenDialogOptions & INativeHostOptions): Promise<OpenDialogReturnValue>;
|
|
|
|
pickFileFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
|
|
pickFileAndOpen(options: INativeOpenDialogOptions): Promise<void>;
|
|
pickFolderAndOpen(options: INativeOpenDialogOptions): Promise<void>;
|
|
pickWorkspaceAndOpen(options: INativeOpenDialogOptions): Promise<void>;
|
|
|
|
// OS
|
|
showItemInFolder(path: string): Promise<void>;
|
|
setRepresentedFilename(path: string, options?: INativeHostOptions): Promise<void>;
|
|
setDocumentEdited(edited: boolean, options?: INativeHostOptions): Promise<void>;
|
|
openExternal(url: string, defaultApplication?: string): Promise<boolean>;
|
|
moveItemToTrash(fullPath: string): Promise<void>;
|
|
|
|
isAdmin(): Promise<boolean>;
|
|
writeElevated(source: URI, target: URI, options?: { unlock?: boolean }): Promise<void>;
|
|
isRunningUnderARM64Translation(): Promise<boolean>;
|
|
|
|
getOSProperties(): Promise<IOSProperties>;
|
|
getOSStatistics(): Promise<IOSStatistics>;
|
|
getOSVirtualMachineHint(): Promise<number>;
|
|
|
|
getOSColorScheme(): Promise<IColorScheme>;
|
|
|
|
hasWSLFeatureInstalled(): Promise<boolean>;
|
|
|
|
// Screenshots
|
|
getScreenshot(rect?: IRectangle): Promise<VSBuffer | undefined>;
|
|
|
|
// Process
|
|
getProcessId(): Promise<number | undefined>;
|
|
killProcess(pid: number, code: string): Promise<void>;
|
|
|
|
// Clipboard
|
|
triggerPaste(options?: INativeHostOptions): Promise<void>;
|
|
readClipboardText(type?: 'selection' | 'clipboard'): Promise<string>;
|
|
writeClipboardText(text: string, type?: 'selection' | 'clipboard'): Promise<void>;
|
|
readClipboardFindText(): Promise<string>;
|
|
writeClipboardFindText(text: string): Promise<void>;
|
|
writeClipboardBuffer(format: string, buffer: VSBuffer, type?: 'selection' | 'clipboard'): Promise<void>;
|
|
readClipboardBuffer(format: string): Promise<VSBuffer>;
|
|
hasClipboard(format: string, type?: 'selection' | 'clipboard'): Promise<boolean>;
|
|
readImage(): Promise<Uint8Array>;
|
|
|
|
// macOS Touchbar
|
|
newWindowTab(): Promise<void>;
|
|
showPreviousWindowTab(): Promise<void>;
|
|
showNextWindowTab(): Promise<void>;
|
|
moveWindowTabToNewWindow(): Promise<void>;
|
|
mergeAllWindowTabs(): Promise<void>;
|
|
toggleWindowTabsBar(): Promise<void>;
|
|
updateTouchBar(items: ISerializableCommandAction[][]): Promise<void>;
|
|
|
|
// macOS Shell command
|
|
installShellCommand(): Promise<void>;
|
|
uninstallShellCommand(): Promise<void>;
|
|
|
|
// Lifecycle
|
|
notifyReady(): Promise<void>;
|
|
relaunch(options?: { addArgs?: string[]; removeArgs?: string[] }): Promise<void>;
|
|
reload(options?: { disableExtensions?: boolean }): Promise<void>;
|
|
closeWindow(options?: INativeHostOptions): Promise<void>;
|
|
quit(): Promise<void>;
|
|
exit(code: number): Promise<void>;
|
|
|
|
// Development
|
|
openDevTools(options?: Partial<OpenDevToolsOptions> & INativeHostOptions): Promise<void>;
|
|
toggleDevTools(options?: INativeHostOptions): Promise<void>;
|
|
openGPUInfoWindow(): Promise<void>;
|
|
openDevToolsWindow(url: string): Promise<void>;
|
|
openContentTracingWindow(): Promise<void>;
|
|
stopTracing(): Promise<void>;
|
|
|
|
// Perf Introspection
|
|
profileRenderer(session: string, duration: number): Promise<IV8Profile>;
|
|
startTracing(categories: string): Promise<void>;
|
|
|
|
// Connectivity
|
|
resolveProxy(url: string): Promise<string | undefined>;
|
|
lookupAuthorization(authInfo: AuthInfo): Promise<Credentials | undefined>;
|
|
lookupKerberosAuthorization(url: string): Promise<string | undefined>;
|
|
loadCertificates(): Promise<string[]>;
|
|
isPortFree(port: number): Promise<boolean>;
|
|
findFreePort(startPort: number, giveUpAfter: number, timeout: number, stride?: number): Promise<number>;
|
|
|
|
// Registry (Windows only)
|
|
windowsGetStringRegKey(hive: 'HKEY_CURRENT_USER' | 'HKEY_LOCAL_MACHINE' | 'HKEY_CLASSES_ROOT' | 'HKEY_USERS' | 'HKEY_CURRENT_CONFIG', path: string, name: string): Promise<string | undefined>;
|
|
|
|
// Toast Notifications
|
|
showToast(options: IToastOptions): Promise<IToastResult>;
|
|
clearToast(id: string): Promise<void>;
|
|
clearToasts(): Promise<void>;
|
|
|
|
// Zip
|
|
/**
|
|
* Creates a zip file at the specified path containing the provided files.
|
|
*
|
|
* @param zipPath The URI where the zip file should be created.
|
|
* @param files An array of file entries to include in the zip, each with a relative path and string contents.
|
|
*/
|
|
createZipFile(zipPath: URI, files: { path: string; contents: string }[]): Promise<void>;
|
|
|
|
// Power
|
|
getSystemIdleState(idleThreshold: number): Promise<SystemIdleState>;
|
|
getSystemIdleTime(): Promise<number>;
|
|
getCurrentThermalState(): Promise<ThermalState>;
|
|
isOnBatteryPower(): Promise<boolean>;
|
|
startPowerSaveBlocker(type: PowerSaveBlockerType): Promise<number>;
|
|
stopPowerSaveBlocker(id: number): Promise<boolean>;
|
|
isPowerSaveBlockerStarted(id: number): Promise<boolean>;
|
|
}
|
|
|
|
/**
|
|
* Represents the system's idle state.
|
|
*/
|
|
export type SystemIdleState = 'active' | 'idle' | 'locked' | 'unknown';
|
|
|
|
/**
|
|
* Represents the system's thermal state.
|
|
*/
|
|
export type ThermalState = 'unknown' | 'nominal' | 'fair' | 'serious' | 'critical';
|
|
|
|
/**
|
|
* The type of power save blocker.
|
|
*/
|
|
export type PowerSaveBlockerType = 'prevent-app-suspension' | 'prevent-display-sleep';
|
|
|
|
export const INativeHostService = createDecorator<INativeHostService>('nativeHostService');
|
|
|
|
/**
|
|
* A set of methods specific to a native host, i.e. unsupported in web
|
|
* environments.
|
|
*
|
|
* @see {@link IHostService} for methods that can be used in native and web
|
|
* hosts.
|
|
*/
|
|
export interface INativeHostService extends ICommonNativeHostService { }
|