MediaPlaybackTargetPicker.h [plain text]
#ifndef MediaPlaybackTargetPicker_h
#define MediaPlaybackTargetPicker_h
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
#include <wtf/Ref.h>
#include <wtf/RunLoop.h>
namespace WebCore {
class FloatRect;
class MediaPlaybackTarget;
class MediaPlaybackTargetPicker {
public:
class Client {
protected:
virtual ~Client() { }
public:
virtual void setPlaybackTarget(Ref<MediaPlaybackTarget>&&) = 0;
virtual void externalOutputDeviceAvailableDidChange(bool) = 0;
void invalidate();
};
virtual ~MediaPlaybackTargetPicker();
virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute);
virtual void startingMonitoringPlaybackTargets();
virtual void stopMonitoringPlaybackTargets();
virtual void invalidatePlaybackTargets();
void availableDevicesDidChange() { addPendingAction(OutputDeviceAvailabilityChanged); }
void currentDeviceDidChange() { addPendingAction(CurrentDeviceDidChange); }
protected:
explicit MediaPlaybackTargetPicker(Client&);
enum ActionType {
OutputDeviceAvailabilityChanged = 1 << 0,
CurrentDeviceDidChange = 1 << 1,
};
typedef unsigned PendingActionFlags;
void addPendingAction(PendingActionFlags);
void pendingActionTimerFired();
Client* client() const { return m_client; }
void setClient(Client* client) { m_client = client; }
private:
virtual bool externalOutputDeviceAvailable() = 0;
virtual Ref<MediaPlaybackTarget> playbackTarget() = 0;
PendingActionFlags m_pendingActionFlags { 0 };
Client* m_client;
RunLoop::Timer<MediaPlaybackTargetPicker> m_pendingActionTimer;
};
}
#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
#endif // MediaPlaybackTargetPicker_h