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