Use fastGetAttribute() and fastHasAttribute() where appropriate.
[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 "HTMLMediaElement.h"
32 #include "HTMLNames.h"
33 #include "Logging.h"
34
35 using namespace std;
36
37 namespace WebCore {
38
39 using namespace HTMLNames;
40
41 inline HTMLTrackElement::HTMLTrackElement(const QualifiedName& tagName, Document* document)
42     : HTMLElement(tagName, document)
43 {
44     LOG(Media, "HTMLTrackElement::HTMLTrackElement - %p", this);
45     ASSERT(hasTagName(trackTag));
46 }
47
48 HTMLTrackElement::~HTMLTrackElement()
49 {
50 }
51
52 PassRefPtr<HTMLTrackElement> HTMLTrackElement::create(const QualifiedName& tagName, Document* document)
53 {
54     return adoptRef(new HTMLTrackElement(tagName, document));
55 }
56
57 void HTMLTrackElement::insertedIntoTree(bool deep)
58 {
59     HTMLElement::insertedIntoTree(deep);
60     Element* parent = parentElement();
61     if (parent && parent->isMediaElement()) {
62         // TODO(annacc):
63         // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
64     }
65 }
66
67 void HTMLTrackElement::willRemove()
68 {
69     Element* parent = parentElement();
70     if (parent && parent->isMediaElement()) {
71         // TODO(annacc):
72         // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
73     }
74     HTMLElement::willRemove();
75 }
76
77 KURL HTMLTrackElement::src() const
78 {
79     return document()->completeURL(fastGetAttribute(srcAttr));
80 }
81
82 void HTMLTrackElement::setSrc(const String& url)
83 {
84     setAttribute(srcAttr, url);
85 }
86
87 String HTMLTrackElement::kind() const
88 {
89     return fastGetAttribute(kindAttr);
90 }
91
92 void HTMLTrackElement::setKind(const String& kind)
93 {
94     setAttribute(kindAttr, kind);
95 }
96
97 String HTMLTrackElement::srclang() const
98 {
99     return fastGetAttribute(srclangAttr);
100 }
101
102 void HTMLTrackElement::setSrclang(const String& srclang)
103 {
104     setAttribute(srclangAttr, srclang);
105 }
106
107 String HTMLTrackElement::label() const
108 {
109     return fastGetAttribute(labelAttr);
110 }
111
112 void HTMLTrackElement::setLabel(const String& label)
113 {
114     setAttribute(labelAttr, label);
115 }
116
117 bool HTMLTrackElement::isDefault() const
118 {
119     return fastHasAttribute(defaultAttr);
120 }
121
122 void HTMLTrackElement::setIsDefault(bool isDefault)
123 {
124     setBooleanAttribute(defaultAttr, isDefault);
125 }
126
127 bool HTMLTrackElement::isURLAttribute(Attribute* attribute) const
128 {
129     return attribute->name() == srcAttr;
130 }
131
132 void HTMLTrackElement::load(ScriptExecutionContext* context)
133 {
134     m_track = LoadableTextTrack::create(kind(), label(), srclang(), isDefault());
135
136     if (fastHasAttribute(srcAttr))
137         m_track->load(getNonEmptyURLAttribute(srcAttr), context);
138 }
139
140 }
141
142 #endif