From 795e190bdaa46b4102f1bf9f95b00c8439830f14 Mon Sep 17 00:00:00 2001 From: Hampus Date: Thu, 8 Oct 2026 03:05:37 +0200 Subject: [PATCH] fix(desktop): let the Theme Studio popout resolve its runtime (#3272) --- fluxer_desktop/src/main/LocalAppTestSupport.test.mjs | 2 +- fluxer_desktop/src/main/PrivilegedRendererDocuments.ts | 4 ++-- fluxer_desktop/src/main/Window.ts | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fluxer_desktop/src/main/LocalAppTestSupport.test.mjs b/fluxer_desktop/src/main/LocalAppTestSupport.test.mjs index 0f77a4839..b9c7365a4 100644 --- a/fluxer_desktop/src/main/LocalAppTestSupport.test.mjs +++ b/fluxer_desktop/src/main/LocalAppTestSupport.test.mjs @@ -78,7 +78,7 @@ const DESKTOP_APP_STORAGE_STUB = dataModule(`const state = globalThis[${JSON.str export const getDesktopAppStorage = () => state.desktopAppStorage;`); const WINDOW_STUB = dataModule(`const state = globalThis[${JSON.stringify(LIVE_STATE_KEY)}]; -export const getMainWindow = () => state.mainWindow; +export const isAppDocumentWindowContents = (contents) => state.mainWindow?.webContents === contents; export const isTrustedOrigin = () => true;`); const APP_LOGGER_STUB = dataModule(`const noop = () => undefined; diff --git a/fluxer_desktop/src/main/PrivilegedRendererDocuments.ts b/fluxer_desktop/src/main/PrivilegedRendererDocuments.ts index 1b98e222b..46a723f0e 100644 --- a/fluxer_desktop/src/main/PrivilegedRendererDocuments.ts +++ b/fluxer_desktop/src/main/PrivilegedRendererDocuments.ts @@ -3,7 +3,7 @@ import {DESKTOP_APP_ORIGIN} from '@electron/common/Constants'; import {createChildLogger} from '@electron/common/Logger'; import {RendererDocumentOwnerFactory} from '@electron/main/RendererDocumentOwner'; -import {getMainWindow, isTrustedOrigin} from '@electron/main/Window'; +import {isAppDocumentWindowContents, isTrustedOrigin} from '@electron/main/Window'; import type {IpcMainInvokeEvent} from 'electron'; const BLANK_DOCUMENT_URL = 'about:blank'; @@ -49,7 +49,7 @@ export function createPrivilegedRendererDocumentOwners(componentName: string): R const log = createChildLogger(componentName); return new RendererDocumentOwnerFactory({ policy: { - isPrivilegedRendererDocument: ({sender, url}) => sender === getMainWindow()?.webContents && isTrustedOrigin(url), + isPrivilegedRendererDocument: ({sender, url}) => isAppDocumentWindowContents(sender) && isTrustedOrigin(url), }, onWatcherFailure: (error, reason) => { log.warn('Renderer document invalidation handling failed', {reason, error}); diff --git a/fluxer_desktop/src/main/Window.ts b/fluxer_desktop/src/main/Window.ts index 2f3696c07..a4ce7a5f1 100644 --- a/fluxer_desktop/src/main/Window.ts +++ b/fluxer_desktop/src/main/Window.ts @@ -364,6 +364,12 @@ function recoverMainWindowRendererBeforeShow(reason: string): void { reloadMainWindowRendererAfterGone(reason); } +export function isAppDocumentWindowContents(contents: Electron.WebContents): boolean { + return [mainWindow, themeStudioPopoutWindow].some( + (window) => isAliveWindow(window) && window.webContents === contents, + ); +} + function getThemeStudioPopoutWindow(): BrowserWindow | null { if (isAliveWindow(themeStudioPopoutWindow)) { return themeStudioPopoutWindow;