Rename pageCache() to PageCache::shared() and return a reference
[WebKit-https.git] / Source / WebCore / Modules / mediasource / MediaSource.h
index f13a399..bec2c1b 100644 (file)
 #include "ActiveDOMObject.h"
 #include "EventTarget.h"
 #include "GenericEventQueue.h"
-#include "HTMLMediaSource.h"
 #include "MediaSourcePrivate.h"
+#include "MediaSourcePrivateClient.h"
 #include "ScriptWrappable.h"
 #include "SourceBuffer.h"
 #include "SourceBufferList.h"
 #include "URLRegistry.h"
-#include <wtf/PassOwnPtr.h>
 #include <wtf/RefCounted.h>
 #include <wtf/Vector.h>
 
@@ -50,8 +49,11 @@ namespace WebCore {
 
 class GenericEventQueue;
 
-class MediaSource : public RefCounted<MediaSource>, public HTMLMediaSource, public ActiveDOMObject, public EventTargetWithInlineData, public ScriptWrappable {
+class MediaSource : public MediaSourcePrivateClient, public ActiveDOMObject, public EventTargetWithInlineData, public ScriptWrappable, public URLRegistrable {
 public:
+    static void setRegistry(URLRegistry*);
+    static MediaSource* lookup(const String& url) { return s_registry ? static_cast<MediaSource*>(s_registry->lookup(url)) : 0; }
+
     static const AtomicString& openKeyword();
     static const AtomicString& closedKeyword();
     static const AtomicString& endedKeyword();
@@ -63,22 +65,29 @@ public:
     void removedFromRegistry();
     void openIfInEndedState();
     bool isOpen() const;
+    bool isClosed() const;
+    bool isEnded() const;
     void sourceBufferDidChangeAcitveState(SourceBuffer*, bool);
+    void streamEndedWithError(const AtomicString& error, ExceptionCode&);
+
+    // MediaSourcePrivateClient
+    virtual void setPrivateAndOpen(Ref<MediaSourcePrivate>&&) override;
+    virtual MediaTime duration() const override;
+    virtual std::unique_ptr<PlatformTimeRanges> buffered() const override;
+    virtual void seekToTime(const MediaTime&) override;
 
-    // HTMLMediaSource
-    virtual bool attachToElement(HTMLMediaElement*) OVERRIDE;
-    virtual void setPrivateAndOpen(PassRef<MediaSourcePrivate>) OVERRIDE;
-    virtual void close() OVERRIDE;
-    virtual bool isClosed() const OVERRIDE;
-    virtual double duration() const OVERRIDE;
-    virtual PassRefPtr<TimeRanges> buffered() const OVERRIDE;
-    virtual void refHTMLMediaSource() OVERRIDE { ref(); }
-    virtual void derefHTMLMediaSource() OVERRIDE { deref(); }
-    virtual void monitorSourceBuffers() OVERRIDE;
+    bool attachToElement(HTMLMediaElement*);
+    void close();
+    void monitorSourceBuffers();
+    bool isSeeking() const { return m_pendingSeekTime.isValid(); }
+    void completeSeek();
 
     void setDuration(double, ExceptionCode&);
+    void setDurationInternal(const MediaTime&);
+    MediaTime currentTime() const;
     const AtomicString& readyState() const { return m_readyState; }
     void setReadyState(const AtomicString&);
+    void endOfStream(ExceptionCode&);
     void endOfStream(const AtomicString& error, ExceptionCode&);
 
     HTMLMediaElement* mediaElement() const { return m_mediaElement; }
@@ -91,35 +100,43 @@ public:
     static bool isTypeSupported(const String& type);
 
     // ActiveDOMObject interface
-    virtual bool hasPendingActivity() const OVERRIDE;
-    virtual void stop() OVERRIDE;
+    virtual bool hasPendingActivity() const override;
+    virtual void stop() override;
 
     // EventTarget interface
-    virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE FINAL;
-    virtual void refEventTarget() OVERRIDE FINAL { ref(); }
-    virtual void derefEventTarget() OVERRIDE FINAL { deref(); }
-    virtual EventTargetInterface eventTargetInterface() const OVERRIDE;
+    virtual ScriptExecutionContext* scriptExecutionContext() const override final;
+    virtual void refEventTarget() override final { ref(); }
+    virtual void derefEventTarget() override final { deref(); }
+    virtual EventTargetInterface eventTargetInterface() const override;
 
     // URLRegistrable interface
-    virtual URLRegistry& registry() const OVERRIDE;
+    virtual URLRegistry& registry() const override;
 
-    using RefCounted<MediaSource>::ref;
-    using RefCounted<MediaSource>::deref;
+    using RefCounted<MediaSourcePrivateClient>::ref;
+    using RefCounted<MediaSourcePrivateClient>::deref;
 
 protected:
     explicit MediaSource(ScriptExecutionContext&);
 
+    virtual const char* activeDOMObjectName() const override { return "MediaSource"; }
+
     void onReadyStateChange(const AtomicString& oldState, const AtomicString& newState);
-    Vector<RefPtr<TimeRanges>> activeRanges() const;
+    Vector<PlatformTimeRanges> activeRanges() const;
 
     RefPtr<SourceBufferPrivate> createSourceBufferPrivate(const ContentType&, ExceptionCode&);
     void scheduleEvent(const AtomicString& eventName);
     GenericEventQueue& asyncEventQueue() { return m_asyncEventQueue; }
 
+    void regenerateActiveSourceBuffers();
+
+    static URLRegistry* s_registry;
+
     RefPtr<MediaSourcePrivate> m_private;
     RefPtr<SourceBufferList> m_sourceBuffers;
     RefPtr<SourceBufferList> m_activeSourceBuffers;
     HTMLMediaElement* m_mediaElement;
+    MediaTime m_duration;
+    MediaTime m_pendingSeekTime;
     AtomicString m_readyState;
     GenericEventQueue m_asyncEventQueue;
 };