Index: Source/modules/mediastream/MediaStream.cpp |
diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp |
index 86ffd4fea04c9bc0b58388124190c96065b1f3af..faad527ed9ba8b34e3770a81a49dfb347ff59742 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,15 @@ 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/18 07:33:17
Just return this directly --
return V8MediaStre
perkj_chrome
2014/09/18 14:47:09
Done.
|
+ if (!stream) |
+ return nullptr; |
+ return stream; |
+} |
+ |
MediaStream* MediaStream::create(ExecutionContext* context) |
{ |
MediaStreamTrackVector audioTracks; |
@@ -95,7 +107,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 +133,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 +161,8 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector |
MediaStream::~MediaStream() |
{ |
+ if (!m_objectUrl.isEmpty()) |
+ DOMURL::revokeObjectURL(executionContext(), m_objectUrl); |
m_descriptor->setClient(0); |
} |
@@ -387,6 +403,13 @@ URLRegistry& MediaStream::registry() const |
return MediaStreamRegistry::registry(); |
} |
+const String& MediaStream::getObjectUrl() |
+{ |
+ if (m_objectUrl.isEmpty()) |
+ m_objectUrl = m_objectUrl = DOMURL::createPublicURL(executionContext(), this); |
sof
2014/09/18 07:33:17
"m_objectUrl = m_objectUrl" => "m_objectUrl" ?
sof
2014/09/18 07:33:17
Should this be using URLMediaStream::createObjectU
perkj_chrome
2014/09/18 14:47:09
good question... Sorry.
perkj_chrome
2014/09/18 14:47:09
It can- but since I use DOMURL::revokeObjectURL I
|
+ return m_objectUrl; |
+} |
+ |
void MediaStream::trace(Visitor* visitor) |
{ |
visitor->trace(m_audioTracks); |