#ifndef MediaController_h
#define MediaController_h
-#include "bindings/v8/ScriptWrappable.h"
-#include "core/events/Event.h"
#include "core/events/EventTarget.h"
-#include "core/html/MediaControllerInterface.h"
-#include "platform/Timer.h"
+#include "core/html/HTMLMediaElement.h"
+#include "wtf/LinkedHashSet.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefCounted.h"
-#include "wtf/Vector.h"
-namespace WebCore {
+namespace blink {
class Clock;
-class Event;
class ExceptionState;
-class HTMLMediaElement;
class ExecutionContext;
+class GenericEventQueue;
-class MediaController FINAL : public RefCounted<MediaController>, public ScriptWrappable, public MediaControllerInterface, public EventTargetWithInlineData {
+class MediaController FINAL : public RefCountedWillBeGarbageCollectedFinalized<MediaController>, public EventTargetWithInlineData {
+ DEFINE_WRAPPERTYPEINFO();
REFCOUNTED_EVENT_TARGET(MediaController);
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaController);
public:
- static PassRefPtr<MediaController> create(ExecutionContext*);
+ static PassRefPtrWillBeRawPtr<MediaController> create(ExecutionContext*);
virtual ~MediaController();
void addMediaElement(HTMLMediaElement*);
void removeMediaElement(HTMLMediaElement*);
- bool containsMediaElement(HTMLMediaElement*) const;
- const String& mediaGroup() const { return m_mediaGroup; }
+ PassRefPtrWillBeRawPtr<TimeRanges> buffered() const;
+ PassRefPtrWillBeRawPtr<TimeRanges> seekable() const;
+ PassRefPtrWillBeRawPtr<TimeRanges> played();
- virtual PassRefPtr<TimeRanges> buffered() const OVERRIDE;
- virtual PassRefPtr<TimeRanges> seekable() const OVERRIDE;
- virtual PassRefPtr<TimeRanges> played() OVERRIDE;
+ double duration() const;
+ double currentTime() const;
+ void setCurrentTime(double);
- virtual double duration() const OVERRIDE;
- virtual double currentTime() const OVERRIDE;
- virtual void setCurrentTime(double, ExceptionState&) OVERRIDE;
-
- virtual bool paused() const OVERRIDE { return m_paused; }
- virtual void play() OVERRIDE;
- virtual void pause() OVERRIDE;
+ bool paused() const { return m_paused; }
+ void play();
+ void pause();
void unpause();
- virtual double defaultPlaybackRate() const OVERRIDE { return m_defaultPlaybackRate; }
- virtual void setDefaultPlaybackRate(double) OVERRIDE;
+ double defaultPlaybackRate() const { return m_defaultPlaybackRate; }
+ void setDefaultPlaybackRate(double);
- virtual double playbackRate() const OVERRIDE;
- virtual void setPlaybackRate(double) OVERRIDE;
+ double playbackRate() const;
+ void setPlaybackRate(double);
- virtual double volume() const OVERRIDE { return m_volume; }
- virtual void setVolume(double, ExceptionState&) OVERRIDE;
+ double volume() const { return m_volume; }
+ void setVolume(double, ExceptionState&);
- virtual bool muted() const OVERRIDE { return m_muted; }
- virtual void setMuted(bool) OVERRIDE;
+ bool muted() const { return m_muted; }
+ void setMuted(bool);
- virtual ReadyState readyState() const OVERRIDE { return m_readyState; }
+ typedef HTMLMediaElement::ReadyState ReadyState;
+ ReadyState readyState() const { return m_readyState; }
enum PlaybackState { WAITING, PLAYING, ENDED };
const AtomicString& playbackState() const;
- virtual bool isFullscreen() const OVERRIDE { return false; }
- virtual void enterFullscreen() OVERRIDE { }
-
- virtual bool hasAudio() const OVERRIDE;
- virtual bool hasVideo() const OVERRIDE;
- virtual bool hasClosedCaptions() const OVERRIDE;
- virtual void setClosedCaptionsVisible(bool) OVERRIDE;
- virtual bool closedCaptionsVisible() const OVERRIDE { return m_closedCaptionsVisible; }
-
- virtual void beginScrubbing() OVERRIDE;
- virtual void endScrubbing() OVERRIDE;
-
- virtual bool canPlay() const OVERRIDE;
-
- virtual bool hasCurrentSrc() const OVERRIDE;
-
+ bool isRestrained() const;
bool isBlocked() const;
- void clearExecutionContext() { m_executionContext = 0; }
+#if !ENABLE(OILPAN)
+ void clearExecutionContext() { m_executionContext = nullptr; }
+#endif
+
+ virtual void trace(Visitor*) OVERRIDE;
private:
MediaController(ExecutionContext*);
void updateMediaElements();
void bringElementUpToSpeed(HTMLMediaElement*);
void scheduleEvent(const AtomicString& eventName);
- void asyncEventTimerFired(Timer<MediaController>*);
void clearPositionTimerFired(Timer<MediaController>*);
bool hasEnded() const;
void scheduleTimeupdateEvent();
friend class HTMLMediaElement;
friend class MediaControllerEventListener;
- Vector<HTMLMediaElement*> m_mediaElements;
+ // FIXME: A MediaController should ideally keep an otherwise
+ // unreferenced slaved media element alive. When Oilpan is
+ // enabled by default, consider making the hash set references
+ // strong to accomplish that. crbug.com/383072
+ typedef WillBeHeapLinkedHashSet<RawPtrWillBeWeakMember<HTMLMediaElement> > MediaElementSequence;
+ MediaElementSequence m_mediaElements;
bool m_paused;
double m_defaultPlaybackRate;
double m_volume;
bool m_muted;
ReadyState m_readyState;
PlaybackState m_playbackState;
- Vector<RefPtr<Event> > m_pendingEvents;
- Timer<MediaController> m_asyncEventTimer;
+ OwnPtrWillBeMember<GenericEventQueue> m_pendingEventsQueue;
mutable Timer<MediaController> m_clearPositionTimer;
- String m_mediaGroup;
- bool m_closedCaptionsVisible;
OwnPtr<Clock> m_clock;
- ExecutionContext* m_executionContext;
+ RawPtrWillBeWeakMember<ExecutionContext> m_executionContext;
Timer<MediaController> m_timeupdateTimer;
double m_previousTimeupdateTime;
};
-} // namespace WebCore
+} // namespace blink
-#endif
+#endif // MediaController_h