#pragma once
#if ENABLE(MEDIA_SESSION)
#include "MediaPositionState.h"
#include "MediaSessionAction.h"
#include "MediaSessionActionHandler.h"
#include "MediaSessionPlaybackState.h"
#include <wtf/MonotonicTime.h>
#include <wtf/Optional.h>
#include <wtf/UniqueRef.h>
#include <wtf/WeakPtr.h>
namespace WebCore {
class MediaMetadata;
class Navigator;
class MediaSession : public RefCounted<MediaSession>, public CanMakeWeakPtr<MediaSession> {
public:
static Ref<MediaSession> create(Navigator&);
~MediaSession();
MediaMetadata* metadata() const { return m_metadata.get(); };
void setMetadata(RefPtr<MediaMetadata>&&);
MediaSessionPlaybackState playbackState() const { return m_playbackState; };
void setPlaybackState(MediaSessionPlaybackState);
void setActionHandler(MediaSessionAction, RefPtr<MediaSessionActionHandler>&&);
ExceptionOr<void> setPositionState(Optional<MediaPositionState>&&);
WEBCORE_EXPORT Optional<double> currentPosition() const;
void metadataUpdated();
void actionHandlersUpdated();
bool hasActionHandler(MediaSessionAction) const;
WEBCORE_EXPORT RefPtr<MediaSessionActionHandler> handlerForAction(MediaSessionAction) const;
private:
explicit MediaSession(Navigator&);
WeakPtr<Navigator> m_navigator;
RefPtr<MediaMetadata> m_metadata;
MediaSessionPlaybackState m_playbackState { MediaSessionPlaybackState::None };
Optional<MediaPositionState> m_positionState;
Optional<double> m_lastReportedPosition;
MonotonicTime m_timeAtLastPositionUpdate;
HashMap<MediaSessionAction, RefPtr<MediaSessionActionHandler>, WTF::IntHash<MediaSessionAction>, WTF::StrongEnumHashTraits<MediaSessionAction>> m_actionHandlers;
};
}
#endif // ENABLE(MEDIA_SESSION)