#ifndef MediaStream_h
#define MediaStream_h
-#include "bindings/v8/ScriptWrappable.h"
#include "core/dom/ContextLifecycleObserver.h"
-#include "core/events/EventTarget.h"
#include "core/html/URLRegistry.h"
+#include "modules/EventTargetModules.h"
#include "modules/mediastream/MediaStreamTrack.h"
#include "platform/Timer.h"
#include "platform/mediastream/MediaStreamDescriptor.h"
-#include "wtf/RefCounted.h"
-#include "wtf/RefPtr.h"
-namespace WebCore {
+namespace blink {
class ExceptionState;
-class MediaStream FINAL : public RefCounted<MediaStream>, public ScriptWrappable, public URLRegistrable, public MediaStreamDescriptorClient, public EventTargetWithInlineData, public ContextLifecycleObserver {
- REFCOUNTED_EVENT_TARGET(MediaStream);
+class MediaStream FINAL
+ : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaStream>
+ , public URLRegistrable
+ , public MediaStreamDescriptorClient
+ , public EventTargetWithInlineData
+ , public ContextLifecycleObserver {
+ DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaStream>);
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaStream);
public:
- static PassRefPtr<MediaStream> create(ExecutionContext*);
- static PassRefPtr<MediaStream> create(ExecutionContext*, PassRefPtr<MediaStream>);
- static PassRefPtr<MediaStream> create(ExecutionContext*, const MediaStreamTrackVector&);
- static PassRefPtr<MediaStream> create(ExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
+ static MediaStream* create(ExecutionContext*);
+ static MediaStream* create(ExecutionContext*, MediaStream*);
+ static MediaStream* create(ExecutionContext*, const MediaStreamTrackVector&);
+ static MediaStream* create(ExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
virtual ~MediaStream();
// DEPRECATED
String id() const { return m_descriptor->id(); }
- void addTrack(PassRefPtr<MediaStreamTrack>, ExceptionState&);
- void removeTrack(PassRefPtr<MediaStreamTrack>, ExceptionState&);
+ void addTrack(MediaStreamTrack*, ExceptionState&);
+ void removeTrack(MediaStreamTrack*, ExceptionState&);
MediaStreamTrack* getTrackById(String);
+ MediaStream* clone(ExecutionContext*);
MediaStreamTrackVector getAudioTracks() const { return m_audioTracks; }
MediaStreamTrackVector getVideoTracks() const { return m_videoTracks; }
+ MediaStreamTrackVector getTracks();
bool ended() const;
void stop();
DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
+ void trackEnded();
+
// MediaStreamDescriptorClient
- virtual void trackEnded() OVERRIDE;
virtual void streamEnded() OVERRIDE;
MediaStreamDescriptor* descriptor() const { return m_descriptor.get(); }
// URLRegistrable
virtual URLRegistry& registry() const OVERRIDE;
-protected:
+ virtual void trace(Visitor*) OVERRIDE;
+
+private:
MediaStream(ExecutionContext*, PassRefPtr<MediaStreamDescriptor>);
+ MediaStream(ExecutionContext*, const MediaStreamTrackVector& audioTracks, const MediaStreamTrackVector& videoTracks);
// ContextLifecycleObserver
virtual void contextDestroyed() OVERRIDE;
-private:
// MediaStreamDescriptorClient
virtual void addRemoteTrack(MediaStreamComponent*) OVERRIDE;
virtual void removeRemoteTrack(MediaStreamComponent*) OVERRIDE;
- void scheduleDispatchEvent(PassRefPtr<Event>);
+ void scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event>);
void scheduledEventTimerFired(Timer<MediaStream>*);
bool m_stopped;
RefPtr<MediaStreamDescriptor> m_descriptor;
Timer<MediaStream> m_scheduledEventTimer;
- Vector<RefPtr<Event> > m_scheduledEvents;
+ WillBeHeapVector<RefPtrWillBeMember<Event> > m_scheduledEvents;
};
-typedef Vector<RefPtr<MediaStream> > MediaStreamVector;
+typedef HeapVector<Member<MediaStream> > MediaStreamVector;
-} // namespace WebCore
+} // namespace blink
#endif // MediaStream_h