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

Side by Side Diff: content/browser/renderer_host/media/video_capture_manager_unittest.cc

Issue 11339014: Move content\browser\renderer_host\media to content namespace. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 // Unit test for VideoCaptureManager. 5 // Unit test for VideoCaptureManager.
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/process_util.h" 13 #include "base/process_util.h"
14 #include "content/browser/browser_thread_impl.h" 14 #include "content/browser/browser_thread_impl.h"
15 #include "content/browser/renderer_host/media/media_stream_provider.h" 15 #include "content/browser/renderer_host/media/media_stream_provider.h"
16 #include "content/browser/renderer_host/media/video_capture_manager.h" 16 #include "content/browser/renderer_host/media/video_capture_manager.h"
17 #include "content/common/media/media_stream_options.h" 17 #include "content/common/media/media_stream_options.h"
18 #include "media/video/capture/video_capture_device.h" 18 #include "media/video/capture/video_capture_device.h"
19 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 using ::testing::_; 22 using ::testing::_;
23 using ::testing::AnyNumber; 23 using ::testing::AnyNumber;
24 using ::testing::InSequence; 24 using ::testing::InSequence;
25 using ::testing::Return; 25 using ::testing::Return;
26 using content::BrowserThread;
27 26
28 using content::BrowserThreadImpl; 27 namespace content {
29
30 namespace media_stream {
31 28
32 // Listener class used to track progress of VideoCaptureManager test. 29 // Listener class used to track progress of VideoCaptureManager test.
33 class MockMediaStreamProviderListener : public MediaStreamProviderListener { 30 class MockMediaStreamProviderListener : public MediaStreamProviderListener {
34 public: 31 public:
35 MockMediaStreamProviderListener() 32 MockMediaStreamProviderListener()
36 : devices_() { 33 : devices_() {
37 } 34 }
38 ~MockMediaStreamProviderListener() {} 35 ~MockMediaStreamProviderListener() {}
39 36
40 MOCK_METHOD2(Opened, void(MediaStreamType, int)); 37 MOCK_METHOD2(Opened, void(MediaStreamType, int));
41 MOCK_METHOD2(Closed, void(MediaStreamType, int)); 38 MOCK_METHOD2(Closed, void(MediaStreamType, int));
42 MOCK_METHOD1(DevicesEnumerated, void(const StreamDeviceInfoArray&)); 39 MOCK_METHOD1(DevicesEnumerated, void(const StreamDeviceInfoArray&));
43 MOCK_METHOD3(Error, void(MediaStreamType, int, 40 MOCK_METHOD3(Error, void(MediaStreamType, int,
44 MediaStreamProviderError)); 41 MediaStreamProviderError));
45 42
46 virtual void DevicesEnumerated( 43 virtual void DevicesEnumerated(
47 MediaStreamType stream_type, 44 MediaStreamType stream_type,
48 const StreamDeviceInfoArray& devices) OVERRIDE { 45 const StreamDeviceInfoArray& devices) OVERRIDE {
49 devices_.clear(); 46 devices_.clear();
50 for (StreamDeviceInfoArray::const_iterator it = devices.begin(); 47 for (StreamDeviceInfoArray::const_iterator it = devices.begin();
51 it != devices.end(); 48 it != devices.end();
52 ++it) { 49 ++it) {
53 devices_.push_back(*it); 50 devices_.push_back(*it);
54 } 51 }
55 DevicesEnumerated(devices); 52 DevicesEnumerated(devices);
56 } 53 }
57 54
58 media_stream::StreamDeviceInfoArray devices_; 55 StreamDeviceInfoArray devices_;
59 }; // class MockMediaStreamProviderListener 56 }; // class MockMediaStreamProviderListener
tfarina 2012/10/29 17:41:34 so weird this comment :/ sorry for point out :(
60 57
61 } // namespace media_stream
62
63 namespace {
64
65 // Needed as an input argument to Start(). 58 // Needed as an input argument to Start().
66 class MockFrameObserver : public media::VideoCaptureDevice::EventHandler { 59 class MockFrameObserver : public media::VideoCaptureDevice::EventHandler {
67 public: 60 public:
68 virtual void OnError() OVERRIDE {} 61 virtual void OnError() OVERRIDE {}
69 void OnFrameInfo(const media::VideoCaptureCapability& info) {} 62 void OnFrameInfo(const media::VideoCaptureCapability& info) {}
70 virtual void OnIncomingCapturedFrame(const uint8* data, int length, 63 virtual void OnIncomingCapturedFrame(const uint8* data, int length,
71 base::Time timestamp) OVERRIDE {} 64 base::Time timestamp) OVERRIDE {}
72 }; 65 };
73 66
74 // Test class 67 // Test class
75 class VideoCaptureManagerTest : public testing::Test { 68 class VideoCaptureManagerTest : public testing::Test {
76 public: 69 public:
77 VideoCaptureManagerTest() {} 70 VideoCaptureManagerTest() {}
78 virtual ~VideoCaptureManagerTest() {} 71 virtual ~VideoCaptureManagerTest() {}
79 72
80 protected: 73 protected:
81 virtual void SetUp() OVERRIDE { 74 virtual void SetUp() OVERRIDE {
82 listener_.reset(new media_stream::MockMediaStreamProviderListener()); 75 listener_.reset(new MockMediaStreamProviderListener());
83 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); 76 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
84 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, 77 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO,
85 message_loop_.get())); 78 message_loop_.get()));
86 vcm_ = new media_stream::VideoCaptureManager(); 79 vcm_ = new VideoCaptureManager();
87 vcm_->UseFakeDevice(); 80 vcm_->UseFakeDevice();
88 vcm_->Register(listener_.get(), message_loop_->message_loop_proxy()); 81 vcm_->Register(listener_.get(), message_loop_->message_loop_proxy());
89 frame_observer_.reset(new MockFrameObserver()); 82 frame_observer_.reset(new MockFrameObserver());
90 } 83 }
91 84
92 virtual void TearDown() OVERRIDE {} 85 virtual void TearDown() OVERRIDE {}
93 86
94 scoped_refptr<media_stream::VideoCaptureManager> vcm_; 87 scoped_refptr<VideoCaptureManager> vcm_;
95 scoped_ptr<media_stream::MockMediaStreamProviderListener> listener_; 88 scoped_ptr<MockMediaStreamProviderListener> listener_;
96 scoped_ptr<MessageLoop> message_loop_; 89 scoped_ptr<MessageLoop> message_loop_;
97 scoped_ptr<BrowserThreadImpl> io_thread_; 90 scoped_ptr<BrowserThreadImpl> io_thread_;
98 scoped_ptr<MockFrameObserver> frame_observer_; 91 scoped_ptr<MockFrameObserver> frame_observer_;
99 92
100 private: 93 private:
101 DISALLOW_COPY_AND_ASSIGN(VideoCaptureManagerTest); 94 DISALLOW_COPY_AND_ASSIGN(VideoCaptureManagerTest);
102 }; 95 };
103 96
104 // Test cases 97 // Test cases
105 98
106 // Try to open, start, stop and close a device. 99 // Try to open, start, stop and close a device.
107 TEST_F(VideoCaptureManagerTest, CreateAndClose) { 100 TEST_F(VideoCaptureManagerTest, CreateAndClose) {
108 InSequence s; 101 InSequence s;
109 EXPECT_CALL(*listener_, DevicesEnumerated(_)) 102 EXPECT_CALL(*listener_, DevicesEnumerated(_)).Times(1);
110 .Times(1); 103 EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
111 EXPECT_CALL(*listener_, 104 EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
112 Opened(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
113 .Times(1);
114 EXPECT_CALL(*listener_,
115 Closed(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
116 .Times(1);
117 105
118 vcm_->EnumerateDevices(); 106 vcm_->EnumerateDevices();
119 107
120 // Wait to get device callback. 108 // Wait to get device callback.
121 message_loop_->RunAllPending(); 109 message_loop_->RunAllPending();
122 110
123 int video_session_id = vcm_->Open(listener_->devices_.front()); 111 int video_session_id = vcm_->Open(listener_->devices_.front());
124 112
125 media::VideoCaptureParams capture_params; 113 media::VideoCaptureParams capture_params;
126 capture_params.session_id = video_session_id; 114 capture_params.session_id = video_session_id;
127 capture_params.width = 320; 115 capture_params.width = 320;
128 capture_params.height = 240; 116 capture_params.height = 240;
129 capture_params.frame_per_second = 30; 117 capture_params.frame_per_second = 30;
130 vcm_->Start(capture_params, frame_observer_.get()); 118 vcm_->Start(capture_params, frame_observer_.get());
131 119
132 vcm_->Stop(video_session_id, base::Closure()); 120 vcm_->Stop(video_session_id, base::Closure());
133 vcm_->Close(video_session_id); 121 vcm_->Close(video_session_id);
134 122
135 // Wait to check callbacks before removing the listener. 123 // Wait to check callbacks before removing the listener.
136 message_loop_->RunAllPending(); 124 message_loop_->RunAllPending();
137 vcm_->Unregister(); 125 vcm_->Unregister();
138 } 126 }
139 127
140 // Open the same device twice. 128 // Open the same device twice.
141 TEST_F(VideoCaptureManagerTest, OpenTwice) { 129 TEST_F(VideoCaptureManagerTest, OpenTwice) {
142 InSequence s; 130 InSequence s;
143 EXPECT_CALL(*listener_, DevicesEnumerated(_)) 131 EXPECT_CALL(*listener_, DevicesEnumerated(_)).Times(1);
144 .Times(1); 132 EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
145 EXPECT_CALL(*listener_, 133 EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
146 Opened(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
147 .Times(2);
148 EXPECT_CALL(*listener_,
149 Closed(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
150 .Times(2);
151 134
152 vcm_->EnumerateDevices(); 135 vcm_->EnumerateDevices();
153 136
154 // Wait to get device callback. 137 // Wait to get device callback.
155 message_loop_->RunAllPending(); 138 message_loop_->RunAllPending();
156 139
157 int video_session_id_first = vcm_->Open(listener_->devices_.front()); 140 int video_session_id_first = vcm_->Open(listener_->devices_.front());
158 141
159 // This should trigger an error callback with error code 142 // This should trigger an error callback with error code
160 // 'kDeviceAlreadyInUse'. 143 // 'kDeviceAlreadyInUse'.
161 int video_session_id_second = vcm_->Open(listener_->devices_.front()); 144 int video_session_id_second = vcm_->Open(listener_->devices_.front());
162 EXPECT_NE(video_session_id_first, video_session_id_second); 145 EXPECT_NE(video_session_id_first, video_session_id_second);
163 146
164 vcm_->Close(video_session_id_first); 147 vcm_->Close(video_session_id_first);
165 vcm_->Close(video_session_id_second); 148 vcm_->Close(video_session_id_second);
166 149
167 // Wait to check callbacks before removing the listener. 150 // Wait to check callbacks before removing the listener.
168 message_loop_->RunAllPending(); 151 message_loop_->RunAllPending();
169 vcm_->Unregister(); 152 vcm_->Unregister();
170 } 153 }
171 154
172 // Open two different devices. 155 // Open two different devices.
173 TEST_F(VideoCaptureManagerTest, OpenTwo) { 156 TEST_F(VideoCaptureManagerTest, OpenTwo) {
174 InSequence s; 157 InSequence s;
175 EXPECT_CALL(*listener_, DevicesEnumerated(_)) 158 EXPECT_CALL(*listener_, DevicesEnumerated(_)).Times(1);
176 .Times(1); 159 EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
177 EXPECT_CALL(*listener_, 160 EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(2);
178 Opened(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
179 .Times(2);
180 EXPECT_CALL(*listener_,
181 Closed(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
182 .Times(2);
183 161
184 vcm_->EnumerateDevices(); 162 vcm_->EnumerateDevices();
185 163
186 // Wait to get device callback. 164 // Wait to get device callback.
187 message_loop_->RunAllPending(); 165 message_loop_->RunAllPending();
188 166
189 media_stream::StreamDeviceInfoArray::iterator it = 167 StreamDeviceInfoArray::iterator it = listener_->devices_.begin();
190 listener_->devices_.begin();
191 168
192 int video_session_id_first = vcm_->Open(*it); 169 int video_session_id_first = vcm_->Open(*it);
193 ++it; 170 ++it;
194 int video_session_id_second = vcm_->Open(*it); 171 int video_session_id_second = vcm_->Open(*it);
195 172
196 vcm_->Close(video_session_id_first); 173 vcm_->Close(video_session_id_first);
197 vcm_->Close(video_session_id_second); 174 vcm_->Close(video_session_id_second);
198 175
199 // Wait to check callbacks before removing the listener. 176 // Wait to check callbacks before removing the listener.
200 message_loop_->RunAllPending(); 177 message_loop_->RunAllPending();
201 vcm_->Unregister(); 178 vcm_->Unregister();
202 } 179 }
203 180
204 // Try open a non-existing device. 181 // Try open a non-existing device.
205 TEST_F(VideoCaptureManagerTest, OpenNotExisting) { 182 TEST_F(VideoCaptureManagerTest, OpenNotExisting) {
206 InSequence s; 183 InSequence s;
207 EXPECT_CALL(*listener_, DevicesEnumerated(_)) 184 EXPECT_CALL(*listener_, DevicesEnumerated(_))
208 .Times(1); 185 .Times(1);
209 EXPECT_CALL(*listener_, Error(content::MEDIA_DEVICE_VIDEO_CAPTURE, 186 EXPECT_CALL(*listener_, Error(MEDIA_DEVICE_VIDEO_CAPTURE,
210 _, media_stream::kDeviceNotAvailable)) 187 _, kDeviceNotAvailable))
211 .Times(1); 188 .Times(1);
212 189
213 vcm_->EnumerateDevices(); 190 vcm_->EnumerateDevices();
214 191
215 // Wait to get device callback. 192 // Wait to get device callback.
216 message_loop_->RunAllPending(); 193 message_loop_->RunAllPending();
217 194
218 media_stream::MediaStreamType stream_type = 195 MediaStreamType stream_type = MEDIA_DEVICE_VIDEO_CAPTURE;
219 content::MEDIA_DEVICE_VIDEO_CAPTURE;
220 std::string device_name("device_doesnt_exist"); 196 std::string device_name("device_doesnt_exist");
221 std::string device_id("id_doesnt_exist"); 197 std::string device_id("id_doesnt_exist");
222 media_stream::StreamDeviceInfo dummy_device(stream_type, device_name, 198 StreamDeviceInfo dummy_device(stream_type, device_name, device_id, false);
223 device_id, false);
224 199
225 // This should fail with error code 'kDeviceNotAvailable'. 200 // This should fail with error code 'kDeviceNotAvailable'.
226 vcm_->Open(dummy_device); 201 vcm_->Open(dummy_device);
227 202
228 // Wait to check callbacks before removing the listener. 203 // Wait to check callbacks before removing the listener.
229 message_loop_->RunAllPending(); 204 message_loop_->RunAllPending();
230 vcm_->Unregister(); 205 vcm_->Unregister();
231 } 206 }
232 207
233 // Start a device using "magic" id, i.e. call Start without calling Open. 208 // Start a device using "magic" id, i.e. call Start without calling Open.
234 TEST_F(VideoCaptureManagerTest, StartUsingId) { 209 TEST_F(VideoCaptureManagerTest, StartUsingId) {
235 InSequence s; 210 InSequence s;
236 EXPECT_CALL(*listener_, 211 EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
237 Opened(content::MEDIA_DEVICE_VIDEO_CAPTURE, _)) 212 EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
238 .Times(1);
239 EXPECT_CALL(*listener_,
240 Closed(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
241 .Times(1);
242 213
243 media::VideoCaptureParams capture_params; 214 media::VideoCaptureParams capture_params;
244 capture_params.session_id = 215 capture_params.session_id = VideoCaptureManager::kStartOpenSessionId;
245 media_stream::VideoCaptureManager::kStartOpenSessionId;
246 capture_params.width = 320; 216 capture_params.width = 320;
247 capture_params.height = 240; 217 capture_params.height = 240;
248 capture_params.frame_per_second = 30; 218 capture_params.frame_per_second = 30;
249 219
250 // Start shall trigger the Open callback. 220 // Start shall trigger the Open callback.
251 vcm_->Start(capture_params, frame_observer_.get()); 221 vcm_->Start(capture_params, frame_observer_.get());
252 222
253 // Stop shall trigger the Close callback 223 // Stop shall trigger the Close callback
254 vcm_->Stop(media_stream::VideoCaptureManager::kStartOpenSessionId, 224 vcm_->Stop(VideoCaptureManager::kStartOpenSessionId, base::Closure());
255 base::Closure());
256 225
257 // Wait to check callbacks before removing the listener. 226 // Wait to check callbacks before removing the listener.
258 message_loop_->RunAllPending(); 227 message_loop_->RunAllPending();
259 vcm_->Unregister(); 228 vcm_->Unregister();
260 } 229 }
261 230
262 // Open and start a device, close it before calling Stop. 231 // Open and start a device, close it before calling Stop.
263 TEST_F(VideoCaptureManagerTest, CloseWithoutStop) { 232 TEST_F(VideoCaptureManagerTest, CloseWithoutStop) {
264 InSequence s; 233 InSequence s;
265 EXPECT_CALL(*listener_, DevicesEnumerated(_)) 234 EXPECT_CALL(*listener_, DevicesEnumerated(_)).Times(1);
266 .Times(1); 235 EXPECT_CALL(*listener_, Opened(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
267 EXPECT_CALL(*listener_, 236 EXPECT_CALL(*listener_, Closed(MEDIA_DEVICE_VIDEO_CAPTURE, _)).Times(1);
268 Opened(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
269 .Times(1);
270 EXPECT_CALL(*listener_,
271 Closed(content::MEDIA_DEVICE_VIDEO_CAPTURE, _))
272 .Times(1);
273 237
274 vcm_->EnumerateDevices(); 238 vcm_->EnumerateDevices();
275 239
276 // Wait to get device callback. 240 // Wait to get device callback.
277 message_loop_->RunAllPending(); 241 message_loop_->RunAllPending();
278 242
279 int video_session_id = vcm_->Open(listener_->devices_.front()); 243 int video_session_id = vcm_->Open(listener_->devices_.front());
280 244
281 media::VideoCaptureParams capture_params; 245 media::VideoCaptureParams capture_params;
282 capture_params.session_id = video_session_id; 246 capture_params.session_id = video_session_id;
283 capture_params.width = 320; 247 capture_params.width = 320;
284 capture_params.height = 240; 248 capture_params.height = 240;
285 capture_params.frame_per_second = 30; 249 capture_params.frame_per_second = 30;
286 vcm_->Start(capture_params, frame_observer_.get()); 250 vcm_->Start(capture_params, frame_observer_.get());
287 251
288 // Close will stop the running device, an assert will be triggered in 252 // Close will stop the running device, an assert will be triggered in
289 // VideoCaptureManager destructor otherwise. 253 // VideoCaptureManager destructor otherwise.
290 vcm_->Close(video_session_id); 254 vcm_->Close(video_session_id);
291 vcm_->Stop(video_session_id, base::Closure()); 255 vcm_->Stop(video_session_id, base::Closure());
292 256
293 // Wait to check callbacks before removing the listener 257 // Wait to check callbacks before removing the listener
294 message_loop_->RunAllPending(); 258 message_loop_->RunAllPending();
295 vcm_->Unregister(); 259 vcm_->Unregister();
296 } 260 }
297 261
298 } // namespace 262 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698