From 4912c6e71b021c44cd0d4a24465eedc8272d7048 Mon Sep 17 00:00:00 2001 From: David Langley Date: Fri, 13 Feb 2026 14:10:43 +0000 Subject: [PATCH] Set history visibility to "invited" for DMs and new non-public rooms when creating a room (#31974) * Set history visibility to "invited" for DMs and non-public rooms * Update e2e tests and screenshots * lint * Revert screenshot * Add test that an override of historyVisibility still works --- playwright/e2e/crypto/history-sharing.spec.ts | 14 +++++++ ...omSummaryCard-with-verified-e2ee-linux.png | Bin 27361 -> 28065 bytes src/createRoom.ts | 19 +++++++-- test/unit-tests/createRoom-test.ts | 36 +++++++++++++++++- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/playwright/e2e/crypto/history-sharing.spec.ts b/playwright/e2e/crypto/history-sharing.spec.ts index 820f5edc63..3974ba79c5 100644 --- a/playwright/e2e/crypto/history-sharing.spec.ts +++ b/playwright/e2e/crypto/history-sharing.spec.ts @@ -38,6 +38,14 @@ test.describe("History sharing", function () { // Create the room and send a message await createRoom(alicePage, "TestRoom", true); + + // The default history visibility for private rooms is "invited", + // so we need to change it to "shared" to ensure Bob can see the message when he joins. + const roomId = await aliceElementApp.getCurrentRoomIdFromUrl(); + await aliceElementApp.client.sendStateEvent(roomId, "m.room.history_visibility", { + history_visibility: "shared", + }); + await sendMessageInCurrentRoom(alicePage, "A message from Alice"); // Send the invite to Bob @@ -101,6 +109,12 @@ test.describe("History sharing", function () { await bobPage.getByRole("option", { name: "TestRoom" }).click(); await bobPage.getByRole("button", { name: "Accept" }).click(); + // The room now defaults to "invited" history visibility, so we need to set it to "shared" first + await aliceElementApp.client.sendStateEvent(roomId, "m.room.history_visibility", { + history_visibility: "shared", + }); + await expect(bobPage.getByText("Alice made future room history visible to all room members.")).toBeVisible(); + // Bob sends a message with "shared" visibility await sendMessageInCurrentRoom(bobPage, "Message1: 'shared' visibility"); await expect(alicePage.getByText("Message1")).toBeVisible(); diff --git a/playwright/snapshots/crypto/crypto.spec.ts/RoomSummaryCard-with-verified-e2ee-linux.png b/playwright/snapshots/crypto/crypto.spec.ts/RoomSummaryCard-with-verified-e2ee-linux.png index 433d80278df5338cffe49a56982b093610e600b3..b94d60555917ce2ac3a29c2356df897b2ee1c3c8 100644 GIT binary patch literal 28065 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 RYXa^8$x13pl!+OB{9lg*ZVmtd literal 27361 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 RS@;!zoV1cuiG-2g{{re3m^c6c diff --git a/src/createRoom.ts b/src/createRoom.ts index 30020bc2ce..193e9dd2cc 100644 --- a/src/createRoom.ts +++ b/src/createRoom.ts @@ -16,7 +16,7 @@ import { RoomCreateTypeField, RoomType, type ICreateRoomOpts, - type HistoryVisibility, + HistoryVisibility, JoinRule, Preset, RestrictedAllowType, @@ -294,11 +294,24 @@ export default async function createRoom(client: MatrixClient, opts: IOpts): Pro } } - if (opts.historyVisibility) { + // Set history visibility to "invited" for DMs and non-public rooms unless explicitly overridden + // This ensures that room history is only visible to invited members by default + let historyVisibility = opts.historyVisibility; + if (!historyVisibility) { + // Determine if the room will be public based on the join rule or preset + const isPublicRoom = opts.joinRule === JoinRule.Public || createOpts.preset === Preset.PublicChat; + + // For DMs and non-public rooms, set history visibility to "invited" + if (opts.dmUserId || !isPublicRoom) { + historyVisibility = HistoryVisibility.Invited; + } + } + + if (historyVisibility) { createOpts.initial_state.push({ type: EventType.RoomHistoryVisibility, content: { - history_visibility: opts.historyVisibility, + history_visibility: historyVisibility, }, }); } diff --git a/test/unit-tests/createRoom-test.ts b/test/unit-tests/createRoom-test.ts index 2775ad5409..3474020f65 100644 --- a/test/unit-tests/createRoom-test.ts +++ b/test/unit-tests/createRoom-test.ts @@ -11,6 +11,7 @@ import { mocked, type Mocked } from "jest-mock"; import { type MatrixClient, type Device, + HistoryVisibility, Preset, RoomType, JoinRule, @@ -58,7 +59,10 @@ describe("createRoom", () => { expect(client.createRoom).toHaveBeenCalledWith({ preset: "private_chat", visibility: "private", - initial_state: [{ state_key: "", type: "m.room.guest_access", content: { guest_access: "can_join" } }], + initial_state: [ + { state_key: "", type: "m.room.guest_access", content: { guest_access: "can_join" } }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, + ], }); }); @@ -77,6 +81,7 @@ describe("createRoom", () => { algorithm: "m.megolm.v1.aes-sha2", }, }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, ], }); }); @@ -104,6 +109,7 @@ describe("createRoom", () => { "io.element.msc4362.encrypt_state_events": true, }, }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, // Room name is NOT included, since it needs to be encrypted. ], }); @@ -146,6 +152,7 @@ describe("createRoom", () => { "io.element.msc4362.encrypt_state_events": true, }, }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, // Room name is NOT included, since it needs to be encrypted. ], }); @@ -178,6 +185,7 @@ describe("createRoom", () => { "io.element.msc4362.encrypt_state_events": true, }, }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, // Room name is NOT included, since it needs to be encrypted. ], }); @@ -218,6 +226,7 @@ describe("createRoom", () => { initial_state: [ { state_key: "", type: "m.room.guest_access", content: { guest_access: "can_join" } }, { type: "m.space.parent", state_key: parentSpace.roomId, content: { canonical: true, via: [] } }, + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, ], }); }); @@ -354,6 +363,31 @@ describe("createRoom", () => { ); }); + it("should set history visibility to invited for DMs", async () => { + await createRoom(client, { dmUserId: "@bob:example.org" }); + expect(client.createRoom).toHaveBeenCalledWith( + expect.objectContaining({ + initial_state: expect.arrayContaining([ + { type: "m.room.history_visibility", content: { history_visibility: "invited" } }, + ]), + }), + ); + }); + + it("should respect an explicit history visibility override", async () => { + await createRoom(client, { + createOpts: { preset: Preset.PrivateChat }, + historyVisibility: HistoryVisibility.Shared, + }); + expect(client.createRoom).toHaveBeenCalledWith( + expect.objectContaining({ + initial_state: expect.arrayContaining([ + { type: "m.room.history_visibility", content: { history_visibility: "shared" } }, + ]), + }), + ); + }); + describe("room versions", () => { afterEach(() => { jest.clearAllMocks();