mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-09-13 05:16:18 -07:00
test: clone VM results across Electron boundaries
- Clone tokenizer VM results into the host realm - Expect null-prototype profile maps in IPC validation tests
This commit is contained in:
@@ -1037,7 +1037,13 @@ test('registerIpcHandlers accepts per-controller profile config updates', async
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
await saveHandler({}, update);
|
await saveHandler({}, update);
|
||||||
assert.deepEqual(controllerSaves, [update]);
|
assert.deepEqual(controllerSaves, [
|
||||||
|
{
|
||||||
|
...update,
|
||||||
|
// Validation uses a null prototype to safely store arbitrary profile IDs.
|
||||||
|
profiles: { __proto__: null, ...update.profiles },
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
await assert.rejects(async () => {
|
await assert.rejects(async () => {
|
||||||
await saveHandler(
|
await saveHandler(
|
||||||
|
|||||||
@@ -396,7 +396,8 @@ function createInjectedScriptVm(store: ReplayMessageStore): (script: string) =>
|
|||||||
Set,
|
Set,
|
||||||
String,
|
String,
|
||||||
});
|
});
|
||||||
return async (script: string) => await vm.runInContext(script, context);
|
// Clone results into the host realm, matching Electron's process boundary.
|
||||||
|
return async (script: string) => structuredClone(await vm.runInContext(script, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createReplayTokenizerDeps(fixture: GoldenFixture): TokenizerServiceDeps {
|
export function createReplayTokenizerDeps(fixture: GoldenFixture): TokenizerServiceDeps {
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ export async function runInjectedYomitanScript(
|
|||||||
script: string,
|
script: string,
|
||||||
handler: (action: string, params: unknown) => unknown,
|
handler: (action: string, params: unknown) => unknown,
|
||||||
): Promise<unknown> {
|
): Promise<unknown> {
|
||||||
return await vm.runInNewContext(script, createYomitanScriptSandbox(handler));
|
// Clone results into the host realm, matching Electron's process boundary.
|
||||||
|
return structuredClone(await vm.runInNewContext(script, createYomitanScriptSandbox(handler)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Persistent page context shared across executeJavaScript calls, matching the
|
// Persistent page context shared across executeJavaScript calls, matching the
|
||||||
@@ -75,7 +76,8 @@ function createPersistentYomitanScriptRunner(
|
|||||||
handler: (action: string, params: unknown) => unknown,
|
handler: (action: string, params: unknown) => unknown,
|
||||||
): (script: string) => Promise<unknown> {
|
): (script: string) => Promise<unknown> {
|
||||||
const context = vm.createContext(createYomitanScriptSandbox(handler));
|
const context = vm.createContext(createYomitanScriptSandbox(handler));
|
||||||
return async (script: string) => await vm.runInContext(script, context);
|
// Clone results into the host realm, matching Electron's process boundary.
|
||||||
|
return async (script: string) => structuredClone(await vm.runInContext(script, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deps whose parser window executes every injected script (profile metadata,
|
// Deps whose parser window executes every injected script (profile metadata,
|
||||||
|
|||||||
Reference in New Issue
Block a user