Upgrade Electron from 13 to 16 (PR #1288)
https://www.electronjs.org/docs/latest/breaking-changes Co-authored-by: Ronan Jouchet <ronan@jouchet.fr>
This commit is contained in:
parent
6f4ae587c4
commit
d483597320
|
@ -17,7 +17,7 @@
|
|||
"source-map-support": "^0.5.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^13.6.1"
|
||||
"electron": "^16.0.5"
|
||||
}
|
||||
},
|
||||
"node_modules/@electron/get": {
|
||||
|
@ -64,9 +64,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "14.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz",
|
||||
"integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==",
|
||||
"version": "14.18.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.4.tgz",
|
||||
"integrity": "sha512-swe3lD4izOJWHuxvsZdDFRq6S9i6koJsXOnQKYekhSO5JTizMVirUFgY/bUsaOJQj8oSD4oxmRYPBM/0b6jpdw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/ansi-regex": {
|
||||
|
@ -296,13 +296,13 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/electron": {
|
||||
"version": "13.6.3",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-13.6.3.tgz",
|
||||
"integrity": "sha512-kevgR6/RuEhchJQbgCKhHle9HvJhi2dOJlicFZJqbbqa9BVpZARqqFDlwTSatYxmUPUJwu09FvyMwJG2DMQIng==",
|
||||
"version": "16.0.5",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-16.0.5.tgz",
|
||||
"integrity": "sha512-TgQXWmEGQ3uH2P2JDq5GyJDEu/fimRgqp1iNisARtGreU1k3630PqWlR+4SPnSEHN9NuSv92ng6NWxtefeFzxg==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@electron/get": "^1.0.1",
|
||||
"@electron/get": "^1.13.0",
|
||||
"@types/node": "^14.6.2",
|
||||
"extract-zip": "^1.0.3"
|
||||
},
|
||||
|
@ -1241,9 +1241,9 @@
|
|||
}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "14.18.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz",
|
||||
"integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==",
|
||||
"version": "14.18.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.4.tgz",
|
||||
"integrity": "sha512-swe3lD4izOJWHuxvsZdDFRq6S9i6koJsXOnQKYekhSO5JTizMVirUFgY/bUsaOJQj8oSD4oxmRYPBM/0b6jpdw==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-regex": {
|
||||
|
@ -1422,12 +1422,12 @@
|
|||
"dev": true
|
||||
},
|
||||
"electron": {
|
||||
"version": "13.6.3",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-13.6.3.tgz",
|
||||
"integrity": "sha512-kevgR6/RuEhchJQbgCKhHle9HvJhi2dOJlicFZJqbbqa9BVpZARqqFDlwTSatYxmUPUJwu09FvyMwJG2DMQIng==",
|
||||
"version": "16.0.5",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-16.0.5.tgz",
|
||||
"integrity": "sha512-TgQXWmEGQ3uH2P2JDq5GyJDEu/fimRgqp1iNisARtGreU1k3630PqWlR+4SPnSEHN9NuSv92ng6NWxtefeFzxg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@electron/get": "^1.0.1",
|
||||
"@electron/get": "^1.13.0",
|
||||
"@types/node": "^14.6.2",
|
||||
"extract-zip": "^1.0.3"
|
||||
}
|
||||
|
|
|
@ -20,6 +20,6 @@
|
|||
"source-map-support": "^0.5.19"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^13.6.3"
|
||||
"electron": "^16.0.5"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ jest.mock('./helpers');
|
|||
jest.mock('./windowEvents');
|
||||
jest.mock('./windowHelpers');
|
||||
|
||||
import { dialog, BrowserWindow, WebContents } from 'electron';
|
||||
import { dialog, BrowserWindow } from 'electron';
|
||||
import { WindowOptions } from '../../../shared/src/options/model';
|
||||
import { linkIsInternal, openExternal, nativeTabsSupported } from './helpers';
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
||||
|
@ -371,7 +371,7 @@ describe('onWillPreventUnload', () => {
|
|||
test('shows dialog and calls preventDefault on ok', () => {
|
||||
mockShowDialog.mockReturnValue(0);
|
||||
|
||||
const event = { preventDefault, sender: new WebContents() };
|
||||
const event = { preventDefault, sender: {} };
|
||||
onWillPreventUnload(event);
|
||||
|
||||
expect(mockFromWebContents).toHaveBeenCalledWith(event.sender);
|
||||
|
@ -382,7 +382,7 @@ describe('onWillPreventUnload', () => {
|
|||
test('shows dialog and does not call preventDefault on cancel', () => {
|
||||
mockShowDialog.mockReturnValue(1);
|
||||
|
||||
const event = { preventDefault, sender: new WebContents() };
|
||||
const event = { preventDefault, sender: {} };
|
||||
onWillPreventUnload(event);
|
||||
|
||||
expect(mockFromWebContents).toHaveBeenCalledWith(event.sender);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { dialog, BrowserWindow, WebContents } from 'electron';
|
||||
import { dialog, BrowserWindow } from 'electron';
|
||||
jest.mock('loglevel');
|
||||
import { error } from 'loglevel';
|
||||
import { WindowOptions } from '../../../shared/src/options/model';
|
||||
|
@ -102,35 +102,30 @@ describe('injectCSS', () => {
|
|||
jest.setTimeout(10000);
|
||||
|
||||
const mockGetCSSToInject: jest.SpyInstance = getCSSToInject as jest.Mock;
|
||||
let mockGetURL: jest.SpyInstance;
|
||||
const mockLogError: jest.SpyInstance = error as jest.Mock;
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest.spyOn(
|
||||
WebContents.prototype,
|
||||
'insertCSS',
|
||||
);
|
||||
|
||||
const css = 'body { color: white; }';
|
||||
let responseHeaders: Record<string, string[]>;
|
||||
|
||||
beforeEach(() => {
|
||||
mockGetCSSToInject.mockReset().mockReturnValue('');
|
||||
mockGetURL = jest
|
||||
.spyOn(WebContents.prototype, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
mockLogError.mockReset();
|
||||
mockWebContentsInsertCSS.mockReset().mockResolvedValue(undefined);
|
||||
responseHeaders = { 'x-header': ['value'], 'content-type': ['test/other'] };
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
mockGetCSSToInject.mockRestore();
|
||||
mockGetURL.mockRestore();
|
||||
mockLogError.mockRestore();
|
||||
mockWebContentsInsertCSS.mockRestore();
|
||||
});
|
||||
|
||||
test('will not inject if getCSSToInject is empty', () => {
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
injectCSS(window);
|
||||
|
||||
|
@ -141,6 +136,12 @@ describe('injectCSS', () => {
|
|||
test('will inject on did-navigate + onResponseStarted', () => {
|
||||
mockGetCSSToInject.mockReturnValue(css);
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
injectCSS(window);
|
||||
|
||||
|
@ -162,6 +163,12 @@ describe('injectCSS', () => {
|
|||
(contentType: string) => {
|
||||
mockGetCSSToInject.mockReturnValue(css);
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
responseHeaders['content-type'] = [contentType];
|
||||
|
||||
|
@ -188,6 +195,12 @@ describe('injectCSS', () => {
|
|||
(contentType: string) => {
|
||||
mockGetCSSToInject.mockReturnValue(css);
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
responseHeaders['content-type'] = [contentType];
|
||||
|
||||
|
@ -214,6 +227,12 @@ describe('injectCSS', () => {
|
|||
(resourceType: string) => {
|
||||
mockGetCSSToInject.mockReturnValue(css);
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
injectCSS(window);
|
||||
|
||||
|
@ -239,6 +258,12 @@ describe('injectCSS', () => {
|
|||
(resourceType: string) => {
|
||||
mockGetCSSToInject.mockReturnValue(css);
|
||||
const window = new BrowserWindow();
|
||||
const mockWebContentsInsertCSS: jest.SpyInstance = jest
|
||||
.spyOn(window.webContents, 'insertCSS')
|
||||
.mockResolvedValue('');
|
||||
jest
|
||||
.spyOn(window.webContents, 'getURL')
|
||||
.mockReturnValue('https://example.com');
|
||||
|
||||
injectCSS(window);
|
||||
|
||||
|
|
|
@ -5,7 +5,6 @@ import * as path from 'path';
|
|||
|
||||
import electron, {
|
||||
app,
|
||||
crashReporter,
|
||||
dialog,
|
||||
globalShortcut,
|
||||
systemPreferences,
|
||||
|
@ -211,14 +210,6 @@ app.on('quit', (event, exitCode) => {
|
|||
|
||||
app.on('will-finish-launching', () => {
|
||||
log.debug('app.will-finish-launching');
|
||||
if (appArgs.crashReporter) {
|
||||
crashReporter.start({
|
||||
companyName: appArgs.companyName ?? '',
|
||||
productName: appArgs.name,
|
||||
submitURL: appArgs.crashReporter,
|
||||
uploadToServer: true,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if (appArgs.widevine) {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -45,7 +45,7 @@
|
|||
"prepare": "cd app && npm ci && cd .. && npm run build",
|
||||
"relock": "rm -rf ./node_modules/ ./app/node_modules/ ./npm-shrinkwrap.json ./app/npm-shrinkwrap.json && npm install --ignore-scripts --package-lock && mv package-lock.json npm-shrinkwrap.json && npm out; cd app && npm install --ignore-scripts --package-lock && mv package-lock.json npm-shrinkwrap.json && npm out",
|
||||
"test:integration": "jest --testRegex '.*integration-test.js'",
|
||||
"test:manual": "npm run build && ./.github/manual-test",
|
||||
"test:manual": "npm run build && bash .github/manual-test",
|
||||
"test:unit": "jest",
|
||||
"test:watch": "echo 'Remember to run npm run build:watch for the test watcher to work!' && jest --watchAll --collectCoverage=false",
|
||||
"test:withlog": "LOGLEVEL=trace npm run test",
|
||||
|
|
|
@ -4,13 +4,13 @@ export const DEFAULT_APP_NAME = 'APP';
|
|||
|
||||
// Update both DEFAULT_ELECTRON_VERSION and DEFAULT_CHROME_VERSION together,
|
||||
// and update app / package.json / devDeps / electron to value of DEFAULT_ELECTRON_VERSION
|
||||
export const DEFAULT_ELECTRON_VERSION = '13.6.3';
|
||||
export const DEFAULT_ELECTRON_VERSION = '16.0.5';
|
||||
// https://atom.io/download/atom-shell/index.json
|
||||
export const DEFAULT_CHROME_VERSION = '91.0.4472.164';
|
||||
export const DEFAULT_CHROME_VERSION = '96.0.4664.55';
|
||||
|
||||
// Update each of these periodically
|
||||
// https://product-details.mozilla.org/1.0/firefox_versions.json
|
||||
export const DEFAULT_FIREFOX_VERSION = '94.0.2';
|
||||
export const DEFAULT_FIREFOX_VERSION = '95.0.2';
|
||||
|
||||
// https://en.wikipedia.org/wiki/Safari_version_history
|
||||
export const DEFAULT_SAFARI_VERSION = {
|
||||
|
|
|
@ -27,7 +27,12 @@ export async function icon(options: IconParams): Promise<string | undefined> {
|
|||
options.packager.platform,
|
||||
);
|
||||
} catch (err: unknown) {
|
||||
log.warn('Cannot automatically retrieve the app icon:', err);
|
||||
// eslint-disable-next-line
|
||||
const errorUrl: string = (err as any)?.config?.url;
|
||||
log.warn(
|
||||
'Cannot automatically retrieve the app icon:',
|
||||
errorUrl ? `${(err as Error).message} on ${errorUrl}` : err,
|
||||
);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue