Unreviewed, rolling out r98736.
[WebKit-https.git] / Source / WebCore / html / HTMLTrackElement.cpp
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 #include "config.h"
27
28 #if ENABLE(VIDEO_TRACK)
29 #include "HTMLTrackElement.h"
30
31 #include "Event.h"
32 #include "HTMLMediaElement.h"
33 #include "HTMLNames.h"
34 #include "Logging.h"
35
36 using namespace std;
37
38 namespace WebCore {
39
40 using namespace HTMLNames;
41
42 inline HTMLTrackElement::HTMLTrackElement(const QualifiedName& tagName, Document* document)
43     : HTMLElement(tagName, document)
44 {
45     LOG(Media, "HTMLTrackElement::HTMLTrackElement - %p", this);
46     ASSERT(hasTagName(trackTag));
47 }
48
49 HTMLTrackElement::~HTMLTrackElement()
50 {
51 }
52
53 PassRefPtr<HTMLTrackElement> HTMLTrackElement::create(const QualifiedName& tagName, Document* document)
54 {
55     return adoptRef(new HTMLTrackElement(tagName, document));
56 }
57
58 void HTMLTrackElement::insertedIntoTree(bool deep)
59 {
60     HTMLElement::insertedIntoTree(deep);
61     Element* parent = parentElement();
62     if (parent && parent->isMediaElement()) {
63         // TODO(annacc):
64         // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
65     }
66 }
67
68 void HTMLTrackElement::willRemove()
69 {
70     Element* parent = parentElement();
71     if (parent && parent->isMediaElement()) {
72         // TODO(annacc):
73         // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
74     }
75     HTMLElement::willRemove();
76 }
77
78 KURL HTMLTrackElement::src() const
79 {
80     return document()->completeURL(getAttribute(srcAttr));
81 }
82
83 void HTMLTrackElement::setSrc(const String& url)
84 {
85     setAttribute(srcAttr, url);
86 }
87
88 String HTMLTrackElement::kind() const
89 {
90     return getAttribute(kindAttr);
91 }
92
93 void HTMLTrackElement::setKind(const String& kind)
94 {
95     setAttribute(kindAttr, kind);
96 }
97
98 String HTMLTrackElement::srclang() const
99 {
100     return getAttribute(srclangAttr);
101 }
102
103 void HTMLTrackElement::setSrclang(const String& srclang)
104 {
105     setAttribute(srclangAttr, srclang);
106 }
107
108 String HTMLTrackElement::label() const
109 {
110     return getAttribute(labelAttr);
111 }
112
113 void HTMLTrackElement::setLabel(const String& label)
114 {
115     setAttribute(labelAttr, label);
116 }
117
118 bool HTMLTrackElement::isDefault() const
119 {
120     return hasAttribute(defaultAttr);
121 }
122
123 void HTMLTrackElement::setIsDefault(bool isDefault)
124 {
125     setBooleanAttribute(defaultAttr, isDefault);
126 }
127
128 TextTrack* HTMLTrackElement::track() const
129 {
130     if (m_track)
131         return m_track.get();
132     return 0;
133 }
134
135 bool HTMLTrackElement::isURLAttribute(Attribute* attribute) const
136 {
137     return attribute->name() == srcAttr;
138 }
139
140 void HTMLTrackElement::load(ScriptExecutionContext* context, TextTrackClient* trackClient)
141 {
142     m_track = LoadableTextTrack::create(trackClient, this, kind(), label(), srclang(), isDefault());
143
144     if (hasAttribute(srcAttr))
145         m_track->load(getNonEmptyURLAttribute(srcAttr), context);
146 }
147
148 void HTMLTrackElement::textTrackLoadingCompleted(LoadableTextTrack*, bool loadingFailed)
149 {
150     ExceptionCode ec = 0;
151     dispatchEvent(Event::create(loadingFailed ? eventNames().errorEvent : eventNames().loadEvent, false, false), ec);
152 }
153
154 #if ENABLE(MICRODATA)
155 String HTMLTrackElement::itemValueText() const
156 {
157     return getURLAttribute(srcAttr);
158 }
159
160 void HTMLTrackElement::setItemValueText(const String& value, ExceptionCode& ec)
161 {
162     setAttribute(srcAttr, value, ec);
163 }
164 #endif
165
166 }
167
168 #endif