• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 Google Inc.  All rights reserved.
3  * Copyright (C) 2011, 2012, 2013 Apple Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  *     * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *     * Redistributions in binary form must reproduce the above
12  * copyright notice, this list of conditions and the following disclaimer
13  * in the documentation and/or other materials provided with the
14  * distribution.
15  *     * Neither the name of Google Inc. nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include "config.h"
33 #include "core/html/track/TextTrackCue.h"
34 
35 #include "bindings/v8/ExceptionMessages.h"
36 #include "bindings/v8/ExceptionStatePlaceholder.h"
37 #include "core/events/Event.h"
38 #include "core/html/track/TextTrack.h"
39 #include "core/html/track/TextTrackCueList.h"
40 
41 namespace WebCore {
42 
43 static const int invalidCueIndex = -1;
44 
TextTrackCue(double start,double end)45 TextTrackCue::TextTrackCue(double start, double end)
46     : m_startTime(start)
47     , m_endTime(end)
48     , m_cueIndex(invalidCueIndex)
49     , m_track(nullptr)
50     , m_isActive(false)
51     , m_pauseOnExit(false)
52 {
53 }
54 
cueWillChange()55 void TextTrackCue::cueWillChange()
56 {
57     if (m_track)
58         m_track->cueWillChange(this);
59 }
60 
cueDidChange()61 void TextTrackCue::cueDidChange()
62 {
63     if (m_track)
64         m_track->cueDidChange(this);
65 }
66 
track() const67 TextTrack* TextTrackCue::track() const
68 {
69     return m_track;
70 }
71 
setTrack(TextTrack * track)72 void TextTrackCue::setTrack(TextTrack* track)
73 {
74     m_track = track;
75 }
76 
owner() const77 Node* TextTrackCue::owner() const
78 {
79     return m_track ? m_track->owner() : 0;
80 }
81 
setId(const AtomicString & id)82 void TextTrackCue::setId(const AtomicString& id)
83 {
84     if (m_id == id)
85         return;
86 
87     cueWillChange();
88     m_id = id;
89     cueDidChange();
90 }
91 
setStartTime(double value)92 void TextTrackCue::setStartTime(double value)
93 {
94     // TODO(93143): Add spec-compliant behavior for negative time values.
95     if (m_startTime == value || value < 0)
96         return;
97 
98     cueWillChange();
99     m_startTime = value;
100     cueDidChange();
101 }
102 
setEndTime(double value)103 void TextTrackCue::setEndTime(double value)
104 {
105     // TODO(93143): Add spec-compliant behavior for negative time values.
106     if (m_endTime == value || value < 0)
107         return;
108 
109     cueWillChange();
110     m_endTime = value;
111     cueDidChange();
112 }
113 
setPauseOnExit(bool value)114 void TextTrackCue::setPauseOnExit(bool value)
115 {
116     if (m_pauseOnExit == value)
117         return;
118 
119     cueWillChange();
120     m_pauseOnExit = value;
121     cueDidChange();
122 }
123 
cueIndex()124 int TextTrackCue::cueIndex()
125 {
126     if (m_cueIndex == invalidCueIndex)
127         m_cueIndex = track()->cues()->getCueIndex(this);
128 
129     return m_cueIndex;
130 }
131 
invalidateCueIndex()132 void TextTrackCue::invalidateCueIndex()
133 {
134     m_cueIndex = invalidCueIndex;
135 }
136 
dispatchEvent(PassRefPtrWillBeRawPtr<Event> event)137 bool TextTrackCue::dispatchEvent(PassRefPtrWillBeRawPtr<Event> event)
138 {
139     // When a TextTrack's mode is disabled: no cues are active, no events fired.
140     if (!track() || track()->mode() == TextTrack::disabledKeyword())
141         return false;
142 
143     return EventTarget::dispatchEvent(event);
144 }
145 
isActive()146 bool TextTrackCue::isActive()
147 {
148     return m_isActive && track() && track()->mode() != TextTrack::disabledKeyword();
149 }
150 
setIsActive(bool active)151 void TextTrackCue::setIsActive(bool active)
152 {
153     m_isActive = active;
154 
155     // Remove the display tree as soon as the cue becomes inactive.
156     if (!active)
157         removeDisplayTree();
158 }
159 
interfaceName() const160 const AtomicString& TextTrackCue::interfaceName() const
161 {
162     return EventTargetNames::TextTrackCue;
163 }
164 
trace(Visitor * visitor)165 void TextTrackCue::trace(Visitor* visitor)
166 {
167     visitor->trace(m_track);
168     EventTargetWithInlineData::trace(visitor);
169 }
170 
171 } // namespace WebCore
172