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

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

Issue 2489823002: Revert "Remove MediaStreamTrack.getSources()." (Closed)
Patch Set: rebase 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 c3fdcac03d9a95739e8dc2772a858074b57b66f2..290a18a9487ae4733eb822928c385f3fd1d73990 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"
@@ -146,6 +147,18 @@ blink::WebMediaDeviceInfo::MediaDeviceKind ToMediaDeviceKind(
}
}
+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;
} // namespace
@@ -283,6 +296,25 @@ void UserMediaClientImpl::requestMediaDevices(
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;
@@ -408,6 +440,34 @@ void UserMediaClientImpl::FinalizeEnumerateDevices(
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.
// The requested stream failed to be generated.
void UserMediaClientImpl::OnStreamGenerationFailed(
@@ -744,6 +804,12 @@ void UserMediaClientImpl::EnumerateDevicesSucceded(
request->requestSucceeded(devices);
}
+void UserMediaClientImpl::EnumerateSourcesSucceded(
+ blink::WebMediaStreamTrackSourcesRequest* request,
+ blink::WebVector<blink::WebSourceInfo>& sources) {
+ request->requestSucceeded(sources);
+}
+
const blink::WebMediaStreamSource* UserMediaClientImpl::FindLocalSource(
const StreamDeviceInfo& device) const {
for (LocalStreamSources::const_iterator it = local_sources_.begin();
« 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