mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-02-27 18:22:41 -08:00
Fix overlay toggle regression TASK-7
This commit is contained in:
11
src/core/services/overlay-window-config.test.ts
Normal file
11
src/core/services/overlay-window-config.test.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
test('overlay window config explicitly disables renderer sandbox for preload compatibility', () => {
|
||||
const sourcePath = path.join(process.cwd(), 'src/core/services/overlay-window.ts');
|
||||
const source = fs.readFileSync(sourcePath, 'utf8');
|
||||
|
||||
assert.match(source, /webPreferences:\s*\{[\s\S]*sandbox:\s*false[\s\S]*\}/m);
|
||||
});
|
||||
@@ -75,6 +75,7 @@ export function createOverlayWindow(
|
||||
preload: path.join(__dirname, '..', '..', 'preload.js'),
|
||||
contextIsolation: true,
|
||||
nodeIntegration: false,
|
||||
sandbox: false,
|
||||
webSecurity: true,
|
||||
additionalArguments: [`--overlay-layer=${kind}`],
|
||||
},
|
||||
|
||||
@@ -2,6 +2,7 @@ import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
|
||||
import { createRendererRecoveryController } from './error-recovery.js';
|
||||
import { resolvePlatformInfo } from './utils/platform.js';
|
||||
|
||||
test('handleError logs context and recovers overlay state', () => {
|
||||
const payloads: unknown[] = [];
|
||||
@@ -120,3 +121,37 @@ test('nested recovery errors are ignored while current recovery is active', () =
|
||||
assert.equal(payloads.length, 1);
|
||||
assert.equal(restored, 1);
|
||||
});
|
||||
|
||||
test('resolvePlatformInfo prefers query layer over preload layer', () => {
|
||||
const previousWindow = (globalThis as { window?: unknown }).window;
|
||||
const previousNavigator = (globalThis as { navigator?: unknown }).navigator;
|
||||
|
||||
Object.defineProperty(globalThis, 'window', {
|
||||
configurable: true,
|
||||
value: {
|
||||
electronAPI: {
|
||||
getOverlayLayer: () => 'invisible',
|
||||
},
|
||||
location: { search: '?layer=visible' },
|
||||
},
|
||||
});
|
||||
Object.defineProperty(globalThis, 'navigator', {
|
||||
configurable: true,
|
||||
value: {
|
||||
platform: 'MacIntel',
|
||||
userAgent: 'Mozilla/5.0 (Macintosh)',
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const info = resolvePlatformInfo();
|
||||
assert.equal(info.overlayLayer, 'visible');
|
||||
assert.equal(info.isInvisibleLayer, false);
|
||||
} finally {
|
||||
Object.defineProperty(globalThis, 'window', { configurable: true, value: previousWindow });
|
||||
Object.defineProperty(globalThis, 'navigator', {
|
||||
configurable: true,
|
||||
value: previousNavigator,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -13,15 +13,15 @@ export type PlatformInfo = {
|
||||
|
||||
export function resolvePlatformInfo(): PlatformInfo {
|
||||
const overlayLayerFromPreload = window.electronAPI.getOverlayLayer();
|
||||
const overlayLayerFromQuery =
|
||||
new URLSearchParams(window.location.search).get('layer') === 'invisible'
|
||||
? 'invisible'
|
||||
: 'visible';
|
||||
const queryLayer = new URLSearchParams(window.location.search).get('layer');
|
||||
const overlayLayerFromQuery: OverlayLayer | null =
|
||||
queryLayer === 'visible' || queryLayer === 'invisible' ? queryLayer : null;
|
||||
|
||||
const overlayLayer: OverlayLayer =
|
||||
overlayLayerFromPreload === 'visible' || overlayLayerFromPreload === 'invisible'
|
||||
overlayLayerFromQuery ??
|
||||
(overlayLayerFromPreload === 'visible' || overlayLayerFromPreload === 'invisible'
|
||||
? overlayLayerFromPreload
|
||||
: overlayLayerFromQuery;
|
||||
: 'visible');
|
||||
|
||||
const isInvisibleLayer = overlayLayer === 'invisible';
|
||||
const isLinuxPlatform = navigator.platform.toLowerCase().includes('linux');
|
||||
|
||||
Reference in New Issue
Block a user