| 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
|
|
|