Files
paseo/packages/desktop/src/features/menu.test.ts
T
Mohamed Boudra d93d6a268a fix(desktop): keep browser input out of the composer
Unhandled webview keys could be redispatched into the active host window, allowing agent Enter to submit a draft prompt. Give pages first refusal for ordinary shortcuts and contain automation at the guest boundary.
2026-07-16 21:47:42 +00:00

71 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { reloadActiveBrowserOrWindow } from "./menu.js";
class FakeWebContents {
public readonly reloads: string[] = [];
public constructor(public readonly id: number) {}
public isLoadingMainFrame(): boolean {
return false;
}
public stop(): void {
this.reloads.push("stop");
}
public reload(): void {
this.reloads.push("reload");
}
public reloadIgnoringCache(): void {
this.reloads.push("force-reload");
}
}
class BrowserReloads {
public readonly firstWindow = { webContents: new FakeWebContents(101) };
public readonly secondWindow = { webContents: new FakeWebContents(202) };
public readonly firstBrowser = new FakeWebContents(11);
public readonly secondBrowser = new FakeWebContents(22);
public readonly resolvedHostWindowIds: number[] = [];
public activeBrowserForHostWindow(hostWebContentsId: number): FakeWebContents | null {
this.resolvedHostWindowIds.push(hostWebContentsId);
return hostWebContentsId === 101 ? this.firstBrowser : this.secondBrowser;
}
}
describe("reloadActiveBrowserOrWindow", () => {
it("reloads only the active browser belonging to the supplied window", () => {
const browserReloads = new BrowserReloads();
reloadActiveBrowserOrWindow({
win: browserReloads.firstWindow,
getActiveBrowserContentsForHostWindow:
browserReloads.activeBrowserForHostWindow.bind(browserReloads),
});
expect(browserReloads.resolvedHostWindowIds).toEqual([101]);
expect(browserReloads.firstBrowser.reloads).toEqual(["reload"]);
expect(browserReloads.secondBrowser.reloads).toEqual([]);
expect(browserReloads.firstWindow.webContents.reloads).toEqual([]);
});
it("force reloads only the active browser belonging to the supplied window", () => {
const browserReloads = new BrowserReloads();
reloadActiveBrowserOrWindow({
win: browserReloads.secondWindow,
getActiveBrowserContentsForHostWindow:
browserReloads.activeBrowserForHostWindow.bind(browserReloads),
ignoreCache: true,
});
expect(browserReloads.resolvedHostWindowIds).toEqual([202]);
expect(browserReloads.firstBrowser.reloads).toEqual([]);
expect(browserReloads.secondBrowser.reloads).toEqual(["force-reload"]);
expect(browserReloads.secondWindow.webContents.reloads).toEqual([]);
});
});