1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim:set ts=2 sw=2 et tw=78: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_dom_MediaTrack_h 8 #define mozilla_dom_MediaTrack_h 9 10 #include "mozilla/DOMEventTargetHelper.h" 11 12 namespace mozilla { 13 namespace dom { 14 15 class MediaTrackList; 16 class VideoTrack; 17 class AudioTrack; 18 19 /** 20 * Base class of AudioTrack and VideoTrack. The AudioTrack and VideoTrack 21 * objects represent specific tracks of a media resource. Each track has aspects 22 * of an identifier, category, label, and language, even if a track is removed 23 * from its corresponding track list, those aspects do not change. 24 * 25 * When fetching the media resource, an audio/video track is created if the 26 * media resource is found to have an audio/video track. When the UA has learned 27 * that an audio/video track has ended, this audio/video track will be removed 28 * from its corresponding track list. 29 * 30 * Although AudioTrack and VideoTrack are not EventTargets, TextTrack is, and 31 * TextTrack inherits from MediaTrack as well (or is going to). 32 */ 33 class MediaTrack : public DOMEventTargetHelper { 34 public: 35 MediaTrack(nsIGlobalObject* aOwnerGlobal, const nsAString& aId, 36 const nsAString& aKind, const nsAString& aLabel, 37 const nsAString& aLanguage); 38 39 NS_DECL_ISUPPORTS_INHERITED 40 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(dom::MediaTrack, 41 DOMEventTargetHelper) 42 43 enum { 44 DEFAULT = 0, 45 FIRE_NO_EVENTS = 1 << 0, 46 }; 47 // The default behavior of enabling an audio track or selecting a video track 48 // fires a change event and notifies its media resource about the changes. 49 // It should not fire any events when fetching media resource. 50 virtual void SetEnabledInternal(bool aEnabled, int aFlags) = 0; 51 AsAudioTrack()52 virtual AudioTrack* AsAudioTrack() { return nullptr; } 53 AsVideoTrack()54 virtual VideoTrack* AsVideoTrack() { return nullptr; } 55 GetId()56 const nsString& GetId() const { return mId; } 57 58 // WebIDL GetId(nsAString & aId)59 void GetId(nsAString& aId) const { aId = mId; } GetKind(nsAString & aKind)60 void GetKind(nsAString& aKind) const { aKind = mKind; } GetLabel(nsAString & aLabel)61 void GetLabel(nsAString& aLabel) const { aLabel = mLabel; } GetLanguage(nsAString & aLanguage)62 void GetLanguage(nsAString& aLanguage) const { aLanguage = mLanguage; } 63 64 friend class MediaTrackList; 65 66 protected: 67 virtual ~MediaTrack(); 68 69 void SetTrackList(MediaTrackList* aList); 70 71 RefPtr<MediaTrackList> mList; 72 nsString mId; 73 nsString mKind; 74 nsString mLabel; 75 nsString mLanguage; 76 }; 77 78 } // namespace dom 79 } // namespace mozilla 80 81 #endif // mozilla_dom_MediaTrack_h 82