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

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

Issue 2941563002: Enable new getUserMedia audio constraints algorithm behind a flag. (Closed)
Patch Set: remove vertical space from DEPS Created 3 years, 6 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
« no previous file with comments | « content/renderer/media/user_media_client_impl.cc ('k') | content/renderer/media/video_track_adapter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/media/user_media_client_impl_unittest.cc
diff --git a/content/renderer/media/user_media_client_impl_unittest.cc b/content/renderer/media/user_media_client_impl_unittest.cc
index 88476316fbfac9f92d37ad54cf23884e08f7b815..b5505f07521a1df9199ec43878b2e87f58628814 100644
--- a/content/renderer/media/user_media_client_impl_unittest.cc
+++ b/content/renderer/media/user_media_client_impl_unittest.cc
@@ -13,15 +13,21 @@
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_feature_list.h"
#include "content/child/child_process.h"
#include "content/common/media/media_devices.h"
+#include "content/public/common/content_features.h"
#include "content/renderer/media/media_stream.h"
+#include "content/renderer/media/media_stream_audio_processor_options.h"
#include "content/renderer/media/media_stream_audio_source.h"
+#include "content/renderer/media/media_stream_constraints_util.h"
+#include "content/renderer/media/media_stream_constraints_util_video_content.h"
#include "content/renderer/media/media_stream_track.h"
#include "content/renderer/media/mock_constraint_factory.h"
#include "content/renderer/media/mock_media_stream_dispatcher.h"
#include "content/renderer/media/mock_media_stream_video_source.h"
#include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory.h"
+#include "media/audio/audio_device_description.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h"
@@ -47,7 +53,6 @@ blink::WebMediaConstraints CreateDeviceConstraints(
const char* basic_ideal_value = nullptr,
const char* advanced_exact_value = nullptr) {
MockConstraintFactory factory;
- blink::WebMediaTrackConstraintSet basic;
if (basic_exact_value) {
factory.basic().device_id.SetExact(
blink::WebString::FromUTF8(basic_exact_value));
@@ -161,13 +166,43 @@ class MockMediaDevicesDispatcherHost
void GetAudioInputCapabilities(
GetAudioInputCapabilitiesCallback client_callback) override {
- NOTREACHED();
+ if (IsOldAudioConstraints())
+ NOTREACHED();
+
+ std::vector<::mojom::AudioInputDeviceCapabilitiesPtr> result;
+ ::mojom::AudioInputDeviceCapabilitiesPtr device =
+ ::mojom::AudioInputDeviceCapabilities::New();
+ device->device_id = media::AudioDeviceDescription::kDefaultDeviceId;
+ device->parameters = audio_parameters_;
+ result.push_back(std::move(device));
+
+ device = ::mojom::AudioInputDeviceCapabilities::New();
+ device->device_id = kFakeAudioInputDeviceId1;
+ device->parameters = audio_parameters_;
+ result.push_back(std::move(device));
+
+ device = ::mojom::AudioInputDeviceCapabilities::New();
+ device->device_id = kFakeAudioInputDeviceId2;
+ device->parameters = audio_parameters_;
+ result.push_back(std::move(device));
+
+ std::move(client_callback).Run(std::move(result));
+ }
+
+ media::AudioParameters& AudioParameters() { return audio_parameters_; }
+
+ void ResetAudioParameters() {
+ audio_parameters_ = media::AudioParameters::UnavailableDeviceParams();
}
MOCK_METHOD2(SubscribeDeviceChangeNotifications,
void(MediaDeviceType type, uint32_t subscription_id));
MOCK_METHOD2(UnsubscribeDeviceChangeNotifications,
void(MediaDeviceType type, uint32_t subscription_id));
+
+ private:
+ media::AudioParameters audio_parameters_ =
+ media::AudioParameters::UnavailableDeviceParams();
};
class UserMediaClientImplUnderTest : public UserMediaClientImpl {
@@ -221,7 +256,6 @@ class UserMediaClientImplUnderTest : public UserMediaClientImpl {
}
void GetUserMediaRequestFailed(
- blink::WebUserMediaRequest request_info,
content::MediaStreamRequestResult result,
const blink::WebString& result_name) override {
last_generated_stream_.Reset();
@@ -306,7 +340,15 @@ class UserMediaClientImplUnderTest : public UserMediaClientImpl {
content::MediaStreamRequestResult error_reason() const { return result_; }
blink::WebString error_name() const { return result_name_; }
+ AudioCaptureSettings AudioSettings() const {
+ return AudioCaptureSettingsForTesting();
+ }
+ VideoCaptureSettings VideoSettings() const {
+ return VideoCaptureSettingsForTesting();
+ }
+
// Access to the request queue for testing.
+ // TODO(guidou): Remove this function. http://crbug.com/704608
bool UserMediaRequestHasAutomaticDeviceSelection() {
base::Optional<bool> enabled =
AutomaticOutputDeviceSelectionEnabledForCurrentRequest();
@@ -325,11 +367,19 @@ class UserMediaClientImplUnderTest : public UserMediaClientImpl {
MockMediaStreamVideoCapturerSource* video_source_;
};
-class UserMediaClientImplTest : public ::testing::Test {
+class UserMediaClientImplTest : public ::testing::TestWithParam<bool> {
public:
UserMediaClientImplTest()
: binding_user_media(&media_devices_dispatcher_),
- binding_event_dispatcher_(&media_devices_dispatcher_) {}
+ binding_event_dispatcher_(&media_devices_dispatcher_) {
+ if (GetParam()) {
+ scoped_feature_list_.InitAndEnableFeature(
+ features::kMediaStreamOldAudioConstraints);
+ } else {
+ scoped_feature_list_.InitAndDisableFeature(
+ features::kMediaStreamOldAudioConstraints);
+ }
+ }
void SetUp() override {
// Create our test object.
@@ -463,16 +513,18 @@ class UserMediaClientImplTest : public ::testing::Test {
std::unique_ptr<UserMediaClientImplUnderTest> user_media_client_impl_;
std::unique_ptr<MockPeerConnectionDependencyFactory> dependency_factory_;
+ // TODO(guidou): Remove this field. http://crbug.com/706408
+ base::test::ScopedFeatureList scoped_feature_list_;
};
-TEST_F(UserMediaClientImplTest, GenerateMediaStream) {
+TEST_P(UserMediaClientImplTest, GenerateMediaStream) {
// Generate a stream with both audio and video.
blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
}
// Test that the same source object is used if two MediaStreams are generated
// using the same source.
-TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithSameSource) {
+TEST_P(UserMediaClientImplTest, GenerateTwoMediaStreamsWithSameSource) {
blink::WebMediaStream desc1 = RequestLocalMediaStream();
blink::WebMediaStream desc2 = RequestLocalMediaStream();
@@ -499,7 +551,7 @@ TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithSameSource) {
// Test that the same source object is not used if two MediaStreams are
// generated using different sources.
-TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithDifferentSources) {
+TEST_P(UserMediaClientImplTest, GenerateTwoMediaStreamsWithDifferentSources) {
blink::WebMediaStream desc1 = RequestLocalMediaStream();
// Make sure another device is selected (another |session_id|) in the next
// gUM request.
@@ -527,7 +579,7 @@ TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithDifferentSources) {
MediaStreamAudioSource::From(desc2_audio_tracks[0].Source()));
}
-TEST_F(UserMediaClientImplTest, StopLocalTracks) {
+TEST_P(UserMediaClientImplTest, StopLocalTracks) {
// Generate a stream with both audio and video.
blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
@@ -548,7 +600,7 @@ TEST_F(UserMediaClientImplTest, StopLocalTracks) {
// MediaStream is stopped if there are two MediaStreams with tracks using the
// same device. The source is stopped
// if there are no more MediaStream tracks using the device.
-TEST_F(UserMediaClientImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) {
+TEST_P(UserMediaClientImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) {
// Generate a stream with both audio and video.
blink::WebMediaStream desc1 = RequestLocalMediaStream();
blink::WebMediaStream desc2 = RequestLocalMediaStream();
@@ -578,7 +630,7 @@ TEST_F(UserMediaClientImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) {
EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
}
-TEST_F(UserMediaClientImplTest, StopSourceWhenMediaStreamGoesOutOfScope) {
+TEST_P(UserMediaClientImplTest, StopSourceWhenMediaStreamGoesOutOfScope) {
// Generate a stream with both audio and video.
RequestLocalMediaStream();
// Makes sure the test itself don't hold a reference to the created
@@ -593,7 +645,7 @@ TEST_F(UserMediaClientImplTest, StopSourceWhenMediaStreamGoesOutOfScope) {
// Test that the MediaStreams are deleted if a new document is loaded in the
// frame.
-TEST_F(UserMediaClientImplTest, LoadNewDocumentInFrame) {
+TEST_P(UserMediaClientImplTest, LoadNewDocumentInFrame) {
// Test a stream with both audio and video.
blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
blink::WebMediaStream desc2 = RequestLocalMediaStream();
@@ -604,7 +656,7 @@ TEST_F(UserMediaClientImplTest, LoadNewDocumentInFrame) {
}
// This test what happens if a video source to a MediaSteam fails to start.
-TEST_F(UserMediaClientImplTest, MediaVideoSourceFailToStart) {
+TEST_P(UserMediaClientImplTest, MediaVideoSourceFailToStart) {
user_media_client_impl_->RequestUserMediaForTest();
FakeMediaStreamDispatcherRequestUserMediaComplete();
FailToStartMockedVideoSource();
@@ -619,7 +671,7 @@ TEST_F(UserMediaClientImplTest, MediaVideoSourceFailToStart) {
}
// This test what happens if an audio source fail to initialize.
-TEST_F(UserMediaClientImplTest, MediaAudioSourceFailToInitialize) {
+TEST_P(UserMediaClientImplTest, MediaAudioSourceFailToInitialize) {
user_media_client_impl_->SetCreateSourceThatFails(true);
user_media_client_impl_->RequestUserMediaForTest();
FakeMediaStreamDispatcherRequestUserMediaComplete();
@@ -636,7 +688,7 @@ TEST_F(UserMediaClientImplTest, MediaAudioSourceFailToInitialize) {
// This test what happens if UserMediaClientImpl is deleted before a source has
// started.
-TEST_F(UserMediaClientImplTest, MediaStreamImplShutDown) {
+TEST_P(UserMediaClientImplTest, MediaStreamImplShutDown) {
user_media_client_impl_->RequestUserMediaForTest();
FakeMediaStreamDispatcherRequestUserMediaComplete();
EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
@@ -647,7 +699,7 @@ TEST_F(UserMediaClientImplTest, MediaStreamImplShutDown) {
// This test what happens if a new document is loaded in the frame while the
// MediaStream is being generated by the MediaStreamDispatcher.
-TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) {
+TEST_P(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) {
user_media_client_impl_->RequestUserMediaForTest();
LoadNewDocumentInFrame();
EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
@@ -659,7 +711,7 @@ TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) {
// This test what happens if a newdocument is loaded in the frame while the
// sources are being started.
-TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) {
+TEST_P(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) {
user_media_client_impl_->RequestUserMediaForTest();
FakeMediaStreamDispatcherRequestUserMediaComplete();
EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
@@ -672,7 +724,7 @@ TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) {
// This test what happens if stop is called on a track after the frame has
// been reloaded.
-TEST_F(UserMediaClientImplTest, StopTrackAfterReload) {
+TEST_P(UserMediaClientImplTest, StopTrackAfterReload) {
blink::WebMediaStream mixed_desc = RequestLocalMediaStream();
EXPECT_EQ(1, ms_dispatcher_->request_stream_counter());
LoadNewDocumentInFrame();
@@ -693,7 +745,7 @@ TEST_F(UserMediaClientImplTest, StopTrackAfterReload) {
EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter());
}
-TEST_F(UserMediaClientImplTest, EnumerateMediaDevices) {
+TEST_P(UserMediaClientImplTest, EnumerateMediaDevices) {
user_media_client_impl_->RequestMediaDevicesForTest();
base::RunLoop().RunUntilIdle();
@@ -749,7 +801,11 @@ TEST_F(UserMediaClientImplTest, EnumerateMediaDevices) {
user_media_client_impl_->last_devices()[4].GroupId()));
}
-TEST_F(UserMediaClientImplTest, RenderToAssociatedSinkConstraint) {
+// TODO(guidou): Remove this test. http://crbug.com/706408
+TEST_P(UserMediaClientImplTest, RenderToAssociatedSinkConstraint) {
+ if (!IsOldAudioConstraints())
+ return;
+
// For a UserMediaRequest without audio, we expect false.
blink::WebUserMediaRequest request =
blink::WebUserMediaRequest::CreateForTesting(blink::WebMediaConstraints(),
@@ -786,7 +842,256 @@ TEST_F(UserMediaClientImplTest, RenderToAssociatedSinkConstraint) {
factory.CreateWebMediaConstraints()));
}
-TEST_F(UserMediaClientImplTest, ObserveMediaDeviceChanges) {
+TEST_P(UserMediaClientImplTest, DefaultConstraintsPropagate) {
+ if (IsOldAudioConstraints())
+ return;
+
+ blink::WebUserMediaRequest request =
+ blink::WebUserMediaRequest::CreateForTesting(CreateDefaultConstraints(),
+ CreateDefaultConstraints());
+ user_media_client_impl_->RequestUserMediaForTest(request);
+ AudioCaptureSettings audio_capture_settings =
+ user_media_client_impl_->AudioSettings();
+ VideoCaptureSettings video_capture_settings =
+ user_media_client_impl_->VideoSettings();
+ user_media_client_impl_->CancelUserMediaRequest(request);
+
+ // Check default values selected by the constraints algorithm.
+ EXPECT_TRUE(audio_capture_settings.HasValue());
+ EXPECT_EQ(media::AudioDeviceDescription::kDefaultDeviceId,
+ audio_capture_settings.device_id());
+ EXPECT_FALSE(audio_capture_settings.hotword_enabled());
+ EXPECT_TRUE(audio_capture_settings.disable_local_echo());
+ EXPECT_FALSE(audio_capture_settings.render_to_associated_sink());
+
+ const AudioProcessingProperties& properties =
+ audio_capture_settings.audio_processing_properties();
+ EXPECT_TRUE(properties.enable_sw_echo_cancellation);
+ EXPECT_FALSE(properties.disable_hw_echo_cancellation);
+ EXPECT_FALSE(properties.goog_audio_mirroring);
+ EXPECT_TRUE(properties.goog_auto_gain_control);
+ // The default value for goog_experimental_echo_cancellation is platform
+ // dependent.
+ EXPECT_EQ(AudioProcessingProperties().goog_experimental_echo_cancellation,
+ properties.goog_experimental_echo_cancellation);
+ EXPECT_TRUE(properties.goog_typing_noise_detection);
+ EXPECT_TRUE(properties.goog_noise_suppression);
+ EXPECT_TRUE(properties.goog_experimental_noise_suppression);
+ EXPECT_TRUE(properties.goog_beamforming);
+ EXPECT_TRUE(properties.goog_highpass_filter);
+ EXPECT_TRUE(properties.goog_experimental_auto_gain_control);
+ EXPECT_TRUE(properties.goog_array_geometry.empty());
+
+ EXPECT_TRUE(video_capture_settings.HasValue());
+ EXPECT_EQ(video_capture_settings.Width(),
+ MediaStreamVideoSource::kDefaultWidth);
+ EXPECT_EQ(video_capture_settings.Height(),
+ MediaStreamVideoSource::kDefaultHeight);
+ EXPECT_EQ(video_capture_settings.FrameRate(),
+ MediaStreamVideoSource::kDefaultFrameRate);
+ EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(),
+ media::RESOLUTION_POLICY_FIXED_RESOLUTION);
+ EXPECT_EQ(video_capture_settings.PowerLineFrequency(),
+ media::PowerLineFrequency::FREQUENCY_DEFAULT);
+ EXPECT_FALSE(video_capture_settings.noise_reduction());
+ EXPECT_EQ(video_capture_settings.min_frame_rate(), 1.0);
+
+ const VideoTrackAdapterSettings& track_settings =
+ video_capture_settings.track_adapter_settings();
+ EXPECT_EQ(track_settings.max_width, MediaStreamVideoSource::kDefaultWidth);
+ EXPECT_EQ(track_settings.max_height, MediaStreamVideoSource::kDefaultHeight);
+ EXPECT_EQ(track_settings.min_aspect_ratio,
+ 1.0 / MediaStreamVideoSource::kDefaultHeight);
+ EXPECT_EQ(track_settings.max_aspect_ratio,
+ MediaStreamVideoSource::kDefaultWidth);
+ // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment
+ EXPECT_EQ(track_settings.max_frame_rate, 0.0);
+}
+
+TEST_P(UserMediaClientImplTest, DefaultTabCapturePropagate) {
+ if (IsOldAudioConstraints())
+ return;
+
+ MockConstraintFactory factory;
+ factory.basic().media_stream_source.SetExact(
+ blink::WebString::FromASCII(kMediaStreamSourceTab));
+ blink::WebMediaConstraints audio_constraints =
+ factory.CreateWebMediaConstraints();
+ blink::WebMediaConstraints video_constraints =
+ factory.CreateWebMediaConstraints();
+ blink::WebUserMediaRequest request =
+ blink::WebUserMediaRequest::CreateForTesting(audio_constraints,
+ video_constraints);
+ user_media_client_impl_->RequestUserMediaForTest(request);
+ AudioCaptureSettings audio_capture_settings =
+ user_media_client_impl_->AudioSettings();
+ VideoCaptureSettings video_capture_settings =
+ user_media_client_impl_->VideoSettings();
+ user_media_client_impl_->CancelUserMediaRequest(request);
+
+ // Check default values selected by the constraints algorithm.
+ EXPECT_TRUE(audio_capture_settings.HasValue());
+ EXPECT_EQ(std::string(), audio_capture_settings.device_id());
+ EXPECT_FALSE(audio_capture_settings.hotword_enabled());
+ EXPECT_TRUE(audio_capture_settings.disable_local_echo());
+ EXPECT_FALSE(audio_capture_settings.render_to_associated_sink());
+
+ const AudioProcessingProperties& properties =
+ audio_capture_settings.audio_processing_properties();
+ EXPECT_FALSE(properties.enable_sw_echo_cancellation);
+ EXPECT_FALSE(properties.disable_hw_echo_cancellation);
+ EXPECT_FALSE(properties.goog_audio_mirroring);
+ EXPECT_FALSE(properties.goog_auto_gain_control);
+ EXPECT_FALSE(properties.goog_experimental_echo_cancellation);
+ EXPECT_FALSE(properties.goog_typing_noise_detection);
+ EXPECT_FALSE(properties.goog_noise_suppression);
+ EXPECT_FALSE(properties.goog_experimental_noise_suppression);
+ EXPECT_FALSE(properties.goog_beamforming);
+ EXPECT_FALSE(properties.goog_highpass_filter);
+ EXPECT_FALSE(properties.goog_experimental_auto_gain_control);
+ EXPECT_TRUE(properties.goog_array_geometry.empty());
+
+ EXPECT_TRUE(video_capture_settings.HasValue());
+ EXPECT_EQ(video_capture_settings.Width(), kDefaultScreenCastWidth);
+ EXPECT_EQ(video_capture_settings.Height(), kDefaultScreenCastHeight);
+ EXPECT_EQ(video_capture_settings.FrameRate(), kDefaultScreenCastFrameRate);
+ EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(),
+ media::RESOLUTION_POLICY_FIXED_RESOLUTION);
+ EXPECT_EQ(video_capture_settings.PowerLineFrequency(),
+ media::PowerLineFrequency::FREQUENCY_DEFAULT);
+ EXPECT_FALSE(video_capture_settings.noise_reduction());
+ EXPECT_FALSE(video_capture_settings.min_frame_rate().has_value());
+ EXPECT_FALSE(video_capture_settings.max_frame_rate().has_value());
+
+ const VideoTrackAdapterSettings& track_settings =
+ video_capture_settings.track_adapter_settings();
+ EXPECT_EQ(track_settings.max_width, kDefaultScreenCastWidth);
+ EXPECT_EQ(track_settings.max_height, kDefaultScreenCastHeight);
+ EXPECT_EQ(track_settings.min_aspect_ratio, 1.0 / kMaxScreenCastDimension);
+ EXPECT_EQ(track_settings.max_aspect_ratio, kMaxScreenCastDimension);
+ // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment
+ EXPECT_EQ(track_settings.max_frame_rate, 0.0);
+}
+
+TEST_P(UserMediaClientImplTest, DefaultDesktopCapturePropagate) {
+ if (IsOldAudioConstraints())
+ return;
+
+ MockConstraintFactory factory;
+ factory.basic().media_stream_source.SetExact(
+ blink::WebString::FromASCII(kMediaStreamSourceDesktop));
+ blink::WebMediaConstraints audio_constraints =
+ factory.CreateWebMediaConstraints();
+ blink::WebMediaConstraints video_constraints =
+ factory.CreateWebMediaConstraints();
+ blink::WebUserMediaRequest request =
+ blink::WebUserMediaRequest::CreateForTesting(audio_constraints,
+ video_constraints);
+ user_media_client_impl_->RequestUserMediaForTest(request);
+ AudioCaptureSettings audio_capture_settings =
+ user_media_client_impl_->AudioSettings();
+ VideoCaptureSettings video_capture_settings =
+ user_media_client_impl_->VideoSettings();
+ user_media_client_impl_->CancelUserMediaRequest(request);
+
+ // Check default values selected by the constraints algorithm.
+ EXPECT_TRUE(audio_capture_settings.HasValue());
+ EXPECT_EQ(std::string(), audio_capture_settings.device_id());
+ EXPECT_FALSE(audio_capture_settings.hotword_enabled());
+ EXPECT_FALSE(audio_capture_settings.disable_local_echo());
+ EXPECT_FALSE(audio_capture_settings.render_to_associated_sink());
+
+ const AudioProcessingProperties& properties =
+ audio_capture_settings.audio_processing_properties();
+ EXPECT_FALSE(properties.enable_sw_echo_cancellation);
+ EXPECT_FALSE(properties.disable_hw_echo_cancellation);
+ EXPECT_FALSE(properties.goog_audio_mirroring);
+ EXPECT_FALSE(properties.goog_auto_gain_control);
+ EXPECT_FALSE(properties.goog_experimental_echo_cancellation);
+ EXPECT_FALSE(properties.goog_typing_noise_detection);
+ EXPECT_FALSE(properties.goog_noise_suppression);
+ EXPECT_FALSE(properties.goog_experimental_noise_suppression);
+ EXPECT_FALSE(properties.goog_beamforming);
+ EXPECT_FALSE(properties.goog_highpass_filter);
+ EXPECT_FALSE(properties.goog_experimental_auto_gain_control);
+ EXPECT_TRUE(properties.goog_array_geometry.empty());
+
+ EXPECT_TRUE(video_capture_settings.HasValue());
+ EXPECT_EQ(video_capture_settings.Width(), kDefaultScreenCastWidth);
+ EXPECT_EQ(video_capture_settings.Height(), kDefaultScreenCastHeight);
+ EXPECT_EQ(video_capture_settings.FrameRate(), kDefaultScreenCastFrameRate);
+ EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(),
+ media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT);
+ EXPECT_EQ(video_capture_settings.PowerLineFrequency(),
+ media::PowerLineFrequency::FREQUENCY_DEFAULT);
+ EXPECT_FALSE(video_capture_settings.noise_reduction());
+ EXPECT_FALSE(video_capture_settings.min_frame_rate().has_value());
+ EXPECT_FALSE(video_capture_settings.max_frame_rate().has_value());
+
+ const VideoTrackAdapterSettings& track_settings =
+ video_capture_settings.track_adapter_settings();
+ EXPECT_EQ(track_settings.max_width, kDefaultScreenCastWidth);
+ EXPECT_EQ(track_settings.max_height, kDefaultScreenCastHeight);
+ EXPECT_EQ(track_settings.min_aspect_ratio, 1.0 / kMaxScreenCastDimension);
+ EXPECT_EQ(track_settings.max_aspect_ratio, kMaxScreenCastDimension);
+ // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment
+ EXPECT_EQ(track_settings.max_frame_rate, 0.0);
+}
+
+TEST_P(UserMediaClientImplTest, NonDefaultAudioConstraintsPropagate) {
+ if (IsOldAudioConstraints())
+ return;
+
+ MockConstraintFactory factory;
+ factory.basic().device_id.SetExact(
+ blink::WebString::FromASCII(kFakeAudioInputDeviceId1));
+ factory.basic().hotword_enabled.SetExact(true);
+ factory.basic().disable_local_echo.SetExact(true);
+ factory.basic().render_to_associated_sink.SetExact(true);
+ factory.basic().echo_cancellation.SetExact(false);
+ factory.basic().goog_audio_mirroring.SetExact(true);
+ factory.basic().goog_typing_noise_detection.SetExact(true);
+ factory.basic().goog_array_geometry.SetExact(
+ blink::WebString::FromASCII("1 1 1"));
+ blink::WebMediaConstraints audio_constraints =
+ factory.CreateWebMediaConstraints();
+ // Request contains only audio
+ blink::WebUserMediaRequest request =
+ blink::WebUserMediaRequest::CreateForTesting(
+ audio_constraints, blink::WebMediaConstraints());
+ user_media_client_impl_->RequestUserMediaForTest(request);
+ AudioCaptureSettings audio_capture_settings =
+ user_media_client_impl_->AudioSettings();
+ VideoCaptureSettings video_capture_settings =
+ user_media_client_impl_->VideoSettings();
+ user_media_client_impl_->CancelUserMediaRequest(request);
+
+ EXPECT_FALSE(video_capture_settings.HasValue());
+
+ EXPECT_TRUE(audio_capture_settings.HasValue());
+ EXPECT_EQ(kFakeAudioInputDeviceId1, audio_capture_settings.device_id());
+ EXPECT_TRUE(audio_capture_settings.hotword_enabled());
+ EXPECT_TRUE(audio_capture_settings.disable_local_echo());
+ EXPECT_TRUE(audio_capture_settings.render_to_associated_sink());
+
+ const AudioProcessingProperties& properties =
+ audio_capture_settings.audio_processing_properties();
+ EXPECT_FALSE(properties.enable_sw_echo_cancellation);
+ EXPECT_TRUE(properties.disable_hw_echo_cancellation);
+ EXPECT_TRUE(properties.goog_audio_mirroring);
+ EXPECT_FALSE(properties.goog_auto_gain_control);
+ EXPECT_FALSE(properties.goog_experimental_echo_cancellation);
+ EXPECT_TRUE(properties.goog_typing_noise_detection);
+ EXPECT_FALSE(properties.goog_noise_suppression);
+ EXPECT_FALSE(properties.goog_experimental_noise_suppression);
+ EXPECT_FALSE(properties.goog_beamforming);
+ EXPECT_FALSE(properties.goog_highpass_filter);
+ EXPECT_FALSE(properties.goog_experimental_auto_gain_control);
+ const std::vector<media::Point> kGeometry = {{1.0, 1.0, 1.0}};
+ EXPECT_EQ(kGeometry, properties.goog_array_geometry);
+}
+
+TEST_P(UserMediaClientImplTest, ObserveMediaDeviceChanges) {
EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications(
MEDIA_DEVICE_TYPE_AUDIO_INPUT, _));
EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications(
@@ -822,7 +1127,7 @@ TEST_F(UserMediaClientImplTest, ObserveMediaDeviceChanges) {
}
// This test what happens if the audio stream has same id with video stream.
-TEST_F(UserMediaClientImplTest, AudioVideoWithSameId) {
+TEST_P(UserMediaClientImplTest, AudioVideoWithSameId) {
ms_dispatcher_->TestSameId();
// Generate a stream with both audio and video.
@@ -847,7 +1152,7 @@ TEST_F(UserMediaClientImplTest, AudioVideoWithSameId) {
EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter());
}
-TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidAudioDeviceId) {
+TEST_P(UserMediaClientImplTest, CreateWithMandatoryInvalidAudioDeviceId) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(kInvalidDeviceId);
blink::WebUserMediaRequest request =
@@ -858,7 +1163,7 @@ TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidAudioDeviceId) {
user_media_client_impl_->request_state());
}
-TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidVideoDeviceId) {
+TEST_P(UserMediaClientImplTest, CreateWithMandatoryInvalidVideoDeviceId) {
blink::WebMediaConstraints video_constraints =
CreateDeviceConstraints(kInvalidDeviceId);
blink::WebUserMediaRequest request =
@@ -869,7 +1174,7 @@ TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidVideoDeviceId) {
user_media_client_impl_->request_state());
}
-TEST_F(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) {
+TEST_P(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(kFakeAudioInputDeviceId1);
blink::WebMediaConstraints video_constraints =
@@ -879,7 +1184,7 @@ TEST_F(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) {
kFakeVideoInputDeviceId1);
}
-TEST_F(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) {
+TEST_P(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(nullptr, kFakeAudioInputDeviceId1);
blink::WebMediaConstraints video_constraints =
@@ -889,7 +1194,7 @@ TEST_F(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) {
kFakeVideoInputDeviceId1);
}
-TEST_F(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) {
+TEST_P(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(nullptr, nullptr, kFakeAudioInputDeviceId1);
blink::WebMediaConstraints video_constraints = CreateDeviceConstraints(
@@ -899,19 +1204,23 @@ TEST_F(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) {
kFakeVideoInputDeviceId1);
}
-TEST_F(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) {
+TEST_P(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId);
blink::WebMediaConstraints video_constraints =
CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId);
// MockMediaStreamDispatcher uses empty string as default audio device ID.
// MockMediaDevicesDispatcher uses the first device in the enumeration as
- // default video device ID.
+ // default audio or video device ID.
+ std::string expected_audio_device_id =
+ IsOldAudioConstraints() ? std::string()
+ : media::AudioDeviceDescription::kDefaultDeviceId;
TestValidRequestWithConstraints(audio_constraints, video_constraints,
- std::string(), kFakeVideoInputDeviceId1);
+ expected_audio_device_id,
+ kFakeVideoInputDeviceId1);
}
-TEST_F(UserMediaClientImplTest, CreateWithFacingModeUser) {
+TEST_P(UserMediaClientImplTest, CreateWithFacingModeUser) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(kFakeAudioInputDeviceId1);
blink::WebMediaConstraints video_constraints =
@@ -922,7 +1231,7 @@ TEST_F(UserMediaClientImplTest, CreateWithFacingModeUser) {
kFakeVideoInputDeviceId1);
}
-TEST_F(UserMediaClientImplTest, CreateWithFacingModeEnvironment) {
+TEST_P(UserMediaClientImplTest, CreateWithFacingModeEnvironment) {
blink::WebMediaConstraints audio_constraints =
CreateDeviceConstraints(kFakeAudioInputDeviceId1);
blink::WebMediaConstraints video_constraints =
@@ -933,4 +1242,8 @@ TEST_F(UserMediaClientImplTest, CreateWithFacingModeEnvironment) {
kFakeVideoInputDeviceId2);
}
+INSTANTIATE_TEST_CASE_P(,
+ UserMediaClientImplTest,
+ testing::Values(true, false));
+
} // namespace content
« no previous file with comments | « content/renderer/media/user_media_client_impl.cc ('k') | content/renderer/media/video_track_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698