Line data Source code
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_TextTrack_h
8 : #define mozilla_dom_TextTrack_h
9 :
10 : #include "mozilla/DOMEventTargetHelper.h"
11 : #include "mozilla/dom/TextTrackBinding.h"
12 : #include "nsCOMPtr.h"
13 : #include "nsCycleCollectionParticipant.h"
14 : #include "nsString.h"
15 :
16 : namespace mozilla {
17 : namespace dom {
18 :
19 : class TextTrackList;
20 : class TextTrackCue;
21 : class TextTrackCueList;
22 : class HTMLTrackElement;
23 :
24 : enum TextTrackSource {
25 : Track,
26 : AddTextTrack,
27 : MediaResourceSpecific
28 : };
29 :
30 : // Constants for numeric readyState property values.
31 : enum TextTrackReadyState {
32 : NotLoaded = 0U,
33 : Loading = 1U,
34 : Loaded = 2U,
35 : FailedToLoad = 3U
36 : };
37 :
38 : class TextTrack final : public DOMEventTargetHelper
39 : {
40 : public:
41 : NS_DECL_ISUPPORTS_INHERITED
42 0 : NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TextTrack, DOMEventTargetHelper)
43 :
44 : TextTrack(nsPIDOMWindowInner* aOwnerWindow,
45 : TextTrackKind aKind,
46 : const nsAString& aLabel,
47 : const nsAString& aLanguage,
48 : TextTrackMode aMode,
49 : TextTrackReadyState aReadyState,
50 : TextTrackSource aTextTrackSource);
51 : TextTrack(nsPIDOMWindowInner* aOwnerWindow,
52 : TextTrackList* aTextTrackList,
53 : TextTrackKind aKind,
54 : const nsAString& aLabel,
55 : const nsAString& aLanguage,
56 : TextTrackMode aMode,
57 : TextTrackReadyState aReadyState,
58 : TextTrackSource aTextTrackSource);
59 :
60 : void SetDefaultSettings();
61 :
62 : JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
63 :
64 0 : TextTrackKind Kind() const
65 : {
66 0 : return mKind;
67 : }
68 : void GetLabel(nsAString& aLabel) const;
69 : void GetLanguage(nsAString& aLanguage) const;
70 0 : void GetInBandMetadataTrackDispatchType(nsAString& aType) const
71 : {
72 0 : aType = mType;
73 0 : }
74 : void GetId(nsAString& aId) const;
75 :
76 0 : TextTrackMode Mode() const
77 : {
78 0 : return mMode;
79 : }
80 : void SetMode(TextTrackMode aValue);
81 :
82 0 : TextTrackCueList* GetCues() const
83 : {
84 0 : if (mMode == TextTrackMode::Disabled) {
85 0 : return nullptr;
86 : }
87 0 : return mCueList;
88 : }
89 :
90 : TextTrackCueList* GetActiveCues();
91 : void UpdateActiveCueList();
92 : void GetActiveCueArray(nsTArray<RefPtr<TextTrackCue> >& aCues);
93 :
94 : TextTrackReadyState ReadyState() const;
95 : void SetReadyState(TextTrackReadyState aState);
96 : void SetReadyState(uint32_t aReadyState);
97 :
98 : void AddCue(TextTrackCue& aCue);
99 : void RemoveCue(TextTrackCue& aCue, ErrorResult& aRv);
100 0 : void SetDirty() { mDirty = true; }
101 : void SetCuesDirty();
102 :
103 : TextTrackList* GetTextTrackList();
104 : void SetTextTrackList(TextTrackList* aTextTrackList);
105 :
106 0 : IMPL_EVENT_HANDLER(cuechange)
107 :
108 : HTMLTrackElement* GetTrackElement();
109 : void SetTrackElement(HTMLTrackElement* aTrackElement);
110 :
111 0 : TextTrackSource GetTextTrackSource() {
112 0 : return mTextTrackSource;
113 : }
114 :
115 : void SetCuesInactive();
116 :
117 : void NotifyCueUpdated(TextTrackCue *aCue);
118 :
119 : void DispatchAsyncTrustedEvent(const nsString& aEventName);
120 :
121 : bool IsLoaded();
122 :
123 : private:
124 : ~TextTrack();
125 :
126 : RefPtr<TextTrackList> mTextTrackList;
127 :
128 : TextTrackKind mKind;
129 : nsString mLabel;
130 : nsString mLanguage;
131 : nsString mType;
132 : TextTrackMode mMode;
133 :
134 : RefPtr<TextTrackCueList> mCueList;
135 : RefPtr<TextTrackCueList> mActiveCueList;
136 : RefPtr<HTMLTrackElement> mTrackElement;
137 :
138 : uint32_t mCuePos;
139 : TextTrackReadyState mReadyState;
140 : bool mDirty;
141 :
142 : // An enum that represents where the track was sourced from.
143 : TextTrackSource mTextTrackSource;
144 : };
145 :
146 : } // namespace dom
147 : } // namespace mozilla
148 :
149 : #endif // mozilla_dom_TextTrack_h
|