From cc214bb1afd37068c2bbc93f33990ca93f9a900f Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Tue, 8 Feb 2022 21:40:40 +0100 Subject: feat: Load and switch services MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristóf Marussy --- .../electron/impl/ElectronPartition.ts | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 packages/main/src/infrastructure/electron/impl/ElectronPartition.ts (limited to 'packages/main/src/infrastructure/electron/impl/ElectronPartition.ts') diff --git a/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts b/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts new file mode 100644 index 0000000..e60ce21 --- /dev/null +++ b/packages/main/src/infrastructure/electron/impl/ElectronPartition.ts @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2022 Kristóf Marussy + * + * This file is part of Sophie. + * + * Sophie is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Session, session } from 'electron'; + +import type Profile from '../../../stores/Profile'; +import type { Partition } from '../types'; + +import type ElectronViewFactory from './ElectronViewFactory'; + +export default class ElectronPartition implements Partition { + readonly id: string; + + readonly session: Session; + + constructor(profile: Profile, parent: ElectronViewFactory) { + this.id = profile.id; + this.session = session.fromPartition(`persist:${profile.id}`); + this.session.setPermissionRequestHandler( + (_webContents, permission, callback) => { + // TODO Handle screen sharing. + callback(permission === 'notifications'); + }, + ); + this.session.setUserAgent(parent.userAgents.serviceUserAgent()); + this.session.webRequest.onBeforeSendHeaders( + ({ url, requestHeaders }, callback) => { + callback({ + requestHeaders: { + ...requestHeaders, + 'User-Agent': parent.userAgents.serviceUserAgent(url), + }, + }); + }, + ); + } + + // eslint-disable-next-line class-methods-use-this -- Implementing interface method. + dispose(): void { + // No reactions to dispose yet. + } +} -- cgit v1.2.3-54-g00ecf