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

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: address hbos comments 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 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698