aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/main/src/devTools.ts14
-rw-r--r--packages/main/src/index.ts23
2 files changed, 27 insertions, 10 deletions
diff --git a/packages/main/src/devTools.ts b/packages/main/src/devTools.ts
index 7c7c86a..398904c 100644
--- a/packages/main/src/devTools.ts
+++ b/packages/main/src/devTools.ts
@@ -21,6 +21,20 @@
21import type { BrowserWindow } from 'electron'; 21import type { BrowserWindow } from 'electron';
22 22
23/** 23/**
24 * URL prefixes Sophie is allowed load in dev mode.
25 *
26 * In dev mode, in addition to the application itself,
27 * Sophie must be able do download and load the devtools and related extensions,
28 * so we have to make exceptions in the UI process request filter.
29 */
30export const DEVMODE_ALLOWED_URL_PREFIXES = [
31 'chrome-extension:',
32 'devtools:',
33 'https://clients2.google.com/service/update2/crx',
34 'https://clients2.googleusercontent.com/crx',
35];
36
37/**
24 * Installs the react and redux developer tools extensions. 38 * Installs the react and redux developer tools extensions.
25 * 39 *
26 * We use the redux devtools and connect the mobx store to it with `mst-middlewares`, 40 * We use the redux devtools and connect the mobx store to it with `mst-middlewares`,
diff --git a/packages/main/src/index.ts b/packages/main/src/index.ts
index ff14332..7c6bfd5 100644
--- a/packages/main/src/index.ts
+++ b/packages/main/src/index.ts
@@ -42,6 +42,7 @@ import { URL } from 'url';
42 42
43import { init } from './compositionRoot.js'; 43import { init } from './compositionRoot.js';
44import { 44import {
45 DEVMODE_ALLOWED_URL_PREFIXES,
45 installDevToolsExtensions, 46 installDevToolsExtensions,
46 openDevToolsWhenReady, 47 openDevToolsWhenReady,
47} from './devTools.js'; 48} from './devTools.js';
@@ -73,14 +74,6 @@ app.commandLine.appendSwitch(
73 'HardwareMediaKeyHandling,MediaSessionService', 74 'HardwareMediaKeyHandling,MediaSessionService',
74); 75);
75 76
76// It doesn't seem to cause a race condition to start installing the extensions this early.
77if (isDevelopment) {
78 app.whenReady().then(installDevToolsExtensions).catch((err) => {
79 console.error('Failed to install devtools extensions', err);
80 process.exit(1);
81 });
82}
83
84// Remove sophie and electron from the user-agent string to avoid detection. 77// Remove sophie and electron from the user-agent string to avoid detection.
85const originalUserAgent = app.userAgentFallback; 78const originalUserAgent = app.userAgentFallback;
86const userAgent = originalUserAgent.replaceAll(/\s(sophie|Electron)\/\S+/g, ''); 79const userAgent = originalUserAgent.replaceAll(/\s(sophie|Electron)\/\S+/g, '');
@@ -127,7 +120,7 @@ function shouldCancelMainWindowRequest(url: string, method: string): boolean {
127 return true; 120 return true;
128 } 121 }
129 if (isDevelopment) { 122 if (isDevelopment) {
130 if (normalizedUrl.startsWith('devtools:') || normalizedUrl.startsWith('chrome-extension:')) { 123 if (DEVMODE_ALLOWED_URL_PREFIXES.some((prefix) => normalizedUrl.startsWith(prefix))) {
131 return false; 124 return false;
132 } 125 }
133 if (import.meta.env.VITE_DEV_SERVER_URL !== undefined) { 126 if (import.meta.env.VITE_DEV_SERVER_URL !== undefined) {
@@ -315,7 +308,17 @@ app.on('window-all-closed', () => {
315 } 308 }
316}); 309});
317 310
318app.whenReady().then(createWindow).catch((err) => { 311app.whenReady().then(async () => {
312 if (isDevelopment) {
313 try {
314 await installDevToolsExtensions();
315 } catch (err) {
316 console.error('Failed to install devtools extensions', err);
317 }
318 }
319
320 return createWindow();
321}).catch((err) => {
319 console.error('Failed to create window', err); 322 console.error('Failed to create window', err);
320 process.exit(1); 323 process.exit(1);
321}); 324});