d6c5e4856a55aa88f4c69f073d07d06d4b0b5c70
[WebKit-https.git] / Source / WebCore / html / track / TrackBase.h
1 /*
2  * Copyright (C) 2011 Apple 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 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 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 #pragma once
27
28 #if ENABLE(VIDEO_TRACK)
29
30 #include "EventTarget.h"
31 #include <wtf/RefCounted.h>
32 #include <wtf/TypeCasts.h>
33
34 namespace WebCore {
35
36 class Element;
37 class HTMLMediaElement;
38 class SourceBuffer;
39
40 class TrackBase : public RefCounted<TrackBase> {
41 public:
42     virtual ~TrackBase();
43
44     enum Type { BaseTrack, TextTrack, AudioTrack, VideoTrack };
45     Type type() const { return m_type; }
46
47     void setMediaElement(HTMLMediaElement* element) { m_mediaElement = element; }
48     HTMLMediaElement* mediaElement() { return m_mediaElement; }
49     virtual Element* element();
50
51     virtual AtomicString id() const { return m_id; }
52     virtual void setId(const AtomicString& id) { m_id = id; }
53
54     AtomicString label() const { return m_label; }
55     void setLabel(const AtomicString& label) { m_label = label; }
56
57     AtomicString language() const { return m_language; }
58     virtual void setLanguage(const AtomicString& language) { m_language = language; }
59
60     virtual void clearClient() = 0;
61
62     virtual int uniqueId() const { return m_uniqueId; }
63
64 #if ENABLE(MEDIA_SOURCE)
65     SourceBuffer* sourceBuffer() const { return m_sourceBuffer; }
66     void setSourceBuffer(SourceBuffer* buffer) { m_sourceBuffer = buffer; }
67 #endif
68
69     virtual bool enabled() const = 0;
70
71 protected:
72     TrackBase(Type, const AtomicString& id, const AtomicString& label, const AtomicString& language);
73
74     HTMLMediaElement* m_mediaElement { nullptr };
75
76 #if ENABLE(MEDIA_SOURCE)
77     SourceBuffer* m_sourceBuffer { nullptr };
78 #endif
79
80 private:
81     Type m_type;
82     int m_uniqueId;
83     AtomicString m_id;
84     AtomicString m_label;
85     AtomicString m_language;
86 };
87
88 class MediaTrackBase : public TrackBase {
89 public:
90     const AtomicString& kind() const { return m_kind; }
91     virtual void setKind(const AtomicString&);
92
93 protected:
94     MediaTrackBase(Type, const AtomicString& id, const AtomicString& label, const AtomicString& language);
95
96     void setKindInternal(const AtomicString&);
97
98 private:
99     virtual bool isValidKind(const AtomicString&) const = 0;
100     virtual const AtomicString& defaultKindKeyword() const = 0;
101
102     AtomicString m_kind;
103 };
104
105 } // namespace WebCore
106
107 #endif