import { BrowserWindow } from 'electron/main'; import { expect } from 'chai'; import { closeAllWindows } from './lib/window-helpers'; describe('process._linkedBinding', () => { describe('in the main process', () => { it('can access electron_browser bindings', () => { process._linkedBinding('electron_browser_app'); }); it('can access electron_common bindings', () => { process._linkedBinding('electron_common_v8_util'); }); it('cannot access electron_renderer bindings', () => { expect(() => { process._linkedBinding('electron_renderer_ipc'); }).to.throw(/No such binding was linked: electron_renderer_ipc/); }); }); describe('in the renderer process', () => { afterEach(closeAllWindows); it('cannot access electron_browser bindings', async () => { const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } }); w.loadURL('about:blank'); await expect(w.webContents.executeJavaScript('void process._linkedBinding(\'electron_browser_app\')')) .to.eventually.be.rejectedWith(/Script failed to execute/); }); it('can access electron_common bindings', async () => { const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } }); w.loadURL('about:blank'); await w.webContents.executeJavaScript('void process._linkedBinding(\'electron_common_v8_util\')'); }); it('can access electron_renderer bindings', async () => { const w = new BrowserWindow({ show: false, webPreferences: { nodeIntegration: true, contextIsolation: false } }); w.loadURL('about:blank'); await w.webContents.executeJavaScript('void process._linkedBinding(\'electron_renderer_ipc\')'); }); }); });