Chromium Code Reviews| Index: Source/modules/mediastream/MediaStream.cpp |
| diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp |
| index 86ffd4fea04c9bc0b58388124190c96065b1f3af..e5a53fd916f004246ae7efade4385baad6900927 100644 |
| --- a/Source/modules/mediastream/MediaStream.cpp |
| +++ b/Source/modules/mediastream/MediaStream.cpp |
| @@ -27,6 +27,9 @@ |
| #include "modules/mediastream/MediaStream.h" |
| #include "bindings/core/v8/ExceptionState.h" |
| +#include "bindings/core/v8/ScriptValue.h" |
| +#include "bindings/modules/v8/V8MediaStream.h" |
| +#include "core/dom/DOMURL.h" |
| #include "core/dom/ExceptionCode.h" |
| #include "modules/mediastream/MediaStreamRegistry.h" |
| #include "modules/mediastream/MediaStreamTrackEvent.h" |
| @@ -54,6 +57,13 @@ static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV |
| trackVector.append(track); |
| } |
| +static MediaProvider* MediaProviderConverter(const ScriptValue& value) |
| +{ |
| + v8::Handle<v8::Value> v8Value(value.v8Value()); |
| + MediaStream* stream = V8MediaStream::toImplWithTypeCheck(value.isolate(), v8Value); |
|
sof
2014/09/19 06:26:23
return V8MediaStream::toImplWithTypeCheck(value.is
perkj_chrome
2014/09/19 10:48:06
Done.
|
| + return stream; |
| +} |
| + |
| MediaStream* MediaStream::create(ExecutionContext* context) |
| { |
| MediaStreamTrackVector audioTracks; |
| @@ -95,7 +105,8 @@ MediaStream* MediaStream::create(ExecutionContext* context, PassRefPtr<MediaStre |
| } |
| MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor) |
| - : ContextLifecycleObserver(context) |
| + : MediaProvider(EventTargetNames::MediaStream, bind<const ScriptValue&>(MediaProviderConverter)) |
| + , ContextLifecycleObserver(context) |
| , m_stopped(false) |
| , m_descriptor(streamDescriptor) |
| , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) |
| @@ -120,7 +131,8 @@ MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri |
| } |
| MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector& audioTracks, const MediaStreamTrackVector& videoTracks) |
| - : ContextLifecycleObserver(context) |
| + : MediaProvider(EventTargetNames::MediaStream, bind<const ScriptValue&>(MediaProviderConverter)) |
| + , ContextLifecycleObserver(context) |
| , m_stopped(false) |
| , m_scheduledEventTimer(this, &MediaStream::scheduledEventTimerFired) |
| { |
| @@ -147,6 +159,8 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector |
| MediaStream::~MediaStream() |
| { |
| + if (!m_objectUrl.isEmpty()) |
| + DOMURL::revokeObjectURL(executionContext(), m_objectUrl); |
|
sof
2014/09/19 06:26:23
(It'd be nice to have an auto-revocation public UR
perkj_chrome
2014/09/19 10:48:06
Sure,
Would that make sence even if we refactor M
sof
2014/09/19 13:06:11
Certainly, this wasn't meant as an actionable issu
|
| m_descriptor->setClient(0); |
| } |
| @@ -387,11 +401,19 @@ URLRegistry& MediaStream::registry() const |
| return MediaStreamRegistry::registry(); |
| } |
| +const String& MediaStream::getObjectUrl() |
| +{ |
| + if (m_objectUrl.isEmpty()) |
| + m_objectUrl = DOMURL::createPublicURL(executionContext(), this); |
| + return m_objectUrl; |
| +} |
| + |
| void MediaStream::trace(Visitor* visitor) |
| { |
| visitor->trace(m_audioTracks); |
| visitor->trace(m_videoTracks); |
| visitor->trace(m_scheduledEvents); |
| + MediaProvider::trace(visitor); |
| EventTargetWithInlineData::trace(visitor); |
| } |