diff --git a/lib/gui/app/app.ts b/lib/gui/app/app.ts index 143969bf..16ffc5de 100644 --- a/lib/gui/app/app.ts +++ b/lib/gui/app/app.ts @@ -15,6 +15,7 @@ */ import * as electron from 'electron'; +import * as remote from '@electron/remote'; import * as sdk from 'etcher-sdk'; import * as _ from 'lodash'; import outdent from 'outdent'; @@ -327,8 +328,8 @@ window.addEventListener('beforeunload', async (event) => { }); // This circumvents the 'beforeunload' event unlike - // electron.remote.app.quit() which does not. - electron.remote.process.exit(EXIT_CODES.SUCCESS); + // remote.app.quit() which does not. + remote.process.exit(EXIT_CODES.SUCCESS); } analytics.logEvent('Close rejected while flashing', { diff --git a/lib/gui/app/components/safe-webview/safe-webview.tsx b/lib/gui/app/components/safe-webview/safe-webview.tsx index c7cd4b5f..cda7b1a7 100644 --- a/lib/gui/app/components/safe-webview/safe-webview.tsx +++ b/lib/gui/app/components/safe-webview/safe-webview.tsx @@ -15,6 +15,7 @@ */ import * as electron from 'electron'; +import * as remote from '@electron/remote'; import * as _ from 'lodash'; import * as React from 'react'; @@ -97,7 +98,7 @@ export class SafeWebview extends React.PureComponent< this.didFailLoad = _.bind(this.didFailLoad, this); this.didGetResponseDetails = _.bind(this.didGetResponseDetails, this); // Make a persistent electron session for the webview - this.session = electron.remote.session.fromPartition(ELECTRON_SESSION, { + this.session = remote.session.fromPartition(ELECTRON_SESSION, { // Disable the cache for the session such that new content shows up when refreshing cache: false, }); diff --git a/lib/gui/app/models/settings.ts b/lib/gui/app/models/settings.ts index 36712884..061881fc 100644 --- a/lib/gui/app/models/settings.ts +++ b/lib/gui/app/models/settings.ts @@ -41,11 +41,10 @@ export const DEFAULT_HEIGHT = 480; * NOTE: We use the remote property when this module * is loaded in the Electron's renderer process */ -const app = electron.app || electron.remote.app; - -const USER_DATA_DIR = app.getPath('userData'); - -const CONFIG_PATH = join(USER_DATA_DIR, 'config.json'); +function getConfigPath() { + const app = electron.app || require('@electron/remote').app; + return join(app.getPath('userData'), 'config.json'); +} async function readConfigFile(filename: string): Promise<_.Dictionary> { let contents = '{}'; @@ -64,7 +63,7 @@ async function readConfigFile(filename: string): Promise<_.Dictionary> { // exported for tests export async function readAll() { - return await readConfigFile(CONFIG_PATH); + return await readConfigFile(getConfigPath()); } // exported for tests @@ -103,7 +102,7 @@ export async function set( const previousValue = settings[key]; settings[key] = value; try { - await writeConfigFileFn(CONFIG_PATH, settings); + await writeConfigFileFn(getConfigPath(), settings); } catch (error: any) { // Revert to previous value if persisting settings failed settings[key] = previousValue; diff --git a/lib/gui/app/os/dialog.ts b/lib/gui/app/os/dialog.ts index 0fbe4883..b882dced 100644 --- a/lib/gui/app/os/dialog.ts +++ b/lib/gui/app/os/dialog.ts @@ -15,6 +15,7 @@ */ import * as electron from 'electron'; +import * as remote from '@electron/remote'; import * as _ from 'lodash'; import * as errors from '../../../shared/errors'; @@ -63,10 +64,9 @@ export async function selectImage(): Promise { }, ], }; - const currentWindow = electron.remote.getCurrentWindow(); - const [file] = ( - await electron.remote.dialog.showOpenDialog(currentWindow, options) - ).filePaths; + const currentWindow = remote.getCurrentWindow(); + const [file] = (await remote.dialog.showOpenDialog(currentWindow, options)) + .filePaths; return file; } @@ -92,8 +92,8 @@ export async function showWarning(options: { ); const BUTTON_REJECTION_INDEX = _.indexOf(BUTTONS, options.rejectionLabel); - const { response } = await electron.remote.dialog.showMessageBox( - electron.remote.getCurrentWindow(), + const { response } = await remote.dialog.showMessageBox( + remote.getCurrentWindow(), { type: 'warning', buttons: BUTTONS, @@ -113,5 +113,5 @@ export async function showWarning(options: { export function showError(error: Error) { const title = errors.getTitle(error); const message = errors.getDescription(error); - electron.remote.dialog.showErrorBox(title, message); + remote.dialog.showErrorBox(title, message); } diff --git a/lib/gui/app/os/notification.ts b/lib/gui/app/os/notification.ts index 2d6b808e..4cc9aa34 100644 --- a/lib/gui/app/os/notification.ts +++ b/lib/gui/app/os/notification.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import * as electron from 'electron'; +import * as remote from '@electron/remote'; import * as settings from '../models/settings'; @@ -28,8 +28,8 @@ export async function send(title: string, body: string, icon: string) { } // `app.dock` is only defined in OS X - if (electron.remote.app.dock) { - electron.remote.app.dock.bounce(); + if (remote.app.dock) { + remote.app.dock.bounce(); } return new window.Notification(title, { body, icon }); diff --git a/lib/gui/app/os/window-progress.ts b/lib/gui/app/os/window-progress.ts index 0eec6a7b..91db180d 100644 --- a/lib/gui/app/os/window-progress.ts +++ b/lib/gui/app/os/window-progress.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import * as electron from 'electron'; +import * as remote from '@electron/remote'; import { percentageToFloat } from '../../../shared/utils'; import { FlashState, titleFromFlashState } from '../modules/progress-status'; @@ -40,7 +40,7 @@ function getWindowTitle(state?: FlashState) { * @description * We expose this property to `this` for testability purposes. */ -export const currentWindow = electron.remote.getCurrentWindow(); +export const currentWindow = remote.getCurrentWindow(); /** * @summary Set operating system window progress diff --git a/lib/gui/etcher.ts b/lib/gui/etcher.ts index 56f0caea..8fdfbec6 100644 --- a/lib/gui/etcher.ts +++ b/lib/gui/etcher.ts @@ -15,6 +15,7 @@ */ import * as electron from 'electron'; +import * as remoteMain from '@electron/remote/main'; import { autoUpdater } from 'electron-updater'; import { promises as fs } from 'fs'; import { platform } from 'os'; @@ -40,6 +41,8 @@ const packageUpdatable = updatablePackageTypes.includes(packageType); let packageUpdated = false; let mainWindow: any = null; +remoteMain.initialize(); + async function checkForUpdates(interval: number) { // We use a while loop instead of a setInterval to preserve // async execution time between each function call @@ -48,8 +51,8 @@ async function checkForUpdates(interval: number) { try { const release = await autoUpdater.checkForUpdates(); const isOutdated = - semver.compare(release.updateInfo.version, version) > 0; - const shouldUpdate = release.updateInfo.stagingPercentage !== 0; // undefinded (default) means 100% + semver.compare(release!.updateInfo.version, version) > 0; + const shouldUpdate = release!.updateInfo.stagingPercentage !== 0; // undefinded (default) means 100% if (shouldUpdate && isOutdated) { await autoUpdater.downloadUpdate(); packageUpdated = true; diff --git a/lib/shared/utils.ts b/lib/shared/utils.ts index 258d74ef..c573fc66 100755 --- a/lib/shared/utils.ts +++ b/lib/shared/utils.ts @@ -39,9 +39,8 @@ export async function delay(duration: number): Promise { } export function getAppPath(): string { - const { app, remote } = require('electron'); return ( - (app || remote.app) + (require('electron').app || require('@electron/remote').app) .getAppPath() // With macOS universal builds, getAppPath() returns the path to an app.asar file containing an index.js file which will // include the app-x64 or app-arm64 folder depending on the arch. diff --git a/package-lock.json b/package-lock.json index 358a20c8..b67acb65 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7342,157 +7342,31 @@ } }, "electron-mocha": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/electron-mocha/-/electron-mocha-9.3.3.tgz", - "integrity": "sha512-tTUK3VcPcJa+ZcrJaFvm6qDCkDQ65nZyAacTRwRbCfIRjGLtD+JjvKsCf9jlvp1CkA9MRpmH30oeYtJcxWbbJw==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/electron-mocha/-/electron-mocha-10.1.0.tgz", + "integrity": "sha512-P+Eew2rgjFw99kLjiqAchoFA4mpsw60lwy34LTmWpmOhweMc6EoLJqeDZigGXiHOSDw+HT/imdChYgVexVuJEQ==", "dev": true, "requires": { "ansi-colors": "^4.1.1", "electron-window": "^0.8.0", - "fs-extra": "^9.0.1", - "log-symbols": "^4.0.0", - "mocha": "^8.2.1", + "fs-extra": "^10.0.0", + "log-symbols": "^4.1.0", + "mocha": "^8.4.0", "which": "^2.0.2", - "yargs": "^16.1.1" + "yargs": "^16.2.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -7503,106 +7377,11 @@ "universalify": "^2.0.0" } }, - "mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true } } }, @@ -14997,6 +14776,12 @@ "webdriverio": "^6.9.1" }, "dependencies": { + "@electron/remote": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/remote/-/remote-1.2.2.tgz", + "integrity": "sha512-PfnXpQGWh4vpX866NNucJRnNOzDRZcsLcLaT32fUth9k0hccsohfxprqEDYLzRg+ZK2xRrtyUN5wYYoHimMCJg==", + "dev": true + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", diff --git a/package.json b/package.json index 0761a214..8f1cde22 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "sanity-checks": "bash scripts/ci/ensure-all-file-extensions-in-gitattributes.sh", "start": "./node_modules/.bin/electron .", "test-macos": "npm run lint && npm run test-gui && npm run test-shared && npm run test-spectron && npm run sanity-checks", - "test-gui": "electron-mocha --recursive --reporter spec --require ts-node/register/transpile-only --require-main tests/gui/allow-renderer-process-reuse.ts --full-trace --no-sandbox --renderer tests/gui/**/*.ts", + "test-gui": "electron-mocha --recursive --reporter spec --window-config tests/gui/window-config.json --require ts-node/register/transpile-only --require-main tests/gui/allow-renderer-process-reuse.ts --full-trace --no-sandbox --renderer tests/gui/**/*.ts", "test-linux": "npm run lint && xvfb-run --auto-servernum npm run test-gui && xvfb-run --auto-servernum npm run test-shared && xvfb-run --auto-servernum npm run test-spectron && npm run sanity-checks", "test-shared": "electron-mocha --recursive --reporter spec --require ts-node/register/transpile-only --require-main tests/gui/allow-renderer-process-reuse.ts --full-trace --no-sandbox tests/shared/**/*.ts", "test-spectron": "mocha --recursive --reporter spec --require ts-node/register/transpile-only --require-main tests/gui/allow-renderer-process-reuse.ts tests/spectron/runner.spec.ts", @@ -52,6 +52,7 @@ "devDependencies": { "@balena/lint": "5.4.2", "@balena/sudo-prompt": "9.2.1-workaround-windows-amperstand-in-username-0849e215b947987a643fe5763902aea201255534", + "@electron/remote": "^1.2.2", "@fortawesome/fontawesome-free": "5.15.4", "@sentry/electron": "^4.1.2", "@svgr/webpack": "5.5.0", @@ -78,7 +79,7 @@ "debug": "4.3.4", "electron": "^13.6.9", "electron-builder": "^23.6.0", - "electron-mocha": "9.3.3", + "electron-mocha": "^10.1.0", "electron-notarize": "1.2.2", "electron-rebuild": "3.2.3", "electron-updater": "5.3.0", diff --git a/tests/gui/allow-renderer-process-reuse.ts b/tests/gui/allow-renderer-process-reuse.ts index 624d107b..07180991 100644 --- a/tests/gui/allow-renderer-process-reuse.ts +++ b/tests/gui/allow-renderer-process-reuse.ts @@ -1,5 +1,9 @@ // tslint:disable-next-line:no-var-requires const { app } = require('electron'); + if (app !== undefined) { + // tslint:disable-next-line:no-var-requires + require('@electron/remote/main').initialize(); + app.allowRendererProcessReuse = false; } diff --git a/tests/gui/window-config.json b/tests/gui/window-config.json new file mode 100644 index 00000000..2ec247ff --- /dev/null +++ b/tests/gui/window-config.json @@ -0,0 +1,5 @@ +{ + "webPreferences": { + "enableRemoteModule": true + } +}