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

Side by Side Diff: content/renderer/media/user_media_client_impl_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698