Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / mediastream / MediaStreamTrack.h
index 0206669..40347d0 100644 (file)
@@ -32,6 +32,7 @@
 #include "modules/mediastream/SourceInfo.h"
 #include "platform/mediastream/MediaStreamDescriptor.h"
 #include "platform/mediastream/MediaStreamSource.h"
+#include "wtf/PassOwnPtr.h"
 #include "wtf/RefCounted.h"
 #include "wtf/RefPtr.h"
 #include "wtf/Vector.h"
@@ -39,6 +40,7 @@
 
 namespace WebCore {
 
+class AudioSourceProvider;
 class ExceptionState;
 class MediaStreamComponent;
 class MediaStreamTrackSourcesCallback;
@@ -46,6 +48,12 @@ class MediaStreamTrackSourcesCallback;
 class MediaStreamTrack FINAL : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamSource::Observer {
     REFCOUNTED_EVENT_TARGET(MediaStreamTrack);
 public:
+    class Observer {
+    public:
+        virtual ~Observer() { }
+        virtual void trackEnded() = 0;
+    };
+
     static PassRefPtr<MediaStreamTrack> create(ExecutionContext*, MediaStreamComponent*);
     virtual ~MediaStreamTrack();
 
@@ -56,12 +64,11 @@ public:
     bool enabled() const;
     void setEnabled(bool);
 
-    void didEndTrack();
-
     String readyState() const;
 
     static void getSources(ExecutionContext*, PassOwnPtr<MediaStreamTrackSourcesCallback>, ExceptionState&);
     void stopTrack(ExceptionState&);
+    PassRefPtr<MediaStreamTrack> clone(ExecutionContext*);
 
     DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
     DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute);
@@ -70,6 +77,9 @@ public:
     MediaStreamComponent* component();
     bool ended() const;
 
+    void addObserver(Observer*);
+    void removeObserver(Observer*);
+
     // EventTarget
     virtual const AtomicString& interfaceName() const OVERRIDE;
     virtual ExecutionContext* executionContext() const OVERRIDE;
@@ -77,12 +87,20 @@ public:
     // ActiveDOMObject
     virtual void stop() OVERRIDE;
 
+    PassOwnPtr<AudioSourceProvider> createWebAudioSource();
+
 private:
     MediaStreamTrack(ExecutionContext*, MediaStreamComponent*);
 
+    MediaStreamSource::ReadyState m_readyState;
+
     // MediaStreamSourceObserver
     virtual void sourceChangedState() OVERRIDE;
 
+    void propagateTrackEnded();
+    Vector<Observer*> m_observers;
+    bool m_isIteratingObservers;
+
     bool m_stopped;
     RefPtr<MediaStreamComponent> m_component;
 };