Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
| 9 #include "content/browser/browser_thread_impl.h" | 9 #include "content/browser/browser_thread_impl.h" |
| 10 #include "content/browser/renderer_host/media/media_stream_device_settings.h" | 10 #include "content/browser/renderer_host/media/media_stream_device_settings.h" |
| 11 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" | 11 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
| 12 #include "content/common/media/media_stream_options.h" | 12 #include "content/common/media/media_stream_options.h" |
| 13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 15 |
| 16 using content::BrowserThread; | 16 using content::BrowserThread; |
| 17 using content::BrowserThreadImpl; | 17 using content::BrowserThreadImpl; |
| 18 using testing::_; | |
| 18 | 19 |
| 19 namespace media_stream { | 20 namespace media_stream { |
| 20 | 21 |
| 21 // Test class. | 22 // Test class. |
| 22 class MediaStreamDeviceSettingsTest | 23 class MediaStreamDeviceSettingsTest |
| 23 : public ::testing::Test, | 24 : public ::testing::Test, |
| 24 public SettingsRequester { | 25 public SettingsRequester { |
| 25 public: | 26 public: |
| 26 MediaStreamDeviceSettingsTest() : label_("dummy_stream") {} | 27 MediaStreamDeviceSettingsTest() {} |
| 27 | 28 |
| 28 // Mock implementation of SettingsRequester; | 29 // Mock implementation of SettingsRequester; |
| 29 MOCK_METHOD2(DevicesAccepted, void(const std::string&, | 30 MOCK_METHOD2(DevicesAccepted, void(const std::string&, |
| 30 const StreamDeviceInfoArray&)); | 31 const StreamDeviceInfoArray&)); |
| 31 MOCK_METHOD1(SettingsError, void(const std::string&)); | 32 MOCK_METHOD1(SettingsError, void(const std::string&)); |
| 32 | 33 |
| 33 protected: | 34 protected: |
| 34 virtual void SetUp() { | 35 virtual void SetUp() { |
| 35 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 36 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
| 36 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, | 37 ui_thread_.reset(new BrowserThreadImpl(BrowserThread::UI, |
| 37 message_loop_.get())); | 38 message_loop_.get())); |
| 38 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 39 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
| 39 message_loop_.get())); | 40 message_loop_.get())); |
| 40 device_settings_.reset(new MediaStreamDeviceSettings(this)); | 41 device_settings_.reset(new MediaStreamDeviceSettings(this)); |
| 41 } | 42 } |
| 42 | 43 |
| 43 virtual void TearDown() { | 44 virtual void TearDown() { |
| 44 message_loop_->RunAllPending(); | 45 message_loop_->RunAllPending(); |
| 45 } | 46 } |
| 46 | 47 |
| 47 void CreateDummyRequest() { | 48 void CreateDummyRequest(const std::string& label, bool audio, bool video) { |
| 48 int dummy_render_process_id = 1; | 49 int dummy_render_process_id = 1; |
| 49 int dummy_render_view_id = 1; | 50 int dummy_render_view_id = 1; |
| 50 StreamOptions components(true, false); | 51 StreamOptions components(audio, video); |
| 51 GURL security_origin; | 52 GURL security_origin; |
| 52 device_settings_->RequestCaptureDeviceUsage(label_, | 53 device_settings_->RequestCaptureDeviceUsage(label, |
| 53 dummy_render_process_id, | 54 dummy_render_process_id, |
| 54 dummy_render_view_id, | 55 dummy_render_view_id, |
| 55 components, | 56 components, |
| 56 security_origin); | 57 security_origin); |
| 58 if (audio) | |
| 59 CreateAudioDeviceForRequset(label); | |
| 57 | 60 |
| 58 // Setup the dummy available device for the reqest. | 61 if (video) |
| 62 CreateVideoDeviceForRequset(label); | |
| 63 } | |
| 64 | |
| 65 void CreateAudioDeviceForRequset(const std::string& label) { | |
| 66 // Setup the dummy available device for the request. | |
| 59 media_stream::StreamDeviceInfoArray audio_device_array(1); | 67 media_stream::StreamDeviceInfoArray audio_device_array(1); |
| 60 media_stream::StreamDeviceInfo dummy_audio_device; | 68 media_stream::StreamDeviceInfo dummy_audio_device; |
| 61 dummy_audio_device.name = "Microphone"; | 69 dummy_audio_device.name = "Microphone"; |
| 62 dummy_audio_device.stream_type = | 70 dummy_audio_device.stream_type = |
| 63 content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE; | 71 content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE; |
| 64 dummy_audio_device.session_id = 1; | 72 dummy_audio_device.session_id = 1; |
| 65 audio_device_array[0] = dummy_audio_device; | 73 audio_device_array[0] = dummy_audio_device; |
| 66 device_settings_->AvailableDevices(label_, | 74 device_settings_->AvailableDevices(label, |
| 67 dummy_audio_device.stream_type, | 75 dummy_audio_device.stream_type, |
| 68 audio_device_array); | 76 audio_device_array); |
| 69 } | 77 } |
| 70 | 78 |
| 79 void CreateVideoDeviceForRequset(const std::string& label) { | |
| 80 // Setup the dummy available device for the request. | |
|
scherkus (not reviewing)
2012/08/13 19:51:22
this block is over-indented by 2 spaces
no longer working on chromium
2012/08/14 11:17:04
Done.
| |
| 81 media_stream::StreamDeviceInfoArray video_device_array(1); | |
| 82 media_stream::StreamDeviceInfo dummy_video_device; | |
| 83 dummy_video_device.name = "camera"; | |
| 84 dummy_video_device.stream_type = | |
| 85 content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE; | |
| 86 dummy_video_device.session_id = 1; | |
| 87 video_device_array[0] = dummy_video_device; | |
| 88 device_settings_->AvailableDevices(label, | |
| 89 dummy_video_device.stream_type, | |
| 90 video_device_array); | |
| 91 } | |
| 92 | |
| 71 scoped_ptr<MessageLoop> message_loop_; | 93 scoped_ptr<MessageLoop> message_loop_; |
| 72 scoped_ptr<BrowserThreadImpl> ui_thread_; | 94 scoped_ptr<BrowserThreadImpl> ui_thread_; |
| 73 scoped_ptr<BrowserThreadImpl> io_thread_; | 95 scoped_ptr<BrowserThreadImpl> io_thread_; |
| 74 scoped_ptr<MediaStreamDeviceSettings> device_settings_; | 96 scoped_ptr<MediaStreamDeviceSettings> device_settings_; |
| 75 const std::string label_; | |
| 76 | 97 |
| 77 private: | 98 private: |
| 78 DISALLOW_COPY_AND_ASSIGN(MediaStreamDeviceSettingsTest); | 99 DISALLOW_COPY_AND_ASSIGN(MediaStreamDeviceSettingsTest); |
| 79 }; | 100 }; |
| 80 | 101 |
| 81 TEST_F(MediaStreamDeviceSettingsTest, GenerateRequest) { | 102 TEST_F(MediaStreamDeviceSettingsTest, GenerateRequest) { |
| 82 CreateDummyRequest(); | 103 const std::string label = "dummy_label"; |
| 104 CreateDummyRequest(label, true, false); | |
| 83 | 105 |
| 84 // Expecting an error callback triggered by the non-existing | 106 // Expecting an error callback triggered by the non-existing |
| 85 // RenderViewHostImpl. | 107 // RenderViewHostImpl. |
| 86 EXPECT_CALL(*this, SettingsError(label_)) | 108 EXPECT_CALL(*this, SettingsError(label)); |
| 87 .Times(1); | |
| 88 } | 109 } |
| 89 | 110 |
| 90 TEST_F(MediaStreamDeviceSettingsTest, GenerateAndRemoveRequest) { | 111 TEST_F(MediaStreamDeviceSettingsTest, GenerateAndRemoveRequest) { |
| 91 CreateDummyRequest(); | 112 const std::string label = "label"; |
| 113 CreateDummyRequest(label, true, false); | |
| 92 | 114 |
| 93 // Remove the current request, it should not crash. | 115 // Remove the current request, it should not crash. |
| 94 device_settings_->RemovePendingCaptureRequest(label_); | 116 device_settings_->RemovePendingCaptureRequest(label); |
| 117 } | |
| 118 | |
| 119 TEST_F(MediaStreamDeviceSettingsTest, HandleRequestUsingFakeUI) { | |
| 120 device_settings_->UseFakeUI(); | |
| 121 | |
| 122 const std::string label = "label"; | |
| 123 CreateDummyRequest(label, true, true); | |
| 124 | |
| 125 // Remove the current request, it should not crash. | |
| 126 EXPECT_CALL(*this, DevicesAccepted(label, _)); | |
| 127 } | |
| 128 | |
| 129 TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheFirst) { | |
| 130 device_settings_->UseFakeUI(); | |
| 131 | |
| 132 // Create the first audio request. | |
| 133 const std::string label_1 = "label_1"; | |
| 134 CreateDummyRequest(label_1, true, false); | |
| 135 | |
| 136 // Create the second video request. | |
| 137 const std::string label_2 = "label_2"; | |
| 138 CreateDummyRequest(label_2, false, true); | |
| 139 | |
| 140 // Create the third audio and video request. | |
| 141 const std::string label_3 = "label_3"; | |
| 142 CreateDummyRequest(label_3, true, true); | |
| 143 | |
| 144 // Remove the first request which has been brought to the UI. | |
| 145 device_settings_->RemovePendingCaptureRequest(label_1); | |
| 146 | |
| 147 // We should get callbacks from the rest of the requests. | |
| 148 EXPECT_CALL(*this, DevicesAccepted(label_2, _)); | |
| 149 EXPECT_CALL(*this, DevicesAccepted(label_3, _)); | |
| 150 } | |
| 151 | |
| 152 TEST_F(MediaStreamDeviceSettingsTest, CreateMultipleRequestsAndCancelTheLast) { | |
| 153 device_settings_->UseFakeUI(); | |
| 154 | |
| 155 // Create the first audio request. | |
| 156 const std::string label_1 = "label_1"; | |
| 157 CreateDummyRequest(label_1, true, false); | |
| 158 | |
| 159 // Create the second video request. | |
| 160 const std::string label_2 = "label_2"; | |
| 161 CreateDummyRequest(label_2, false, true); | |
| 162 | |
| 163 // Create the third audio and video request. | |
| 164 const std::string label_3 = "label_3"; | |
| 165 CreateDummyRequest(label_3, true, true); | |
| 166 | |
| 167 // Remove the last request which is pending in the queue. | |
| 168 device_settings_->RemovePendingCaptureRequest(label_3); | |
| 169 | |
| 170 // We should get callbacks from the rest of the requests. | |
| 171 EXPECT_CALL(*this, DevicesAccepted(label_1, _)); | |
| 172 EXPECT_CALL(*this, DevicesAccepted(label_2, _)); | |
| 95 } | 173 } |
| 96 | 174 |
| 97 } // namespace media_stream | 175 } // namespace media_stream |
| OLD | NEW |