OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/browser/renderer_host/media/media_devices_manager.h" | 5 #include "content/browser/renderer_host/media/media_devices_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(0); | 342 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(0); |
343 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) | 343 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) |
344 .Times(2); | 344 .Times(2); |
345 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(0); | 345 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(0); |
346 EXPECT_CALL(*this, MockCallback(_)) | 346 EXPECT_CALL(*this, MockCallback(_)) |
347 .Times(2 * kNumCalls) | 347 .Times(2 * kNumCalls) |
348 .WillRepeatedly(SaveArg<0>(&enumeration)); | 348 .WillRepeatedly(SaveArg<0>(&enumeration)); |
349 | 349 |
350 // Simulate device change | 350 // Simulate device change |
351 size_t num_video_input_devices = 5; | 351 size_t num_video_input_devices = 5; |
352 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 352 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 353 num_video_input_devices); |
353 EnableCache(MEDIA_DEVICE_TYPE_VIDEO_INPUT); | 354 EnableCache(MEDIA_DEVICE_TYPE_VIDEO_INPUT); |
354 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; | 355 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; |
355 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; | 356 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; |
356 for (int i = 0; i < kNumCalls; i++) { | 357 for (int i = 0; i < kNumCalls; i++) { |
357 base::RunLoop run_loop; | 358 base::RunLoop run_loop; |
358 media_devices_manager_->EnumerateDevices( | 359 media_devices_manager_->EnumerateDevices( |
359 devices_to_enumerate, | 360 devices_to_enumerate, |
360 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, | 361 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, |
361 base::Unretained(this), &run_loop)); | 362 base::Unretained(this), &run_loop)); |
362 run_loop.Run(); | 363 run_loop.Run(); |
363 EXPECT_EQ(num_video_input_devices, | 364 EXPECT_EQ(num_video_input_devices, |
364 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); | 365 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); |
365 } | 366 } |
366 | 367 |
367 // Simulate device change | 368 // Simulate device change |
368 num_video_input_devices = 9; | 369 num_video_input_devices = 9; |
369 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 370 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 371 num_video_input_devices); |
370 media_devices_manager_->OnDevicesChanged( | 372 media_devices_manager_->OnDevicesChanged( |
371 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 373 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
372 | 374 |
373 for (int i = 0; i < kNumCalls; i++) { | 375 for (int i = 0; i < kNumCalls; i++) { |
374 base::RunLoop run_loop; | 376 base::RunLoop run_loop; |
375 media_devices_manager_->EnumerateDevices( | 377 media_devices_manager_->EnumerateDevices( |
376 devices_to_enumerate, | 378 devices_to_enumerate, |
377 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, | 379 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, |
378 base::Unretained(this), &run_loop)); | 380 base::Unretained(this), &run_loop)); |
379 run_loop.Run(); | 381 run_loop.Run(); |
380 EXPECT_EQ(num_video_input_devices, | 382 EXPECT_EQ(num_video_input_devices, |
381 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); | 383 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); |
382 } | 384 } |
383 } | 385 } |
384 | 386 |
385 TEST_F(MediaDevicesManagerTest, EnumerateCacheAllWithDeviceChanges) { | 387 TEST_F(MediaDevicesManagerTest, EnumerateCacheAllWithDeviceChanges) { |
386 MediaDeviceEnumeration enumeration; | 388 MediaDeviceEnumeration enumeration; |
387 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(2); | 389 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(2); |
388 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) | 390 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) |
389 .Times(2); | 391 .Times(2); |
390 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(2); | 392 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(2); |
391 EXPECT_CALL(*this, MockCallback(_)) | 393 EXPECT_CALL(*this, MockCallback(_)) |
392 .Times(2 * kNumCalls) | 394 .Times(2 * kNumCalls) |
393 .WillRepeatedly(SaveArg<0>(&enumeration)); | 395 .WillRepeatedly(SaveArg<0>(&enumeration)); |
394 | 396 |
395 size_t num_audio_input_devices = 5; | 397 size_t num_audio_input_devices = 5; |
396 size_t num_video_input_devices = 4; | 398 size_t num_video_input_devices = 4; |
397 size_t num_audio_output_devices = 3; | 399 size_t num_audio_output_devices = 3; |
398 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); | 400 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); |
399 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 401 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 402 num_video_input_devices); |
400 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); | 403 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); |
401 EnableCache(MEDIA_DEVICE_TYPE_AUDIO_INPUT); | 404 EnableCache(MEDIA_DEVICE_TYPE_AUDIO_INPUT); |
402 EnableCache(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT); | 405 EnableCache(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT); |
403 EnableCache(MEDIA_DEVICE_TYPE_VIDEO_INPUT); | 406 EnableCache(MEDIA_DEVICE_TYPE_VIDEO_INPUT); |
404 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; | 407 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; |
405 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = true; | 408 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = true; |
406 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; | 409 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; |
407 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = true; | 410 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = true; |
408 for (int i = 0; i < kNumCalls; i++) { | 411 for (int i = 0; i < kNumCalls; i++) { |
409 base::RunLoop run_loop; | 412 base::RunLoop run_loop; |
410 media_devices_manager_->EnumerateDevices( | 413 media_devices_manager_->EnumerateDevices( |
411 devices_to_enumerate, | 414 devices_to_enumerate, |
412 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, | 415 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, |
413 base::Unretained(this), &run_loop)); | 416 base::Unretained(this), &run_loop)); |
414 run_loop.Run(); | 417 run_loop.Run(); |
415 EXPECT_EQ(num_audio_input_devices, | 418 EXPECT_EQ(num_audio_input_devices, |
416 enumeration[MEDIA_DEVICE_TYPE_AUDIO_INPUT].size()); | 419 enumeration[MEDIA_DEVICE_TYPE_AUDIO_INPUT].size()); |
417 EXPECT_EQ(num_video_input_devices, | 420 EXPECT_EQ(num_video_input_devices, |
418 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); | 421 enumeration[MEDIA_DEVICE_TYPE_VIDEO_INPUT].size()); |
419 EXPECT_EQ(num_audio_output_devices, | 422 EXPECT_EQ(num_audio_output_devices, |
420 enumeration[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].size()); | 423 enumeration[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT].size()); |
421 } | 424 } |
422 | 425 |
423 // Simulate device changes | 426 // Simulate device changes |
424 num_audio_input_devices = 3; | 427 num_audio_input_devices = 3; |
425 num_video_input_devices = 2; | 428 num_video_input_devices = 2; |
426 num_audio_output_devices = 4; | 429 num_audio_output_devices = 4; |
427 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); | 430 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); |
428 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 431 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 432 num_video_input_devices); |
429 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); | 433 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); |
430 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); | 434 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); |
431 media_devices_manager_->OnDevicesChanged( | 435 media_devices_manager_->OnDevicesChanged( |
432 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 436 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
433 | 437 |
434 for (int i = 0; i < kNumCalls; i++) { | 438 for (int i = 0; i < kNumCalls; i++) { |
435 base::RunLoop run_loop; | 439 base::RunLoop run_loop; |
436 media_devices_manager_->EnumerateDevices( | 440 media_devices_manager_->EnumerateDevices( |
437 devices_to_enumerate, | 441 devices_to_enumerate, |
438 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, | 442 base::Bind(&MediaDevicesManagerTest::EnumerateCallback, |
(...skipping 11 matching lines...) Expand all Loading... |
450 TEST_F(MediaDevicesManagerTest, SubscribeDeviceChanges) { | 454 TEST_F(MediaDevicesManagerTest, SubscribeDeviceChanges) { |
451 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(3); | 455 EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(3); |
452 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) | 456 EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors()) |
453 .Times(3); | 457 .Times(3); |
454 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(3); | 458 EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(3); |
455 | 459 |
456 size_t num_audio_input_devices = 5; | 460 size_t num_audio_input_devices = 5; |
457 size_t num_video_input_devices = 4; | 461 size_t num_video_input_devices = 4; |
458 size_t num_audio_output_devices = 3; | 462 size_t num_audio_output_devices = 3; |
459 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); | 463 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); |
460 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 464 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 465 num_video_input_devices); |
461 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); | 466 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); |
462 | 467 |
463 // Run an enumeration to make sure |media_devices_manager_| has the new | 468 // Run an enumeration to make sure |media_devices_manager_| has the new |
464 // configuration. | 469 // configuration. |
465 EXPECT_CALL(*this, MockCallback(_)); | 470 EXPECT_CALL(*this, MockCallback(_)); |
466 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; | 471 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; |
467 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = true; | 472 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = true; |
468 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; | 473 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; |
469 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = true; | 474 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = true; |
470 base::RunLoop run_loop; | 475 base::RunLoop run_loop; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 EXPECT_CALL(subscriber_all, | 527 EXPECT_CALL(subscriber_all, |
523 OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)) | 528 OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _)) |
524 .Times(2) | 529 .Times(2) |
525 .WillRepeatedly(SaveArg<1>(¬ification_all_audio_output)); | 530 .WillRepeatedly(SaveArg<1>(¬ification_all_audio_output)); |
526 | 531 |
527 // Simulate device changes. | 532 // Simulate device changes. |
528 num_audio_input_devices = 3; | 533 num_audio_input_devices = 3; |
529 num_video_input_devices = 2; | 534 num_video_input_devices = 2; |
530 num_audio_output_devices = 4; | 535 num_audio_output_devices = 4; |
531 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); | 536 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); |
532 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 537 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 538 num_video_input_devices); |
533 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); | 539 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); |
534 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); | 540 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); |
535 media_devices_manager_->OnDevicesChanged( | 541 media_devices_manager_->OnDevicesChanged( |
536 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 542 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
537 base::RunLoop().RunUntilIdle(); | 543 base::RunLoop().RunUntilIdle(); |
538 EXPECT_EQ(num_audio_input_devices, notification_audio_input.size()); | 544 EXPECT_EQ(num_audio_input_devices, notification_audio_input.size()); |
539 EXPECT_EQ(num_video_input_devices, notification_video_input.size()); | 545 EXPECT_EQ(num_video_input_devices, notification_video_input.size()); |
540 EXPECT_EQ(num_audio_output_devices, notification_audio_output.size()); | 546 EXPECT_EQ(num_audio_output_devices, notification_audio_output.size()); |
541 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); | 547 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); |
542 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); | 548 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); |
543 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); | 549 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); |
544 | 550 |
545 media_devices_manager_->UnsubscribeDeviceChangeNotifications( | 551 media_devices_manager_->UnsubscribeDeviceChangeNotifications( |
546 MEDIA_DEVICE_TYPE_AUDIO_INPUT, &subscriber_audio_input); | 552 MEDIA_DEVICE_TYPE_AUDIO_INPUT, &subscriber_audio_input); |
547 media_devices_manager_->UnsubscribeDeviceChangeNotifications( | 553 media_devices_manager_->UnsubscribeDeviceChangeNotifications( |
548 MEDIA_DEVICE_TYPE_VIDEO_INPUT, &subscriber_video_input); | 554 MEDIA_DEVICE_TYPE_VIDEO_INPUT, &subscriber_video_input); |
549 media_devices_manager_->UnsubscribeDeviceChangeNotifications( | 555 media_devices_manager_->UnsubscribeDeviceChangeNotifications( |
550 MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, &subscriber_audio_output); | 556 MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, &subscriber_audio_output); |
551 | 557 |
552 // Simulate further device changes. Only the objects still subscribed to the | 558 // Simulate further device changes. Only the objects still subscribed to the |
553 // device-change events will receive notifications. | 559 // device-change events will receive notifications. |
554 num_audio_input_devices = 2; | 560 num_audio_input_devices = 2; |
555 num_video_input_devices = 1; | 561 num_video_input_devices = 1; |
556 num_audio_output_devices = 3; | 562 num_audio_output_devices = 3; |
557 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); | 563 audio_manager_->SetNumAudioInputDevices(num_audio_input_devices); |
558 video_capture_device_factory_->set_number_of_devices(num_video_input_devices); | 564 video_capture_device_factory_->SetToDefaultDevicesConfig( |
| 565 num_video_input_devices); |
559 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); | 566 audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices); |
560 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); | 567 media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO); |
561 media_devices_manager_->OnDevicesChanged( | 568 media_devices_manager_->OnDevicesChanged( |
562 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); | 569 base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); |
563 base::RunLoop().RunUntilIdle(); | 570 base::RunLoop().RunUntilIdle(); |
564 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); | 571 EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size()); |
565 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); | 572 EXPECT_EQ(num_video_input_devices, notification_all_video_input.size()); |
566 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); | 573 EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size()); |
567 } | 574 } |
568 | 575 |
569 } // namespace content | 576 } // namespace content |
OLD | NEW |