AudioSessionRoutingArbitratorProxy.h [plain text]
#pragma once
#if ENABLE(ROUTING_ARBITRATION)
#include "MessageReceiver.h"
#include <WebCore/AudioSession.h>
#include <wtf/WallTime.h>
#include <wtf/WeakPtr.h>
namespace WebKit {
class WebProcessProxy;
class AudioSessionRoutingArbitratorProxy
: public IPC::MessageReceiver
, public CanMakeWeakPtr<AudioSessionRoutingArbitratorProxy> {
WTF_MAKE_FAST_ALLOCATED;
public:
AudioSessionRoutingArbitratorProxy(WebProcessProxy&);
virtual ~AudioSessionRoutingArbitratorProxy();
void processDidTerminate();
WebCore::AudioSession::CategoryType category() const { return m_category; }
static uint64_t destinationId() { return 1; }
using RoutingArbitrationError = WebCore::AudioSessionRoutingArbitrationClient::RoutingArbitrationError;
using DefaultRouteChanged = WebCore::AudioSessionRoutingArbitrationClient::DefaultRouteChanged;
using ArbitrationCallback = CompletionHandler<void(RoutingArbitrationError, DefaultRouteChanged)>;
enum class ArbitrationStatus : uint8_t {
None,
Pending,
Active,
};
ArbitrationStatus arbitrationStatus() const { return m_arbitrationStatus; }
WallTime arbitrationUpdateTime() const { return m_arbitrationUpdateTime; }
private:
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
void beginRoutingArbitrationWithCategory(WebCore::AudioSession::CategoryType, ArbitrationCallback&&);
void endRoutingArbitration();
WebProcessProxy& m_process;
WebCore::AudioSession::CategoryType m_category { WebCore::AudioSession::None };
ArbitrationStatus m_arbitrationStatus { ArbitrationStatus::None };
WallTime m_arbitrationUpdateTime;
};
}
#endif