bc4b4f29478b3a5576fe0092a875b1e6fc0301c2
[platform/framework/web/crosswalk-tizen.git] /
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  * Copyright (C) 2011, 2012, 2013 Apple Inc.  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 COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef TextTrack_h
28 #define TextTrack_h
29
30 #include "bindings/core/v8/TraceWrapperMember.h"
31 #include "core/CoreExport.h"
32 #include "core/events/EventTarget.h"
33 #include "core/html/track/TrackBase.h"
34 #include "platform/heap/Handle.h"
35 #include "wtf/text/WTFString.h"
36
37 namespace blink {
38
39 class CueTimeline;
40 class ExceptionState;
41 class HTMLMediaElement;
42 class TextTrack;
43 class TextTrackCue;
44 class TextTrackCueList;
45 class TextTrackList;
46 class VTTRegion;
47 class VTTRegionList;
48
49 class CORE_EXPORT TextTrack : public EventTargetWithInlineData,
50                               public TrackBase {
51   DEFINE_WRAPPERTYPEINFO();
52   USING_GARBAGE_COLLECTED_MIXIN(TextTrack);
53
54  public:
55   static TextTrack* create(const AtomicString& kind,
56                            const AtomicString& label,
57                            const AtomicString& language) {
58     return new TextTrack(kind, label, language, emptyAtom, AddTrack);
59   }
60   ~TextTrack() override;
61
62   virtual void setTrackList(TextTrackList*);
63   TextTrackList* trackList() { return m_trackList; }
64
65   bool isVisualKind() const;
66
67   static const AtomicString& subtitlesKeyword();
68   static const AtomicString& captionsKeyword();
69   static const AtomicString& descriptionsKeyword();
70   static const AtomicString& chaptersKeyword();
71   static const AtomicString& metadataKeyword();
72   static bool isValidKindKeyword(const String&);
73
74   static const AtomicString& disabledKeyword();
75   static const AtomicString& hiddenKeyword();
76   static const AtomicString& showingKeyword();
77
78   void setKind(const AtomicString& kind) { m_kind = kind; }
79   void setLabel(const AtomicString& label) { m_label = label; }
80   void setLanguage(const AtomicString& language) { m_language = language; }
81   void setId(const String& id) { m_id = id; }
82
83   AtomicString mode() const { return m_mode; }
84   virtual void setMode(const AtomicString&);
85
86   enum ReadinessState {
87     NotLoaded = 0,
88     Loading = 1,
89     Loaded = 2,
90     FailedToLoad = 3
91   };
92   ReadinessState getReadinessState() const { return m_readinessState; }
93   void setReadinessState(ReadinessState state) { m_readinessState = state; }
94
95   TextTrackCueList* cues();
96   TextTrackCueList* activeCues();
97
98   HTMLMediaElement* mediaElement() const;
99   Node* owner() const;
100
101   void addCue(TextTrackCue*);
102   void removeCue(TextTrackCue*, ExceptionState&);
103
104   VTTRegionList* regions();
105   void addRegion(VTTRegion*);
106   void removeRegion(VTTRegion*, ExceptionState&);
107
108   void cueWillChange(TextTrackCue*);
109   void cueDidChange(TextTrackCue*);
110
111   DEFINE_ATTRIBUTE_EVENT_LISTENER(cuechange);
112
113   enum TextTrackType { TrackElement, AddTrack, InBand };
114   TextTrackType trackType() const { return m_trackType; }
115
116   int trackIndex();
117   void invalidateTrackIndex();
118
119   bool isRendered() const;
120   bool canBeRendered() const;
121   int trackIndexRelativeToRenderedTracks();
122
123   bool hasBeenConfigured() const { return m_hasBeenConfigured; }
124   void setHasBeenConfigured(bool flag) { m_hasBeenConfigured = flag; }
125
126   virtual bool isDefault() const { return false; }
127
128   void removeAllCues();
129
130   // EventTarget methods
131   const AtomicString& interfaceName() const override;
132   ExecutionContext* getExecutionContext() const override;
133
134 #if defined(OS_TIZEN_TV_PRODUCT)
135   TextTrackCue* findCue(unsigned int id);
136   void addCue(double start_time,
137               double end_time,
138               unsigned int id,
139               std::string& data);
140 #endif
141
142   DECLARE_VIRTUAL_TRACE();
143
144   DECLARE_VIRTUAL_TRACE_WRAPPERS();
145
146  protected:
147   TextTrack(const AtomicString& kind,
148             const AtomicString& label,
149             const AtomicString& language,
150             const AtomicString& id,
151             TextTrackType);
152
153   void addListOfCues(HeapVector<Member<TextTrackCue>>&);
154
155  private:
156   CueTimeline* cueTimeline() const;
157
158   TextTrackCueList* ensureTextTrackCueList();
159   TraceWrapperMember<TextTrackCueList> m_cues;
160   Member<TextTrackCueList> m_activeCues;
161
162   VTTRegionList* ensureVTTRegionList();
163   Member<VTTRegionList> m_regions;
164
165   Member<TextTrackList> m_trackList;
166   AtomicString m_mode;
167   TextTrackType m_trackType;
168   ReadinessState m_readinessState;
169   int m_trackIndex;
170   int m_renderedTrackIndex;
171   bool m_hasBeenConfigured;
172 };
173
174 DEFINE_TRACK_TYPE_CASTS(TextTrack, WebMediaPlayer::TextTrack);
175
176 }  // namespace blink
177
178 #endif  // TextTrack_h