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:
parent
e7b6ea15e0
commit
8bc07002f6
@ -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"
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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;
|
|
||||||
@ -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);
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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", () => {
|
||||||
|
|||||||
@ -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),
|
||||||
|
);
|
||||||
@ -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;
|
||||||
@ -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",
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user