| 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 25 matching lines...) Expand all Loading... |
| 36 #include "modules/mediastream/MediaStreamTrackSourcesRequestImpl.h" | 36 #include "modules/mediastream/MediaStreamTrackSourcesRequestImpl.h" |
| 37 #include "modules/mediastream/UserMediaController.h" | 37 #include "modules/mediastream/UserMediaController.h" |
| 38 #include "platform/mediastream/MediaStreamCenter.h" | 38 #include "platform/mediastream/MediaStreamCenter.h" |
| 39 #include "platform/mediastream/MediaStreamComponent.h" | 39 #include "platform/mediastream/MediaStreamComponent.h" |
| 40 #include "public/platform/WebSourceInfo.h" | 40 #include "public/platform/WebSourceInfo.h" |
| 41 | 41 |
| 42 namespace blink { | 42 namespace blink { |
| 43 | 43 |
| 44 MediaStreamTrack* MediaStreamTrack::create(ExecutionContext* context, MediaStrea
mComponent* component) | 44 MediaStreamTrack* MediaStreamTrack::create(ExecutionContext* context, MediaStrea
mComponent* component) |
| 45 { | 45 { |
| 46 MediaStreamTrack* track = new MediaStreamTrack(context, component); | 46 return new MediaStreamTrack(context, component); |
| 47 track->suspendIfNeeded(); | |
| 48 return track; | |
| 49 } | 47 } |
| 50 | 48 |
| 51 MediaStreamTrack::MediaStreamTrack(ExecutionContext* context, MediaStreamCompone
nt* component) | 49 MediaStreamTrack::MediaStreamTrack(ExecutionContext* context, MediaStreamCompone
nt* component) |
| 52 : ActiveDOMObject(context) | 50 : ContextLifecycleObserver(context) |
| 53 , m_readyState(MediaStreamSource::ReadyStateLive) | 51 , m_readyState(MediaStreamSource::ReadyStateLive) |
| 54 , m_isIteratingRegisteredMediaStreams(false) | 52 , m_isIteratingRegisteredMediaStreams(false) |
| 55 , m_stopped(false) | |
| 56 , m_component(component) | 53 , m_component(component) |
| 57 { | 54 { |
| 58 m_component->source()->addObserver(this); | 55 m_component->source()->addObserver(this); |
| 59 } | 56 } |
| 60 | 57 |
| 61 MediaStreamTrack::~MediaStreamTrack() | 58 MediaStreamTrack::~MediaStreamTrack() |
| 62 { | 59 { |
| 63 } | 60 } |
| 64 | 61 |
| 65 String MediaStreamTrack::kind() const | 62 String MediaStreamTrack::kind() const |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 MediaStreamTrack* MediaStreamTrack::clone(ExecutionContext* context) | 161 MediaStreamTrack* MediaStreamTrack::clone(ExecutionContext* context) |
| 165 { | 162 { |
| 166 MediaStreamComponent* clonedComponent = MediaStreamComponent::create(compone
nt()->source()); | 163 MediaStreamComponent* clonedComponent = MediaStreamComponent::create(compone
nt()->source()); |
| 167 MediaStreamTrack* clonedTrack = MediaStreamTrack::create(context, clonedComp
onent); | 164 MediaStreamTrack* clonedTrack = MediaStreamTrack::create(context, clonedComp
onent); |
| 168 MediaStreamCenter::instance().didCreateMediaStreamTrack(clonedComponent); | 165 MediaStreamCenter::instance().didCreateMediaStreamTrack(clonedComponent); |
| 169 return clonedTrack; | 166 return clonedTrack; |
| 170 } | 167 } |
| 171 | 168 |
| 172 bool MediaStreamTrack::ended() const | 169 bool MediaStreamTrack::ended() const |
| 173 { | 170 { |
| 174 return m_stopped || (m_readyState == MediaStreamSource::ReadyStateEnded); | 171 return !executionContext() || (m_readyState == MediaStreamSource::ReadyState
Ended); |
| 175 } | 172 } |
| 176 | 173 |
| 177 void MediaStreamTrack::sourceChangedState() | 174 void MediaStreamTrack::sourceChangedState() |
| 178 { | 175 { |
| 179 if (ended()) | 176 if (ended()) |
| 180 return; | 177 return; |
| 181 | 178 |
| 182 m_readyState = m_component->source()->readyState(); | 179 m_readyState = m_component->source()->readyState(); |
| 183 switch (m_readyState) { | 180 switch (m_readyState) { |
| 184 case MediaStreamSource::ReadyStateLive: | 181 case MediaStreamSource::ReadyStateLive: |
| (...skipping 13 matching lines...) Expand all Loading... |
| 198 | 195 |
| 199 void MediaStreamTrack::propagateTrackEnded() | 196 void MediaStreamTrack::propagateTrackEnded() |
| 200 { | 197 { |
| 201 RELEASE_ASSERT(!m_isIteratingRegisteredMediaStreams); | 198 RELEASE_ASSERT(!m_isIteratingRegisteredMediaStreams); |
| 202 m_isIteratingRegisteredMediaStreams = true; | 199 m_isIteratingRegisteredMediaStreams = true; |
| 203 for (HeapHashSet<Member<MediaStream>>::iterator iter = m_registeredMediaStre
ams.begin(); iter != m_registeredMediaStreams.end(); ++iter) | 200 for (HeapHashSet<Member<MediaStream>>::iterator iter = m_registeredMediaStre
ams.begin(); iter != m_registeredMediaStreams.end(); ++iter) |
| 204 (*iter)->trackEnded(); | 201 (*iter)->trackEnded(); |
| 205 m_isIteratingRegisteredMediaStreams = false; | 202 m_isIteratingRegisteredMediaStreams = false; |
| 206 } | 203 } |
| 207 | 204 |
| 208 void MediaStreamTrack::stop() | |
| 209 { | |
| 210 m_stopped = true; | |
| 211 } | |
| 212 | |
| 213 bool MediaStreamTrack::hasPendingActivity() const | 205 bool MediaStreamTrack::hasPendingActivity() const |
| 214 { | 206 { |
| 215 // If 'ended' listeners exist and the object hasn't yet reached | 207 // If 'ended' listeners exist and the object hasn't yet reached |
| 216 // that state, keep the object alive. | 208 // that state, keep the object alive. |
| 217 // | 209 // |
| 218 // An otherwise unreachable MediaStreamTrack object in an non-ended | 210 // An otherwise unreachable MediaStreamTrack object in an non-ended |
| 219 // state will otherwise indirectly be transitioned to the 'ended' state | 211 // state will otherwise indirectly be transitioned to the 'ended' state |
| 220 // while finalizing m_component. Which dispatches an 'ended' event, | 212 // while finalizing m_component. Which dispatches an 'ended' event, |
| 221 // referring to this object as the target. If this object is then GCed | 213 // referring to this object as the target. If this object is then GCed |
| 222 // at the same time, v8 objects will retain (wrapper) references to | 214 // at the same time, v8 objects will retain (wrapper) references to |
| (...skipping 24 matching lines...) Expand all Loading... |
| 247 m_registeredMediaStreams.remove(iter); | 239 m_registeredMediaStreams.remove(iter); |
| 248 } | 240 } |
| 249 | 241 |
| 250 const AtomicString& MediaStreamTrack::interfaceName() const | 242 const AtomicString& MediaStreamTrack::interfaceName() const |
| 251 { | 243 { |
| 252 return EventTargetNames::MediaStreamTrack; | 244 return EventTargetNames::MediaStreamTrack; |
| 253 } | 245 } |
| 254 | 246 |
| 255 ExecutionContext* MediaStreamTrack::executionContext() const | 247 ExecutionContext* MediaStreamTrack::executionContext() const |
| 256 { | 248 { |
| 257 return ActiveDOMObject::executionContext(); | 249 return ContextLifecycleObserver::executionContext(); |
| 258 } | 250 } |
| 259 | 251 |
| 260 DEFINE_TRACE(MediaStreamTrack) | 252 DEFINE_TRACE(MediaStreamTrack) |
| 261 { | 253 { |
| 262 visitor->trace(m_registeredMediaStreams); | 254 visitor->trace(m_registeredMediaStreams); |
| 263 visitor->trace(m_component); | 255 visitor->trace(m_component); |
| 264 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStreamTrack>::trace
(visitor); | 256 RefCountedGarbageCollectedEventTargetWithInlineData<MediaStreamTrack>::trace
(visitor); |
| 265 ActiveDOMObject::trace(visitor); | 257 ContextLifecycleObserver::trace(visitor); |
| 266 } | 258 } |
| 267 | 259 |
| 268 } // namespace blink | 260 } // namespace blink |
| OLD | NEW |