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

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

Issue 2481263004: Revert of Remove MediaStreamTrack.getSources(). (Closed)
Patch Set: Created 4 years, 1 month 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/user_media_client_impl.cc
diff --git a/content/renderer/media/user_media_client_impl.cc b/content/renderer/media/user_media_client_impl.cc
index 29a9819980bc895ab2c2134a6ef8bf686e400dab..d4ea066fe24d555ee773a800d50907f67ab4b942 100644
--- a/content/renderer/media/user_media_client_impl.cc
+++ b/content/renderer/media/user_media_client_impl.cc
@@ -36,6 +36,7 @@
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h"
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
+#include "third_party/WebKit/public/platform/WebMediaStreamTrackSourcesRequest.h"
#include "third_party/WebKit/public/web/WebDocument.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h"
@@ -144,6 +145,18 @@
NOTREACHED();
return blink::WebMediaDeviceInfo::MediaDeviceKindAudioInput;
}
+}
+
+blink::WebSourceInfo::VideoFacingMode ToVideoFacingMode(
+ const std::string& device_label) {
+#if defined(OS_ANDROID)
+ if (device_label.find("front") != std::string::npos) {
+ return blink::WebSourceInfo::VideoFacingModeUser;
+ } else if (device_label.find("back") != std::string::npos) {
+ return blink::WebSourceInfo::VideoFacingModeEnvironment;
+ }
+#endif
+ return blink::WebSourceInfo::VideoFacingModeNone;
}
static int g_next_request_id = 0;
@@ -283,6 +296,25 @@
weak_factory_.GetWeakPtr(), media_devices_request));
}
+void UserMediaClientImpl::requestSources(
+ const blink::WebMediaStreamTrackSourcesRequest& sources_request) {
+ // We don't call UpdateWebRTCMethodCount() here to track the API count in UMA
+ // stats. This is instead counted in MediaStreamTrack::getSources in blink.
+ DCHECK(CalledOnValidThread());
+
+ // |sources_request| can't be mocked, so in tests it will be empty (the
+ // underlying pointer is null). In order to use this function in a test we
+ // need to check if it isNull.
+ url::Origin security_origin;
+ if (!sources_request.isNull())
+ security_origin = sources_request.origin();
+
+ GetMediaDevicesDispatcher()->EnumerateDevices(
+ true /* audio input */, true /* video input */, false /* audio output */,
+ security_origin, base::Bind(&UserMediaClientImpl::FinalizeGetSources,
+ weak_factory_.GetWeakPtr(), sources_request));
+}
+
void UserMediaClientImpl::setMediaDeviceChangeObserver(
const blink::WebMediaDeviceChangeObserver& observer) {
media_device_change_observer_ = observer;
@@ -393,6 +425,34 @@
}
EnumerateDevicesSucceded(&request, devices);
+}
+
+void UserMediaClientImpl::FinalizeGetSources(
+ blink::WebMediaStreamTrackSourcesRequest request,
+ const EnumerationResult& result) {
+ DCHECK_EQ(static_cast<size_t>(NUM_MEDIA_DEVICE_TYPES), result.size());
+
+ blink::WebVector<blink::WebSourceInfo> sources(
+ result[MEDIA_DEVICE_TYPE_AUDIO_INPUT].size() +
+ result[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size());
+ size_t index = 0;
+ for (const auto& device_info : result[MEDIA_DEVICE_TYPE_AUDIO_INPUT]) {
+ sources[index++].initialize(
+ blink::WebString::fromUTF8(device_info.device_id),
+ blink::WebSourceInfo::SourceKindAudio,
+ blink::WebString::fromUTF8(device_info.label),
+ blink::WebSourceInfo::VideoFacingModeNone);
+ }
+
+ for (const auto& device_info : result[MEDIA_DEVICE_TYPE_VIDEO_INPUT]) {
+ sources[index++].initialize(
+ blink::WebString::fromUTF8(device_info.device_id),
+ blink::WebSourceInfo::SourceKindVideo,
+ blink::WebString::fromUTF8(device_info.label),
+ ToVideoFacingMode(device_info.label));
+ }
+
+ EnumerateSourcesSucceded(&request, sources);
}
// Callback from MediaStreamDispatcher.
@@ -720,6 +780,12 @@
blink::WebMediaDevicesRequest* request,
blink::WebVector<blink::WebMediaDeviceInfo>& devices) {
request->requestSucceeded(devices);
+}
+
+void UserMediaClientImpl::EnumerateSourcesSucceded(
+ blink::WebMediaStreamTrackSourcesRequest* request,
+ blink::WebVector<blink::WebSourceInfo>& sources) {
+ request->requestSucceeded(sources);
}
const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource(
« no previous file with comments | « content/renderer/media/user_media_client_impl.h ('k') | content/renderer/media/user_media_client_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698