#ifndef CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_PLAYER_OBSERVER_H_
#define CONTENT_BROWSER_MEDIA_SESSION_MEDIA_SESSION_PLAYER_OBSERVER_H_
#include <optional>
#include "base/functional/callback.h"
#include "base/time/time.h"
#include "arkweb/build/features/features.h"
#include "media/base/picture_in_picture_events_info.h"
namespace media {
enum class MediaContentType;
}
namespace media_session {
struct MediaPosition;
}
namespace content {
class RenderFrameHost;
class MediaSessionPlayerObserver {
public:
MediaSessionPlayerObserver() = default;
virtual ~MediaSessionPlayerObserver() = default;
virtual void OnSuspend(int player_id) = 0;
virtual void OnResume(int player_id) = 0;
virtual void OnSeekForward(int player_id, base::TimeDelta seek_time) = 0;
virtual void OnSeekBackward(int player_id, base::TimeDelta seek_time) = 0;
virtual void OnSeekTo(int player_id, base::TimeDelta seek_time) = 0;
virtual void OnSetVolumeMultiplier(int player_id,
double volume_multiplier) = 0;
virtual void OnEnterPictureInPicture(int player_id) = 0;
virtual void OnSetAudioSinkId(int player_id,
const std::string& raw_device_id) = 0;
virtual void OnSetMute(int player_id, bool mute) = 0;
virtual void OnRequestMediaRemoting(int player_id) = 0;
using RequestVisibilityCallback = base::OnceCallback<void(bool)>;
virtual void OnRequestVisibility(
int player_id,
RequestVisibilityCallback request_visibility_callback) = 0;
virtual std::optional<media_session::MediaPosition> GetPosition(
int player_id) const = 0;
virtual bool IsPictureInPictureAvailable(int player_id) const = 0;
virtual bool HasSufficientlyVisibleVideo(int player_id) const = 0;
virtual bool HasAudio(int player_id) const = 0;
virtual bool HasVideo(int player_id) const = 0;
#if BUILDFLAG(ARKWEB_MEDIA_POLICY)
virtual void OnSetHtmlPlayEnabled(int player_id, bool enabled) {}
#endif
#if BUILDFLAG(ARKWEB_MEDIA_MEMORY_PRESSURE)
virtual void OnNotifyMemoryLevel(int player_id, int32_t level) {}
#endif
#if BUILDFLAG(ARKWEB_MEDIA_CAST)
virtual int32_t GetMediaCastCurrentTime(int player_id) {}
virtual void PullUpCastBackGround(int player_id, const std::string& device_name) {}
virtual void UpdateUiPlayState(int player_id, bool is_playing) {}
virtual void UpdateUiPlayPosition(int player_id, int64_t position) {}
virtual void MediaCastStopped(int player_id) {}
virtual void NotifyCastControlShow(int player_id, bool is_show) {}
#endif
virtual bool IsPaused(int player_id) const = 0;
virtual std::string GetAudioOutputSinkId(int player_id) const = 0;
virtual bool SupportsAudioOutputDeviceSwitching(int player_id) const = 0;
virtual media::MediaContentType GetMediaContentType() const = 0;
virtual void OnAutoPictureInPictureInfoChanged(
int player_id,
const media::PictureInPictureEventsInfo::AutoPipInfo&
auto_picture_in_picture_info) = 0;
virtual RenderFrameHost* render_frame_host() const = 0;
};
}
#endif