Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1411)

Unified Diff: Source/modules/mediastream/MediaStream.cpp

Issue 827673002: Add MediaStream.active attribute (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add MediaStream.active attribute Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/mediastream/MediaStream.cpp
diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp
index 7d5caddfc43eeb992c04365b18a6fafb8fda69d2..625fa0cf007fb02bf8af7403b11656530d23c58d 100644
--- a/Source/modules/mediastream/MediaStream.cpp
+++ b/Source/modules/mediastream/MediaStream.cpp
@@ -117,6 +117,11 @@ MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri
newTrack->registerMediaStream(this);
m_videoTracks.append(newTrack);
}
+
+ if (emptyOrOnlyEndedTracks()) {
+ m_descriptor->setEnded();
perkj_chrome 2015/01/12 11:22:19 should setEnded be removed? If I understand the
+ m_descriptor->setActive(false);
+ }
}
MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector& audioTracks, const MediaStreamTrackVector& videoTracks)
@@ -143,6 +148,10 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector
m_audioTracks = audioTracks;
m_videoTracks = videoTracks;
+ if (emptyOrOnlyEndedTracks()) {
+ m_descriptor->setEnded();
+ m_descriptor->setActive(false);
+ }
}
MediaStream::~MediaStream()
@@ -150,6 +159,20 @@ MediaStream::~MediaStream()
m_descriptor->setClient(0);
}
+bool MediaStream::emptyOrOnlyEndedTracks()
+{
+ if (!m_audioTracks.size() && !m_videoTracks.size()) {
+ return true;
+ }
+ for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter !=
perkj_chrome 2015/01/12 11:22:19 it looks like this this line is not complete? At l
+ if (!iter->get()->ended())
+ return false;
+ for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter !=
+ if (!iter->get()->ended())
+ return false;
+ return true;
+}
+
bool MediaStream::ended() const
{
return m_stopped || m_descriptor->ended();
@@ -167,8 +190,8 @@ MediaStreamTrackVector MediaStream::getTracks()
void MediaStream::addTrack(MediaStreamTrack* track, ExceptionState& exceptionState)
{
- if (ended()) {
- exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
+ if (!active()) {
perkj_chrome 2015/01/12 11:22:19 Adding a track if the state is inactive should too
+ exceptionState.throwDOMException(InvalidStateError, "The MediaStream is inactive.");
return;
}
@@ -195,8 +218,8 @@ void MediaStream::addTrack(MediaStreamTrack* track, ExceptionState& exceptionSta
void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exceptionState)
{
- if (ended()) {
- exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished.");
+ if (!active()) {
+ exceptionState.throwDOMException(InvalidStateError, "The MediaStream is inactive.");
return;
}
@@ -224,8 +247,10 @@ void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exception
track->unregisterMediaStream(this);
m_descriptor->removeComponent(track->component());
- if (!m_audioTracks.size() && !m_videoTracks.size())
+ if (emptyOrOnlyEndedTracks()) {
m_descriptor->setEnded();
+ m_descriptor->setActive(false);
+ }
MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component());
}
@@ -282,10 +307,12 @@ void MediaStream::trackEnded()
void MediaStream::streamEnded()
{
- if (ended())
+ if (!active())
return;
+ m_descriptor->setActive(false);
m_descriptor->setEnded();
+ scheduleDispatchEvent(Event::create(EventTypeNames::inactive));
scheduleDispatchEvent(Event::create(EventTypeNames::ended));
}
@@ -293,6 +320,7 @@ void MediaStream::contextDestroyed()
{
ContextLifecycleObserver::contextDestroyed();
m_stopped = true;
+ m_descriptor->setActive(false);
}
const AtomicString& MediaStream::interfaceName() const
@@ -308,7 +336,7 @@ ExecutionContext* MediaStream::executionContext() const
void MediaStream::addRemoteTrack(MediaStreamComponent* component)
{
ASSERT(component);
- if (ended())
+ if (!active())
return;
MediaStreamTrack* track = MediaStreamTrack::create(executionContext(), component);

Powered by Google App Engine
This is Rietveld 408576698