diff --git a/packages/insomnia-smoke-test/tests/smoke/utility-process.test.ts b/packages/insomnia-smoke-test/tests/smoke/pre-request-script.test.ts
similarity index 94%
rename from packages/insomnia-smoke-test/tests/smoke/utility-process.test.ts
rename to packages/insomnia-smoke-test/tests/smoke/pre-request-script.test.ts
index fbd2fe00bf..9bf8053e27 100644
--- a/packages/insomnia-smoke-test/tests/smoke/utility-process.test.ts
+++ b/packages/insomnia-smoke-test/tests/smoke/pre-request-script.test.ts
@@ -2,7 +2,7 @@ import { expect } from '@playwright/test';
import { test } from '../../playwright/test';;
-test.describe('test utility process', async () => {
+test.describe('test pre-request script execution', async () => {
const testCases = [
{
@@ -315,12 +315,13 @@ test.describe('test utility process', async () => {
const originalWindowCount = app.windows().length;
- // start the utility process
+ // start the sandbox
await mainWindow?.evaluate(
async () => {
- const caller = window as unknown as { utilityProcess: { start: () => void } };
- if (caller.utilityProcess) {
- caller.utilityProcess.start();
+ // it suppresses the type checking error
+ const caller = window as unknown as { hiddenBrowserWindow: { start: () => void } };
+ if (caller.hiddenBrowserWindow) {
+ caller.hiddenBrowserWindow.start();
}
},
);
@@ -331,13 +332,13 @@ test.describe('test utility process', async () => {
if (windows.length > originalWindowCount) {
for (const page of windows) {
const title = await page.title();
- if (title === 'Utility Process') {
+ if (title === 'Hidden Browser Window') {
await page.waitForLoadState();
}
}
break;
}
- mainWindow.waitForTimeout(500);
+ await mainWindow.waitForTimeout(500);
}
// action
@@ -345,7 +346,7 @@ test.describe('test utility process', async () => {
async (tc: any) => {
window.postMessage(
{
- action: 'message-event://utility.process/debug',
+ action: 'message-event://hidden.browser-window/debug',
id: tc.id,
code: tc.code,
context: tc.context,
@@ -368,9 +369,11 @@ test.describe('test utility process', async () => {
if (localStorage[`test_result:${tc.id}`] || localStorage[`test_error:${tc.id}`]) {
break;
}
- mainWindow.waitForTimeout(500);
+ await mainWindow.waitForTimeout(500);
}
+ // await mainWindow.waitForTimeout(300000);
+
if (localStorage) { // just for suppressing ts complaint
console.log(localStorage[`test_error:${tc.id}`]);
expect(JSON.parse(localStorage[`test_result:${tc.id}`])).toEqual(tc.expectedResult);
diff --git a/packages/insomnia/.gitignore b/packages/insomnia/.gitignore
index c1f1d865d8..6e8f6ec232 100644
--- a/packages/insomnia/.gitignore
+++ b/packages/insomnia/.gitignore
@@ -6,5 +6,5 @@ src/main.min.js
src/main.min.js.map
src/preload.js
src/preload.js.map
-src/renderers/utility-process/**/*.js
-src/renderers/utility-process/**/*.js.map
+src/renderers/hidden-browser-window/**/*.js
+src/renderers/hidden-browser-window/**/*.js.map
diff --git a/packages/insomnia/esbuild.main.ts b/packages/insomnia/esbuild.main.ts
index e69f123ae1..9d9e369f4c 100644
--- a/packages/insomnia/esbuild.main.ts
+++ b/packages/insomnia/esbuild.main.ts
@@ -22,8 +22,8 @@ export default async function build(options: Options) {
'process.env.APP_RENDER_URL': JSON.stringify(
`http://localhost:${PORT}/index.html`
),
- 'process.env.UTILITY_PROCESS_URL': JSON.stringify(
- `http://localhost:${PORT}/renderers/utility-process/index.html`
+ 'process.env.HIDDEN_BROWSER_WINDOW_URL': JSON.stringify(
+ `http://localhost:${PORT}/renderers/hidden-browser-window/index.html`
),
'process.env.NODE_ENV': JSON.stringify('development'),
'process.env.INSOMNIA_ENV': JSON.stringify('development'),
@@ -44,9 +44,9 @@ export default async function build(options: Options) {
format: 'cjs',
external: ['electron'],
});
- const preloadUtilityProcess = esbuild.build({
- entryPoints: ['./src/renderers/utility-process/preload.ts'],
- outfile: path.join(outdir, 'renderers/utility-process/preload-utility-process.js'),
+ const preloadHiddenBrowserWindow = esbuild.build({
+ entryPoints: ['./src/renderers/hidden-browser-window/preload.ts'],
+ outfile: path.join(outdir, 'renderers/hidden-browser-window/preload-hidden-browser-window.js'),
target: 'esnext',
bundle: true,
platform: 'node',
@@ -54,10 +54,10 @@ export default async function build(options: Options) {
format: 'cjs',
external: ['electron'],
});
- const utilityProcess = esbuild.build({
- entryPoints: ['./src/renderers/utility-process/index.ts'],
- // utility process is always outputed to 'src' as index.html requires a built bundle
- outfile: path.join(__dirname, 'src', 'renderers/utility-process/utility-process.js'),
+ const hiddenBrowserWindow = esbuild.build({
+ entryPoints: ['./src/renderers/hidden-browser-window/index.ts'],
+ // the hidden browser window script is always outputed to 'src' as index.html requires a built bundle
+ outfile: path.join(__dirname, 'src', 'renderers/hidden-browser-window/index.js'),
target: 'esnext',
bundle: true,
platform: 'browser',
@@ -81,7 +81,7 @@ export default async function build(options: Options) {
],
});
- return Promise.all([main, preload, preloadUtilityProcess, utilityProcess]);
+ return Promise.all([main, preload, preloadHiddenBrowserWindow, hiddenBrowserWindow]);
}
// Build if ran as a cli script
diff --git a/packages/insomnia/src/global.d.ts b/packages/insomnia/src/global.d.ts
index e8c57f0905..019b6dcf8a 100644
--- a/packages/insomnia/src/global.d.ts
+++ b/packages/insomnia/src/global.d.ts
@@ -1,6 +1,6 @@
///
+import type { HiddenBrowserWindowAPI } from './main/ipc/hidden-browser-window';
import type { MainBridgeAPI } from './main/ipc/main';
-import type { UtilityProcessAPI } from './main/ipc/utility-process';
declare global {
interface Window {
@@ -9,7 +9,7 @@ declare global {
app: Pick;
shell: Pick;
clipboard: Pick;
- utilityProcess: UtilityProcessAPI;
+ hiddenBrowserWindow: HiddenBrowserWindowAPI;
}
}
diff --git a/packages/insomnia/src/main/ipc/hidden-browser-window.ts b/packages/insomnia/src/main/ipc/hidden-browser-window.ts
new file mode 100644
index 0000000000..d8d6c308f2
--- /dev/null
+++ b/packages/insomnia/src/main/ipc/hidden-browser-window.ts
@@ -0,0 +1,22 @@
+import { BrowserWindow, ipcMain } from 'electron';
+
+import { createHiddenBrowserWindow } from '../window-utils';
+
+export interface HiddenBrowserWindowAPI {
+ start: () => void;
+}
+
+// registerHiddenBrowserWindowConsumer broadcasts message ports to observer windows
+export function registerHiddenBrowserWindowConsumer(consumerWindows: BrowserWindow[]) {
+ ipcMain.on('ipc://main/publish-port', ev => {
+ consumerWindows.forEach(win => {
+ win.webContents.postMessage('ipc://renderers/publish-port', null, ev.ports);
+ });
+ });
+}
+
+export function registerHiddenBrowserWindowController() {
+ ipcMain.handle('ipc://main/hidden-browser-window/start', () => {
+ createHiddenBrowserWindow();
+ });
+}
diff --git a/packages/insomnia/src/main/ipc/utility-process.ts b/packages/insomnia/src/main/ipc/utility-process.ts
deleted file mode 100644
index 6dddb4b2de..0000000000
--- a/packages/insomnia/src/main/ipc/utility-process.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { BrowserWindow, ipcMain } from 'electron';
-
-import { createUtilityProcess } from '../window-utils';
-
-export interface UtilityProcessAPI {
- start: () => void;
-}
-
-// registerUtilityProcessPort broadcasts message ports to observer windows
-export function registerUtilityProcessConsumer(consumerWindows: BrowserWindow[]) {
- ipcMain.on('ipc://main/publish-port', ev => {
- consumerWindows.forEach(win => {
- win.webContents.postMessage('ipc://renderers/publish-port', null, ev.ports);
- });
- });
-}
-
-export function registerUtilityProcessController() {
- ipcMain.handle('ipc://main/utility-process/start', () => {
- createUtilityProcess();
- });
-}
diff --git a/packages/insomnia/src/main/window-utils.ts b/packages/insomnia/src/main/window-utils.ts
index c942b45ce5..5d08dbc1e0 100644
--- a/packages/insomnia/src/main/window-utils.ts
+++ b/packages/insomnia/src/main/window-utils.ts
@@ -16,7 +16,7 @@ import {
} from '../common/constants';
import { docsBase } from '../common/documentation';
import * as log from '../common/log';
-import { registerUtilityProcessConsumer, registerUtilityProcessController } from './ipc/utility-process';
+import { registerHiddenBrowserWindowConsumer, registerHiddenBrowserWindowController } from './ipc/hidden-browser-window';
import LocalStorage from './local-storage';
const { app, Menu, shell, dialog, clipboard, BrowserWindow } = electron;
@@ -27,7 +27,7 @@ const MINIMUM_WIDTH = 500;
const MINIMUM_HEIGHT = 400;
let newWindow: ElectronBrowserWindow | null = null;
-let isolatedUtilityProcess: ElectronBrowserWindow | null = null;
+let hiddenBrowserWindow: ElectronBrowserWindow | null = null;
const windows = new Set();
const processes = new Set();
let localStorage: LocalStorage | null = null;
@@ -43,35 +43,35 @@ export function init() {
initLocalStorage();
}
-export function createUtilityProcess() {
- isolatedUtilityProcess = new BrowserWindow({
+export function createHiddenBrowserWindow() {
+ hiddenBrowserWindow = new BrowserWindow({
show: false,
- title: 'UtilityProcess',
+ title: 'HiddenBrowserWindow',
webPreferences: {
sandbox: true,
contextIsolation: true,
nodeIntegration: false,
webSecurity: true,
- preload: path.join(__dirname, 'renderers/utility-process/preload-utility-process.js'),
+ preload: path.join(__dirname, 'renderers/hidden-browser-window/preload-hidden-browser-window.js'),
spellcheck: false,
},
});
- const utilityProcessPath = path.resolve(__dirname, './renderers/utility-process/index.html');
- const utilityProcessUrl = process.env.UTILITY_PROCESS_URL || pathToFileURL(utilityProcessPath).href;
- console.log('[main] loading utility process:', process.env.UTILITY_PROCESS_URL, pathToFileURL(utilityProcessPath).href);
- isolatedUtilityProcess.loadURL(utilityProcessUrl);
+ const hiddenBrowserWindowPath = path.resolve(__dirname, './renderers/hidden-browser-window/index.html');
+ const hiddenBrowserWindowUrl = process.env.HIDDEN_BROWSER_WINDOW_URL || pathToFileURL(hiddenBrowserWindowPath).href;
+ hiddenBrowserWindow.loadURL(hiddenBrowserWindowUrl);
+ console.log('[main] loading hidden browser window:', process.env.HIDDEN_BROWSER_WINDOW_URL, pathToFileURL(hiddenBrowserWindowPath).href);
- isolatedUtilityProcess?.on('closed', () => {
- if (isolatedUtilityProcess) {
- processes.delete(isolatedUtilityProcess);
- isolatedUtilityProcess = processes.values().next().value || null;
+ hiddenBrowserWindow?.on('closed', () => {
+ if (hiddenBrowserWindow) {
+ processes.delete(hiddenBrowserWindow);
+ hiddenBrowserWindow = processes.values().next().value || null;
}
});
- processes.add(isolatedUtilityProcess);
+ processes.add(hiddenBrowserWindow);
- return isolatedUtilityProcess;
+ return hiddenBrowserWindow;
}
export function createWindow() {
@@ -476,9 +476,10 @@ export function createWindow() {
);
} else {
// @ts-expect-error -- TSCONVERSION type splitting
- helpMenu.submenu?.push({
- type: 'separator',
- },
+ helpMenu.submenu?.push(
+ {
+ type: 'separator',
+ },
{
label: `${MNEMONIC_SYM}About`,
click: aboutMenuClickHandler,
@@ -582,8 +583,8 @@ export function createWindow() {
Menu.setApplicationMenu(Menu.buildFromTemplate(template));
windows.add(newWindow);
- registerUtilityProcessController();
- registerUtilityProcessConsumer(windows ? Array.from(windows.values()) : []);
+ registerHiddenBrowserWindowController();
+ registerHiddenBrowserWindowConsumer(windows ? Array.from(windows.values()) : []);
return newWindow;
}
diff --git a/packages/insomnia/src/preload.ts b/packages/insomnia/src/preload.ts
index a16310924d..762cf04d72 100644
--- a/packages/insomnia/src/preload.ts
+++ b/packages/insomnia/src/preload.ts
@@ -87,8 +87,8 @@ const clipboard: Window['clipboard'] = {
clear: () => ipcRenderer.send('clear'),
};
-const utilityProcess: Window['utilityProcess'] = {
- start: () => ipcRenderer.invoke('ipc://main/utility-process/start'),
+const hiddenBrowserWindow: Window['hiddenBrowserWindow'] = {
+ start: () => ipcRenderer.invoke('ipc://main/hidden-browser-window/start'),
};
if (process.contextIsolated) {
@@ -97,14 +97,14 @@ if (process.contextIsolated) {
contextBridge.exposeInMainWorld('app', app);
contextBridge.exposeInMainWorld('shell', shell);
contextBridge.exposeInMainWorld('clipboard', clipboard);
- contextBridge.exposeInMainWorld('utilityProcess', utilityProcess);
+ contextBridge.exposeInMainWorld('hiddenBrowserWindow', hiddenBrowserWindow);
} else {
window.main = main;
window.dialog = dialog;
window.app = app;
window.shell = shell;
window.clipboard = clipboard;
- window.utilityProcess = utilityProcess;
+ window.hiddenBrowserWindow = hiddenBrowserWindow;
}
// it is different from window.main.on, it requires events to pass ports
diff --git a/packages/insomnia/src/renderers/utility-process/index.html b/packages/insomnia/src/renderers/hidden-browser-window/index.html
similarity index 77%
rename from packages/insomnia/src/renderers/utility-process/index.html
rename to packages/insomnia/src/renderers/hidden-browser-window/index.html
index 3fc0c003e4..c524f1441c 100644
--- a/packages/insomnia/src/renderers/utility-process/index.html
+++ b/packages/insomnia/src/renderers/hidden-browser-window/index.html
@@ -6,11 +6,11 @@
http-equiv="Content-Security-Policy"
content="font-src 'self' data:; connect-src * data: api: insomnia-event-source:; default-src * insomnia://*; img-src blob: data: * insomnia://*; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src blob: data: mediastream: * insomnia://*;"
/>
- Utility Process
+ Hidden Browser Window
- Utility Process
-
+ >Hidden Browser Window
+