diff --git a/src/extensions/ipc/ipc-main.ts b/src/extensions/ipc/ipc-main.ts index 5884a3989e..09d26b00fb 100644 --- a/src/extensions/ipc/ipc-main.ts +++ b/src/extensions/ipc/ipc-main.ts @@ -25,11 +25,14 @@ import type { LensMainExtension } from "../lens-main-extension"; import type { Disposer } from "../../common/utils"; import { once } from "lodash"; import { ipcMainHandle } from "../../common/ipc"; +import logger from "../../main/logger"; export abstract class IpcMain extends IpcRegistrar { constructor(extension: LensMainExtension) { super(extension); - extension[Disposers].push(() => IpcMain.resetInstance()); + + // Call the static method on the bottom child class. + extension[Disposers].push(() => (this.constructor as typeof IpcMain).resetInstance()); } /** @@ -40,8 +43,13 @@ export abstract class IpcMain extends IpcRegistrar { */ listen(channel: string, listener: (event: Electron.IpcRendererEvent, ...args: any[]) => any): Disposer { const prefixedChannel = `extensions@${this[IpcPrefix]}:${channel}`; - const cleanup = once(() => ipcMain.removeListener(prefixedChannel, listener)); + const cleanup = once(() => { + logger.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); + return ipcMain.removeListener(prefixedChannel, listener); + }); + + logger.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); ipcMain.addListener(prefixedChannel, listener); this.extension[Disposers].push(cleanup); @@ -56,7 +64,12 @@ export abstract class IpcMain extends IpcRegistrar { handle(channel: string, handler: (event: Electron.IpcMainInvokeEvent, ...args: any[]) => any): void { const prefixedChannel = `extensions@${this[IpcPrefix]}:${channel}`; + logger.info(`[IPC-RENDERER]: adding extension handler`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); ipcMainHandle(prefixedChannel, handler); - this.extension[Disposers].push(() => ipcMain.removeHandler(prefixedChannel)); + this.extension[Disposers].push(() => { + logger.info(`[IPC-RENDERER]: removing extension handler`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); + + return ipcMain.removeHandler(prefixedChannel); + }); } } diff --git a/src/extensions/ipc/ipc-renderer.ts b/src/extensions/ipc/ipc-renderer.ts index 0facfb2085..364ebc5d73 100644 --- a/src/extensions/ipc/ipc-renderer.ts +++ b/src/extensions/ipc/ipc-renderer.ts @@ -28,7 +28,9 @@ import { once } from "lodash"; export abstract class IpcRenderer extends IpcRegistrar { constructor(extension: LensRendererExtension) { super(extension); - extension[Disposers].push(() => IpcRenderer.resetInstance()); + + // Call the static method on the bottom child class. + extension[Disposers].push(() => (this.constructor as typeof IpcRenderer).resetInstance()); } /** @@ -41,8 +43,13 @@ export abstract class IpcRenderer extends IpcRegistrar { */ listen(channel: string, listener: (event: Electron.IpcRendererEvent, ...args: any[]) => any): Disposer { const prefixedChannel = `extensions@${this[IpcPrefix]}:${channel}`; - const cleanup = once(() => ipcRenderer.removeListener(prefixedChannel, listener)); + const cleanup = once(() => { + console.info(`[IPC-RENDERER]: removing extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); + return ipcRenderer.removeListener(prefixedChannel, listener); + }); + + console.info(`[IPC-RENDERER]: adding extension listener`, { channel, extension: { name: this.extension.name, version: this.extension.version } }); ipcRenderer.addListener(prefixedChannel, listener); this.extension[Disposers].push(cleanup); diff --git a/src/renderer/navigation/events.ts b/src/renderer/navigation/events.ts index f5a9968f4a..eaf3741b34 100644 --- a/src/renderer/navigation/events.ts +++ b/src/renderer/navigation/events.ts @@ -61,7 +61,7 @@ function bindClusterManagerRouteEvents() { // Handle navigation via IPC ipcRendererOn(IpcRendererNavigationEvents.NAVIGATE_IN_APP, (event, url: string) => { - logger.info(`[IPC]: ${event.type}: ${url}`, { currentLocation: location.href }); + logger.info(`[IPC]: navigate to ${url}`, { currentLocation: location.href }); navigate(url); }); } @@ -69,7 +69,7 @@ function bindClusterManagerRouteEvents() { // Handle cluster-view renderer process events within iframes function bindClusterFrameRouteEvents() { ipcRendererOn(IpcRendererNavigationEvents.NAVIGATE_IN_CLUSTER, (event, url: string) => { - logger.info(`[IPC]: ${event.type}: ${url}`, { currentLocation: location.href }); + logger.info(`[IPC]: navigate to ${url}`, { currentLocation: location.href }); navigate(url); }); }