From 6b99b4630237a0b23cf10bc29ee7ba39c1350dc5 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 20 Mar 2023 15:25:04 +0200 Subject: [PATCH] Fix resolveSystemProxyFromElectron causing a crash on quit (#7379) * destroy resolve system proxy window on before quit Signed-off-by: Jari Kolehmainen * resolve system proxy window: load blank page Signed-off-by: Jari Kolehmainen * disable paintWhenInitiallyHidden Signed-off-by: Jari Kolehmainen --------- Signed-off-by: Jari Kolehmainen Signed-off-by: Gabriel --- .../resolve-system-proxy-from-electron.injectable.ts | 11 ++++------- .../resolve-system-proxy-from-electron.test.ts | 10 +++++----- ...em-proxy-window.global-override-for-injectable.ts} | 6 +++--- ...e.ts => resolve-system-proxy-window.injectable.ts} | 11 ++++------- 4 files changed, 16 insertions(+), 22 deletions(-) rename packages/core/src/main/utils/resolve-system-proxy/{electron-browser-window.global-override-for-injectable.ts => resolve-system-proxy-window.global-override-for-injectable.ts} (77%) rename packages/core/src/main/utils/resolve-system-proxy/{electron-browser-window.injectable.ts => resolve-system-proxy-window.injectable.ts} (50%) 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 caa13c89de..4ad2da39b8 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 @@ -3,22 +3,19 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import electronBrowserWindowInjectable from "./electron-browser-window.injectable"; import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; const resolveSystemProxyFromElectronInjectable = getInjectable({ id: "resolve-system-proxy-from-electron", instantiate: (di) => { - const browserWindow = di.inject(electronBrowserWindowInjectable); + const helperWindow = di.inject(resolveSystemProxyWindowInjectable); const withErrorLoggingFor = di.inject(withErrorLoggingInjectable); const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy"); - const hiddenWindow = browserWindow({ - show: false, - }); - + return withErrorLogging(async (url: string) => { - return await hiddenWindow.webContents.session.resolveProxy(url); + 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 39b1904004..a2e6d01627 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 @@ -5,7 +5,7 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable"; -import electronBrowserWindowInjectable from "./electron-browser-window.injectable"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import { getPromiseStatus } from "@k8slens/test-utils"; @@ -31,8 +31,8 @@ describe("technical: resolve-system-proxy-from-electron", () => { resolveSystemProxyMock = asyncFn(); di.override( - electronBrowserWindowInjectable, - () => () => ({ + resolveSystemProxyWindowInjectable, + () => ({ webContents: { session: { resolveProxy: resolveSystemProxyMock, @@ -72,8 +72,8 @@ describe("technical: resolve-system-proxy-from-electron", () => { resolveSystemProxyMock = asyncFn(); di.override( - electronBrowserWindowInjectable, - () => () => ({ + resolveSystemProxyWindowInjectable, + () => ({ webContents: { session: { resolveProxy: () => { diff --git a/packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.global-override-for-injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts similarity index 77% rename from packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.global-override-for-injectable.ts rename to packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts index c6535e9ef2..4bf1ada952 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.global-override-for-injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.global-override-for-injectable.ts @@ -5,11 +5,11 @@ import { getGlobalOverride } from "@k8slens/test-utils"; import type { BrowserWindow, Session, WebContents } from "electron"; -import electronBrowserWindowInjectable from "./electron-browser-window.injectable"; +import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable"; export default getGlobalOverride( - electronBrowserWindowInjectable, - () => () => ({ + resolveSystemProxyWindowInjectable, + () => ({ webContents: { session: { resolveProxy: () => "DIRECT", diff --git a/packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.injectable.ts b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts similarity index 50% rename from packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.injectable.ts rename to packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts index 93f2066f93..88e4319fa0 100644 --- a/packages/core/src/main/utils/resolve-system-proxy/electron-browser-window.injectable.ts +++ b/packages/core/src/main/utils/resolve-system-proxy/resolve-system-proxy-window.injectable.ts @@ -3,17 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { BrowserWindowConstructorOptions } from "electron"; import { BrowserWindow } from "electron"; -const electronBrowserWindowInjectable = getInjectable({ - id: "electron-browser-window", +const resolveSystemProxyWindowInjectable = getInjectable({ + id: "resolve-system-proxy-window", instantiate: () => { - return (opts: BrowserWindowConstructorOptions) => { - return new BrowserWindow(opts); - }; + return new BrowserWindow({ show: false, paintWhenInitiallyHidden: false }); }, causesSideEffects: true, }); -export default electronBrowserWindowInjectable; +export default resolveSystemProxyWindowInjectable;