Skip to content

Commit e04bdde

Browse files
committed
Merge branch 'fix/general-improvements' into develop/agent
2 parents 354154e + 87d2611 commit e04bdde

File tree

4 files changed

+71
-3
lines changed

4 files changed

+71
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,4 @@ test-results
4141
playwright-report
4242

4343
superpowers
44+
.omc

packages/message/server.test.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,32 @@ describe("Server", () => {
540540
const extSender = capturedSender!.getExtMessageSender();
541541
expect(extSender.tabId).toBe(-1);
542542
});
543+
544+
it.concurrent("sender 为 null/undefined 时不崩溃并返回默认值", async () => {
545+
// postMessage 通道(如 Offscreen→SW)传入空对象作为 sender,
546+
// SenderRuntime.getExtMessageSender() 应该返回默认兜底值
547+
const senderNull = new SenderRuntime(null as unknown as RuntimeMessageSender);
548+
const extNull = senderNull.getExtMessageSender();
549+
expect(extNull.windowId).toBe(-1);
550+
expect(extNull.tabId).toBe(-1);
551+
expect(extNull.frameId).toBeUndefined();
552+
expect(extNull.documentId).toBeUndefined();
553+
554+
const senderUndefined = new SenderRuntime(undefined as unknown as RuntimeMessageSender);
555+
const extUndefined = senderUndefined.getExtMessageSender();
556+
expect(extUndefined.windowId).toBe(-1);
557+
expect(extUndefined.tabId).toBe(-1);
558+
expect(extUndefined.frameId).toBeUndefined();
559+
expect(extUndefined.documentId).toBeUndefined();
560+
561+
// 空对象(ServiceWorkerMessageSend 实际传入的值)也应正常处理
562+
const senderEmpty = new SenderRuntime({} as RuntimeMessageSender);
563+
const extEmpty = senderEmpty.getExtMessageSender();
564+
expect(extEmpty.windowId).toBe(-1);
565+
expect(extEmpty.tabId).toBe(-1);
566+
expect(extEmpty.frameId).toBeUndefined();
567+
expect(extEmpty.documentId).toBeUndefined();
568+
});
543569
});
544570

545571
describe("Connect 功能测试", () => {

packages/message/window_message.test.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { describe, it, expect, beforeEach, vi, afterEach } from "vitest";
2-
import { ServiceWorkerMessageSend, ServiceWorkerClientMessage, type WindowMessageBody } from "./window_message";
2+
import {
3+
ServiceWorkerMessageSend,
4+
ServiceWorkerClientMessage,
5+
WindowMessage,
6+
type WindowMessageBody,
7+
} from "./window_message";
38
import { Server } from "./server";
49
import type { MessageConnect } from "./types";
510

@@ -160,6 +165,38 @@ describe("ServiceWorkerClientMessage", () => {
160165
});
161166
});
162167

168+
describe("WindowMessage.connect", () => {
169+
it("connect 返回的连接 sendMessage 应带 '*' targetOrigin", async () => {
170+
// 模拟 target window,验证 postMessage 被调用时带 "*"
171+
const targetPostMessage = vi.fn();
172+
const sourceWindow = {
173+
addEventListener: vi.fn(),
174+
} as unknown as Window;
175+
const targetWindow = {
176+
postMessage: targetPostMessage,
177+
} as unknown as Window;
178+
179+
const wm = new WindowMessage(sourceWindow, targetWindow);
180+
181+
const con = await wm.connect({ action: "test/connect", data: "init" });
182+
183+
// connect() 本身会调用一次 postMessage(发送 connect 消息)
184+
expect(targetPostMessage).toHaveBeenCalledTimes(1);
185+
expect(targetPostMessage).toHaveBeenCalledWith(expect.objectContaining({ type: "connect" }), "*");
186+
187+
targetPostMessage.mockClear();
188+
189+
// 通过返回的连接发送消息,也应该带 "*"
190+
con.sendMessage({ action: "test/msg", data: "hello" });
191+
192+
expect(targetPostMessage).toHaveBeenCalledTimes(1);
193+
expect(targetPostMessage).toHaveBeenCalledWith(
194+
expect.objectContaining({ type: "connectMessage", data: { action: "test/msg", data: "hello" } }),
195+
"*"
196+
);
197+
});
198+
});
199+
163200
describe("ServiceWorkerMessageSend ↔ ServiceWorkerClientMessage 双向通信", () => {
164201
// 辅助函数: 将两端连接起来,模拟 postMessage 通道
165202
function createWiredPair() {

src/pages/confirm/App.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@ function PermissionConfirmRequest({ uuid }: { uuid: string }) {
2727
}, []);
2828

2929
useEffect(() => {
30-
window.addEventListener("beforeunload", () => {
30+
const handler = () => {
3131
permissionClient.confirm(uuid, {
3232
allow: false,
3333
type: 0,
3434
});
35-
});
35+
};
36+
window.addEventListener("beforeunload", handler, false);
37+
return () => window.removeEventListener("beforeunload", handler, false);
38+
}, [uuid]);
3639

40+
useEffect(() => {
3741
permissionClient
3842
.getPermissionInfo(uuid)
3943
.then((data) => {

0 commit comments

Comments
 (0)