#include "content/browser/renderer_host/media/audio_output_authorization_handler.h"
#include "base/functional/bind.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/bind_post_task.h"
#include "base/trace_event/trace_event.h"
#include "content/browser/media/media_devices_permission_checker.h"
#include "content/browser/media/media_devices_util.h"
#include "content/browser/renderer_host/media/audio_input_device_manager.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/media_device_id.h"
#include "content/public/browser/render_frame_host.h"
#include "media/audio/audio_system.h"
MediaDeviceType;
namespace content {
namespace {
void GotSaltAndOrigin(
int render_process_id,
int render_frame_id,
bool override_permissions,
bool permissions_override_value,
base::OnceCallback<void(MediaDeviceSaltAndOrigin, bool)> cb,
const MediaDeviceSaltAndOrigin& salt_and_origin) { … }
void CheckAccessOnUIThread(
int render_process_id,
int render_frame_id,
bool override_permissions,
bool permissions_override_value,
base::OnceCallback<void(MediaDeviceSaltAndOrigin, bool)> cb) { … }
}
class AudioOutputAuthorizationHandler::TraceScope { … };
AudioOutputAuthorizationHandler::AudioOutputAuthorizationHandler(
media::AudioSystem* audio_system,
MediaStreamManager* media_stream_manager,
int render_process_id)
: … { … }
AudioOutputAuthorizationHandler::~AudioOutputAuthorizationHandler() { … }
void AudioOutputAuthorizationHandler::RequestDeviceAuthorization(
int render_frame_id,
const base::UnguessableToken& session_id,
const std::string& device_id,
AuthorizationCompletedCallback cb) const { … }
void AudioOutputAuthorizationHandler::OverridePermissionsForTesting(
bool override_value) { … }
void AudioOutputAuthorizationHandler::
SetAuthorizedDeviceIdForGlobalMediaControls(std::string hashed_device_id) { … }
void AudioOutputAuthorizationHandler::UMALogDeviceAuthorizationTime(
base::TimeTicks auth_start_time) { … }
void AudioOutputAuthorizationHandler::HashDeviceId(
std::unique_ptr<TraceScope> trace_scope,
AuthorizationCompletedCallback cb,
const std::string& raw_device_id,
const MediaDeviceSaltAndOrigin& salt_and_origin) const { … }
void AudioOutputAuthorizationHandler::AccessChecked(
std::unique_ptr<TraceScope> trace_scope,
AuthorizationCompletedCallback cb,
const std::string& device_id,
MediaDeviceSaltAndOrigin salt_and_origin,
bool has_access) const { … }
void AudioOutputAuthorizationHandler::TranslateDeviceID(
std::unique_ptr<TraceScope> trace_scope,
AuthorizationCompletedCallback cb,
const std::string& device_id,
const MediaDeviceSaltAndOrigin& salt_and_origin,
const MediaDeviceEnumeration& enumeration) const { … }
void AudioOutputAuthorizationHandler::GetDeviceParameters(
std::unique_ptr<TraceScope> trace_scope,
AuthorizationCompletedCallback cb,
const std::string& raw_device_id) const { … }
void AudioOutputAuthorizationHandler::DeviceParametersReceived(
std::unique_ptr<TraceScope> trace_scope,
AuthorizationCompletedCallback cb,
const std::string& id_for_renderer,
const std::string& raw_device_id,
const std::optional<media::AudioParameters>& params) const { … }
}