fix(anime): harden browser playback and modal lifecycle

- Abort upstream fetches when clients disconnect
- Validate embedded modal readiness before opening
- Centralize browser IPC and window lifecycle
This commit is contained in:
2026-08-16 01:21:07 -07:00
parent 877f350353
commit 4300517da7
11 changed files with 413 additions and 217 deletions
@@ -0,0 +1,31 @@
import assert from 'node:assert/strict';
import test from 'node:test';
import { IPC_CHANNELS } from '../../shared/ipc/contracts';
import { registerAnimeBrowserIpcHandlers } from './anime-browser-ipc-handlers';
test('anime browser preference IPC coerces values at the renderer boundary', () => {
const handlers = new Map<string, (event: unknown, ...args: unknown[]) => unknown>();
const received: unknown[][] = [];
registerAnimeBrowserIpcHandlers({
ipcMain: {
handle: (channel, listener) => handlers.set(channel, listener),
},
runtime: {
setPreference: (...args: unknown[]) => received.push(args),
} as never,
});
const setPreference = handlers.get(IPC_CHANNELS.request.animeBrowserSetPreference);
assert.ok(setPreference);
setPreference({}, 'source', 'text', 'value');
setPreference({}, 'source', 'enabled', true);
setPreference({}, 'source', 'choices', ['one', 2, false, 'two']);
setPreference({}, 'source', 'invalid', { nested: 'value' });
assert.deepEqual(received, [
['source', 'text', 'value'],
['source', 'enabled', true],
['source', 'choices', ['one', 'two']],
['source', 'invalid', ''],
]);
});