1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_VIDEO_CONFERENCE_VIDEO_CONFERENCE_MANAGER_ASH_H_
#define CHROME_BROWSER_ASH_VIDEO_CONFERENCE_VIDEO_CONFERENCE_MANAGER_ASH_H_
#include <cstdint>
#include <map>
#include <string>
#include <vector>
#include "ash/system/video_conference/video_conference_common.h"
#include "base/functional/callback.h"
#include "chromeos/crosapi/mojom/video_conference.mojom-forward.h"
#include "chromeos/crosapi/mojom/video_conference.mojom.h"
namespace base {
class UnguessableToken;
} // namespace base
class CaptureModeVideoConferenceBrowserTests;
namespace ash {
class VideoConferenceClientWrapper;
class VideoConferenceTrayController;
struct VideoConferenceMediaState;
// VideoConferenceManagerAsh is the central hub responsible for:
// 1. Connecting VC clients to System UI components.
// 2. Being the single source of truth for VC parameters like
// background blur, portrait relighting, apps using audio/camera, etc.
// and providing this information to the UI as needed.
class VideoConferenceManagerAsh : public VideoConferenceManagerBase {
public:
VideoConferenceManagerAsh();
VideoConferenceManagerAsh(const VideoConferenceManagerAsh&) = delete;
VideoConferenceManagerAsh& operator=(const VideoConferenceManagerAsh&) =
delete;
~VideoConferenceManagerAsh() override;
// VideoConferenceManagerBase overrides.
void GetMediaApps(base::OnceCallback<void(MediaApps)>) override;
void ReturnToApp(const base::UnguessableToken& id) override;
void SetSystemMediaDeviceStatus(
crosapi::mojom::VideoConferenceMediaDevice device,
bool disabled) override;
void StopAllScreenShare() override;
void CreateBackgroundImage() override;
// Registers an ash-browser client. Non-mojo clients need to manually call
// |UnregisterClient|, e.g. inside their destructor.
void RegisterCppClient(crosapi::mojom::VideoConferenceManagerClient* client,
const base::UnguessableToken& client_id);
void NotifyMediaUsageUpdate(
crosapi::mojom::VideoConferenceMediaUsageStatusPtr status,
base::OnceCallback<void(bool)> callback);
void NotifyDeviceUsedWhileDisabled(
crosapi::mojom::VideoConferenceMediaDevice device,
const std::u16string& app_name,
base::OnceCallback<void(bool)> callback);
void NotifyClientUpdate(
crosapi::mojom::VideoConferenceClientUpdatePtr update);
// Removes entry corresponding to |client_id| from
// |client_id_to_wrapper_|. Called by the destructor of
// cpp clients (ash browser, ARC++) and by the disconnect handler on
// |receiver| when the lacros mojo client disconnects.
void UnregisterClient(const base::UnguessableToken& client_id);
protected:
// Returns aggregated |VideoConferenceMediaState| from all clients. Allows
// test code to get the manager's aggregated state.
VideoConferenceMediaState GetAggregatedState();
// Aggregates and sends updated state to VcUiController. Allows mock classes
// extending |VideoConferenceManagerAsh| to make assertions on data sent to
// VcUiController by overriding this method.
virtual void SendUpdatedState();
// Returns the `VideoConferenceTrayController`.
VideoConferenceTrayController* GetTrayController();
private:
friend class VideoConferenceAshfeatureClientTest;
friend class VideoConferenceAppServiceClientTest;
friend class ::CaptureModeVideoConferenceBrowserTests;
// A (client_id, client_wrapper) entry is inserted into this map
// whenever a new client is registered on the manager and deleted
// upon destruction of the client.
std::map<base::UnguessableToken, VideoConferenceClientWrapper>
client_id_to_wrapper_;
};
} // namespace ash
#endif // CHROME_BROWSER_ASH_VIDEO_CONFERENCE_VIDEO_CONFERENCE_MANAGER_ASH_H_
|