diff --git a/apps/vscode-extension/src/panel-manager.test.ts b/apps/vscode-extension/src/panel-manager.test.ts index db001a06a..25e36eb08 100644 --- a/apps/vscode-extension/src/panel-manager.test.ts +++ b/apps/vscode-extension/src/panel-manager.test.ts @@ -42,6 +42,31 @@ describe("PanelManager", () => { ); }); + it("grants clipboard permission to the iframe", async () => { + let capturedHtml = ""; + const spy = spyOn(vscode.window, "createWebviewPanel"); + spy.mockImplementation((() => { + let disposeListener: (() => void) | null = null; + return { + webview: { + get html() { return capturedHtml; }, + set html(v: string) { capturedHtml = v; }, + }, + reveal() {}, + dispose() { disposeListener?.(); }, + onDidDispose(listener: () => void) { + disposeListener = listener; + return { dispose() {} }; + }, + } as unknown as vscode.WebviewPanel; + }) as typeof vscode.window.createWebviewPanel); + spies.push(spy); + + await manager.open("http://127.0.0.1:9999/review?id=42"); + + expect(capturedHtml).toContain('allow="clipboard-read; clipboard-write"'); + }); + it("uses asExternalUri resolved URL in iframe and CSP", async () => { const envSpy = spyOn(vscode.env, "asExternalUri"); envSpy.mockImplementation(async (_uri: vscode.Uri) => { diff --git a/apps/vscode-extension/src/panel-manager.ts b/apps/vscode-extension/src/panel-manager.ts index bdd8fc5ee..63a3d9519 100644 --- a/apps/vscode-extension/src/panel-manager.ts +++ b/apps/vscode-extension/src/panel-manager.ts @@ -54,7 +54,7 @@ function getHtml(url: string, origin: string): string { - + ${themeScript}