#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"
namespace WebCore {
+class AudioSourceProvider;
class ExceptionState;
class MediaStreamComponent;
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();
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);
MediaStreamComponent* component();
bool ended() const;
+ void addObserver(Observer*);
+ void removeObserver(Observer*);
+
// EventTarget
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual ExecutionContext* executionContext() const OVERRIDE;
// 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;
};