OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * Copyright (C) 2011 Ericsson AB. All rights reserved. | 3 * Copyright (C) 2011 Ericsson AB. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ExecutionContext* context,
MediaStreamComponent* component) | 41 PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ExecutionContext* context,
MediaStreamComponent* component) |
42 { | 42 { |
43 RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, comp
onent)); | 43 RefPtr<MediaStreamTrack> track = adoptRef(new MediaStreamTrack(context, comp
onent)); |
44 track->suspendIfNeeded(); | 44 track->suspendIfNeeded(); |
45 return track.release(); | 45 return track.release(); |
46 } | 46 } |
47 | 47 |
48 MediaStreamTrack::MediaStreamTrack(ExecutionContext* context, MediaStreamCompone
nt* component) | 48 MediaStreamTrack::MediaStreamTrack(ExecutionContext* context, MediaStreamCompone
nt* component) |
49 : ActiveDOMObject(context) | 49 : ActiveDOMObject(context) |
| 50 , m_readyState(MediaStreamSource::ReadyStateLive) |
50 , m_isIteratingObservers(false) | 51 , m_isIteratingObservers(false) |
51 , m_stopped(false) | 52 , m_stopped(false) |
52 , m_component(component) | 53 , m_component(component) |
53 { | 54 { |
54 ScriptWrappable::init(this); | 55 ScriptWrappable::init(this); |
55 m_component->source()->addObserver(this); | 56 m_component->source()->addObserver(this); |
56 } | 57 } |
57 | 58 |
58 MediaStreamTrack::~MediaStreamTrack() | 59 MediaStreamTrack::~MediaStreamTrack() |
59 { | 60 { |
(...skipping 26 matching lines...) Expand all Loading... |
86 return m_component->source()->name(); | 87 return m_component->source()->name(); |
87 } | 88 } |
88 | 89 |
89 bool MediaStreamTrack::enabled() const | 90 bool MediaStreamTrack::enabled() const |
90 { | 91 { |
91 return m_component->enabled(); | 92 return m_component->enabled(); |
92 } | 93 } |
93 | 94 |
94 void MediaStreamTrack::setEnabled(bool enabled) | 95 void MediaStreamTrack::setEnabled(bool enabled) |
95 { | 96 { |
96 if (m_stopped || enabled == m_component->enabled()) | 97 if (enabled == m_component->enabled()) |
97 return; | 98 return; |
98 | 99 |
99 m_component->setEnabled(enabled); | 100 m_component->setEnabled(enabled); |
100 | 101 |
101 MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_component.get(
)); | 102 if (!ended()) |
| 103 MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_component.
get()); |
102 } | 104 } |
103 | 105 |
104 String MediaStreamTrack::readyState() const | 106 String MediaStreamTrack::readyState() const |
105 { | 107 { |
106 if (m_stopped) | 108 if (ended()) |
107 return "ended"; | 109 return "ended"; |
108 | 110 |
109 switch (m_component->source()->readyState()) { | 111 switch (m_readyState) { |
110 case MediaStreamSource::ReadyStateLive: | 112 case MediaStreamSource::ReadyStateLive: |
111 return "live"; | 113 return "live"; |
112 case MediaStreamSource::ReadyStateMuted: | 114 case MediaStreamSource::ReadyStateMuted: |
113 return "muted"; | 115 return "muted"; |
114 case MediaStreamSource::ReadyStateEnded: | 116 case MediaStreamSource::ReadyStateEnded: |
115 return "ended"; | 117 return "ended"; |
116 } | 118 } |
117 | 119 |
118 ASSERT_NOT_REACHED(); | 120 ASSERT_NOT_REACHED(); |
119 return String(); | 121 return String(); |
120 } | 122 } |
121 | 123 |
122 void MediaStreamTrack::getSources(ExecutionContext* context, PassOwnPtr<MediaStr
eamTrackSourcesCallback> callback, ExceptionState& exceptionState) | 124 void MediaStreamTrack::getSources(ExecutionContext* context, PassOwnPtr<MediaStr
eamTrackSourcesCallback> callback, ExceptionState& exceptionState) |
123 { | 125 { |
124 RefPtr<MediaStreamTrackSourcesRequest> request = MediaStreamTrackSourcesRequ
estImpl::create(context->securityOrigin()->toString(), callback); | 126 RefPtr<MediaStreamTrackSourcesRequest> request = MediaStreamTrackSourcesRequ
estImpl::create(context->securityOrigin()->toString(), callback); |
125 if (!MediaStreamCenter::instance().getMediaStreamTrackSources(request.releas
e())) | 127 if (!MediaStreamCenter::instance().getMediaStreamTrackSources(request.releas
e())) |
126 exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::f
ailedToExecute("getSources", "MediaStreamTrack", "Functionality not implemented
yet")); | 128 exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::f
ailedToExecute("getSources", "MediaStreamTrack", "Functionality not implemented
yet")); |
127 } | 129 } |
128 | 130 |
129 void MediaStreamTrack::stopTrack(ExceptionState& exceptionState) | 131 void MediaStreamTrack::stopTrack(ExceptionState& exceptionState) |
130 { | 132 { |
131 if (ended()) | 133 if (ended()) |
132 return; | 134 return; |
133 | 135 |
| 136 m_readyState = MediaStreamSource::ReadyStateEnded; |
134 MediaStreamCenter::instance().didStopMediaStreamTrack(component()); | 137 MediaStreamCenter::instance().didStopMediaStreamTrack(component()); |
| 138 dispatchEvent(Event::create(EventTypeNames::ended)); |
| 139 propagateTrackEnded(); |
135 } | 140 } |
136 | 141 |
137 PassRefPtr<MediaStreamTrack> MediaStreamTrack::clone(ExecutionContext* context) | 142 PassRefPtr<MediaStreamTrack> MediaStreamTrack::clone(ExecutionContext* context) |
138 { | 143 { |
139 RefPtr<MediaStreamComponent> clonedComponent = MediaStreamComponent::create(
component()->source()); | 144 RefPtr<MediaStreamComponent> clonedComponent = MediaStreamComponent::create(
component()->source()); |
140 RefPtr<MediaStreamTrack> clonedTrack = MediaStreamTrack::create(context, clo
nedComponent.get()); | 145 RefPtr<MediaStreamTrack> clonedTrack = MediaStreamTrack::create(context, clo
nedComponent.get()); |
141 MediaStreamCenter::instance().didCreateMediaStreamTrack(clonedComponent.get(
)); | 146 MediaStreamCenter::instance().didCreateMediaStreamTrack(clonedComponent.get(
)); |
142 return clonedTrack.release(); | 147 return clonedTrack.release(); |
143 } | 148 } |
144 | 149 |
145 bool MediaStreamTrack::ended() const | 150 bool MediaStreamTrack::ended() const |
146 { | 151 { |
147 return m_stopped || (m_component->source()->readyState() == MediaStreamSourc
e::ReadyStateEnded); | 152 return m_stopped || (m_readyState == MediaStreamSource::ReadyStateEnded); |
148 } | 153 } |
149 | 154 |
150 void MediaStreamTrack::sourceChangedState() | 155 void MediaStreamTrack::sourceChangedState() |
151 { | 156 { |
152 if (m_stopped) | 157 if (ended()) |
153 return; | 158 return; |
154 | 159 |
155 switch (m_component->source()->readyState()) { | 160 m_readyState = m_component->source()->readyState(); |
| 161 switch (m_readyState) { |
156 case MediaStreamSource::ReadyStateLive: | 162 case MediaStreamSource::ReadyStateLive: |
157 dispatchEvent(Event::create(EventTypeNames::unmute)); | 163 dispatchEvent(Event::create(EventTypeNames::unmute)); |
158 break; | 164 break; |
159 case MediaStreamSource::ReadyStateMuted: | 165 case MediaStreamSource::ReadyStateMuted: |
160 dispatchEvent(Event::create(EventTypeNames::mute)); | 166 dispatchEvent(Event::create(EventTypeNames::mute)); |
161 break; | 167 break; |
162 case MediaStreamSource::ReadyStateEnded: | 168 case MediaStreamSource::ReadyStateEnded: |
163 dispatchEvent(Event::create(EventTypeNames::ended)); | 169 dispatchEvent(Event::create(EventTypeNames::ended)); |
164 propagateTrackEnded(); | 170 propagateTrackEnded(); |
165 break; | 171 break; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 { | 214 { |
209 return EventTargetNames::MediaStreamTrack; | 215 return EventTargetNames::MediaStreamTrack; |
210 } | 216 } |
211 | 217 |
212 ExecutionContext* MediaStreamTrack::executionContext() const | 218 ExecutionContext* MediaStreamTrack::executionContext() const |
213 { | 219 { |
214 return ActiveDOMObject::executionContext(); | 220 return ActiveDOMObject::executionContext(); |
215 } | 221 } |
216 | 222 |
217 } // namespace WebCore | 223 } // namespace WebCore |
OLD | NEW |