diff --git a/filenames.auto.gni b/filenames.auto.gni index 375c5e7a9df02..ed776498b6474 100644 --- a/filenames.auto.gni +++ b/filenames.auto.gni @@ -140,7 +140,7 @@ auto_filenames = { "lib/common/web-view-methods.ts", "lib/renderer/api/crash-reporter.js", "lib/renderer/api/desktop-capturer.ts", - "lib/renderer/api/ipc-renderer.js", + "lib/renderer/api/ipc-renderer.ts", "lib/renderer/api/remote.js", "lib/renderer/api/web-frame.ts", "lib/renderer/callbacks-registry.ts", @@ -299,7 +299,7 @@ auto_filenames = { "lib/renderer/api/crash-reporter.js", "lib/renderer/api/desktop-capturer.ts", "lib/renderer/api/exports/electron.js", - "lib/renderer/api/ipc-renderer.js", + "lib/renderer/api/ipc-renderer.ts", "lib/renderer/api/module-list.js", "lib/renderer/api/remote.js", "lib/renderer/api/web-frame.ts", @@ -348,7 +348,7 @@ auto_filenames = { "lib/renderer/api/crash-reporter.js", "lib/renderer/api/desktop-capturer.ts", "lib/renderer/api/exports/electron.js", - "lib/renderer/api/ipc-renderer.js", + "lib/renderer/api/ipc-renderer.ts", "lib/renderer/api/module-list.js", "lib/renderer/api/remote.js", "lib/renderer/api/web-frame.ts", diff --git a/lib/renderer/api/ipc-renderer.js b/lib/renderer/api/ipc-renderer.ts similarity index 77% rename from lib/renderer/api/ipc-renderer.js rename to lib/renderer/api/ipc-renderer.ts index 64b2ce4ef1795..d631138b7b9ed 100644 --- a/lib/renderer/api/ipc-renderer.js +++ b/lib/renderer/api/ipc-renderer.ts @@ -1,10 +1,8 @@ -'use strict' - const { ipc } = process.electronBinding('ipc') const v8Util = process.electronBinding('v8_util') // Created by init.js. -const ipcRenderer = v8Util.getHiddenValue(global, 'ipc') +const ipcRenderer = v8Util.getHiddenValue(global, 'ipc') const internal = false ipcRenderer.send = function (channel, ...args) { @@ -23,10 +21,6 @@ ipcRenderer.sendTo = function (webContentsId, channel, ...args) { return ipc.sendTo(internal, false, webContentsId, channel, args) } -ipcRenderer.sendToAll = function (webContentsId, channel, ...args) { - return ipc.sendTo(internal, true, webContentsId, channel, args) -} - ipcRenderer.invoke = function (channel, ...args) { return ipc.invoke(channel, args).then(({ error, result }) => { if (error) { throw new Error(`Error invoking remote method '${channel}': ${error}`) } @@ -34,4 +28,4 @@ ipcRenderer.invoke = function (channel, ...args) { }) } -module.exports = ipcRenderer +export default ipcRenderer diff --git a/lib/renderer/extensions/web-navigation.ts b/lib/renderer/extensions/web-navigation.ts index f98bf21a1f6af..fb39f11af0424 100644 --- a/lib/renderer/extensions/web-navigation.ts +++ b/lib/renderer/extensions/web-navigation.ts @@ -1,17 +1,16 @@ import { Event } from '@electron/internal/renderer/extensions/event' -import { IpcMainEvent } from 'electron' -const { ipcRendererInternal } = require('@electron/internal/renderer/ipc-renderer-internal') +import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal' class WebNavigation { private onBeforeNavigate = new Event() private onCompleted = new Event() constructor () { - ipcRendererInternal.on('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', (event: IpcMainEvent, details: any) => { + ipcRendererInternal.on('CHROME_WEBNAVIGATION_ONBEFORENAVIGATE', (event: Electron.IpcRendererEvent, details: any) => { this.onBeforeNavigate.emit(details) }) - ipcRendererInternal.on('CHROME_WEBNAVIGATION_ONCOMPLETED', (event: IpcMainEvent, details: any) => { + ipcRendererInternal.on('CHROME_WEBNAVIGATION_ONCOMPLETED', (event: Electron.IpcRendererEvent, details: any) => { this.onCompleted.emit(details) }) } diff --git a/lib/renderer/ipc-renderer-internal.ts b/lib/renderer/ipc-renderer-internal.ts index 4e0c55b9b14ff..8fcbe1920d439 100644 --- a/lib/renderer/ipc-renderer-internal.ts +++ b/lib/renderer/ipc-renderer-internal.ts @@ -1,22 +1,22 @@ -const binding = process.electronBinding('ipc') +const { ipc } = process.electronBinding('ipc') const v8Util = process.electronBinding('v8_util') // Created by init.js. -export const ipcRendererInternal: Electron.IpcRendererInternal = v8Util.getHiddenValue(global, 'ipc-internal') +export const ipcRendererInternal = v8Util.getHiddenValue(global, 'ipc-internal') const internal = true ipcRendererInternal.send = function (channel, ...args) { - return binding.ipc.send(internal, channel, args) + return ipc.send(internal, channel, args) } ipcRendererInternal.sendSync = function (channel, ...args) { - return binding.ipc.sendSync(internal, channel, args)[0] + return ipc.sendSync(internal, channel, args)[0] } ipcRendererInternal.sendTo = function (webContentsId, channel, ...args) { - return binding.ipc.sendTo(internal, false, webContentsId, channel, args) + return ipc.sendTo(internal, false, webContentsId, channel, args) } ipcRendererInternal.sendToAll = function (webContentsId, channel, ...args) { - return binding.ipc.sendTo(internal, true, webContentsId, channel, args) + return ipc.sendTo(internal, true, webContentsId, channel, args) } diff --git a/lib/sandboxed_renderer/init.js b/lib/sandboxed_renderer/init.js index 424cd8002fa21..c6f7a2b6a753f 100644 --- a/lib/sandboxed_renderer/init.js +++ b/lib/sandboxed_renderer/init.js @@ -11,10 +11,10 @@ const v8Util = process.electronBinding('v8_util') // Expose Buffer shim as a hidden value. This is used by C++ code to // deserialize Buffer instances sent from browser process. v8Util.setHiddenValue(global, 'Buffer', Buffer) -// The `lib/renderer/api/ipc-renderer.js` module looks for the ipc object in the +// The `lib/renderer/api/ipc-renderer.ts` module looks for the ipc object in the // "ipc" hidden value v8Util.setHiddenValue(global, 'ipc', new EventEmitter()) -// The `lib/renderer/ipc-renderer-internal.js` module looks for the ipc object in the +// The `lib/renderer/ipc-renderer-internal.ts` module looks for the ipc object in the // "ipc-internal" hidden value v8Util.setHiddenValue(global, 'ipc-internal', new EventEmitter()) // The process object created by webpack is not an event emitter, fix it so diff --git a/typings/internal-ambient.d.ts b/typings/internal-ambient.d.ts index d57c7b853c671..6cd62a4a4f775 100644 --- a/typings/internal-ambient.d.ts +++ b/typings/internal-ambient.d.ts @@ -14,6 +14,14 @@ declare namespace NodeJS { isComponentBuild(): boolean; } + interface IpcBinding { + send(internal: boolean, channel: string, args: any[]): void; + sendSync(internal: boolean, channel: string, args: any[]): any; + sendToHost(channel: string, args: any[]): void; + sendTo(internal: boolean, sendToAll: boolean, webContentsId: number, channel: string, args: any[]): void; + invoke(channel: string, args: any[]): Promise<{ error: string, result: T }>; + } + interface V8UtilBinding { getHiddenValue(obj: any, key: string): T; setHiddenValue(obj: any, key: string, value: T): void; @@ -28,6 +36,7 @@ declare namespace NodeJS { _linkedBinding(name: string): any; electronBinding(name: string): any; electronBinding(name: 'features'): FeaturesBinding; + electronBinding(name: 'ipc'): { ipc: IpcBinding }; electronBinding(name: 'v8_util'): V8UtilBinding; electronBinding(name: 'app'): { app: Electron.App, App: Function }; electronBinding(name: 'command_line'): Electron.CommandLine;