#ifndef MediaSession_h
#define MediaSession_h
#include <wtf/Noncopyable.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class MediaSessionClient;
class MediaSession {
public:
static std::unique_ptr<MediaSession> create(MediaSessionClient&);
MediaSession(MediaSessionClient&);
virtual ~MediaSession();
enum MediaType {
None = 0,
Video,
Audio,
WebAudio,
};
MediaType mediaType() const;
MediaType presentationType() const;
enum State {
Idle,
Playing,
Paused,
Interrupted,
};
State state() const { return m_state; }
void setState(State);
enum InterruptionType {
SystemSleep,
EnteringBackground,
SystemInterruption,
};
enum EndInterruptionFlags {
NoFlags = 0,
MayResumePlaying = 1 << 0,
};
void beginInterruption(InterruptionType);
void endInterruption(EndInterruptionFlags);
void applicationWillEnterForeground() const;
void applicationWillEnterBackground() const;
bool clientWillBeginPlayback();
bool clientWillPausePlayback();
void pauseSession();
void visibilityChanged();
String title() const;
double duration() const;
double currentTime() const;
enum RemoteControlCommandType {
NoCommand,
PlayCommand,
PauseCommand,
StopCommand,
TogglePlayPauseCommand,
BeginSeekingBackwardCommand,
EndSeekingBackwardCommand,
BeginSeekingForwardCommand,
EndSeekingForwardCommand,
};
bool canReceiveRemoteControlCommands() const;
void didReceiveRemoteControlCommand(RemoteControlCommandType);
protected:
MediaSessionClient& client() const { return m_client; }
private:
void updateClientDataBuffering();
MediaSessionClient& m_client;
State m_state;
State m_stateToRestore;
bool m_notifyingClient;
};
class MediaSessionClient {
WTF_MAKE_NONCOPYABLE(MediaSessionClient);
public:
MediaSessionClient() { }
virtual MediaSession::MediaType mediaType() const = 0;
virtual MediaSession::MediaType presentationType() const = 0;
virtual void resumePlayback() = 0;
virtual void pausePlayback() = 0;
virtual String mediaSessionTitle() const;
virtual double mediaSessionDuration() const;
virtual double mediaSessionCurrentTime() const;
virtual bool canReceiveRemoteControlCommands() const = 0;
virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) = 0;
virtual void setShouldBufferData(bool) { }
virtual bool elementIsHidden() const { return false; }
virtual bool overrideBackgroundPlaybackRestriction() const = 0;
protected:
virtual ~MediaSessionClient() { }
};
}
#endif // MediaSession_h