Add ability to prevent window content being captured by other apps (Desktop) (#30098)
* Add ability to prevent window content being captured by other apps (Desktop) Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Iterate Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Increase coverage Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Increase coverage Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Improve coverage Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> * Delint Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --------- Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
This commit is contained in:
committed by
GitHub
parent
3e8599bba0
commit
2b24232f14
@@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
|
||||
|
||||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { MatrixEvent, Room } from "matrix-js-sdk/src/matrix";
|
||||
import { mocked } from "jest-mock";
|
||||
import { mocked, type MockedObject } from "jest-mock";
|
||||
|
||||
import { UpdateCheckStatus } from "../../../../src/BasePlatform";
|
||||
import { Action } from "../../../../src/dispatcher/actions";
|
||||
@@ -19,6 +19,7 @@ import Modal from "../../../../src/Modal";
|
||||
import DesktopCapturerSourcePicker from "../../../../src/components/views/elements/DesktopCapturerSourcePicker";
|
||||
import ElectronPlatform from "../../../../src/vector/platform/ElectronPlatform";
|
||||
import { setupLanguageMock } from "../../../setup/setupLanguage";
|
||||
import { stubClient } from "../../../test-utils";
|
||||
|
||||
jest.mock("../../../../src/rageshake/rageshake", () => ({
|
||||
flush: jest.fn(),
|
||||
@@ -35,8 +36,11 @@ describe("ElectronPlatform", () => {
|
||||
protocol: "io.element.desktop",
|
||||
sessionId: "session-id",
|
||||
config: { _config: true },
|
||||
supportedSettings: { setting1: false, setting2: true },
|
||||
}),
|
||||
};
|
||||
setSettingValue: jest.fn().mockResolvedValue(undefined),
|
||||
getSettingValue: jest.fn().mockResolvedValue(undefined),
|
||||
} as unknown as MockedObject<Electron>;
|
||||
|
||||
const dispatchSpy = jest.spyOn(dispatcher, "dispatch");
|
||||
const dispatchFireSpy = jest.spyOn(dispatcher, "fire");
|
||||
@@ -318,4 +322,87 @@ describe("ElectronPlatform", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("authenticated media", () => {
|
||||
it("should respond to relevant ipc requests", async () => {
|
||||
const cli = stubClient();
|
||||
mocked(cli.getAccessToken).mockReturnValue("access_token");
|
||||
mocked(cli.getHomeserverUrl).mockReturnValue("homeserver_url");
|
||||
mocked(cli.getVersions).mockResolvedValue({
|
||||
versions: ["v1.1"],
|
||||
unstable_features: {},
|
||||
});
|
||||
|
||||
new ElectronPlatform();
|
||||
|
||||
const userAccessTokenCall = mockElectron.on.mock.calls.find((call) => call[0] === "userAccessToken");
|
||||
userAccessTokenCall;
|
||||
const userAccessTokenResponse = mockElectron.send.mock.calls.find((call) => call[0] === "userAccessToken");
|
||||
expect(userAccessTokenResponse![1]).toBe("access_token");
|
||||
|
||||
const homeserverUrlCall = mockElectron.on.mock.calls.find((call) => call[0] === "homeserverUrl");
|
||||
homeserverUrlCall;
|
||||
const homeserverUrlResponse = mockElectron.send.mock.calls.find((call) => call[0] === "homeserverUrl");
|
||||
expect(homeserverUrlResponse![1]).toBe("homeserver_url");
|
||||
|
||||
const serverSupportedVersionsCall = mockElectron.on.mock.calls.find(
|
||||
(call) => call[0] === "serverSupportedVersions",
|
||||
);
|
||||
await (serverSupportedVersionsCall as unknown as Promise<unknown>);
|
||||
const serverSupportedVersionsResponse = mockElectron.send.mock.calls.find(
|
||||
(call) => call[0] === "serverSupportedVersions",
|
||||
);
|
||||
expect(serverSupportedVersionsResponse![1]).toEqual({ versions: ["v1.1"], unstable_features: {} });
|
||||
});
|
||||
});
|
||||
|
||||
describe("settings", () => {
|
||||
let platform: ElectronPlatform;
|
||||
beforeAll(async () => {
|
||||
window.electron = mockElectron;
|
||||
platform = new ElectronPlatform();
|
||||
await platform.getConfig(); // await init
|
||||
});
|
||||
|
||||
it("supportsSetting should return true for the platform", () => {
|
||||
expect(platform.supportsSetting()).toBe(true);
|
||||
});
|
||||
|
||||
it("supportsSetting should return true for available settings", () => {
|
||||
expect(platform.supportsSetting("setting2")).toBe(true);
|
||||
});
|
||||
|
||||
it("supportsSetting should return false for unavailable settings", () => {
|
||||
expect(platform.supportsSetting("setting1")).toBe(false);
|
||||
});
|
||||
|
||||
it("should read setting value over ipc", async () => {
|
||||
mockElectron.getSettingValue.mockResolvedValue("value");
|
||||
await expect(platform.getSettingValue("setting2")).resolves.toEqual("value");
|
||||
expect(mockElectron.getSettingValue).toHaveBeenCalledWith("setting2");
|
||||
});
|
||||
|
||||
it("should write setting value over ipc", async () => {
|
||||
await platform.setSettingValue("setting2", "newValue");
|
||||
expect(mockElectron.setSettingValue).toHaveBeenCalledWith("setting2", "newValue");
|
||||
});
|
||||
});
|
||||
|
||||
it("should forward call_state dispatcher events via ipc", async () => {
|
||||
new ElectronPlatform();
|
||||
|
||||
dispatcher.dispatch(
|
||||
{
|
||||
action: "call_state",
|
||||
state: "connected",
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
const ipcMessage = mockElectron.send.mock.calls.find((call) => call[0] === "app_onAction");
|
||||
expect(ipcMessage![1]).toEqual({
|
||||
action: "call_state",
|
||||
state: "connected",
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user