Removing MediaStreamTrackVector and MediaStreamSourceVector typedefs
[WebKit-https.git] / Source / WebCore / Modules / mediastream / MediaStreamTrack.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  * Copyright (C) 2011 Ericsson AB. All rights reserved.
4  * Copyright (C) 2013 Apple Inc. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1.  Redistributions of source code must retain the above copyright
10  *     notice, this list of conditions and the following disclaimer.
11  * 2.  Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
16  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef MediaStreamTrack_h
28 #define MediaStreamTrack_h
29
30 #if ENABLE(MEDIA_STREAM)
31
32 #include "ActiveDOMObject.h"
33 #include "EventTarget.h"
34 #include "MediaStreamSource.h"
35 #include "MediaStreamTrackPrivate.h"
36 #include "ScriptWrappable.h"
37 #include <wtf/RefCounted.h>
38 #include <wtf/RefPtr.h>
39 #include <wtf/Vector.h>
40 #include <wtf/text/WTFString.h>
41
42 namespace WebCore {
43
44 class Dictionary;
45 class MediaConstraintsImpl;
46 class MediaSourceStates;
47 class MediaStreamTrackSourcesCallback;
48 class MediaStreamCapabilities;
49 class MediaTrackConstraints;
50
51 class MediaStreamTrack : public RefCounted<MediaStreamTrack>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData, public MediaStreamTrackPrivateClient {
52 public:
53     class Observer {
54     public:
55         virtual ~Observer() { }
56         virtual void trackDidEnd() = 0;
57     };
58
59     virtual ~MediaStreamTrack();
60
61     virtual const AtomicString& kind() const = 0;
62     const String& id() const;
63     const String& label() const;
64
65     bool enabled() const;
66     void setEnabled(bool);
67
68     bool muted() const;
69     bool readonly() const;
70     bool remote() const;
71     bool stopped() const;
72
73     const AtomicString& readyState() const;
74
75     static void getSources(ScriptExecutionContext*, PassRefPtr<MediaStreamTrackSourcesCallback>, ExceptionCode&);
76
77     RefPtr<MediaTrackConstraints> constraints() const;
78     RefPtr<MediaSourceStates> states() const;
79     RefPtr<MediaStreamCapabilities> capabilities() const;
80     void applyConstraints(const Dictionary&);
81     void applyConstraints(PassRefPtr<MediaConstraints>);
82
83     RefPtr<MediaStreamTrack> clone();
84     void stopProducingData();
85
86     DEFINE_ATTRIBUTE_EVENT_LISTENER(mute);
87     DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute);
88     DEFINE_ATTRIBUTE_EVENT_LISTENER(started);
89     DEFINE_ATTRIBUTE_EVENT_LISTENER(ended);
90     DEFINE_ATTRIBUTE_EVENT_LISTENER(overconstrained);
91
92     MediaStreamSource* source() const { return m_privateTrack->source(); }
93     MediaStreamTrackPrivate& privateTrack() { return m_privateTrack.get(); }
94
95     bool ended() const;
96
97     void addObserver(Observer*);
98     void removeObserver(Observer*);
99
100     // EventTarget
101     virtual EventTargetInterface eventTargetInterface() const OVERRIDE FINAL { return MediaStreamTrackEventTargetInterfaceType; }
102     virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE FINAL { return ActiveDOMObject::scriptExecutionContext(); }
103
104     using RefCounted<MediaStreamTrack>::ref;
105     using RefCounted<MediaStreamTrack>::deref;
106
107 protected:
108     explicit MediaStreamTrack(MediaStreamTrack&);
109     MediaStreamTrack(ScriptExecutionContext&, MediaStreamTrackPrivate&, const Dictionary*);
110
111     void setSource(PassRefPtr<MediaStreamSource>);
112
113 private:
114
115     void configureTrackRendering();
116     void trackDidEnd();
117     void scheduleEventDispatch(PassRefPtr<Event>);
118     void dispatchQueuedEvents();
119
120     // ActiveDOMObject
121     virtual void stop() OVERRIDE FINAL;
122
123     // EventTarget
124     virtual void refEventTarget() OVERRIDE FINAL { ref(); }
125     virtual void derefEventTarget() OVERRIDE FINAL { deref(); }
126
127     // MediaStreamTrackPrivateClient
128     void trackReadyStateChanged();
129     void trackMutedChanged();
130     void trackEnabledChanged();
131
132     Vector<RefPtr<Event>> m_scheduledEvents;
133
134     RefPtr<MediaConstraintsImpl> m_constraints;
135     Mutex m_mutex;
136
137     Vector<Observer*> m_observers;
138
139     Ref<MediaStreamTrackPrivate> m_privateTrack;
140     bool m_eventDispatchScheduled;
141
142     bool m_stoppingTrack;
143 };
144
145 } // namespace WebCore
146
147 #endif // ENABLE(MEDIA_STREAM)
148
149 #endif // MediaStreamTrack_h