blob: 160d57bad4dd8019fa3abe5a595118b5990bb661 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_PUBLIC_CPP_MEDIA_CONTROLLER_H_
#define ASH_PUBLIC_CPP_MEDIA_CONTROLLER_H_
#include "ash/public/cpp/ash_public_export.h"
#include "ash/public/cpp/scoped_singleton_resetter_for_test.h"
#include "base/containers/flat_map.h"
#include "components/account_id/account_id.h"
namespace ash {
class MediaClient;
// Describes whether media is currently being captured.
enum class MediaCaptureState {
kNone = 0,
kAudio = 1,
kVideo = 2,
kAudioVideo = 3,
};
class ASH_PUBLIC_EXPORT MediaController {
public:
using ScopedResetterForTest = ScopedSingletonResetterForTest<MediaController>;
// Gets the singleton MediaController instance.
static MediaController* Get();
// Sets the client.
virtual void SetClient(MediaClient* client) = 0;
// Forces media shortcut key handling in MediaClient instead of in ash. This
// defaults to false and will be reset if the client encounters an error.
virtual void SetForceMediaClientKeyHandling(bool enabled) = 0;
// Called when the media capture state changes on the client, or in response
// to a RequestCaptureState() request. Returns a map from AccountId to
// MediaCaptureState representing every user's state.
virtual void NotifyCaptureState(
const base::flat_map<AccountId, MediaCaptureState>& capture_states) = 0;
// Called when VMs' media capture notifications change. Each VM can have 0 or
// 1 media notification. It can either be a "camera", "mic", or "camera and
// mic" notification. Each of the argument is true if a notification of the
// corresponding type is active.
//
// There is no `AccountId` in the argument because only the primary
// account/profile can launch a VM.
virtual void NotifyVmMediaNotificationState(bool camera,
bool mic,
bool camera_and_mic) = 0;
protected:
MediaController();
virtual ~MediaController();
};
} // namespace ash
#endif // ASH_PUBLIC_CPP_MEDIA_CONTROLLER_H_