fix(browser): detach tab-cap listing from openTab return path

This commit is contained in:
pandego
2026-03-01 14:52:55 +01:00
committed by Peter Steinberger
parent 22ec577d80
commit e303b356ba
2 changed files with 16 additions and 8 deletions

View File

@@ -486,10 +486,12 @@ describe("browser server-context tab selection state", () => {
const opened = await openclaw.openTab("http://127.0.0.1:3009");
expect(opened.targetId).toBe("NEW");
expect(fetchMock).toHaveBeenCalledWith(
expect.stringContaining("/json/close/OLD1"),
expect.any(Object),
);
await vi.waitFor(() => {
expect(fetchMock).toHaveBeenCalledWith(
expect.stringContaining("/json/close/OLD1"),
expect.any(Object),
);
});
});
it("does not fail tab open when managed-tab cleanup list fails", async () => {

View File

@@ -165,6 +165,12 @@ function createProfileContext(
}
};
const triggerManagedTabLimit = (keepTargetId: string): void => {
void enforceManagedTabLimit(keepTargetId).catch(() => {
// best-effort cleanup only
});
};
const openTab = async (url: string): Promise<BrowserTab> => {
const ssrfPolicyOpts = withBrowserNavigationPolicy(state().resolved.ssrfPolicy);
@@ -181,7 +187,7 @@ function createProfileContext(
});
const profileState = getProfileState();
profileState.lastTargetId = page.targetId;
await enforceManagedTabLimit(page.targetId);
triggerManagedTabLimit(page.targetId);
return {
targetId: page.targetId,
title: page.title,
@@ -208,12 +214,12 @@ function createProfileContext(
const found = tabs.find((t) => t.targetId === createdViaCdp);
if (found) {
await assertBrowserNavigationResultAllowed({ url: found.url, ...ssrfPolicyOpts });
await enforceManagedTabLimit(found.targetId);
triggerManagedTabLimit(found.targetId);
return found;
}
await new Promise((r) => setTimeout(r, 100));
}
await enforceManagedTabLimit(createdViaCdp);
triggerManagedTabLimit(createdViaCdp);
return { targetId: createdViaCdp, title: "", url, type: "page" };
}
@@ -250,7 +256,7 @@ function createProfileContext(
profileState.lastTargetId = created.id;
const resolvedUrl = created.url ?? url;
await assertBrowserNavigationResultAllowed({ url: resolvedUrl, ...ssrfPolicyOpts });
await enforceManagedTabLimit(created.id);
triggerManagedTabLimit(created.id);
return {
targetId: created.id,
title: created.title ?? "",