diff --git a/packages/shared/IpcChannel.ts b/packages/shared/IpcChannel.ts index 81e9f0292..b90ef3b35 100644 --- a/packages/shared/IpcChannel.ts +++ b/packages/shared/IpcChannel.ts @@ -41,6 +41,7 @@ export enum IpcChannel { App_SetFullScreen = 'app:set-full-screen', App_IsFullScreen = 'app:is-full-screen', App_GetSystemFonts = 'app:get-system-fonts', + APP_CrashRenderProcess = 'app:crash-render-process', App_MacIsProcessTrusted = 'app:mac-is-process-trusted', App_MacRequestProcessTrust = 'app:mac-request-process-trust', diff --git a/src/main/index.ts b/src/main/index.ts index 025268b65..27489a26b 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -8,7 +8,7 @@ import '@main/config' import { loggerService } from '@logger' import { electronApp, optimizer } from '@electron-toolkit/utils' import { replaceDevtoolsFont } from '@main/utils/windowUtil' -import { app } from 'electron' +import { app, crashReporter } from 'electron' import installExtension, { REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } from 'electron-devtools-installer' import { isDev, isLinux, isWin } from './constant' @@ -37,6 +37,14 @@ import { initWebviewHotkeys } from './services/WebviewService' const logger = loggerService.withContext('MainEntry') +// enable local crash reports +crashReporter.start({ + companyName: 'CherryHQ', + productName: 'CherryStudio', + submitURL: '', + uploadToServer: false +}) + /** * Disable hardware acceleration if setting is enabled */ diff --git a/src/main/ipc.ts b/src/main/ipc.ts index fd75d8c7e..9750a4cf0 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -1038,4 +1038,8 @@ export function registerIpc(mainWindow: BrowserWindow, app: Electron.App) { ipcMain.handle(IpcChannel.WebSocket_Status, WebSocketService.getStatus) ipcMain.handle(IpcChannel.WebSocket_SendFile, WebSocketService.sendFile) ipcMain.handle(IpcChannel.WebSocket_GetAllCandidates, WebSocketService.getAllCandidates) + + ipcMain.handle(IpcChannel.APP_CrashRenderProcess, () => { + mainWindow.webContents.forcefullyCrashRenderer() + }) } diff --git a/src/preload/index.ts b/src/preload/index.ts index 671284d88..11a8e4589 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -111,6 +111,7 @@ const api = { setFullScreen: (value: boolean): Promise => ipcRenderer.invoke(IpcChannel.App_SetFullScreen, value), isFullScreen: (): Promise => ipcRenderer.invoke(IpcChannel.App_IsFullScreen), getSystemFonts: (): Promise => ipcRenderer.invoke(IpcChannel.App_GetSystemFonts), + mockCrashRenderProcess: () => ipcRenderer.invoke(IpcChannel.APP_CrashRenderProcess), mac: { isProcessTrusted: (): Promise => ipcRenderer.invoke(IpcChannel.App_MacIsProcessTrusted), requestProcessTrust: (): Promise => ipcRenderer.invoke(IpcChannel.App_MacRequestProcessTrust)