Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / html / MediaController.h
index 196d419..ca92367 100644 (file)
 #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*);
@@ -113,7 +98,6 @@ private:
     void updateMediaElements();
     void bringElementUpToSpeed(HTMLMediaElement*);
     void scheduleEvent(const AtomicString& eventName);
-    void asyncEventTimerFired(Timer<MediaController>*);
     void clearPositionTimerFired(Timer<MediaController>*);
     bool hasEnded() const;
     void scheduleTimeupdateEvent();
@@ -126,7 +110,12 @@ private:
 
     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;
@@ -134,17 +123,14 @@ private:
     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