mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-15 05:37:32 +00:00
fix(electron): shared-worker api binding (#11991)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Improved security by adding cross-origin isolation headers to HTTP responses in the desktop app. - **Bug Fixes** - Enhanced reliability of worker connections by ensuring workers are fully loaded before establishing communication. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -23,7 +23,12 @@ export class WorkerManager {
|
|||||||
|
|
||||||
workers = new Map<
|
workers = new Map<
|
||||||
string,
|
string,
|
||||||
{ browserWindow: BrowserWindow; ports: Set<string>; key: string }
|
{
|
||||||
|
browserWindow: BrowserWindow;
|
||||||
|
ports: Set<string>;
|
||||||
|
key: string;
|
||||||
|
loaded: PromiseWithResolvers<void>;
|
||||||
|
}
|
||||||
>();
|
>();
|
||||||
|
|
||||||
private async getOrCreateWorker(key: string) {
|
private async getOrCreateWorker(key: string) {
|
||||||
@@ -42,6 +47,14 @@ export class WorkerManager {
|
|||||||
},
|
},
|
||||||
show: false,
|
show: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const record = {
|
||||||
|
browserWindow: worker,
|
||||||
|
ports: new Set<string>(),
|
||||||
|
key,
|
||||||
|
loaded: Promise.withResolvers<void>(),
|
||||||
|
};
|
||||||
|
|
||||||
let disconnectHelperProcess: (() => void) | null = null;
|
let disconnectHelperProcess: (() => void) | null = null;
|
||||||
worker.on('closed', () => {
|
worker.on('closed', () => {
|
||||||
this.workers.delete(key);
|
this.workers.delete(key);
|
||||||
@@ -54,8 +67,9 @@ export class WorkerManager {
|
|||||||
disconnectHelperProcess = helperProcessManager.connectRenderer(
|
disconnectHelperProcess = helperProcessManager.connectRenderer(
|
||||||
worker.webContents
|
worker.webContents
|
||||||
);
|
);
|
||||||
|
record.loaded.resolve();
|
||||||
});
|
});
|
||||||
const record = { browserWindow: worker, ports: new Set<string>(), key };
|
|
||||||
this.workers.set(key, record);
|
this.workers.set(key, record);
|
||||||
return record;
|
return record;
|
||||||
}
|
}
|
||||||
@@ -74,6 +88,8 @@ export class WorkerManager {
|
|||||||
const { port1: portForWorker, port2: portForRenderer } =
|
const { port1: portForWorker, port2: portForRenderer } =
|
||||||
new MessageChannelMain();
|
new MessageChannelMain();
|
||||||
|
|
||||||
|
await worker.loaded.promise;
|
||||||
|
|
||||||
worker.browserWindow.webContents.postMessage('worker-connect', { portId }, [
|
worker.browserWindow.webContents.postMessage('worker-connect', { portId }, [
|
||||||
portForWorker,
|
portForWorker,
|
||||||
]);
|
]);
|
||||||
|
|||||||
Reference in New Issue
Block a user