Replace WTF::move with WTFMove
[WebKit-https.git] / Source / WebCore / html / track / WebVTTElement.cpp
1 /*
2  * Copyright (C) 2013 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 #include "config.h"
27
28 #if ENABLE(VIDEO_TRACK)
29
30 #include "WebVTTElement.h"
31
32 #include "HTMLElementFactory.h"
33 #include "TextTrack.h"
34
35 namespace WebCore {
36
37 static const QualifiedName& nodeTypeToTagName(WebVTTNodeType nodeType)
38 {
39     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, cTag, (nullAtom, "c", nullAtom));
40     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, vTag, (nullAtom, "v", nullAtom));
41     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, langTag, (nullAtom, "lang", nullAtom));
42     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, bTag, (nullAtom, "b", nullAtom));
43     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, uTag, (nullAtom, "u", nullAtom));
44     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, iTag, (nullAtom, "i", nullAtom));
45     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, rubyTag, (nullAtom, "ruby", nullAtom));
46     DEPRECATED_DEFINE_STATIC_LOCAL(QualifiedName, rtTag, (nullAtom, "rt", nullAtom));
47     switch (nodeType) {
48     case WebVTTNodeTypeClass:
49         return cTag;
50     case WebVTTNodeTypeItalic:
51         return iTag;
52     case WebVTTNodeTypeLanguage:
53         return langTag;
54     case WebVTTNodeTypeBold:
55         return bTag;
56     case WebVTTNodeTypeUnderline:
57         return uTag;
58     case WebVTTNodeTypeRuby:
59         return rubyTag;
60     case WebVTTNodeTypeRubyText:
61         return rtTag;
62     case WebVTTNodeTypeVoice:
63         return vTag;
64     case WebVTTNodeTypeNone:
65     default:
66         ASSERT_NOT_REACHED();
67         return cTag; // Make the compiler happy.
68     }
69 }
70
71 WebVTTElement::WebVTTElement(WebVTTNodeType nodeType, Document& document)
72     : Element(nodeTypeToTagName(nodeType), document, CreateElement)
73     , m_isPastNode(0)
74     , m_webVTTNodeType(nodeType)
75 {
76 }
77
78 Ref<WebVTTElement> WebVTTElement::create(WebVTTNodeType nodeType, Document& document)
79 {
80     return adoptRef(*new WebVTTElement(nodeType, document));
81 }
82
83 Ref<Element> WebVTTElement::cloneElementWithoutAttributesAndChildren(Document& targetDocument)
84 {
85     Ref<WebVTTElement> clone = create(static_cast<WebVTTNodeType>(m_webVTTNodeType), targetDocument);
86     clone->setLanguage(m_language);
87     return WTFMove(clone);
88 }
89
90 PassRefPtr<HTMLElement> WebVTTElement::createEquivalentHTMLElement(Document& document)
91 {
92     RefPtr<HTMLElement> htmlElement;
93
94     switch (m_webVTTNodeType) {
95     case WebVTTNodeTypeClass:
96     case WebVTTNodeTypeLanguage:
97     case WebVTTNodeTypeVoice:
98         htmlElement = HTMLElementFactory::createElement(HTMLNames::spanTag, document);
99         htmlElement->setAttribute(HTMLNames::titleAttr, getAttribute(voiceAttributeName()));
100         htmlElement->setAttribute(HTMLNames::langAttr, getAttribute(langAttributeName()));
101         break;
102     case WebVTTNodeTypeItalic:
103         htmlElement = HTMLElementFactory::createElement(HTMLNames::iTag, document);
104         break;
105     case WebVTTNodeTypeBold:
106         htmlElement = HTMLElementFactory::createElement(HTMLNames::bTag, document);
107         break;
108     case WebVTTNodeTypeUnderline:
109         htmlElement = HTMLElementFactory::createElement(HTMLNames::uTag, document);
110         break;
111     case WebVTTNodeTypeRuby:
112         htmlElement = HTMLElementFactory::createElement(HTMLNames::rubyTag, document);
113         break;
114     case WebVTTNodeTypeRubyText:
115         htmlElement = HTMLElementFactory::createElement(HTMLNames::rtTag, document);
116         break;
117     }
118
119     ASSERT(htmlElement);
120     if (htmlElement)
121         htmlElement->setAttribute(HTMLNames::classAttr, fastGetAttribute(HTMLNames::classAttr));
122     return htmlElement.release();
123 }
124
125 } // namespace WebCore
126
127 #endif