1 /* 2 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Ericsson AB. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 21 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 23 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef MediaStreamTrack_h 27 #define MediaStreamTrack_h 28 29 #include "core/dom/ActiveDOMObject.h" 30 #include "modules/EventTargetModules.h" 31 #include "modules/mediastream/SourceInfo.h" 32 #include "platform/mediastream/MediaStreamDescriptor.h" 33 #include "platform/mediastream/MediaStreamSource.h" 34 #include "wtf/Forward.h" 35 36 namespace blink { 37 38 class AudioSourceProvider; 39 class ExceptionState; 40 class MediaStreamComponent; 41 class MediaStreamTrackSourcesCallback; 42 43 class MediaStreamTrack FINAL 44 : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaStreamTrack> 45 , public ActiveDOMObject 46 , public EventTargetWithInlineData 47 , public MediaStreamSource::Observer { 48 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaStreamTrack>); 49 DEFINE_WRAPPERTYPEINFO(); 50 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaStreamTrack); 51 public: 52 static MediaStreamTrack* create(ExecutionContext*, MediaStreamComponent*); 53 virtual ~MediaStreamTrack(); 54 55 String kind() const; 56 String id() const; 57 String label() const; 58 59 bool enabled() const; 60 void setEnabled(bool); 61 62 bool muted() const; 63 64 String readyState() const; 65 66 static void getSources(ExecutionContext*, MediaStreamTrackSourcesCallback*, ExceptionState&); 67 void stopTrack(ExceptionState&); 68 MediaStreamTrack* clone(ExecutionContext*); 69 70 DEFINE_ATTRIBUTE_EVENT_LISTENER(mute); 71 DEFINE_ATTRIBUTE_EVENT_LISTENER(unmute); 72 DEFINE_ATTRIBUTE_EVENT_LISTENER(ended); 73 74 MediaStreamComponent* component(); 75 bool ended() const; 76 77 void registerMediaStream(MediaStream*); 78 void unregisterMediaStream(MediaStream*); 79 80 // EventTarget 81 virtual const AtomicString& interfaceName() const OVERRIDE; 82 virtual ExecutionContext* executionContext() const OVERRIDE; 83 84 // ActiveDOMObject 85 virtual void stop() OVERRIDE; 86 87 PassOwnPtr<AudioSourceProvider> createWebAudioSource(); 88 89 virtual void trace(Visitor*) OVERRIDE; 90 91 private: 92 MediaStreamTrack(ExecutionContext*, MediaStreamComponent*); 93 94 // MediaStreamSourceObserver 95 virtual void sourceChangedState() OVERRIDE; 96 97 void propagateTrackEnded(); 98 99 MediaStreamSource::ReadyState m_readyState; 100 HeapHashSet<Member<MediaStream> > m_registeredMediaStreams; 101 bool m_isIteratingRegisteredMediaStreams; 102 bool m_stopped; 103 RefPtr<MediaStreamComponent> m_component; 104 }; 105 106 typedef HeapVector<Member<MediaStreamTrack> > MediaStreamTrackVector; 107 108 } // namespace blink 109 110 #endif // MediaStreamTrack_h 111