Index: content/renderer/media/media_stream_impl.cc |
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc |
index f3cf45fc18ef98c41fa2fd69faf836a01e702a3d..365faa1cc3abdfed019694ffe27bae7f7fdc5913 100644 |
--- a/content/renderer/media/media_stream_impl.cc |
+++ b/content/renderer/media/media_stream_impl.cc |
@@ -69,18 +69,11 @@ MediaStreamImpl::MediaStreamImpl( |
MediaStreamImpl::~MediaStreamImpl() { |
} |
-void MediaStreamImpl::StopLocalMediaStream( |
- const WebKit::WebMediaStreamDescriptor& stream) { |
- DVLOG(1) << "MediaStreamImpl::StopLocalMediaStream"; |
- |
- MediaStreamExtraData* extra_data = |
- static_cast<MediaStreamExtraData*>(stream.extraData()); |
- if (extra_data && extra_data->local_stream()) { |
- media_stream_dispatcher_->StopStream(extra_data->local_stream()->label()); |
- local_media_streams_.erase(extra_data->local_stream()->label()); |
- } else { |
- NOTREACHED(); |
- } |
+void MediaStreamImpl::OnLocalMediaStreamStop( |
+ const std::string& label) { |
+ DVLOG(1) << "MediaStreamImpl::OnLocalMediaStreamStop"; |
+ media_stream_dispatcher_->StopStream(label); |
+ local_media_streams_.erase(label); |
} |
void MediaStreamImpl::requestUserMedia( |
@@ -205,7 +198,9 @@ void MediaStreamImpl::OnStreamGenerated( |
description.initialize(webkit_label, audio_source_vector, |
video_source_vector); |
- if (!dependency_factory_->CreateNativeLocalMediaStream(&description)) { |
+ if (!dependency_factory_->CreateNativeLocalMediaStream( |
+ &description, base::Bind( |
+ &MediaStreamImpl::OnLocalMediaStreamStop, base::Unretained(this)))) { |
DVLOG(1) << "Failed to create native stream in OnStreamGenerated."; |
media_stream_dispatcher_->StopStream(label); |
it->second.request_.requestFailed(); |
@@ -357,9 +352,21 @@ MediaStreamExtraData::MediaStreamExtraData( |
webrtc::MediaStreamInterface* remote_stream) |
: remote_stream_(remote_stream) { |
} |
+ |
MediaStreamExtraData::MediaStreamExtraData( |
webrtc::LocalMediaStreamInterface* local_stream) |
: local_stream_(local_stream) { |
} |
+ |
MediaStreamExtraData::~MediaStreamExtraData() { |
} |
+ |
+void MediaStreamExtraData::SetLocalStreamStopCallback( |
+ const StreamStopCallback& stop_callback) { |
+ stream_stop_callback_ = stop_callback; |
+} |
+ |
+void MediaStreamExtraData::OnLocalStreamStop() { |
+ if (!stream_stop_callback_.is_null()) |
+ stream_stop_callback_.Run(local_stream_->label()); |
+} |