RemoteAudioSessionProxy.cpp [plain text]
#include "config.h"
#include "RemoteAudioSessionProxy.h"
#if ENABLE(GPU_PROCESS) && USE(AUDIO_SESSION)
#include "GPUConnectionToWebProcess.h"
#include "GPUProcess.h"
#include "RemoteAudioSessionMessages.h"
#include "RemoteAudioSessionProxyManager.h"
#include "RemoteAudioSessionProxyMessages.h"
#include <WebCore/AudioSession.h>
namespace WebKit {
using namespace WebCore;
UniqueRef<RemoteAudioSessionProxy> RemoteAudioSessionProxy::create(GPUConnectionToWebProcess& gpuConnection)
{
return makeUniqueRef<RemoteAudioSessionProxy>(gpuConnection);
}
RemoteAudioSessionProxy::RemoteAudioSessionProxy(GPUConnectionToWebProcess& gpuConnection)
: m_gpuConnection(gpuConnection)
{
}
RemoteAudioSessionProxy::~RemoteAudioSessionProxy() = default;
WebCore::ProcessIdentifier RemoteAudioSessionProxy::processIdentifier()
{
return m_gpuConnection.webProcessIdentifier();
}
RemoteAudioSessionConfiguration RemoteAudioSessionProxy::configuration()
{
auto& session = audioSessionManager().session();
return {
session.category(),
session.routeSharingPolicy(),
session.routingContextUID(),
session.sampleRate(),
session.bufferSize(),
session.numberOfOutputChannels(),
session.preferredBufferSize(),
session.isMuted(),
m_active
};
}
void RemoteAudioSessionProxy::setCategory(AudioSession::CategoryType category, RouteSharingPolicy policy)
{
if (m_category == category && m_routeSharingPolicy == policy)
return;
m_category = category;
m_routeSharingPolicy = policy;
audioSessionManager().setCategoryForProcess(*this, category, policy);
}
void RemoteAudioSessionProxy::setPreferredBufferSize(uint64_t size)
{
m_preferredBufferSize = size;
audioSessionManager().setPreferredBufferSizeForProcess(*this, size);
}
void RemoteAudioSessionProxy::tryToSetActive(bool active, SetActiveCompletion&& completion)
{
m_active = audioSessionManager().tryToSetActiveForProcess(*this, active);
completion(m_active);
}
void RemoteAudioSessionProxy::beginInterruption()
{
connection().send(Messages::RemoteAudioSession::BeginInterruption(), { });
}
void RemoteAudioSessionProxy::endInterruption(AudioSession::MayResume mayResume)
{
connection().send(Messages::RemoteAudioSession::EndInterruption(mayResume), { });
}
RemoteAudioSessionProxyManager& RemoteAudioSessionProxy::audioSessionManager()
{
return m_gpuConnection.gpuProcess().audioSessionManager();
}
IPC::Connection& RemoteAudioSessionProxy::connection()
{
return m_gpuConnection.connection();
}
}
#endif