class ExceptionState;
-class MediaStream FINAL : public RefCounted<MediaStream>, public ScriptWrappable, public URLRegistrable, public MediaStreamDescriptorClient, public EventTargetWithInlineData, public ContextLifecycleObserver {
+class MediaStream FINAL : public RefCounted<MediaStream>, public ScriptWrappable, public URLRegistrable, public MediaStreamDescriptorClient, public EventTargetWithInlineData, public ContextLifecycleObserver, public MediaStreamTrack::Observer {
REFCOUNTED_EVENT_TARGET(MediaStream);
public:
static PassRefPtr<MediaStream> create(ExecutionContext*);
void addTrack(PassRefPtr<MediaStreamTrack>, ExceptionState&);
void removeTrack(PassRefPtr<MediaStreamTrack>, ExceptionState&);
MediaStreamTrack* getTrackById(String);
+ PassRefPtr<MediaStream> clone(ExecutionContext*);
MediaStreamTrackVector getAudioTracks() const { return m_audioTracks; }
MediaStreamTrackVector getVideoTracks() const { return m_videoTracks; }
DEFINE_ATTRIBUTE_EVENT_LISTENER(addtrack);
DEFINE_ATTRIBUTE_EVENT_LISTENER(removetrack);
- // MediaStreamDescriptorClient
+ // MediaStreamTrack::Observer
virtual void trackEnded() OVERRIDE;
+
+ // MediaStreamDescriptorClient
virtual void streamEnded() OVERRIDE;
MediaStreamDescriptor* descriptor() const { return m_descriptor.get(); }
// URLRegistrable
virtual URLRegistry& registry() const OVERRIDE;
-protected:
+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;
+ WillBePersistentHeapVector<RefPtrWillBeMember<Event> > m_scheduledEvents;
};
typedef Vector<RefPtr<MediaStream> > MediaStreamVector;