Index: content/browser/renderer_host/media/media_stream_device_settings_unittest.cc |
diff --git a/content/browser/renderer_host/media/media_stream_device_settings_unittest.cc b/content/browser/renderer_host/media/media_stream_device_settings_unittest.cc |
index c8c2061361bfaf571d27b82fd48fc7ab8f29bc41..a8df32dc0dd5afc7fb73c7d421c3fa8705cad40a 100644 |
--- a/content/browser/renderer_host/media/media_stream_device_settings_unittest.cc |
+++ b/content/browser/renderer_host/media/media_stream_device_settings_unittest.cc |
@@ -15,6 +15,7 @@ |
using content::BrowserThread; |
using content::BrowserThreadImpl; |
+using testing::_; |
namespace media_stream { |
@@ -23,7 +24,7 @@ class MediaStreamDeviceSettingsTest |
: public ::testing::Test, |
public SettingsRequester { |
public: |
- MediaStreamDeviceSettingsTest() : label_("dummy_stream") {} |
+ MediaStreamDeviceSettingsTest() {} |
// Mock implementation of SettingsRequester; |
MOCK_METHOD2(DevicesAccepted, void(const std::string&, |
@@ -44,18 +45,25 @@ class MediaStreamDeviceSettingsTest |
message_loop_->RunAllPending(); |
} |
- void CreateDummyRequest() { |
+ void CreateDummyRequest(const std::string& label, bool audio, bool video) { |
int dummy_render_process_id = 1; |
int dummy_render_view_id = 1; |
- StreamOptions components(true, false); |
+ StreamOptions components(audio, video); |
GURL security_origin; |
- device_settings_->RequestCaptureDeviceUsage(label_, |
+ device_settings_->RequestCaptureDeviceUsage(label, |
dummy_render_process_id, |
dummy_render_view_id, |
components, |
security_origin); |
+ if (audio) |
+ CreateAudioDeviceForRequset(label); |
- // Setup the dummy available device for the reqest. |
+ if (video) |
+ CreateVideoDeviceForRequset(label); |
+ } |
+ |
+ void CreateAudioDeviceForRequset(const std::string& label) { |
+ // Setup the dummy available device for the request. |
media_stream::StreamDeviceInfoArray audio_device_array(1); |
media_stream::StreamDeviceInfo dummy_audio_device; |
dummy_audio_device.name = "Microphone"; |
@@ -63,35 +71,105 @@ class MediaStreamDeviceSettingsTest |
content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE; |
dummy_audio_device.session_id = 1; |
audio_device_array[0] = dummy_audio_device; |
- device_settings_->AvailableDevices(label_, |
+ device_settings_->AvailableDevices(label, |
dummy_audio_device.stream_type, |
audio_device_array); |
} |
+ void CreateVideoDeviceForRequset(const std::string& label) { |
+ // Setup the dummy available device for the request. |
+ media_stream::StreamDeviceInfoArray video_device_array(1); |
+ media_stream::StreamDeviceInfo dummy_video_device; |
+ dummy_video_device.name = "camera"; |
+ dummy_video_device.stream_type = |
+ content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE; |
+ dummy_video_device.session_id = 1; |
+ video_device_array[0] = dummy_video_device; |
+ device_settings_->AvailableDevices(label, |
+ dummy_video_device.stream_type, |
+ video_device_array); |
+ } |
+ |
scoped_ptr<MessageLoop> message_loop_; |
scoped_ptr<BrowserThreadImpl> ui_thread_; |
scoped_ptr<BrowserThreadImpl> io_thread_; |
scoped_ptr<MediaStreamDeviceSettings> device_settings_; |
- const std::string label_; |
private: |
DISALLOW_COPY_AND_ASSIGN(MediaStreamDeviceSettingsTest); |
}; |
TEST_F(MediaStreamDeviceSettingsTest, GenerateRequest) { |
- CreateDummyRequest(); |
+ const std::string label = "dummy_label"; |
+ CreateDummyRequest(label, true, false); |
// Expecting an error callback triggered by the non-existing |
// RenderViewHostImpl. |
- EXPECT_CALL(*this, SettingsError(label_)) |
- .Times(1); |
+ EXPECT_CALL(*this, SettingsError(label)); |
} |
TEST_F(MediaStreamDeviceSettingsTest, GenerateAndRemoveRequest) { |
- CreateDummyRequest(); |
+ const std::string label = "label"; |
+ CreateDummyRequest(label, true, false); |
+ |
+ // Remove the current request, it should not crash. |
+ device_settings_->RemovePendingCaptureRequest(label); |
+} |
+ |
+TEST_F(MediaStreamDeviceSettingsTest, HandleRequestUsingFakeUI) { |
+ device_settings_->UseFakeUI(); |
+ |
+ const std::string label = "label"; |
+ CreateDummyRequest(label, true, true); |
// Remove the current request, it should not crash. |
- device_settings_->RemovePendingCaptureRequest(label_); |
+ EXPECT_CALL(*this, DevicesAccepted(label, _)); |
+} |
+ |
+TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheFirst) { |
+ device_settings_->UseFakeUI(); |
+ |
+ // Create the first audio request. |
+ const std::string label_1 = "label_1"; |
+ CreateDummyRequest(label_1, true, false); |
+ |
+ // Create the second video request. |
+ const std::string label_2 = "label_2"; |
+ CreateDummyRequest(label_2, false, true); |
+ |
+ // Create the third audio and video request. |
+ const std::string label_3 = "label_3"; |
+ CreateDummyRequest(label_3, true, true); |
+ |
+ // Remove the first request which has been brought to the UI. |
+ device_settings_->RemovePendingCaptureRequest(label_1); |
+ |
+ // We should get callbacks from the rest of the requests. |
+ EXPECT_CALL(*this, DevicesAccepted(label_2, _)); |
+ EXPECT_CALL(*this, DevicesAccepted(label_3, _)); |
+} |
+ |
+TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheLast) { |
+ device_settings_->UseFakeUI(); |
+ |
+ // Create the first audio request. |
+ const std::string label_1 = "label_1"; |
+ CreateDummyRequest(label_1, true, false); |
+ |
+ // Create the second video request. |
+ const std::string label_2 = "label_2"; |
+ CreateDummyRequest(label_2, false, true); |
+ |
+ // Create the third audio and video request. |
+ const std::string label_3 = "label_3"; |
+ CreateDummyRequest(label_3, true, true); |
+ |
+ // Remove the last request which is pending in the queue. |
+ device_settings_->RemovePendingCaptureRequest(label_3); |
+ |
+ // We should get callbacks from the rest of the requests. |
+ EXPECT_CALL(*this, DevicesAccepted(label_1, _)); |
+ EXPECT_CALL(*this, DevicesAccepted(label_2, _)); |
} |
} // namespace media_stream |