RemoteAudioSessionProxy.h [plain text]
#pragma once
#if ENABLE(GPU_PROCESS) && USE(AUDIO_SESSION)
#include "MessageReceiver.h"
#include "RemoteAudioSessionConfiguration.h"
#include <WebCore/AudioSession.h>
#include <WebCore/ProcessIdentifier.h>
#include <wtf/WeakPtr.h>
namespace IPC {
class Connection;
}
namespace WebKit {
class GPUConnectionToWebProcess;
class RemoteAudioSessionProxyManager;
class RemoteAudioSessionProxy
: public IPC::MessageReceiver
, public CanMakeWeakPtr<RemoteAudioSessionProxy> {
WTF_MAKE_FAST_ALLOCATED;
public:
static UniqueRef<RemoteAudioSessionProxy> create(GPUConnectionToWebProcess&);
virtual ~RemoteAudioSessionProxy();
WebCore::ProcessIdentifier processIdentifier();
RemoteAudioSessionConfiguration configuration();
WebCore::AudioSession::CategoryType category() const { return m_category; };
WebCore::RouteSharingPolicy routeSharingPolicy() const { return m_routeSharingPolicy; }
size_t preferredBufferSize() const { return m_preferredBufferSize; }
bool isActive() const { return m_active; }
void beginInterruption();
void endInterruption(WebCore::AudioSession::MayResume);
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;
private:
friend UniqueRef<RemoteAudioSessionProxy> WTF::makeUniqueRefWithoutFastMallocCheck<RemoteAudioSessionProxy>(GPUConnectionToWebProcess&);
explicit RemoteAudioSessionProxy(GPUConnectionToWebProcess&);
void setCategory(WebCore::AudioSession::CategoryType, WebCore::RouteSharingPolicy);
void setPreferredBufferSize(uint64_t);
using SetActiveCompletion = CompletionHandler<void(bool)>;
void tryToSetActive(bool, SetActiveCompletion&&);
RemoteAudioSessionProxyManager& audioSessionManager();
IPC::Connection& connection();
GPUConnectionToWebProcess& m_gpuConnection;
WebCore::AudioSession::CategoryType m_category;
WebCore::RouteSharingPolicy m_routeSharingPolicy;
size_t m_preferredBufferSize { 0 };
bool m_active { false };
};
}
#endif