From 7bae7127032425487e9a1dc3509d2a5cb3e60668 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Fri, 31 Mar 2023 13:33:13 +0300 Subject: [PATCH] wait app to be ready before creating a BrowserWindow for system proxy resolver (#7443) Signed-off-by: Jari Kolehmainen --- ...esolve-system-proxy-from-electron.injectable.ts | 3 ++- .../resolve-system-proxy-from-electron.test.ts | 4 ++-- ...-proxy-window.global-override-for-injectable.ts | 4 ++-- .../resolve-system-proxy-window.injectable.ts | 14 +++++++++++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts index 4ad2da39b8..1a111f7dd7 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts @@ -10,11 +10,12 @@ const resolveSystemProxyFromElectronInjectable = getInjectable({ id: "resolve-system-proxy-from-electron", instantiate: (di) => { - const helperWindow = di.inject(resolveSystemProxyWindowInjectable); const withErrorLoggingFor = di.inject(withErrorLoggingInjectable); const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy"); return withErrorLogging(async (url: string) => { + const helperWindow = await di.inject(resolveSystemProxyWindowInjectable); + return await helperWindow.webContents.session.resolveProxy(url); }); }, diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts index a2e6d01627..9ee9c86459 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts @@ -32,7 +32,7 @@ describe("technical: resolve-system-proxy-from-electron", () => { di.override( resolveSystemProxyWindowInjectable, - () => ({ + async () => ({ webContents: { session: { resolveProxy: resolveSystemProxyMock, @@ -73,7 +73,7 @@ describe("technical: resolve-system-proxy-from-electron", () => { di.override( resolveSystemProxyWindowInjectable, - () => ({ + async () => ({ webContents: { session: { resolveProxy: () => { diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts index 4bf1ada952..680101b998 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts @@ -8,8 +8,8 @@ import type { BrowserWindow, Session, WebContents } from "electron"; import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; export default getGlobalOverride( - resolveSystemProxyWindowInjectable, - () => ({ + resolveSystemProxyWindowInjectable, + async () => ({ webContents: { session: { resolveProxy: () => "DIRECT", diff --git a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts index baa0da6c39..9dcfed4edf 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts @@ -4,13 +4,21 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { BrowserWindow } from "electron"; +import electronAppInjectable from "../../electron-app/electron-app.injectable"; const resolveSystemProxyWindowInjectable = getInjectable({ id: "resolve-system-proxy-window", - instantiate: () => { - const window = new BrowserWindow({ show: false }); + instantiate: async (di) => { + const app = di.inject(electronAppInjectable); - window.hide(); + await app.whenReady(); + + const window = new BrowserWindow({ + show: false, + paintWhenInitiallyHidden: false, + }); + + window.hide(); return window; },