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

Unified Diff: content/browser/renderer_host/media/media_devices_manager_unittest.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/media/media_devices_manager_unittest.cc
diff --git a/content/browser/renderer_host/media/media_devices_manager_unittest.cc b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
index 23c3701bc02db1083299c7ab2864483111b60e55..cdbac6481a7c736508aef10fa09428902b7fd0a1 100644
--- a/content/browser/renderer_host/media/media_devices_manager_unittest.cc
+++ b/content/browser/renderer_host/media/media_devices_manager_unittest.cc
@@ -114,6 +114,12 @@ class MockVideoCaptureDeviceFactory
}
};
+class MockMediaDeviceChangeSubscriber : public MediaDeviceChangeSubscriber {
+ public:
+ MOCK_METHOD2(OnDevicesChanged,
+ void(MediaDeviceType, const MediaDeviceInfoArray&));
+};
+
} // namespace
class MediaDevicesManagerTest : public ::testing::Test {
@@ -438,4 +444,123 @@ TEST_F(MediaDevicesManagerTest, EnumerateCacheAllWithDeviceChanges) {
}
}
+TEST_F(MediaDevicesManagerTest, SubscribeDeviceChanges) {
+ EXPECT_CALL(*audio_manager_, MockGetAudioOutputDeviceNames(_)).Times(3);
+ EXPECT_CALL(*video_capture_device_factory_, MockGetDeviceDescriptors())
+ .Times(3);
+ EXPECT_CALL(*audio_manager_, MockGetAudioInputDeviceNames(_)).Times(3);
+
+ size_t num_audio_input_devices = 5;
+ size_t num_video_input_devices = 4;
+ size_t num_audio_output_devices = 3;
+ audio_manager_->SetNumAudioInputDevices(num_audio_input_devices);
+ video_capture_device_factory_->set_number_of_devices(num_video_input_devices);
+ audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices);
+
+ // Run an enumeration to make sure |media_devices_manager_| has the new
+ // configuration.
+ EXPECT_CALL(*this, MockCallback(_));
+ MediaDevicesManager::BoolDeviceTypes devices_to_enumerate;
+ devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = true;
+ devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true;
+ devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = true;
+ base::RunLoop run_loop;
+ media_devices_manager_->EnumerateDevices(
+ devices_to_enumerate,
+ base::Bind(&MediaDevicesManagerTest::EnumerateCallback,
+ base::Unretained(this), &run_loop));
+ run_loop.Run();
+
+ // Add device-change event subscribers.
+ MockMediaDeviceChangeSubscriber subscriber_audio_input;
+ MockMediaDeviceChangeSubscriber subscriber_video_input;
+ MockMediaDeviceChangeSubscriber subscriber_audio_output;
+ MockMediaDeviceChangeSubscriber subscriber_all;
+
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_INPUT, &subscriber_audio_input);
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_VIDEO_INPUT, &subscriber_video_input);
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, &subscriber_audio_output);
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_INPUT, &subscriber_all);
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_VIDEO_INPUT, &subscriber_all);
+ media_devices_manager_->SubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, &subscriber_all);
+
+ MediaDeviceInfoArray notification_audio_input;
+ MediaDeviceInfoArray notification_video_input;
+ MediaDeviceInfoArray notification_audio_output;
+ MediaDeviceInfoArray notification_all_audio_input;
+ MediaDeviceInfoArray notification_all_video_input;
+ MediaDeviceInfoArray notification_all_audio_output;
+ EXPECT_CALL(subscriber_audio_input,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_INPUT, _))
+ .Times(1)
+ .WillOnce(SaveArg<1>(&notification_audio_input));
+ EXPECT_CALL(subscriber_video_input,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_VIDEO_INPUT, _))
+ .Times(1)
+ .WillOnce(SaveArg<1>(&notification_video_input));
+ EXPECT_CALL(subscriber_audio_output,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _))
+ .Times(1)
+ .WillOnce(SaveArg<1>(&notification_audio_output));
+ EXPECT_CALL(subscriber_all,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_INPUT, _))
+ .Times(2)
+ .WillRepeatedly(SaveArg<1>(&notification_all_audio_input));
+ EXPECT_CALL(subscriber_all,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_VIDEO_INPUT, _))
+ .Times(2)
+ .WillRepeatedly(SaveArg<1>(&notification_all_video_input));
+ EXPECT_CALL(subscriber_all,
+ OnDevicesChanged(MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, _))
+ .Times(2)
+ .WillRepeatedly(SaveArg<1>(&notification_all_audio_output));
+
+ // Simulate device changes.
+ num_audio_input_devices = 3;
+ num_video_input_devices = 2;
+ num_audio_output_devices = 4;
+ audio_manager_->SetNumAudioInputDevices(num_audio_input_devices);
+ video_capture_device_factory_->set_number_of_devices(num_video_input_devices);
+ audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices);
+ media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO);
+ media_devices_manager_->OnDevicesChanged(
+ base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(num_audio_input_devices, notification_audio_input.size());
+ EXPECT_EQ(num_video_input_devices, notification_video_input.size());
+ EXPECT_EQ(num_audio_output_devices, notification_audio_output.size());
+ EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size());
+ EXPECT_EQ(num_video_input_devices, notification_all_video_input.size());
+ EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size());
+
+ media_devices_manager_->UnsubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_INPUT, &subscriber_audio_input);
+ media_devices_manager_->UnsubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_VIDEO_INPUT, &subscriber_video_input);
+ media_devices_manager_->UnsubscribeDeviceChangeNotifications(
+ MEDIA_DEVICE_TYPE_AUDIO_OUTPUT, &subscriber_audio_output);
+
+ // Simulate further device changes. Only the objects still subscribed to the
+ // device-change events will receive notifications.
+ num_audio_input_devices = 2;
+ num_video_input_devices = 1;
+ num_audio_output_devices = 3;
+ audio_manager_->SetNumAudioInputDevices(num_audio_input_devices);
+ video_capture_device_factory_->set_number_of_devices(num_video_input_devices);
+ audio_manager_->SetNumAudioOutputDevices(num_audio_output_devices);
+ media_devices_manager_->OnDevicesChanged(base::SystemMonitor::DEVTYPE_AUDIO);
+ media_devices_manager_->OnDevicesChanged(
+ base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE);
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(num_audio_input_devices, notification_all_audio_input.size());
+ EXPECT_EQ(num_video_input_devices, notification_all_video_input.size());
+ EXPECT_EQ(num_audio_output_devices, notification_all_audio_output.size());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698