1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Release 6.4.8 (#7397)

* Fix resolve system proxy error when no windows available (#7375)

* fix resolve system proxy error when no windows available

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* fix electronBrowserWindowInjectable id

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

---------

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
Signed-off-by: Sebastian Malton <sebastian@malton.name>

* Fix resolveSystemProxyFromElectron causing a crash on quit (#7379)

* destroy resolve system proxy window on before quit

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* resolve system proxy window: load blank page

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* disable paintWhenInitiallyHidden

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

---------

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>

* Release 6.4.8

Signed-off-by: Sebastian Malton <sebastian@malton.name>

---------

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
Signed-off-by: Sebastian Malton <sebastian@malton.name>
Co-authored-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Sebastian Malton 2023-03-22 11:39:05 -04:00 committed by GitHub
parent e7b6ea15e0
commit 8bc07002f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 71 additions and 91 deletions

View File

@ -4,7 +4,7 @@
"packages": [ "packages": [
"packages/*" "packages/*"
], ],
"version": "6.4.7", "version": "6.4.8",
"npmClient": "yarn", "npmClient": "yarn",
"npmClientArgs": [ "npmClientArgs": [
"--network-timeout=100000" "--network-timeout=100000"

View File

@ -3,7 +3,7 @@
"productName": "", "productName": "",
"description": "Lens Desktop Core", "description": "Lens Desktop Core",
"homepage": "https://github.com/lensapp/lens", "homepage": "https://github.com/lensapp/lens",
"version": "6.4.7", "version": "6.4.8",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/lensapp/lens.git" "url": "git+https://github.com/lensapp/lens.git"

View File

@ -26,7 +26,6 @@ import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-
import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable"; import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable";
import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable"; import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable";
import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
import electronInjectable from "./utils/resolve-system-proxy/electron.injectable";
import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable"; import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable";
import type { GlobalOverride } from "../common/test-utils/get-global-override"; import type { GlobalOverride } from "../common/test-utils/get-global-override";
import applicationInformationInjectable from "../common/vars/application-information-injectable"; import applicationInformationInjectable from "../common/vars/application-information-injectable";
@ -73,7 +72,6 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
di.override(globalOverride.injectable, globalOverride.overridingInstantiate); di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
} }
di.override(electronInjectable, () => ({}));
di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {}); di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {});
overrideRunnablesHavingSideEffects(di); overrideRunnablesHavingSideEffects(di);

View File

@ -1,14 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import electron from "electron";
const electronInjectable = getInjectable({
id: "electron",
instantiate: () => electron,
causesSideEffects: true,
});
export default electronInjectable;

View File

@ -3,28 +3,19 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import electronInjectable from "./electron.injectable";
import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable";
import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable";
const resolveSystemProxyFromElectronInjectable = getInjectable({ const resolveSystemProxyFromElectronInjectable = getInjectable({
id: "resolve-system-proxy-from-electron", id: "resolve-system-proxy-from-electron",
instantiate: (di) => { instantiate: (di) => {
const electron = di.inject(electronInjectable); const helperWindow = di.inject(resolveSystemProxyWindowInjectable);
const withErrorLoggingFor = di.inject(withErrorLoggingInjectable); const withErrorLoggingFor = di.inject(withErrorLoggingInjectable);
const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy"); const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy");
return withErrorLogging(async (url: string) => { return withErrorLogging(async (url: string) => {
const webContent = electron.webContents return await helperWindow.webContents.session.resolveProxy(url);
.getAllWebContents()
.find((x) => !x.isDestroyed());
if (!webContent) {
throw new Error(`Tried to resolve proxy for "${url}", but no browser window was available`);
}
return await webContent.session.resolveProxy(url);
}); });
}, },
}); });

View File

@ -5,13 +5,13 @@
import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import { getDiForUnitTesting } from "../../getDiForUnitTesting";
import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable"; import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable";
import electronInjectable from "./electron.injectable"; import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable";
import type { AsyncFnMock } from "@async-fn/jest"; import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest"; import asyncFn from "@async-fn/jest";
import type electron from "electron";
import { getPromiseStatus } from "../../../common/test-utils/get-promise-status"; import { getPromiseStatus } from "../../../common/test-utils/get-promise-status";
import logErrorInjectable from "../../../common/log-error.injectable"; import logErrorInjectable from "../../../common/log-error.injectable";
import type { DiContainer } from "@ogre-tools/injectable"; import type { DiContainer } from "@ogre-tools/injectable";
import type { BrowserWindow, Session, WebContents } from "electron";
describe("technical: resolve-system-proxy-from-electron", () => { describe("technical: resolve-system-proxy-from-electron", () => {
let resolveSystemProxyMock: AsyncFnMock<(url: string) => Promise<string>>; let resolveSystemProxyMock: AsyncFnMock<(url: string) => Promise<string>>;
@ -26,44 +26,19 @@ describe("technical: resolve-system-proxy-from-electron", () => {
di.override(logErrorInjectable, () => logErrorMock); di.override(logErrorInjectable, () => logErrorMock);
}); });
describe("given there are non-destroyed Lens windows, when called with URL", () => { describe("given there are no unexpected issues, when called with URL", () => {
beforeEach(() => { beforeEach(() => {
resolveSystemProxyMock = asyncFn(); resolveSystemProxyMock = asyncFn();
di.override( di.override(
electronInjectable, resolveSystemProxyWindowInjectable,
() => ({
() => webContents: {
({ session: {
webContents: { resolveProxy: resolveSystemProxyMock,
getAllWebContents: () => [ } as unknown as Session,
{ } as unknown as WebContents,
isDestroyed: () => true, } as unknown as BrowserWindow),
session: {
resolveProxy: () => {
throw new Error("should never come here");
},
},
},
{
isDestroyed: () => false,
session: { resolveProxy: resolveSystemProxyMock },
},
{
isDestroyed: () => false,
session: {
resolveProxy: () => {
throw new Error("should never come here");
},
},
},
],
},
} as unknown as typeof electron),
); );
const resolveSystemProxyFromElectron = di.inject( const resolveSystemProxyFromElectron = di.inject(
@ -73,7 +48,7 @@ describe("technical: resolve-system-proxy-from-electron", () => {
actualPromise = resolveSystemProxyFromElectron("some-url"); actualPromise = resolveSystemProxyFromElectron("some-url");
}); });
it("calls to resolve proxy from the first window", () => { it("calls to resolve proxy from the browser window", () => {
expect(resolveSystemProxyMock).toHaveBeenCalledWith("some-url"); expect(resolveSystemProxyMock).toHaveBeenCalledWith("some-url");
}); });
@ -90,28 +65,23 @@ describe("technical: resolve-system-proxy-from-electron", () => {
}); });
}); });
describe("given there are only destroyed Lens windows, when called with URL", () => { describe("given there are unexpected issues, when called with URL", () => {
let error: any; let error: any;
beforeEach(async () => { beforeEach(async () => {
di.override( resolveSystemProxyMock = asyncFn();
electronInjectable,
() =>
({
webContents: {
getAllWebContents: () => [
{
isDestroyed: () => true,
session: { di.override(
resolveProxy: () => { resolveSystemProxyWindowInjectable,
throw new Error("should never come here"); () => ({
}, webContents: {
}, session: {
}, resolveProxy: () => {
], throw new Error("unexpected error");
}, },
} as unknown as typeof electron), } as unknown as Session,
} as unknown as WebContents,
} as unknown as BrowserWindow),
); );
resolveSystemProxyMock = asyncFn(); resolveSystemProxyMock = asyncFn();
@ -128,7 +98,7 @@ describe("technical: resolve-system-proxy-from-electron", () => {
}); });
it("throws error", () => { it("throws error", () => {
expect(error.message).toBe('Tried to resolve proxy for "some-url", but no browser window was available'); expect(error.message).toBe("unexpected error");
}); });
it("logs error", () => { it("logs error", () => {

View File

@ -0,0 +1,19 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getGlobalOverride } from "@k8slens/test-utils";
import type { BrowserWindow, Session, WebContents } from "electron";
import resolveSystemProxyWindowInjectable from "./resolve-system-proxy-window.injectable";
export default getGlobalOverride(
resolveSystemProxyWindowInjectable,
() => ({
webContents: {
session: {
resolveProxy: () => "DIRECT",
} as unknown as Session,
} as unknown as WebContents,
} as unknown as BrowserWindow),
);

View File

@ -0,0 +1,16 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { BrowserWindow } from "electron";
const resolveSystemProxyWindowInjectable = getInjectable({
id: "resolve-system-proxy-window",
instantiate: () => {
return new BrowserWindow({ show: false, paintWhenInitiallyHidden: false });
},
causesSideEffects: true,
});
export default resolveSystemProxyWindowInjectable;

View File

@ -2,7 +2,7 @@
"name": "@k8slens/extensions", "name": "@k8slens/extensions",
"productName": "OpenLens extensions", "productName": "OpenLens extensions",
"description": "OpenLens - Open Source Kubernetes IDE: extensions", "description": "OpenLens - Open Source Kubernetes IDE: extensions",
"version": "6.4.7", "version": "6.4.8",
"copyright": "© 2022 OpenLens Authors", "copyright": "© 2022 OpenLens Authors",
"license": "MIT", "license": "MIT",
"main": "dist/extension-api.js", "main": "dist/extension-api.js",
@ -26,7 +26,7 @@
"prepare:dev": "yarn run build" "prepare:dev": "yarn run build"
}, },
"dependencies": { "dependencies": {
"@k8slens/core": "^6.4.7" "@k8slens/core": "^6.4.8"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^16.18.6", "@types/node": "^16.18.6",

View File

@ -4,7 +4,7 @@
"productName": "OpenLens", "productName": "OpenLens",
"description": "OpenLens - Open Source IDE for Kubernetes", "description": "OpenLens - Open Source IDE for Kubernetes",
"homepage": "https://github.com/lensapp/lens", "homepage": "https://github.com/lensapp/lens",
"version": "6.4.7", "version": "6.4.8",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/lensapp/lens.git" "url": "git+https://github.com/lensapp/lens.git"
@ -192,7 +192,7 @@
} }
}, },
"dependencies": { "dependencies": {
"@k8slens/core": "^6.4.7", "@k8slens/core": "^6.4.8",
"@k8slens/ensure-binaries": "^6.4.0-beta.16", "@k8slens/ensure-binaries": "^6.4.0-beta.16",
"@k8slens/generate-tray-icons": "^6.4.0-beta.16", "@k8slens/generate-tray-icons": "^6.4.0-beta.16",
"@ogre-tools/fp": "^12.0.1", "@ogre-tools/fp": "^12.0.1",