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
35using namespace std;
36
37namespace WebCore {
38
39using namespace HTMLNames;
40
41inline 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
48PassRefPtr<HTMLTrackElement> HTMLTrackElement::create(const QualifiedName& tagName, Document* document)
49{
50    return adoptRef(new HTMLTrackElement(tagName, document));
51}
52
53void HTMLTrackElement::insertedIntoTree(bool deep)
54{
55    HTMLElement::insertedIntoTree(deep);
56    if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) {
57        // TODO(annacc):
58        // static_cast<HTMLMediaElement*>(parentNode())->trackWasAdded(this);
59    }
60}
61
62void HTMLTrackElement::willRemove()
63{
64    if (parentNode() && (parentNode()->hasTagName(audioTag) || parentNode()->hasTagName(videoTag))) {
65        // TODO(annacc):
66        // static_cast<HTMLMediaElement*>(parentNode())->trackWillBeRemoved(this);
67    }
68    HTMLElement::willRemove();
69}
70
71KURL HTMLTrackElement::src() const
72{
73    return document()->completeURL(getAttribute(srcAttr));
74}
75
76void HTMLTrackElement::setSrc(const String& url)
77{
78    setAttribute(srcAttr, url);
79}
80
81String HTMLTrackElement::kind() const
82{
83    return getAttribute(kindAttr);
84}
85
86void HTMLTrackElement::setKind(const String& kind)
87{
88    setAttribute(kindAttr, kind);
89}
90
91String HTMLTrackElement::srclang() const
92{
93    return getAttribute(srclangAttr);
94}
95
96void HTMLTrackElement::setSrclang(const String& srclang)
97{
98    setAttribute(srclangAttr, srclang);
99}
100
101String HTMLTrackElement::label() const
102{
103    return getAttribute(labelAttr);
104}
105
106void HTMLTrackElement::setLabel(const String& label)
107{
108    setAttribute(labelAttr, label);
109}
110
111bool HTMLTrackElement::isDefault() const
112{
113    return hasAttribute(defaultAttr);
114}
115
116void HTMLTrackElement::setIsDefault(bool isDefault)
117{
118    setBooleanAttribute(defaultAttr, isDefault);
119}
120
121bool HTMLTrackElement::isURLAttribute(Attribute* attribute) const
122{
123    return attribute->name() == srcAttr;
124}
125
126}
127
128#endif
129