diff --git a/filenames.auto.gni b/filenames.auto.gni index 6d36e9a850fa..2406370d0581 100644 --- a/filenames.auto.gni +++ b/filenames.auto.gni @@ -237,7 +237,7 @@ auto_filenames = { "lib/browser/navigation-controller.js", "lib/browser/remote/objects-registry.ts", "lib/browser/remote/server.ts", - "lib/browser/rpc-server.js", + "lib/browser/rpc-server.ts", "lib/browser/utils.ts", "lib/common/api/clipboard.ts", "lib/common/api/deprecate.ts", diff --git a/lib/browser/remote/server.ts b/lib/browser/remote/server.ts index 754cf75ac8f9..c4e28696a89b 100644 --- a/lib/browser/remote/server.ts +++ b/lib/browser/remote/server.ts @@ -284,7 +284,7 @@ const unwrapArgs = function (sender: electron.WebContents, frameId: number, cont }; const isRemoteModuleEnabledImpl = function (contents: electron.WebContents) { - const webPreferences = (contents as any).getLastWebPreferences() || {}; + const webPreferences = contents.getLastWebPreferences() || {}; return webPreferences.enableRemoteModule != null ? !!webPreferences.enableRemoteModule : false; }; diff --git a/lib/browser/rpc-server.js b/lib/browser/rpc-server.ts similarity index 76% rename from lib/browser/rpc-server.js rename to lib/browser/rpc-server.ts index bd7b8917ae3c..b7cd6a5da8c4 100644 --- a/lib/browser/rpc-server.js +++ b/lib/browser/rpc-server.ts @@ -1,17 +1,15 @@ -'use strict'; - -const electron = require('electron'); -const fs = require('fs'); +import * as electron from 'electron'; +import * as fs from 'fs'; +import { ipcMainInternal } from './ipc-main-internal'; +import * as ipcMainUtils from './ipc-main-internal-utils'; +import * as guestViewManager from './guest-view-manager'; +import * as typeUtils from '../common/type-utils'; +import { IpcMainInvokeEvent } from 'electron/main'; const eventBinding = process._linkedBinding('electron_browser_event'); const clipboard = process._linkedBinding('electron_common_clipboard'); -const { ipcMainInternal } = require('@electron/internal/browser/ipc-main-internal'); -const ipcMainUtils = require('@electron/internal/browser/ipc-main-internal-utils'); -const guestViewManager = require('@electron/internal/browser/guest-view-manager'); -const typeUtils = require('@electron/internal/common/type-utils'); - -const emitCustomEvent = function (contents, eventName, ...args) { +const emitCustomEvent = function (contents: electron.WebContents, eventName: string, ...args: any[]) { const event = eventBinding.createWithSender(contents); electron.app.emit(eventName, event, contents, ...args); @@ -20,14 +18,14 @@ const emitCustomEvent = function (contents, eventName, ...args) { return event; }; -const logStack = function (contents, code, stack) { +const logStack = function (contents: electron.WebContents, code: string, stack: string) { if (stack) { console.warn(`WebContents (${contents.id}): ${code}`, stack); } }; // Implements window.close() -ipcMainInternal.on('ELECTRON_BROWSER_WINDOW_CLOSE', function (event) { +ipcMainInternal.on('ELECTRON_BROWSER_WINDOW_CLOSE', function (event: ElectronInternal.IpcMainInternalEvent) { const window = event.sender.getOwnerBrowserWindow(); if (window) { window.close(); @@ -35,7 +33,7 @@ ipcMainInternal.on('ELECTRON_BROWSER_WINDOW_CLOSE', function (event) { event.returnValue = null; }); -ipcMainInternal.handle('ELECTRON_BROWSER_GET_LAST_WEB_PREFERENCES', function (event) { +ipcMainInternal.handle('ELECTRON_BROWSER_GET_LAST_WEB_PREFERENCES', function (event: IpcMainInvokeEvent) { return event.sender.getLastWebPreferences(); }); @@ -51,18 +49,18 @@ const allowedClipboardMethods = (() => { } })(); -ipcMainUtils.handleSync('ELECTRON_BROWSER_CLIPBOARD_SYNC', function (event, method, ...args) { +ipcMainUtils.handleSync('ELECTRON_BROWSER_CLIPBOARD_SYNC', function (event: IpcMainInvokeEvent, method: string, ...args: any[]) { if (!allowedClipboardMethods.has(method)) { throw new Error(`Invalid method: ${method}`); } - return typeUtils.serialize(electron.clipboard[method](...typeUtils.deserialize(args))); + return typeUtils.serialize((electron.clipboard as any)[method](...typeUtils.deserialize(args))); }); if (BUILDFLAG(ENABLE_DESKTOP_CAPTURER)) { const desktopCapturer = require('@electron/internal/browser/desktop-capturer'); - ipcMainInternal.handle('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_SOURCES', async function (event, options, stack) { + ipcMainInternal.handle('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_SOURCES', async function (event: IpcMainInvokeEvent, options: Electron.SourcesOptions, stack: string) { logStack(event.sender, 'desktopCapturer.getSources()', stack); const customEvent = emitCustomEvent(event.sender, 'desktop-capturer-get-sources'); @@ -74,7 +72,7 @@ if (BUILDFLAG(ENABLE_DESKTOP_CAPTURER)) { return typeUtils.serialize(await desktopCapturer.getSourcesImpl(event, options)); }); - ipcMainInternal.handle('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_MEDIA_SOURCE_ID_FOR_WEB_CONTENTS', function (event, webContentsId, stack) { + ipcMainInternal.handle('ELECTRON_BROWSER_DESKTOP_CAPTURER_GET_MEDIA_SOURCE_ID_FOR_WEB_CONTENTS', function (event: IpcMainInvokeEvent, webContentsId: number) { return desktopCapturer.getMediaSourceIdForWebContents(event, webContentsId); }); } @@ -83,7 +81,7 @@ const isRemoteModuleEnabled = BUILDFLAG(ENABLE_REMOTE_MODULE) ? require('@electron/internal/browser/remote/server').isRemoteModuleEnabled : () => false; -const getPreloadScript = async function (preloadPath) { +const getPreloadScript = async function (preloadPath: string) { let preloadSrc = null; let preloadError = null; try { @@ -94,7 +92,7 @@ const getPreloadScript = async function (preloadPath) { return { preloadPath, preloadSrc, preloadError }; }; -ipcMainUtils.handleSync('ELECTRON_BROWSER_SANDBOX_LOAD', async function (event) { +ipcMainUtils.handleSync('ELECTRON_BROWSER_SANDBOX_LOAD', async function (event: IpcMainInvokeEvent) { const preloadPaths = event.sender._getPreloadPaths(); const webPreferences = event.sender.getLastWebPreferences() || {}; @@ -115,7 +113,7 @@ ipcMainUtils.handleSync('ELECTRON_BROWSER_SANDBOX_LOAD', async function (event) }; }); -ipcMainInternal.on('ELECTRON_BROWSER_PRELOAD_ERROR', function (event, preloadPath, error) { +ipcMainInternal.on('ELECTRON_BROWSER_PRELOAD_ERROR', function (event: ElectronInternal.IpcMainInternalEvent, preloadPath: string, error: Error) { event.sender.emit('preload-error', event, preloadPath, error); }); @@ -131,7 +129,7 @@ ipcMainUtils.handleSync('ELECTRON_CRASH_REPORTER_GET_UPLOAD_TO_SERVER', () => { return electron.crashReporter.getUploadToServer(); }); -ipcMainUtils.handleSync('ELECTRON_CRASH_REPORTER_SET_UPLOAD_TO_SERVER', (event, uploadToServer) => { +ipcMainUtils.handleSync('ELECTRON_CRASH_REPORTER_SET_UPLOAD_TO_SERVER', (event: IpcMainInvokeEvent, uploadToServer: boolean) => { return electron.crashReporter.setUploadToServer(uploadToServer); }); diff --git a/spec-main/api-browser-window-spec.ts b/spec-main/api-browser-window-spec.ts index c91f2650164c..9d0cc0102bb0 100644 --- a/spec-main/api-browser-window-spec.ts +++ b/spec-main/api-browser-window-spec.ts @@ -2213,7 +2213,7 @@ describe('BrowserWindow module', () => { emittedOnce(app, 'web-contents-created'), emittedOnce(ipcMain, 'answer') ]); - const webPreferences = (childWebContents as any).getLastWebPreferences(); + const webPreferences = childWebContents.getLastWebPreferences(); expect(webPreferences.foo).to.equal('bar'); }); @@ -2530,7 +2530,7 @@ describe('BrowserWindow module', () => { emittedOnce(app, 'web-contents-created'), emittedOnce(ipcMain, 'answer') ]); - const webPreferences = (childWebContents as any).getLastWebPreferences(); + const webPreferences = childWebContents.getLastWebPreferences(); expect(webPreferences.foo).to.equal('bar'); }); diff --git a/spec-main/chromium-spec.ts b/spec-main/chromium-spec.ts index 3f30f076dd7d..07575339cbe8 100644 --- a/spec-main/chromium-spec.ts +++ b/spec-main/chromium-spec.ts @@ -598,7 +598,7 @@ describe('chromium features', () => { contents.sendInputEvent({ type: 'mouseDown', clickCount: 1, x: 1, y: 1 }); contents.sendInputEvent({ type: 'mouseUp', clickCount: 1, x: 1, y: 1 }); const [, window] = await emittedOnce(app, 'browser-window-created'); - const preferences = (window.webContents as any).getLastWebPreferences(); + const preferences = window.webContents.getLastWebPreferences(); expect(preferences.javascript).to.be.false(); }); diff --git a/typings/internal-electron.d.ts b/typings/internal-electron.d.ts index 0b7550bf89de..2810188d45ef 100644 --- a/typings/internal-electron.d.ts +++ b/typings/internal-electron.d.ts @@ -32,6 +32,13 @@ declare namespace Electron { interface WebContents { _getURL(): string; getOwnerBrowserWindow(): Electron.BrowserWindow; + getLastWebPreferences(): Electron.WebPreferences; + _getPreloadPaths(): string[]; + } + + interface WebPreferences { + guestInstanceId?: number; + openerId?: number; } interface SerializedError {