OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/user_media_client_impl.h" | 5 #include "content/renderer/media/user_media_client_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
15 #include "base/strings/utf_string_conversions.h" | 15 #include "base/strings/utf_string_conversions.h" |
16 #include "base/test/scoped_feature_list.h" | |
16 #include "content/child/child_process.h" | 17 #include "content/child/child_process.h" |
17 #include "content/common/media/media_devices.h" | 18 #include "content/common/media/media_devices.h" |
19 #include "content/public/common/content_features.h" | |
18 #include "content/renderer/media/media_stream.h" | 20 #include "content/renderer/media/media_stream.h" |
21 #include "content/renderer/media/media_stream_audio_processor_options.h" | |
19 #include "content/renderer/media/media_stream_audio_source.h" | 22 #include "content/renderer/media/media_stream_audio_source.h" |
23 #include "content/renderer/media/media_stream_constraints_util.h" | |
24 #include "content/renderer/media/media_stream_constraints_util_video_content.h" | |
20 #include "content/renderer/media/media_stream_track.h" | 25 #include "content/renderer/media/media_stream_track.h" |
21 #include "content/renderer/media/mock_constraint_factory.h" | 26 #include "content/renderer/media/mock_constraint_factory.h" |
22 #include "content/renderer/media/mock_media_stream_dispatcher.h" | 27 #include "content/renderer/media/mock_media_stream_dispatcher.h" |
23 #include "content/renderer/media/mock_media_stream_video_source.h" | 28 #include "content/renderer/media/mock_media_stream_video_source.h" |
24 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory. h" | 29 #include "content/renderer/media/webrtc/mock_peer_connection_dependency_factory. h" |
30 #include "media/audio/audio_device_description.h" | |
25 #include "mojo/public/cpp/bindings/binding.h" | 31 #include "mojo/public/cpp/bindings/binding.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
27 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" | 33 #include "third_party/WebKit/public/platform/WebMediaDeviceInfo.h" |
28 #include "third_party/WebKit/public/platform/WebMediaStream.h" | 34 #include "third_party/WebKit/public/platform/WebMediaStream.h" |
29 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 35 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
30 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 36 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
31 #include "third_party/WebKit/public/platform/WebString.h" | 37 #include "third_party/WebKit/public/platform/WebString.h" |
32 #include "third_party/WebKit/public/platform/WebVector.h" | 38 #include "third_party/WebKit/public/platform/WebVector.h" |
33 #include "third_party/WebKit/public/web/WebHeap.h" | 39 #include "third_party/WebKit/public/web/WebHeap.h" |
34 | 40 |
35 using testing::_; | 41 using testing::_; |
36 | 42 |
37 namespace content { | 43 namespace content { |
38 | 44 |
39 blink::WebMediaConstraints CreateDefaultConstraints() { | 45 blink::WebMediaConstraints CreateDefaultConstraints() { |
40 MockConstraintFactory factory; | 46 MockConstraintFactory factory; |
41 factory.AddAdvanced(); | 47 factory.AddAdvanced(); |
42 return factory.CreateWebMediaConstraints(); | 48 return factory.CreateWebMediaConstraints(); |
43 } | 49 } |
44 | 50 |
45 blink::WebMediaConstraints CreateDeviceConstraints( | 51 blink::WebMediaConstraints CreateDeviceConstraints( |
46 const char* basic_exact_value, | 52 const char* basic_exact_value, |
47 const char* basic_ideal_value = nullptr, | 53 const char* basic_ideal_value = nullptr, |
48 const char* advanced_exact_value = nullptr) { | 54 const char* advanced_exact_value = nullptr) { |
49 MockConstraintFactory factory; | 55 MockConstraintFactory factory; |
50 blink::WebMediaTrackConstraintSet basic; | |
51 if (basic_exact_value) { | 56 if (basic_exact_value) { |
52 factory.basic().device_id.SetExact( | 57 factory.basic().device_id.SetExact( |
53 blink::WebString::FromUTF8(basic_exact_value)); | 58 blink::WebString::FromUTF8(basic_exact_value)); |
54 } | 59 } |
55 if (basic_ideal_value) { | 60 if (basic_ideal_value) { |
56 blink::WebString value = blink::WebString::FromUTF8(basic_ideal_value); | 61 blink::WebString value = blink::WebString::FromUTF8(basic_ideal_value); |
57 factory.basic().device_id.SetIdeal( | 62 factory.basic().device_id.SetIdeal( |
58 blink::WebVector<blink::WebString>(&value, 1)); | 63 blink::WebVector<blink::WebString>(&value, 1)); |
59 } | 64 } |
60 | 65 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
154 device->facing_mode = ::mojom::FacingMode::ENVIRONMENT; | 159 device->facing_mode = ::mojom::FacingMode::ENVIRONMENT; |
155 device->formats.push_back(media::VideoCaptureFormat( | 160 device->formats.push_back(media::VideoCaptureFormat( |
156 gfx::Size(640, 480), 30.0f, media::PIXEL_FORMAT_I420)); | 161 gfx::Size(640, 480), 30.0f, media::PIXEL_FORMAT_I420)); |
157 result.push_back(std::move(device)); | 162 result.push_back(std::move(device)); |
158 | 163 |
159 std::move(client_callback).Run(std::move(result)); | 164 std::move(client_callback).Run(std::move(result)); |
160 } | 165 } |
161 | 166 |
162 void GetAudioInputCapabilities( | 167 void GetAudioInputCapabilities( |
163 GetAudioInputCapabilitiesCallback client_callback) override { | 168 GetAudioInputCapabilitiesCallback client_callback) override { |
164 NOTREACHED(); | 169 if (IsOldAudioConstraints()) |
170 NOTREACHED(); | |
171 | |
172 std::vector<::mojom::AudioInputDeviceCapabilitiesPtr> result; | |
173 ::mojom::AudioInputDeviceCapabilitiesPtr device = | |
174 ::mojom::AudioInputDeviceCapabilities::New(); | |
175 device->device_id = media::AudioDeviceDescription::kDefaultDeviceId; | |
176 device->parameters = audio_parameters_; | |
177 result.push_back(std::move(device)); | |
178 | |
179 device = ::mojom::AudioInputDeviceCapabilities::New(); | |
180 device->device_id = kFakeAudioInputDeviceId1; | |
181 device->parameters = audio_parameters_; | |
182 result.push_back(std::move(device)); | |
183 | |
184 device = ::mojom::AudioInputDeviceCapabilities::New(); | |
185 device->device_id = kFakeAudioInputDeviceId2; | |
186 device->parameters = audio_parameters_; | |
187 result.push_back(std::move(device)); | |
188 | |
189 std::move(client_callback).Run(std::move(result)); | |
190 } | |
191 | |
192 media::AudioParameters& AudioParameters() { return audio_parameters_; } | |
193 | |
194 void ResetAudioParameters() { | |
195 audio_parameters_ = media::AudioParameters::UnavailableDeviceParams(); | |
165 } | 196 } |
166 | 197 |
167 MOCK_METHOD2(SubscribeDeviceChangeNotifications, | 198 MOCK_METHOD2(SubscribeDeviceChangeNotifications, |
168 void(MediaDeviceType type, uint32_t subscription_id)); | 199 void(MediaDeviceType type, uint32_t subscription_id)); |
169 MOCK_METHOD2(UnsubscribeDeviceChangeNotifications, | 200 MOCK_METHOD2(UnsubscribeDeviceChangeNotifications, |
170 void(MediaDeviceType type, uint32_t subscription_id)); | 201 void(MediaDeviceType type, uint32_t subscription_id)); |
202 | |
203 private: | |
204 media::AudioParameters audio_parameters_ = | |
205 media::AudioParameters::UnavailableDeviceParams(); | |
171 }; | 206 }; |
172 | 207 |
173 class UserMediaClientImplUnderTest : public UserMediaClientImpl { | 208 class UserMediaClientImplUnderTest : public UserMediaClientImpl { |
174 public: | 209 public: |
175 enum RequestState { | 210 enum RequestState { |
176 REQUEST_NOT_STARTED, | 211 REQUEST_NOT_STARTED, |
177 REQUEST_NOT_COMPLETE, | 212 REQUEST_NOT_COMPLETE, |
178 REQUEST_SUCCEEDED, | 213 REQUEST_SUCCEEDED, |
179 REQUEST_FAILED, | 214 REQUEST_FAILED, |
180 }; | 215 }; |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
299 void ClearLastGeneratedStream() { last_generated_stream_.Reset(); } | 334 void ClearLastGeneratedStream() { last_generated_stream_.Reset(); } |
300 | 335 |
301 MockMediaStreamVideoCapturerSource* last_created_video_source() const { | 336 MockMediaStreamVideoCapturerSource* last_created_video_source() const { |
302 return video_source_; | 337 return video_source_; |
303 } | 338 } |
304 | 339 |
305 RequestState request_state() const { return state_; } | 340 RequestState request_state() const { return state_; } |
306 content::MediaStreamRequestResult error_reason() const { return result_; } | 341 content::MediaStreamRequestResult error_reason() const { return result_; } |
307 blink::WebString error_name() const { return result_name_; } | 342 blink::WebString error_name() const { return result_name_; } |
308 | 343 |
344 AudioCaptureSettings AudioSettings() const { | |
345 return AudioCaptureSettingsForCurrentRequest(); | |
346 } | |
347 VideoCaptureSettings VideoSettings() const { | |
348 return VideoCaptureSettingsForCurrentRequest(); | |
349 } | |
350 | |
309 // Access to the request queue for testing. | 351 // Access to the request queue for testing. |
352 // TODO(guidou): Remove this function. http://crbug.com/704608 | |
310 bool UserMediaRequestHasAutomaticDeviceSelection() { | 353 bool UserMediaRequestHasAutomaticDeviceSelection() { |
311 base::Optional<bool> enabled = | 354 base::Optional<bool> enabled = |
312 AutomaticOutputDeviceSelectionEnabledForCurrentRequest(); | 355 AutomaticOutputDeviceSelectionEnabledForCurrentRequest(); |
313 EXPECT_TRUE(enabled); | 356 EXPECT_TRUE(enabled); |
314 return *enabled; | 357 return *enabled; |
315 } | 358 } |
316 | 359 |
317 private: | 360 private: |
318 blink::WebMediaStream last_generated_stream_; | 361 blink::WebMediaStream last_generated_stream_; |
319 RequestState state_; | 362 RequestState state_; |
320 content::MediaStreamRequestResult result_; | 363 content::MediaStreamRequestResult result_; |
321 blink::WebString result_name_; | 364 blink::WebString result_name_; |
322 blink::WebVector<blink::WebMediaDeviceInfo> last_devices_; | 365 blink::WebVector<blink::WebMediaDeviceInfo> last_devices_; |
323 PeerConnectionDependencyFactory* factory_; | 366 PeerConnectionDependencyFactory* factory_; |
324 bool create_source_that_fails_; | 367 bool create_source_that_fails_; |
325 MockMediaStreamVideoCapturerSource* video_source_; | 368 MockMediaStreamVideoCapturerSource* video_source_; |
326 }; | 369 }; |
327 | 370 |
328 class UserMediaClientImplTest : public ::testing::Test { | 371 class UserMediaClientImplTest : public ::testing::TestWithParam<bool> { |
329 public: | 372 public: |
330 UserMediaClientImplTest() | 373 UserMediaClientImplTest() |
331 : binding_user_media(&media_devices_dispatcher_), | 374 : binding_user_media(&media_devices_dispatcher_), |
332 binding_event_dispatcher_(&media_devices_dispatcher_) {} | 375 binding_event_dispatcher_(&media_devices_dispatcher_) { |
376 if (GetParam()) { | |
miu
2017/06/19 21:18:44
Great idea! :)
| |
377 scoped_feature_list_.InitAndEnableFeature( | |
378 features::kMediaStreamOldAudioConstraints); | |
379 } else { | |
380 scoped_feature_list_.InitAndDisableFeature( | |
381 features::kMediaStreamOldAudioConstraints); | |
382 } | |
383 } | |
333 | 384 |
334 void SetUp() override { | 385 void SetUp() override { |
335 // Create our test object. | 386 // Create our test object. |
336 child_process_.reset(new ChildProcess()); | 387 child_process_.reset(new ChildProcess()); |
337 dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); | 388 dependency_factory_.reset(new MockPeerConnectionDependencyFactory()); |
338 ms_dispatcher_ = new MockMediaStreamDispatcher(); | 389 ms_dispatcher_ = new MockMediaStreamDispatcher(); |
339 user_media_client_impl_.reset(new UserMediaClientImplUnderTest( | 390 user_media_client_impl_.reset(new UserMediaClientImplUnderTest( |
340 dependency_factory_.get(), | 391 dependency_factory_.get(), |
341 std::unique_ptr<MediaStreamDispatcher>(ms_dispatcher_))); | 392 std::unique_ptr<MediaStreamDispatcher>(ms_dispatcher_))); |
342 ::mojom::MediaDevicesDispatcherHostPtr user_media_host_proxy; | 393 ::mojom::MediaDevicesDispatcherHostPtr user_media_host_proxy; |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
456 protected: | 507 protected: |
457 base::MessageLoop message_loop_; | 508 base::MessageLoop message_loop_; |
458 std::unique_ptr<ChildProcess> child_process_; | 509 std::unique_ptr<ChildProcess> child_process_; |
459 MockMediaStreamDispatcher* ms_dispatcher_; // Owned by |used_media_impl_|. | 510 MockMediaStreamDispatcher* ms_dispatcher_; // Owned by |used_media_impl_|. |
460 MockMediaDevicesDispatcherHost media_devices_dispatcher_; | 511 MockMediaDevicesDispatcherHost media_devices_dispatcher_; |
461 mojo::Binding<::mojom::MediaDevicesDispatcherHost> binding_user_media; | 512 mojo::Binding<::mojom::MediaDevicesDispatcherHost> binding_user_media; |
462 mojo::Binding<::mojom::MediaDevicesDispatcherHost> binding_event_dispatcher_; | 513 mojo::Binding<::mojom::MediaDevicesDispatcherHost> binding_event_dispatcher_; |
463 | 514 |
464 std::unique_ptr<UserMediaClientImplUnderTest> user_media_client_impl_; | 515 std::unique_ptr<UserMediaClientImplUnderTest> user_media_client_impl_; |
465 std::unique_ptr<MockPeerConnectionDependencyFactory> dependency_factory_; | 516 std::unique_ptr<MockPeerConnectionDependencyFactory> dependency_factory_; |
517 // TODO(guidou): Remove this field. http://crbug.com/706408 | |
518 base::test::ScopedFeatureList scoped_feature_list_; | |
466 }; | 519 }; |
467 | 520 |
468 TEST_F(UserMediaClientImplTest, GenerateMediaStream) { | 521 TEST_P(UserMediaClientImplTest, GenerateMediaStream) { |
469 // Generate a stream with both audio and video. | 522 // Generate a stream with both audio and video. |
470 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 523 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
471 } | 524 } |
472 | 525 |
473 // Test that the same source object is used if two MediaStreams are generated | 526 // Test that the same source object is used if two MediaStreams are generated |
474 // using the same source. | 527 // using the same source. |
475 TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithSameSource) { | 528 TEST_P(UserMediaClientImplTest, GenerateTwoMediaStreamsWithSameSource) { |
476 blink::WebMediaStream desc1 = RequestLocalMediaStream(); | 529 blink::WebMediaStream desc1 = RequestLocalMediaStream(); |
477 blink::WebMediaStream desc2 = RequestLocalMediaStream(); | 530 blink::WebMediaStream desc2 = RequestLocalMediaStream(); |
478 | 531 |
479 blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks; | 532 blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks; |
480 desc1.VideoTracks(desc1_video_tracks); | 533 desc1.VideoTracks(desc1_video_tracks); |
481 blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks; | 534 blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks; |
482 desc2.VideoTracks(desc2_video_tracks); | 535 desc2.VideoTracks(desc2_video_tracks); |
483 EXPECT_EQ(desc1_video_tracks[0].Source().Id(), | 536 EXPECT_EQ(desc1_video_tracks[0].Source().Id(), |
484 desc2_video_tracks[0].Source().Id()); | 537 desc2_video_tracks[0].Source().Id()); |
485 | 538 |
486 EXPECT_EQ(desc1_video_tracks[0].Source().GetExtraData(), | 539 EXPECT_EQ(desc1_video_tracks[0].Source().GetExtraData(), |
487 desc2_video_tracks[0].Source().GetExtraData()); | 540 desc2_video_tracks[0].Source().GetExtraData()); |
488 | 541 |
489 blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks; | 542 blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks; |
490 desc1.AudioTracks(desc1_audio_tracks); | 543 desc1.AudioTracks(desc1_audio_tracks); |
491 blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks; | 544 blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks; |
492 desc2.AudioTracks(desc2_audio_tracks); | 545 desc2.AudioTracks(desc2_audio_tracks); |
493 EXPECT_EQ(desc1_audio_tracks[0].Source().Id(), | 546 EXPECT_EQ(desc1_audio_tracks[0].Source().Id(), |
494 desc2_audio_tracks[0].Source().Id()); | 547 desc2_audio_tracks[0].Source().Id()); |
495 | 548 |
496 EXPECT_EQ(MediaStreamAudioSource::From(desc1_audio_tracks[0].Source()), | 549 EXPECT_EQ(MediaStreamAudioSource::From(desc1_audio_tracks[0].Source()), |
497 MediaStreamAudioSource::From(desc2_audio_tracks[0].Source())); | 550 MediaStreamAudioSource::From(desc2_audio_tracks[0].Source())); |
498 } | 551 } |
499 | 552 |
500 // Test that the same source object is not used if two MediaStreams are | 553 // Test that the same source object is not used if two MediaStreams are |
501 // generated using different sources. | 554 // generated using different sources. |
502 TEST_F(UserMediaClientImplTest, GenerateTwoMediaStreamsWithDifferentSources) { | 555 TEST_P(UserMediaClientImplTest, GenerateTwoMediaStreamsWithDifferentSources) { |
503 blink::WebMediaStream desc1 = RequestLocalMediaStream(); | 556 blink::WebMediaStream desc1 = RequestLocalMediaStream(); |
504 // Make sure another device is selected (another |session_id|) in the next | 557 // Make sure another device is selected (another |session_id|) in the next |
505 // gUM request. | 558 // gUM request. |
506 ms_dispatcher_->IncrementSessionId(); | 559 ms_dispatcher_->IncrementSessionId(); |
507 blink::WebMediaStream desc2 = RequestLocalMediaStream(); | 560 blink::WebMediaStream desc2 = RequestLocalMediaStream(); |
508 | 561 |
509 blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks; | 562 blink::WebVector<blink::WebMediaStreamTrack> desc1_video_tracks; |
510 desc1.VideoTracks(desc1_video_tracks); | 563 desc1.VideoTracks(desc1_video_tracks); |
511 blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks; | 564 blink::WebVector<blink::WebMediaStreamTrack> desc2_video_tracks; |
512 desc2.VideoTracks(desc2_video_tracks); | 565 desc2.VideoTracks(desc2_video_tracks); |
513 EXPECT_NE(desc1_video_tracks[0].Source().Id(), | 566 EXPECT_NE(desc1_video_tracks[0].Source().Id(), |
514 desc2_video_tracks[0].Source().Id()); | 567 desc2_video_tracks[0].Source().Id()); |
515 | 568 |
516 EXPECT_NE(desc1_video_tracks[0].Source().GetExtraData(), | 569 EXPECT_NE(desc1_video_tracks[0].Source().GetExtraData(), |
517 desc2_video_tracks[0].Source().GetExtraData()); | 570 desc2_video_tracks[0].Source().GetExtraData()); |
518 | 571 |
519 blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks; | 572 blink::WebVector<blink::WebMediaStreamTrack> desc1_audio_tracks; |
520 desc1.AudioTracks(desc1_audio_tracks); | 573 desc1.AudioTracks(desc1_audio_tracks); |
521 blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks; | 574 blink::WebVector<blink::WebMediaStreamTrack> desc2_audio_tracks; |
522 desc2.AudioTracks(desc2_audio_tracks); | 575 desc2.AudioTracks(desc2_audio_tracks); |
523 EXPECT_NE(desc1_audio_tracks[0].Source().Id(), | 576 EXPECT_NE(desc1_audio_tracks[0].Source().Id(), |
524 desc2_audio_tracks[0].Source().Id()); | 577 desc2_audio_tracks[0].Source().Id()); |
525 | 578 |
526 EXPECT_NE(MediaStreamAudioSource::From(desc1_audio_tracks[0].Source()), | 579 EXPECT_NE(MediaStreamAudioSource::From(desc1_audio_tracks[0].Source()), |
527 MediaStreamAudioSource::From(desc2_audio_tracks[0].Source())); | 580 MediaStreamAudioSource::From(desc2_audio_tracks[0].Source())); |
528 } | 581 } |
529 | 582 |
530 TEST_F(UserMediaClientImplTest, StopLocalTracks) { | 583 TEST_P(UserMediaClientImplTest, StopLocalTracks) { |
531 // Generate a stream with both audio and video. | 584 // Generate a stream with both audio and video. |
532 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 585 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
533 | 586 |
534 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 587 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
535 mixed_desc.AudioTracks(audio_tracks); | 588 mixed_desc.AudioTracks(audio_tracks); |
536 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); | 589 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); |
537 audio_track->Stop(); | 590 audio_track->Stop(); |
538 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 591 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
539 | 592 |
540 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 593 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
541 mixed_desc.VideoTracks(video_tracks); | 594 mixed_desc.VideoTracks(video_tracks); |
542 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 595 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); |
543 video_track->Stop(); | 596 video_track->Stop(); |
544 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 597 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
545 } | 598 } |
546 | 599 |
547 // This test that a source is not stopped even if the tracks in a | 600 // This test that a source is not stopped even if the tracks in a |
548 // MediaStream is stopped if there are two MediaStreams with tracks using the | 601 // MediaStream is stopped if there are two MediaStreams with tracks using the |
549 // same device. The source is stopped | 602 // same device. The source is stopped |
550 // if there are no more MediaStream tracks using the device. | 603 // if there are no more MediaStream tracks using the device. |
551 TEST_F(UserMediaClientImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) { | 604 TEST_P(UserMediaClientImplTest, StopLocalTracksWhenTwoStreamUseSameDevices) { |
552 // Generate a stream with both audio and video. | 605 // Generate a stream with both audio and video. |
553 blink::WebMediaStream desc1 = RequestLocalMediaStream(); | 606 blink::WebMediaStream desc1 = RequestLocalMediaStream(); |
554 blink::WebMediaStream desc2 = RequestLocalMediaStream(); | 607 blink::WebMediaStream desc2 = RequestLocalMediaStream(); |
555 | 608 |
556 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks1; | 609 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks1; |
557 desc1.AudioTracks(audio_tracks1); | 610 desc1.AudioTracks(audio_tracks1); |
558 MediaStreamTrack* audio_track1 = MediaStreamTrack::GetTrack(audio_tracks1[0]); | 611 MediaStreamTrack* audio_track1 = MediaStreamTrack::GetTrack(audio_tracks1[0]); |
559 audio_track1->Stop(); | 612 audio_track1->Stop(); |
560 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 613 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); |
561 | 614 |
562 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks2; | 615 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks2; |
563 desc2.AudioTracks(audio_tracks2); | 616 desc2.AudioTracks(audio_tracks2); |
564 MediaStreamTrack* audio_track2 = MediaStreamTrack::GetTrack(audio_tracks2[0]); | 617 MediaStreamTrack* audio_track2 = MediaStreamTrack::GetTrack(audio_tracks2[0]); |
565 audio_track2->Stop(); | 618 audio_track2->Stop(); |
566 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 619 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
567 | 620 |
568 blink::WebVector<blink::WebMediaStreamTrack> video_tracks1; | 621 blink::WebVector<blink::WebMediaStreamTrack> video_tracks1; |
569 desc1.VideoTracks(video_tracks1); | 622 desc1.VideoTracks(video_tracks1); |
570 MediaStreamTrack* video_track1 = MediaStreamTrack::GetTrack(video_tracks1[0]); | 623 MediaStreamTrack* video_track1 = MediaStreamTrack::GetTrack(video_tracks1[0]); |
571 video_track1->Stop(); | 624 video_track1->Stop(); |
572 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); | 625 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); |
573 | 626 |
574 blink::WebVector<blink::WebMediaStreamTrack> video_tracks2; | 627 blink::WebVector<blink::WebMediaStreamTrack> video_tracks2; |
575 desc2.VideoTracks(video_tracks2); | 628 desc2.VideoTracks(video_tracks2); |
576 MediaStreamTrack* video_track2 = MediaStreamTrack::GetTrack(video_tracks2[0]); | 629 MediaStreamTrack* video_track2 = MediaStreamTrack::GetTrack(video_tracks2[0]); |
577 video_track2->Stop(); | 630 video_track2->Stop(); |
578 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 631 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
579 } | 632 } |
580 | 633 |
581 TEST_F(UserMediaClientImplTest, StopSourceWhenMediaStreamGoesOutOfScope) { | 634 TEST_P(UserMediaClientImplTest, StopSourceWhenMediaStreamGoesOutOfScope) { |
582 // Generate a stream with both audio and video. | 635 // Generate a stream with both audio and video. |
583 RequestLocalMediaStream(); | 636 RequestLocalMediaStream(); |
584 // Makes sure the test itself don't hold a reference to the created | 637 // Makes sure the test itself don't hold a reference to the created |
585 // MediaStream. | 638 // MediaStream. |
586 user_media_client_impl_->ClearLastGeneratedStream(); | 639 user_media_client_impl_->ClearLastGeneratedStream(); |
587 blink::WebHeap::CollectAllGarbageForTesting(); | 640 blink::WebHeap::CollectAllGarbageForTesting(); |
588 | 641 |
589 // Expect the sources to be stopped when the MediaStream goes out of scope. | 642 // Expect the sources to be stopped when the MediaStream goes out of scope. |
590 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 643 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
591 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 644 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
592 } | 645 } |
593 | 646 |
594 // Test that the MediaStreams are deleted if a new document is loaded in the | 647 // Test that the MediaStreams are deleted if a new document is loaded in the |
595 // frame. | 648 // frame. |
596 TEST_F(UserMediaClientImplTest, LoadNewDocumentInFrame) { | 649 TEST_P(UserMediaClientImplTest, LoadNewDocumentInFrame) { |
597 // Test a stream with both audio and video. | 650 // Test a stream with both audio and video. |
598 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 651 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
599 blink::WebMediaStream desc2 = RequestLocalMediaStream(); | 652 blink::WebMediaStream desc2 = RequestLocalMediaStream(); |
600 LoadNewDocumentInFrame(); | 653 LoadNewDocumentInFrame(); |
601 blink::WebHeap::CollectAllGarbageForTesting(); | 654 blink::WebHeap::CollectAllGarbageForTesting(); |
602 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 655 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
603 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 656 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
604 } | 657 } |
605 | 658 |
606 // This test what happens if a video source to a MediaSteam fails to start. | 659 // This test what happens if a video source to a MediaSteam fails to start. |
607 TEST_F(UserMediaClientImplTest, MediaVideoSourceFailToStart) { | 660 TEST_P(UserMediaClientImplTest, MediaVideoSourceFailToStart) { |
608 user_media_client_impl_->RequestUserMediaForTest(); | 661 user_media_client_impl_->RequestUserMediaForTest(); |
609 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 662 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
610 FailToStartMockedVideoSource(); | 663 FailToStartMockedVideoSource(); |
611 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, | 664 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, |
612 user_media_client_impl_->request_state()); | 665 user_media_client_impl_->request_state()); |
613 EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 666 EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, |
614 user_media_client_impl_->error_reason()); | 667 user_media_client_impl_->error_reason()); |
615 blink::WebHeap::CollectAllGarbageForTesting(); | 668 blink::WebHeap::CollectAllGarbageForTesting(); |
616 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 669 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
617 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 670 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
618 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 671 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
619 } | 672 } |
620 | 673 |
621 // This test what happens if an audio source fail to initialize. | 674 // This test what happens if an audio source fail to initialize. |
622 TEST_F(UserMediaClientImplTest, MediaAudioSourceFailToInitialize) { | 675 TEST_P(UserMediaClientImplTest, MediaAudioSourceFailToInitialize) { |
623 user_media_client_impl_->SetCreateSourceThatFails(true); | 676 user_media_client_impl_->SetCreateSourceThatFails(true); |
624 user_media_client_impl_->RequestUserMediaForTest(); | 677 user_media_client_impl_->RequestUserMediaForTest(); |
625 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 678 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
626 StartMockedVideoSource(); | 679 StartMockedVideoSource(); |
627 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, | 680 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, |
628 user_media_client_impl_->request_state()); | 681 user_media_client_impl_->request_state()); |
629 EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, | 682 EXPECT_EQ(MEDIA_DEVICE_TRACK_START_FAILURE, |
630 user_media_client_impl_->error_reason()); | 683 user_media_client_impl_->error_reason()); |
631 blink::WebHeap::CollectAllGarbageForTesting(); | 684 blink::WebHeap::CollectAllGarbageForTesting(); |
632 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 685 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
633 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 686 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
634 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 687 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
635 } | 688 } |
636 | 689 |
637 // This test what happens if UserMediaClientImpl is deleted before a source has | 690 // This test what happens if UserMediaClientImpl is deleted before a source has |
638 // started. | 691 // started. |
639 TEST_F(UserMediaClientImplTest, MediaStreamImplShutDown) { | 692 TEST_P(UserMediaClientImplTest, MediaStreamImplShutDown) { |
640 user_media_client_impl_->RequestUserMediaForTest(); | 693 user_media_client_impl_->RequestUserMediaForTest(); |
641 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 694 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
642 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 695 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
643 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 696 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
644 user_media_client_impl_->request_state()); | 697 user_media_client_impl_->request_state()); |
645 user_media_client_impl_.reset(); | 698 user_media_client_impl_.reset(); |
646 } | 699 } |
647 | 700 |
648 // This test what happens if a new document is loaded in the frame while the | 701 // This test what happens if a new document is loaded in the frame while the |
649 // MediaStream is being generated by the MediaStreamDispatcher. | 702 // MediaStream is being generated by the MediaStreamDispatcher. |
650 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) { | 703 TEST_P(UserMediaClientImplTest, ReloadFrameWhileGeneratingStream) { |
651 user_media_client_impl_->RequestUserMediaForTest(); | 704 user_media_client_impl_->RequestUserMediaForTest(); |
652 LoadNewDocumentInFrame(); | 705 LoadNewDocumentInFrame(); |
653 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 706 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
654 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 707 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); |
655 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); | 708 EXPECT_EQ(0, ms_dispatcher_->stop_video_device_counter()); |
656 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 709 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
657 user_media_client_impl_->request_state()); | 710 user_media_client_impl_->request_state()); |
658 } | 711 } |
659 | 712 |
660 // This test what happens if a newdocument is loaded in the frame while the | 713 // This test what happens if a newdocument is loaded in the frame while the |
661 // sources are being started. | 714 // sources are being started. |
662 TEST_F(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) { | 715 TEST_P(UserMediaClientImplTest, ReloadFrameWhileGeneratingSources) { |
663 user_media_client_impl_->RequestUserMediaForTest(); | 716 user_media_client_impl_->RequestUserMediaForTest(); |
664 FakeMediaStreamDispatcherRequestUserMediaComplete(); | 717 FakeMediaStreamDispatcherRequestUserMediaComplete(); |
665 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 718 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
666 LoadNewDocumentInFrame(); | 719 LoadNewDocumentInFrame(); |
667 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 720 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
668 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 721 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
669 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, | 722 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_NOT_COMPLETE, |
670 user_media_client_impl_->request_state()); | 723 user_media_client_impl_->request_state()); |
671 } | 724 } |
672 | 725 |
673 // This test what happens if stop is called on a track after the frame has | 726 // This test what happens if stop is called on a track after the frame has |
674 // been reloaded. | 727 // been reloaded. |
675 TEST_F(UserMediaClientImplTest, StopTrackAfterReload) { | 728 TEST_P(UserMediaClientImplTest, StopTrackAfterReload) { |
676 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 729 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
677 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); | 730 EXPECT_EQ(1, ms_dispatcher_->request_stream_counter()); |
678 LoadNewDocumentInFrame(); | 731 LoadNewDocumentInFrame(); |
679 blink::WebHeap::CollectAllGarbageForTesting(); | 732 blink::WebHeap::CollectAllGarbageForTesting(); |
680 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 733 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
681 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 734 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
682 | 735 |
683 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; | 736 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; |
684 mixed_desc.AudioTracks(audio_tracks); | 737 mixed_desc.AudioTracks(audio_tracks); |
685 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); | 738 MediaStreamTrack* audio_track = MediaStreamTrack::GetTrack(audio_tracks[0]); |
686 audio_track->Stop(); | 739 audio_track->Stop(); |
687 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 740 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
688 | 741 |
689 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 742 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
690 mixed_desc.VideoTracks(video_tracks); | 743 mixed_desc.VideoTracks(video_tracks); |
691 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 744 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); |
692 video_track->Stop(); | 745 video_track->Stop(); |
693 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 746 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
694 } | 747 } |
695 | 748 |
696 TEST_F(UserMediaClientImplTest, EnumerateMediaDevices) { | 749 TEST_P(UserMediaClientImplTest, EnumerateMediaDevices) { |
697 user_media_client_impl_->RequestMediaDevicesForTest(); | 750 user_media_client_impl_->RequestMediaDevicesForTest(); |
698 base::RunLoop().RunUntilIdle(); | 751 base::RunLoop().RunUntilIdle(); |
699 | 752 |
700 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED, | 753 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_SUCCEEDED, |
701 user_media_client_impl_->request_state()); | 754 user_media_client_impl_->request_state()); |
702 EXPECT_EQ(static_cast<size_t>(5), | 755 EXPECT_EQ(static_cast<size_t>(5), |
703 user_media_client_impl_->last_devices().size()); | 756 user_media_client_impl_->last_devices().size()); |
704 | 757 |
705 // Audio input device with matched output ID. | 758 // Audio input device with matched output ID. |
706 const blink::WebMediaDeviceInfo* device = | 759 const blink::WebMediaDeviceInfo* device = |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
742 EXPECT_FALSE(device->Label().IsEmpty()); | 795 EXPECT_FALSE(device->Label().IsEmpty()); |
743 EXPECT_FALSE(device->GroupId().IsEmpty()); | 796 EXPECT_FALSE(device->GroupId().IsEmpty()); |
744 | 797 |
745 // Verfify group IDs. | 798 // Verfify group IDs. |
746 EXPECT_TRUE(user_media_client_impl_->last_devices()[0].GroupId().Equals( | 799 EXPECT_TRUE(user_media_client_impl_->last_devices()[0].GroupId().Equals( |
747 user_media_client_impl_->last_devices()[4].GroupId())); | 800 user_media_client_impl_->last_devices()[4].GroupId())); |
748 EXPECT_FALSE(user_media_client_impl_->last_devices()[1].GroupId().Equals( | 801 EXPECT_FALSE(user_media_client_impl_->last_devices()[1].GroupId().Equals( |
749 user_media_client_impl_->last_devices()[4].GroupId())); | 802 user_media_client_impl_->last_devices()[4].GroupId())); |
750 } | 803 } |
751 | 804 |
752 TEST_F(UserMediaClientImplTest, RenderToAssociatedSinkConstraint) { | 805 // TODO(guidou): Remove this test. http://crbug.com/706408 |
806 TEST_P(UserMediaClientImplTest, RenderToAssociatedSinkConstraint) { | |
807 if (!IsOldAudioConstraints()) | |
808 return; | |
809 | |
753 // For a UserMediaRequest without audio, we expect false. | 810 // For a UserMediaRequest without audio, we expect false. |
754 blink::WebUserMediaRequest request = | 811 blink::WebUserMediaRequest request = |
755 blink::WebUserMediaRequest::CreateForTesting(blink::WebMediaConstraints(), | 812 blink::WebUserMediaRequest::CreateForTesting(blink::WebMediaConstraints(), |
756 CreateDefaultConstraints()); | 813 CreateDefaultConstraints()); |
757 user_media_client_impl_->RequestUserMediaForTest(request); | 814 user_media_client_impl_->RequestUserMediaForTest(request); |
758 EXPECT_FALSE( | 815 EXPECT_FALSE( |
759 user_media_client_impl_->UserMediaRequestHasAutomaticDeviceSelection()); | 816 user_media_client_impl_->UserMediaRequestHasAutomaticDeviceSelection()); |
760 user_media_client_impl_->CancelUserMediaRequest(request); | 817 user_media_client_impl_->CancelUserMediaRequest(request); |
761 | 818 |
762 // If audio is requested, but no constraint, it should be true. | 819 // If audio is requested, but no constraint, it should be true. |
(...skipping 16 matching lines...) Expand all Loading... | |
779 factory.AddAdvanced().render_to_associated_sink.SetExact(false); | 836 factory.AddAdvanced().render_to_associated_sink.SetExact(false); |
780 EXPECT_FALSE(AudioRequestHasAutomaticDeviceSelection( | 837 EXPECT_FALSE(AudioRequestHasAutomaticDeviceSelection( |
781 factory.CreateWebMediaConstraints())); | 838 factory.CreateWebMediaConstraints())); |
782 | 839 |
783 factory.Reset(); | 840 factory.Reset(); |
784 factory.basic().render_to_associated_sink.SetExact(false); | 841 factory.basic().render_to_associated_sink.SetExact(false); |
785 EXPECT_FALSE(AudioRequestHasAutomaticDeviceSelection( | 842 EXPECT_FALSE(AudioRequestHasAutomaticDeviceSelection( |
786 factory.CreateWebMediaConstraints())); | 843 factory.CreateWebMediaConstraints())); |
787 } | 844 } |
788 | 845 |
789 TEST_F(UserMediaClientImplTest, ObserveMediaDeviceChanges) { | 846 TEST_P(UserMediaClientImplTest, DefaultConstraintsPropagate) { |
847 if (IsOldAudioConstraints()) | |
848 return; | |
849 | |
850 blink::WebUserMediaRequest request = | |
851 blink::WebUserMediaRequest::CreateForTesting(CreateDefaultConstraints(), | |
852 CreateDefaultConstraints()); | |
853 user_media_client_impl_->RequestUserMediaForTest(request); | |
854 AudioCaptureSettings audio_capture_settings = | |
855 user_media_client_impl_->AudioSettings(); | |
856 VideoCaptureSettings video_capture_settings = | |
857 user_media_client_impl_->VideoSettings(); | |
858 user_media_client_impl_->CancelUserMediaRequest(request); | |
859 | |
860 // Check default values selected by the constraints algorithm. | |
861 EXPECT_TRUE(audio_capture_settings.HasValue()); | |
862 EXPECT_EQ(media::AudioDeviceDescription::kDefaultDeviceId, | |
863 audio_capture_settings.device_id()); | |
864 EXPECT_FALSE(audio_capture_settings.hotword_enabled()); | |
865 EXPECT_TRUE(audio_capture_settings.disable_local_echo()); | |
866 EXPECT_FALSE(audio_capture_settings.render_to_associated_sink()); | |
867 | |
868 const AudioProcessingProperties& properties = | |
869 audio_capture_settings.audio_processing_properties(); | |
870 EXPECT_TRUE(properties.enable_sw_echo_cancellation); | |
871 EXPECT_FALSE(properties.disable_hw_echo_cancellation); | |
872 EXPECT_FALSE(properties.goog_audio_mirroring); | |
873 EXPECT_TRUE(properties.goog_auto_gain_control); | |
874 // The default value for goog_experimental_echo_cancellation is platform | |
875 // dependent. | |
876 EXPECT_EQ(AudioProcessingProperties().goog_experimental_echo_cancellation, | |
877 properties.goog_experimental_echo_cancellation); | |
878 EXPECT_TRUE(properties.goog_typing_noise_detection); | |
879 EXPECT_TRUE(properties.goog_noise_suppression); | |
880 EXPECT_TRUE(properties.goog_experimental_noise_suppression); | |
881 EXPECT_TRUE(properties.goog_beamforming); | |
882 EXPECT_TRUE(properties.goog_highpass_filter); | |
883 EXPECT_TRUE(properties.goog_experimental_auto_gain_control); | |
884 EXPECT_TRUE(properties.goog_array_geometry.empty()); | |
885 | |
886 EXPECT_TRUE(video_capture_settings.HasValue()); | |
887 EXPECT_EQ(video_capture_settings.Width(), | |
888 MediaStreamVideoSource::kDefaultWidth); | |
889 EXPECT_EQ(video_capture_settings.Height(), | |
890 MediaStreamVideoSource::kDefaultHeight); | |
891 EXPECT_EQ(video_capture_settings.FrameRate(), | |
892 MediaStreamVideoSource::kDefaultFrameRate); | |
893 EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(), | |
894 media::RESOLUTION_POLICY_FIXED_RESOLUTION); | |
895 EXPECT_EQ(video_capture_settings.PowerLineFrequency(), | |
896 media::PowerLineFrequency::FREQUENCY_DEFAULT); | |
897 EXPECT_FALSE(video_capture_settings.noise_reduction()); | |
898 EXPECT_EQ(video_capture_settings.min_frame_rate(), 1.0); | |
899 | |
900 const VideoTrackAdapterSettings& track_settings = | |
901 video_capture_settings.track_adapter_settings(); | |
902 EXPECT_EQ(track_settings.max_width, MediaStreamVideoSource::kDefaultWidth); | |
903 EXPECT_EQ(track_settings.max_height, MediaStreamVideoSource::kDefaultHeight); | |
904 EXPECT_EQ(track_settings.min_aspect_ratio, | |
905 1.0 / MediaStreamVideoSource::kDefaultHeight); | |
906 EXPECT_EQ(track_settings.max_aspect_ratio, | |
907 MediaStreamVideoSource::kDefaultWidth); | |
908 // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment | |
909 EXPECT_EQ(track_settings.max_frame_rate, 0.0); | |
910 } | |
911 | |
912 TEST_P(UserMediaClientImplTest, DefaultTabCapturePropagate) { | |
913 if (IsOldAudioConstraints()) | |
914 return; | |
915 | |
916 MockConstraintFactory factory; | |
917 factory.basic().media_stream_source.SetExact( | |
918 blink::WebString::FromASCII(kMediaStreamSourceTab)); | |
919 blink::WebMediaConstraints audio_constraints = | |
920 factory.CreateWebMediaConstraints(); | |
921 blink::WebMediaConstraints video_constraints = | |
922 factory.CreateWebMediaConstraints(); | |
923 blink::WebUserMediaRequest request = | |
924 blink::WebUserMediaRequest::CreateForTesting(audio_constraints, | |
925 video_constraints); | |
926 user_media_client_impl_->RequestUserMediaForTest(request); | |
927 AudioCaptureSettings audio_capture_settings = | |
928 user_media_client_impl_->AudioSettings(); | |
929 VideoCaptureSettings video_capture_settings = | |
930 user_media_client_impl_->VideoSettings(); | |
931 user_media_client_impl_->CancelUserMediaRequest(request); | |
932 | |
933 // Check default values selected by the constraints algorithm. | |
934 EXPECT_TRUE(audio_capture_settings.HasValue()); | |
935 EXPECT_EQ(std::string(), audio_capture_settings.device_id()); | |
936 EXPECT_FALSE(audio_capture_settings.hotword_enabled()); | |
937 EXPECT_TRUE(audio_capture_settings.disable_local_echo()); | |
938 EXPECT_FALSE(audio_capture_settings.render_to_associated_sink()); | |
939 | |
940 const AudioProcessingProperties& properties = | |
941 audio_capture_settings.audio_processing_properties(); | |
942 EXPECT_FALSE(properties.enable_sw_echo_cancellation); | |
943 EXPECT_FALSE(properties.disable_hw_echo_cancellation); | |
944 EXPECT_FALSE(properties.goog_audio_mirroring); | |
945 EXPECT_FALSE(properties.goog_auto_gain_control); | |
946 EXPECT_FALSE(properties.goog_experimental_echo_cancellation); | |
947 EXPECT_FALSE(properties.goog_typing_noise_detection); | |
948 EXPECT_FALSE(properties.goog_noise_suppression); | |
949 EXPECT_FALSE(properties.goog_experimental_noise_suppression); | |
950 EXPECT_FALSE(properties.goog_beamforming); | |
951 EXPECT_FALSE(properties.goog_highpass_filter); | |
952 EXPECT_FALSE(properties.goog_experimental_auto_gain_control); | |
953 EXPECT_TRUE(properties.goog_array_geometry.empty()); | |
954 | |
955 EXPECT_TRUE(video_capture_settings.HasValue()); | |
956 EXPECT_EQ(video_capture_settings.Width(), kDefaultScreenCastWidth); | |
957 EXPECT_EQ(video_capture_settings.Height(), kDefaultScreenCastHeight); | |
958 EXPECT_EQ(video_capture_settings.FrameRate(), kDefaultScreenCastFrameRate); | |
959 EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(), | |
960 media::RESOLUTION_POLICY_FIXED_RESOLUTION); | |
961 EXPECT_EQ(video_capture_settings.PowerLineFrequency(), | |
962 media::PowerLineFrequency::FREQUENCY_DEFAULT); | |
963 EXPECT_FALSE(video_capture_settings.noise_reduction()); | |
964 EXPECT_FALSE(video_capture_settings.min_frame_rate().has_value()); | |
965 EXPECT_FALSE(video_capture_settings.max_frame_rate().has_value()); | |
966 | |
967 const VideoTrackAdapterSettings& track_settings = | |
968 video_capture_settings.track_adapter_settings(); | |
969 EXPECT_EQ(track_settings.max_width, kDefaultScreenCastWidth); | |
970 EXPECT_EQ(track_settings.max_height, kDefaultScreenCastHeight); | |
971 EXPECT_EQ(track_settings.min_aspect_ratio, 1.0 / kMaxScreenCastDimension); | |
972 EXPECT_EQ(track_settings.max_aspect_ratio, kMaxScreenCastDimension); | |
973 // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment | |
974 EXPECT_EQ(track_settings.max_frame_rate, 0.0); | |
975 } | |
976 | |
977 TEST_P(UserMediaClientImplTest, DefaultDesktopCapturePropagate) { | |
978 if (IsOldAudioConstraints()) | |
979 return; | |
980 | |
981 MockConstraintFactory factory; | |
982 factory.basic().media_stream_source.SetExact( | |
983 blink::WebString::FromASCII(kMediaStreamSourceDesktop)); | |
984 blink::WebMediaConstraints audio_constraints = | |
985 factory.CreateWebMediaConstraints(); | |
986 blink::WebMediaConstraints video_constraints = | |
987 factory.CreateWebMediaConstraints(); | |
988 blink::WebUserMediaRequest request = | |
989 blink::WebUserMediaRequest::CreateForTesting(audio_constraints, | |
990 video_constraints); | |
991 user_media_client_impl_->RequestUserMediaForTest(request); | |
992 AudioCaptureSettings audio_capture_settings = | |
993 user_media_client_impl_->AudioSettings(); | |
994 VideoCaptureSettings video_capture_settings = | |
995 user_media_client_impl_->VideoSettings(); | |
996 user_media_client_impl_->CancelUserMediaRequest(request); | |
997 | |
998 // Check default values selected by the constraints algorithm. | |
999 EXPECT_TRUE(audio_capture_settings.HasValue()); | |
1000 EXPECT_EQ(std::string(), audio_capture_settings.device_id()); | |
1001 EXPECT_FALSE(audio_capture_settings.hotword_enabled()); | |
1002 EXPECT_FALSE(audio_capture_settings.disable_local_echo()); | |
1003 EXPECT_FALSE(audio_capture_settings.render_to_associated_sink()); | |
1004 | |
1005 const AudioProcessingProperties& properties = | |
1006 audio_capture_settings.audio_processing_properties(); | |
1007 EXPECT_FALSE(properties.enable_sw_echo_cancellation); | |
1008 EXPECT_FALSE(properties.disable_hw_echo_cancellation); | |
1009 EXPECT_FALSE(properties.goog_audio_mirroring); | |
1010 EXPECT_FALSE(properties.goog_auto_gain_control); | |
1011 EXPECT_FALSE(properties.goog_experimental_echo_cancellation); | |
1012 EXPECT_FALSE(properties.goog_typing_noise_detection); | |
1013 EXPECT_FALSE(properties.goog_noise_suppression); | |
1014 EXPECT_FALSE(properties.goog_experimental_noise_suppression); | |
1015 EXPECT_FALSE(properties.goog_beamforming); | |
1016 EXPECT_FALSE(properties.goog_highpass_filter); | |
1017 EXPECT_FALSE(properties.goog_experimental_auto_gain_control); | |
1018 EXPECT_TRUE(properties.goog_array_geometry.empty()); | |
1019 | |
1020 EXPECT_TRUE(video_capture_settings.HasValue()); | |
1021 EXPECT_EQ(video_capture_settings.Width(), kDefaultScreenCastWidth); | |
1022 EXPECT_EQ(video_capture_settings.Height(), kDefaultScreenCastHeight); | |
1023 EXPECT_EQ(video_capture_settings.FrameRate(), kDefaultScreenCastFrameRate); | |
1024 EXPECT_EQ(video_capture_settings.ResolutionChangePolicy(), | |
1025 media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT); | |
1026 EXPECT_EQ(video_capture_settings.PowerLineFrequency(), | |
1027 media::PowerLineFrequency::FREQUENCY_DEFAULT); | |
1028 EXPECT_FALSE(video_capture_settings.noise_reduction()); | |
1029 EXPECT_FALSE(video_capture_settings.min_frame_rate().has_value()); | |
1030 EXPECT_FALSE(video_capture_settings.max_frame_rate().has_value()); | |
1031 | |
1032 const VideoTrackAdapterSettings& track_settings = | |
1033 video_capture_settings.track_adapter_settings(); | |
1034 EXPECT_EQ(track_settings.max_width, kDefaultScreenCastWidth); | |
1035 EXPECT_EQ(track_settings.max_height, kDefaultScreenCastHeight); | |
1036 EXPECT_EQ(track_settings.min_aspect_ratio, 1.0 / kMaxScreenCastDimension); | |
1037 EXPECT_EQ(track_settings.max_aspect_ratio, kMaxScreenCastDimension); | |
1038 // 0.0 is the default max_frame_rate and it indicates no frame-rate adjustment | |
1039 EXPECT_EQ(track_settings.max_frame_rate, 0.0); | |
1040 } | |
1041 | |
1042 TEST_P(UserMediaClientImplTest, NonDefaultAudioConstraintsPropagate) { | |
1043 if (IsOldAudioConstraints()) | |
1044 return; | |
1045 | |
1046 MockConstraintFactory factory; | |
1047 factory.basic().device_id.SetExact( | |
1048 blink::WebString::FromASCII(kFakeAudioInputDeviceId1)); | |
1049 factory.basic().hotword_enabled.SetExact(true); | |
1050 factory.basic().disable_local_echo.SetExact(true); | |
1051 factory.basic().render_to_associated_sink.SetExact(true); | |
1052 factory.basic().echo_cancellation.SetExact(false); | |
1053 factory.basic().goog_audio_mirroring.SetExact(true); | |
1054 factory.basic().goog_typing_noise_detection.SetExact(true); | |
1055 factory.basic().goog_array_geometry.SetExact( | |
1056 blink::WebString::FromASCII("1 1 1")); | |
1057 blink::WebMediaConstraints audio_constraints = | |
1058 factory.CreateWebMediaConstraints(); | |
1059 // Request contains only audio | |
1060 blink::WebUserMediaRequest request = | |
1061 blink::WebUserMediaRequest::CreateForTesting( | |
1062 audio_constraints, blink::WebMediaConstraints()); | |
1063 user_media_client_impl_->RequestUserMediaForTest(request); | |
1064 AudioCaptureSettings audio_capture_settings = | |
1065 user_media_client_impl_->AudioSettings(); | |
1066 VideoCaptureSettings video_capture_settings = | |
1067 user_media_client_impl_->VideoSettings(); | |
1068 user_media_client_impl_->CancelUserMediaRequest(request); | |
1069 | |
1070 EXPECT_FALSE(video_capture_settings.HasValue()); | |
1071 | |
1072 EXPECT_TRUE(audio_capture_settings.HasValue()); | |
1073 EXPECT_EQ(kFakeAudioInputDeviceId1, audio_capture_settings.device_id()); | |
1074 EXPECT_TRUE(audio_capture_settings.hotword_enabled()); | |
1075 EXPECT_TRUE(audio_capture_settings.disable_local_echo()); | |
1076 EXPECT_TRUE(audio_capture_settings.render_to_associated_sink()); | |
1077 | |
1078 const AudioProcessingProperties& properties = | |
1079 audio_capture_settings.audio_processing_properties(); | |
1080 EXPECT_FALSE(properties.enable_sw_echo_cancellation); | |
1081 EXPECT_TRUE(properties.disable_hw_echo_cancellation); | |
1082 EXPECT_TRUE(properties.goog_audio_mirroring); | |
1083 EXPECT_FALSE(properties.goog_auto_gain_control); | |
1084 EXPECT_FALSE(properties.goog_experimental_echo_cancellation); | |
1085 EXPECT_TRUE(properties.goog_typing_noise_detection); | |
1086 EXPECT_FALSE(properties.goog_noise_suppression); | |
1087 EXPECT_FALSE(properties.goog_experimental_noise_suppression); | |
1088 EXPECT_FALSE(properties.goog_beamforming); | |
1089 EXPECT_FALSE(properties.goog_highpass_filter); | |
1090 EXPECT_FALSE(properties.goog_experimental_auto_gain_control); | |
1091 const std::vector<media::Point> kGeometry = {{1.0, 1.0, 1.0}}; | |
1092 EXPECT_EQ(kGeometry, properties.goog_array_geometry); | |
1093 } | |
1094 | |
1095 TEST_P(UserMediaClientImplTest, ObserveMediaDeviceChanges) { | |
790 EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications( | 1096 EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications( |
791 MEDIA_DEVICE_TYPE_AUDIO_INPUT, _)); | 1097 MEDIA_DEVICE_TYPE_AUDIO_INPUT, _)); |
792 EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications( | 1098 EXPECT_CALL(media_devices_dispatcher_, SubscribeDeviceChangeNotifications( |
793 MEDIA_DEVICE_TYPE_VIDEO_INPUT, _)); | 1099 MEDIA_DEVICE_TYPE_VIDEO_INPUT, _)); |
794 EXPECT_CALL( | 1100 EXPECT_CALL( |
795 media_devices_dispatcher_, | 1101 media_devices_dispatcher_, |
796 SubscribeDeviceChangeNotifications(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)); | 1102 SubscribeDeviceChangeNotifications(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)); |
797 user_media_client_impl_->SetMediaDeviceChangeObserver( | 1103 user_media_client_impl_->SetMediaDeviceChangeObserver( |
798 blink::WebMediaDeviceChangeObserver(true)); | 1104 blink::WebMediaDeviceChangeObserver(true)); |
799 base::RunLoop().RunUntilIdle(); | 1105 base::RunLoop().RunUntilIdle(); |
(...skipping 15 matching lines...) Expand all Loading... | |
815 EXPECT_CALL( | 1121 EXPECT_CALL( |
816 media_devices_dispatcher_, | 1122 media_devices_dispatcher_, |
817 UnsubscribeDeviceChangeNotifications(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)); | 1123 UnsubscribeDeviceChangeNotifications(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)); |
818 | 1124 |
819 user_media_client_impl_->SetMediaDeviceChangeObserver( | 1125 user_media_client_impl_->SetMediaDeviceChangeObserver( |
820 blink::WebMediaDeviceChangeObserver()); | 1126 blink::WebMediaDeviceChangeObserver()); |
821 base::RunLoop().RunUntilIdle(); | 1127 base::RunLoop().RunUntilIdle(); |
822 } | 1128 } |
823 | 1129 |
824 // This test what happens if the audio stream has same id with video stream. | 1130 // This test what happens if the audio stream has same id with video stream. |
825 TEST_F(UserMediaClientImplTest, AudioVideoWithSameId) { | 1131 TEST_P(UserMediaClientImplTest, AudioVideoWithSameId) { |
826 ms_dispatcher_->TestSameId(); | 1132 ms_dispatcher_->TestSameId(); |
827 | 1133 |
828 // Generate a stream with both audio and video. | 1134 // Generate a stream with both audio and video. |
829 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); | 1135 blink::WebMediaStream mixed_desc = RequestLocalMediaStream(); |
830 | 1136 |
831 // Remove video track. This should trigger | 1137 // Remove video track. This should trigger |
832 // UserMediaClientImpl::OnLocalSourceStopped, and has video track to be | 1138 // UserMediaClientImpl::OnLocalSourceStopped, and has video track to be |
833 // removed from its |local_sources_|. | 1139 // removed from its |local_sources_|. |
834 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 1140 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
835 mixed_desc.VideoTracks(video_tracks); | 1141 mixed_desc.VideoTracks(video_tracks); |
836 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); | 1142 MediaStreamTrack* video_track = MediaStreamTrack::GetTrack(video_tracks[0]); |
837 video_track->Stop(); | 1143 video_track->Stop(); |
838 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 1144 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
839 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); | 1145 EXPECT_EQ(0, ms_dispatcher_->stop_audio_device_counter()); |
840 | 1146 |
841 // Now we load a new document in the web frame. If in the above Stop() call, | 1147 // Now we load a new document in the web frame. If in the above Stop() call, |
842 // UserMediaClientImpl accidentally removed audio track, then video track will | 1148 // UserMediaClientImpl accidentally removed audio track, then video track will |
843 // be removed again here, which is incorrect. | 1149 // be removed again here, which is incorrect. |
844 LoadNewDocumentInFrame(); | 1150 LoadNewDocumentInFrame(); |
845 blink::WebHeap::CollectAllGarbageForTesting(); | 1151 blink::WebHeap::CollectAllGarbageForTesting(); |
846 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); | 1152 EXPECT_EQ(1, ms_dispatcher_->stop_video_device_counter()); |
847 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); | 1153 EXPECT_EQ(1, ms_dispatcher_->stop_audio_device_counter()); |
848 } | 1154 } |
849 | 1155 |
850 TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidAudioDeviceId) { | 1156 TEST_P(UserMediaClientImplTest, CreateWithMandatoryInvalidAudioDeviceId) { |
851 blink::WebMediaConstraints audio_constraints = | 1157 blink::WebMediaConstraints audio_constraints = |
852 CreateDeviceConstraints(kInvalidDeviceId); | 1158 CreateDeviceConstraints(kInvalidDeviceId); |
853 blink::WebUserMediaRequest request = | 1159 blink::WebUserMediaRequest request = |
854 blink::WebUserMediaRequest::CreateForTesting( | 1160 blink::WebUserMediaRequest::CreateForTesting( |
855 audio_constraints, blink::WebMediaConstraints()); | 1161 audio_constraints, blink::WebMediaConstraints()); |
856 user_media_client_impl_->RequestUserMediaForTest(request); | 1162 user_media_client_impl_->RequestUserMediaForTest(request); |
857 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, | 1163 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, |
858 user_media_client_impl_->request_state()); | 1164 user_media_client_impl_->request_state()); |
859 } | 1165 } |
860 | 1166 |
861 TEST_F(UserMediaClientImplTest, CreateWithMandatoryInvalidVideoDeviceId) { | 1167 TEST_P(UserMediaClientImplTest, CreateWithMandatoryInvalidVideoDeviceId) { |
862 blink::WebMediaConstraints video_constraints = | 1168 blink::WebMediaConstraints video_constraints = |
863 CreateDeviceConstraints(kInvalidDeviceId); | 1169 CreateDeviceConstraints(kInvalidDeviceId); |
864 blink::WebUserMediaRequest request = | 1170 blink::WebUserMediaRequest request = |
865 blink::WebUserMediaRequest::CreateForTesting(blink::WebMediaConstraints(), | 1171 blink::WebUserMediaRequest::CreateForTesting(blink::WebMediaConstraints(), |
866 video_constraints); | 1172 video_constraints); |
867 user_media_client_impl_->RequestUserMediaForTest(request); | 1173 user_media_client_impl_->RequestUserMediaForTest(request); |
868 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, | 1174 EXPECT_EQ(UserMediaClientImplUnderTest::REQUEST_FAILED, |
869 user_media_client_impl_->request_state()); | 1175 user_media_client_impl_->request_state()); |
870 } | 1176 } |
871 | 1177 |
872 TEST_F(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) { | 1178 TEST_P(UserMediaClientImplTest, CreateWithMandatoryValidDeviceIds) { |
873 blink::WebMediaConstraints audio_constraints = | 1179 blink::WebMediaConstraints audio_constraints = |
874 CreateDeviceConstraints(kFakeAudioInputDeviceId1); | 1180 CreateDeviceConstraints(kFakeAudioInputDeviceId1); |
875 blink::WebMediaConstraints video_constraints = | 1181 blink::WebMediaConstraints video_constraints = |
876 CreateDeviceConstraints(kFakeVideoInputDeviceId1); | 1182 CreateDeviceConstraints(kFakeVideoInputDeviceId1); |
877 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1183 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
878 kFakeAudioInputDeviceId1, | 1184 kFakeAudioInputDeviceId1, |
879 kFakeVideoInputDeviceId1); | 1185 kFakeVideoInputDeviceId1); |
880 } | 1186 } |
881 | 1187 |
882 TEST_F(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) { | 1188 TEST_P(UserMediaClientImplTest, CreateWithBasicIdealValidDeviceId) { |
883 blink::WebMediaConstraints audio_constraints = | 1189 blink::WebMediaConstraints audio_constraints = |
884 CreateDeviceConstraints(nullptr, kFakeAudioInputDeviceId1); | 1190 CreateDeviceConstraints(nullptr, kFakeAudioInputDeviceId1); |
885 blink::WebMediaConstraints video_constraints = | 1191 blink::WebMediaConstraints video_constraints = |
886 CreateDeviceConstraints(nullptr, kFakeVideoInputDeviceId1); | 1192 CreateDeviceConstraints(nullptr, kFakeVideoInputDeviceId1); |
887 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1193 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
888 kFakeAudioInputDeviceId1, | 1194 kFakeAudioInputDeviceId1, |
889 kFakeVideoInputDeviceId1); | 1195 kFakeVideoInputDeviceId1); |
890 } | 1196 } |
891 | 1197 |
892 TEST_F(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) { | 1198 TEST_P(UserMediaClientImplTest, CreateWithAdvancedExactValidDeviceId) { |
893 blink::WebMediaConstraints audio_constraints = | 1199 blink::WebMediaConstraints audio_constraints = |
894 CreateDeviceConstraints(nullptr, nullptr, kFakeAudioInputDeviceId1); | 1200 CreateDeviceConstraints(nullptr, nullptr, kFakeAudioInputDeviceId1); |
895 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints( | 1201 blink::WebMediaConstraints video_constraints = CreateDeviceConstraints( |
896 nullptr, nullptr, kFakeVideoInputDeviceId1); | 1202 nullptr, nullptr, kFakeVideoInputDeviceId1); |
897 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1203 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
898 kFakeAudioInputDeviceId1, | 1204 kFakeAudioInputDeviceId1, |
899 kFakeVideoInputDeviceId1); | 1205 kFakeVideoInputDeviceId1); |
900 } | 1206 } |
901 | 1207 |
902 TEST_F(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) { | 1208 TEST_P(UserMediaClientImplTest, CreateWithAllOptionalInvalidDeviceId) { |
903 blink::WebMediaConstraints audio_constraints = | 1209 blink::WebMediaConstraints audio_constraints = |
904 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); | 1210 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); |
905 blink::WebMediaConstraints video_constraints = | 1211 blink::WebMediaConstraints video_constraints = |
906 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); | 1212 CreateDeviceConstraints(nullptr, kInvalidDeviceId, kInvalidDeviceId); |
907 // MockMediaStreamDispatcher uses empty string as default audio device ID. | 1213 // MockMediaStreamDispatcher uses empty string as default audio device ID. |
908 // MockMediaDevicesDispatcher uses the first device in the enumeration as | 1214 // MockMediaDevicesDispatcher uses the first device in the enumeration as |
909 // default video device ID. | 1215 // default audio or video device ID. |
1216 std::string expected_audio_device_id = | |
1217 IsOldAudioConstraints() ? std::string() | |
1218 : media::AudioDeviceDescription::kDefaultDeviceId; | |
910 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1219 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
911 std::string(), kFakeVideoInputDeviceId1); | 1220 expected_audio_device_id, |
1221 kFakeVideoInputDeviceId1); | |
912 } | 1222 } |
913 | 1223 |
914 TEST_F(UserMediaClientImplTest, CreateWithFacingModeUser) { | 1224 TEST_P(UserMediaClientImplTest, CreateWithFacingModeUser) { |
915 blink::WebMediaConstraints audio_constraints = | 1225 blink::WebMediaConstraints audio_constraints = |
916 CreateDeviceConstraints(kFakeAudioInputDeviceId1); | 1226 CreateDeviceConstraints(kFakeAudioInputDeviceId1); |
917 blink::WebMediaConstraints video_constraints = | 1227 blink::WebMediaConstraints video_constraints = |
918 CreateFacingModeConstraints("user"); | 1228 CreateFacingModeConstraints("user"); |
919 // kFakeVideoInputDeviceId1 has user facing mode. | 1229 // kFakeVideoInputDeviceId1 has user facing mode. |
920 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1230 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
921 kFakeAudioInputDeviceId1, | 1231 kFakeAudioInputDeviceId1, |
922 kFakeVideoInputDeviceId1); | 1232 kFakeVideoInputDeviceId1); |
923 } | 1233 } |
924 | 1234 |
925 TEST_F(UserMediaClientImplTest, CreateWithFacingModeEnvironment) { | 1235 TEST_P(UserMediaClientImplTest, CreateWithFacingModeEnvironment) { |
926 blink::WebMediaConstraints audio_constraints = | 1236 blink::WebMediaConstraints audio_constraints = |
927 CreateDeviceConstraints(kFakeAudioInputDeviceId1); | 1237 CreateDeviceConstraints(kFakeAudioInputDeviceId1); |
928 blink::WebMediaConstraints video_constraints = | 1238 blink::WebMediaConstraints video_constraints = |
929 CreateFacingModeConstraints("environment"); | 1239 CreateFacingModeConstraints("environment"); |
930 // kFakeVideoInputDeviceId2 has environment facing mode. | 1240 // kFakeVideoInputDeviceId2 has environment facing mode. |
931 TestValidRequestWithConstraints(audio_constraints, video_constraints, | 1241 TestValidRequestWithConstraints(audio_constraints, video_constraints, |
932 kFakeAudioInputDeviceId1, | 1242 kFakeAudioInputDeviceId1, |
933 kFakeVideoInputDeviceId2); | 1243 kFakeVideoInputDeviceId2); |
934 } | 1244 } |
935 | 1245 |
1246 INSTANTIATE_TEST_CASE_P(, | |
1247 UserMediaClientImplTest, | |
1248 testing::Values(true, false)); | |
1249 | |
936 } // namespace content | 1250 } // namespace content |
OLD | NEW |