From 7621758c768e5e7e9cc3079c2e1c1af610a88c13 Mon Sep 17 00:00:00 2001 From: pengx17 Date: Thu, 5 Sep 2024 10:08:56 +0000 Subject: [PATCH] fix(electron): tune offline mode filter (#8113) --- .../frontend/electron/src/main/protocol.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/frontend/electron/src/main/protocol.ts b/packages/frontend/electron/src/main/protocol.ts index 201566dd58..e70fccd235 100644 --- a/packages/frontend/electron/src/main/protocol.ts +++ b/packages/frontend/electron/src/main/protocol.ts @@ -3,6 +3,7 @@ import { join } from 'node:path'; import { net, protocol, session } from 'electron'; import { CLOUD_BASE_URL } from './config'; +import { logger } from './logger'; import { isOfflineModeEnabled } from './utils'; import { getCookies } from './windows-manager'; @@ -111,7 +112,28 @@ export function registerProtocol() { const sameOrigin = origin === CLOUD_BASE_URL || protocol === 'file:'; - if (isOfflineModeEnabled() && (sameOrigin || 'devtools:' !== protocol)) { + // offline whitelist + // 1. do not block non-api request for http://localhost || file:// (local dev assets) + // 2. do not block devtools + // 3. block all other requests + const blocked = (() => { + if (!isOfflineModeEnabled()) { + return false; + } + if ( + (protocol === 'file:' || origin.startsWith('http://localhost')) && + !isNetworkResource(pathname) + ) { + return false; + } + if ('devtools:' === protocol) { + return false; + } + return true; + })(); + + if (blocked) { + logger.debug('blocked request', details.url); callback({ cancel: true, });