Allow ports to override text track rendering style
[WebKit-https.git] / Source / WebCore / html / track / TextTrack.h
1 /*
2  * Copyright (C) 2011 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TextTrack_h
27 #define TextTrack_h
28
29 #if ENABLE(VIDEO_TRACK)
30
31 #include "ExceptionCode.h"
32 #include "TrackBase.h"
33 #include <wtf/PassOwnPtr.h>
34 #include <wtf/RefCounted.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38
39 class HTMLMediaElement;
40 class TextTrack;
41 class TextTrackCue;
42 class TextTrackCueList;
43
44 class TextTrackClient {
45 public:
46     virtual ~TextTrackClient() { }
47     virtual void textTrackKindChanged(TextTrack*) = 0;
48     virtual void textTrackModeChanged(TextTrack*) = 0;
49     virtual void textTrackAddCues(TextTrack*, const TextTrackCueList*) = 0;
50     virtual void textTrackRemoveCues(TextTrack*, const TextTrackCueList*) = 0;
51     virtual void textTrackAddCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0;
52     virtual void textTrackRemoveCue(TextTrack*, PassRefPtr<TextTrackCue>) = 0;
53 };
54
55 class TextTrack : public TrackBase {
56 public:
57     static PassRefPtr<TextTrack> create(ScriptExecutionContext* context, TextTrackClient* client, const AtomicString& kind, const AtomicString& label, const AtomicString& language)
58     {
59         return adoptRef(new TextTrack(context, client, kind, label, language, AddTrack));
60     }
61     virtual ~TextTrack();
62
63     void setMediaElement(HTMLMediaElement* element) { m_mediaElement = element; }
64     HTMLMediaElement* mediaElement() { return m_mediaElement; }
65
66     AtomicString kind() const { return m_kind; }
67     void setKind(const AtomicString&);
68
69     static const AtomicString& subtitlesKeyword();
70     static const AtomicString& captionsKeyword();
71     static const AtomicString& descriptionsKeyword();
72     static const AtomicString& chaptersKeyword();
73     static const AtomicString& metadataKeyword();
74     static bool isValidKindKeyword(const AtomicString&);
75
76     AtomicString label() const { return m_label; }
77     void setLabel(const AtomicString& label) { m_label = label; }
78
79     AtomicString language() const { return m_language; }
80     void setLanguage(const AtomicString& language) { m_language = language; }
81
82     static const AtomicString& disabledKeyword();
83     static const AtomicString& hiddenKeyword();
84     static const AtomicString& showingKeyword();
85
86     AtomicString mode() const;
87     void setMode(const AtomicString&);
88
89     bool showingByDefault() const { return m_showingByDefault; }
90     void setShowingByDefault(bool showing) { m_showingByDefault = showing; }
91
92     enum ReadinessState { NotLoaded = 0, Loading = 1, Loaded = 2, FailedToLoad = 3 };
93     ReadinessState readinessState() const { return m_readinessState; }
94     void setReadinessState(ReadinessState state) { m_readinessState = state; }
95
96     TextTrackCueList* cues();
97     TextTrackCueList* activeCues() const;
98
99     virtual void clearClient() { m_client = 0; }
100     TextTrackClient* client() { return m_client; }
101
102     void addCue(PassRefPtr<TextTrackCue>, ExceptionCode&);
103     void removeCue(TextTrackCue*, ExceptionCode&);
104
105     void cueWillChange(TextTrackCue*);
106     void cueDidChange(TextTrackCue*);
107
108     DEFINE_ATTRIBUTE_EVENT_LISTENER(cuechange);
109
110     enum TextTrackType { TrackElement, AddTrack, InBand };
111     TextTrackType trackType() const { return m_trackType; }
112
113     int trackIndex();
114     void invalidateTrackIndex();
115
116     bool isRendered();
117
118 protected:
119     TextTrack(ScriptExecutionContext*, TextTrackClient*, const AtomicString& kind, const AtomicString& label, const AtomicString& language, TextTrackType);
120
121     RefPtr<TextTrackCueList> m_cues;
122
123 private:
124     TextTrackCueList* ensureTextTrackCueList();
125     HTMLMediaElement* m_mediaElement;
126     AtomicString m_kind;
127     AtomicString m_label;
128     AtomicString m_language;
129     AtomicString m_mode;
130     TextTrackClient* m_client;
131     TextTrackType m_trackType;
132     ReadinessState m_readinessState;
133     bool m_showingByDefault;
134     int m_trackIndex;
135 };
136
137 } // namespace WebCore
138
139 #endif
140 #endif