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

Unified Diff: content/renderer/media/media_stream_impl.cc

Issue 14346002: Connect webrtc MediaSourceInterface ready states with webkit WebMediaStreamSource (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase Created 7 years, 8 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: 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 ae9d31fa045b6b30e25c570b094fd55b01b98bfb..bf60ddbe22d51ba3e2331235c4cd4d064d4b7f9b 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -90,7 +90,7 @@ void CreateWebKitSourceVector(
type,
UTF8ToUTF16(devices[i].device.name));
webkit_sources[i].setExtraData(
- new content::MediaStreamSourceExtraData(devices[i]));
+ new content::MediaStreamSourceExtraData(devices[i], webkit_sources[i]));
webkit_sources[i].setDeviceId(UTF8ToUTF16(devices[i].device.id.c_str()));
}
}
@@ -306,11 +306,13 @@ void MediaStreamImpl::OnStreamGenerated(
CreateWebKitSourceVector(label, audio_array,
WebKit::WebMediaStreamSource::TypeAudio,
audio_source_vector);
+ request_info->audio_sources.assign(audio_source_vector);
WebKit::WebVector<WebKit::WebMediaStreamSource> video_source_vector(
video_array.size());
CreateWebKitSourceVector(label, video_array,
WebKit::WebMediaStreamSource::TypeVideo,
video_source_vector);
+ request_info->video_sources.assign(video_source_vector);
WebKit::WebUserMediaRequest* request = &(request_info->request);
WebKit::WebString webkit_label = UTF8ToUTF16(label);
@@ -560,8 +562,10 @@ MediaStreamImpl::CreateLocalAudioRenderer(
}
MediaStreamSourceExtraData::MediaStreamSourceExtraData(
- const StreamDeviceInfo& device_info)
- : device_info_(device_info) {
+ const StreamDeviceInfo& device_info,
+ const WebKit::WebMediaStreamSource& webkit_source)
+ : device_info_(device_info),
+ webkit_source_(webkit_source) {
}
MediaStreamSourceExtraData::MediaStreamSourceExtraData(
@@ -590,4 +594,35 @@ void MediaStreamExtraData::OnLocalStreamStop() {
stream_stop_callback_.Run(stream_->label());
}
+MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo()
+ : request_id(0), generated(false), frame(NULL), request() {
+}
+
+MediaStreamImpl::UserMediaRequestInfo::UserMediaRequestInfo(
+ int request_id,
+ WebKit::WebFrame* frame,
+ const WebKit::WebUserMediaRequest& request)
+ : request_id(request_id), generated(false), frame(frame),
+ request(request) {
+}
+
+MediaStreamImpl::UserMediaRequestInfo::~UserMediaRequestInfo() {
+ // Release the extra data field of all sources created by
+ // MediaStreamImpl for this request. This breaks the circular reference to
+ // WebKit::MediaStreamSource.
+ // TODO(tommyw): Remove this once WebKit::MediaStreamSource::Owner has been
+ // implemented to fully avoid a circular dependency.
+ for (size_t i = 0; i < audio_sources.size(); ++i) {
+ audio_sources[i].setReadyState(
+ WebKit::WebMediaStreamSource::ReadyStateEnded);
+ audio_sources[i].setExtraData(NULL);
+ }
+
+ for (size_t i = 0; i < video_sources.size(); ++i) {
+ video_sources[i].setReadyState(
+ WebKit::WebMediaStreamSource::ReadyStateEnded);
+ video_sources[i].setExtraData(NULL);
+ }
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698