#ifndef MediaStream_h
#define MediaStream_h
#if ENABLE(MEDIA_STREAM)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
#include "MediaStreamDescriptor.h"
#include "MediaStreamTrackList.h"
#include <wtf/RefCounted.h>
#include <wtf/RefPtr.h>
namespace WebCore {
class ScriptExecutionContext;
class MediaStream : public RefCounted<MediaStream>, public MediaStreamDescriptorOwner, public EventTarget, public ActiveDOMObject {
public:
enum ReadyState {
LIVE = 1,
ENDED = 2
};
static PassRefPtr<MediaStream> create(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
static PassRefPtr<MediaStream> create(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackList>, PassRefPtr<MediaStreamTrackList>, ExceptionCode&);
virtual ~MediaStream();
DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
ReadyState readyState() const;
String label() const { return m_descriptor->label(); }
MediaStreamTrackList* audioTracks() { return m_audioTracks.get(); }
MediaStreamTrackList* videoTracks() { return m_videoTracks.get(); }
void streamEnded();
MediaStreamDescriptor* descriptor() const { return m_descriptor.get(); }
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE;
using RefCounted<MediaStream>::ref;
using RefCounted<MediaStream>::deref;
protected:
MediaStream(ScriptExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
virtual EventTargetData* eventTargetData() OVERRIDE;
virtual EventTargetData* ensureEventTargetData() OVERRIDE;
private:
virtual void refEventTarget() OVERRIDE { ref(); }
virtual void derefEventTarget() OVERRIDE { deref(); }
EventTargetData m_eventTargetData;
RefPtr<MediaStreamTrackList> m_audioTracks;
RefPtr<MediaStreamTrackList> m_videoTracks;
RefPtr<MediaStreamDescriptor> m_descriptor;
};
}
#endif // ENABLE(MEDIA_STREAM)
#endif // MediaStream_h