OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/message_loop.h" | 5 #include "base/message_loop.h" |
6 #include "content/common/media/video_capture_messages.h" | 6 #include "content/common/media/video_capture_messages.h" |
7 #include "content/renderer/media/video_capture_impl.h" | 7 #include "content/renderer/media/video_capture_impl.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
11 using ::testing::_; | 11 using ::testing::_; |
12 using ::testing::AtLeast; | 12 using ::testing::AtLeast; |
13 using ::testing::Return; | 13 using ::testing::Return; |
14 | 14 |
15 #define DEFAULT_CAPABILITY_REGULAR {176, 144, 30, 0, media::VideoFrame::I420, \ | 15 #define CAPABILITY_SMALL {176, 144, 30, 0, media::VideoFrame::I420, \ |
16 false, false } | 16 false } |
17 #define DEFAULT_CAPABILITY_MASTER {320, 240, 20, 0, media::VideoFrame::I420, \ | 17 #define CAPABILITY_LARGE {320, 240, 30, 0, media::VideoFrame::I420, \ |
18 false, true } | 18 false } |
19 | 19 |
20 class MockVideoCaptureMessageFilter : public VideoCaptureMessageFilter { | 20 class MockVideoCaptureMessageFilter : public VideoCaptureMessageFilter { |
21 public: | 21 public: |
22 MockVideoCaptureMessageFilter() : VideoCaptureMessageFilter() {} | 22 MockVideoCaptureMessageFilter() : VideoCaptureMessageFilter() {} |
23 virtual ~MockVideoCaptureMessageFilter() {} | 23 virtual ~MockVideoCaptureMessageFilter() {} |
24 | 24 |
25 // Filter implementation. | 25 // Filter implementation. |
26 MOCK_METHOD1(Send, bool(IPC::Message* message)); | 26 MOCK_METHOD1(Send, bool(IPC::Message* message)); |
27 | 27 |
28 private: | 28 private: |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 MockVideoCaptureImpl* video_capture_impl_; | 126 MockVideoCaptureImpl* video_capture_impl_; |
127 | 127 |
128 private: | 128 private: |
129 DISALLOW_COPY_AND_ASSIGN(VideoCaptureImplTest); | 129 DISALLOW_COPY_AND_ASSIGN(VideoCaptureImplTest); |
130 }; | 130 }; |
131 | 131 |
132 TEST_F(VideoCaptureImplTest, Simple) { | 132 TEST_F(VideoCaptureImplTest, Simple) { |
133 // Execute SetCapture() and StopCapture() for one client. | 133 // Execute SetCapture() and StopCapture() for one client. |
134 scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient); | 134 scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient); |
135 media::VideoCapture::VideoCaptureCapability capability = | 135 media::VideoCapture::VideoCaptureCapability capability = |
136 DEFAULT_CAPABILITY_REGULAR; | 136 CAPABILITY_SMALL; |
137 | 137 |
138 EXPECT_CALL(*client, OnStarted(_)) | 138 EXPECT_CALL(*client, OnStarted(_)) |
139 .WillOnce(Return()); | 139 .WillOnce(Return()); |
140 EXPECT_CALL(*client, OnDeviceInfoReceived(_,_)) | 140 EXPECT_CALL(*client, OnDeviceInfoReceived(_,_)) |
141 .WillOnce(Return()); | 141 .WillOnce(Return()); |
142 | 142 |
143 video_capture_impl_->StartCapture(client.get(), capability); | 143 video_capture_impl_->StartCapture(client.get(), capability); |
144 message_loop_->RunAllPending(); | 144 message_loop_->RunAllPending(); |
145 | 145 |
146 EXPECT_CALL(*client, OnStopped(_)) | 146 EXPECT_CALL(*client, OnStopped(_)) |
147 .WillOnce(Return()); | 147 .WillOnce(Return()); |
148 EXPECT_CALL(*client, OnRemoved(_)) | 148 EXPECT_CALL(*client, OnRemoved(_)) |
149 .WillOnce(Return()); | 149 .WillOnce(Return()); |
150 | 150 |
151 video_capture_impl_->StopCapture(client.get()); | 151 video_capture_impl_->StopCapture(client.get()); |
152 message_loop_->RunAllPending(); | 152 message_loop_->RunAllPending(); |
153 } | 153 } |
154 | 154 |
155 TEST_F(VideoCaptureImplTest, TwoClientsInSequence) { | 155 TEST_F(VideoCaptureImplTest, TwoClientsInSequence) { |
156 // Execute SetCapture() and StopCapture() for 2 clients in sequence. | 156 // Execute SetCapture() and StopCapture() for 2 clients in sequence. |
157 scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient); | 157 scoped_ptr<MockVideoCaptureClient> client(new MockVideoCaptureClient); |
158 media::VideoCapture::VideoCaptureCapability capability = | 158 media::VideoCapture::VideoCaptureCapability capability = |
159 DEFAULT_CAPABILITY_REGULAR; | 159 CAPABILITY_SMALL; |
160 | 160 |
161 EXPECT_CALL(*client, OnStarted(_)) | 161 EXPECT_CALL(*client, OnStarted(_)) |
162 .WillOnce(Return()); | 162 .WillOnce(Return()); |
163 EXPECT_CALL(*client, OnDeviceInfoReceived(_,_)) | 163 EXPECT_CALL(*client, OnDeviceInfoReceived(_,_)) |
164 .WillOnce(Return()); | 164 .WillOnce(Return()); |
165 | 165 |
166 video_capture_impl_->StartCapture(client.get(), capability); | 166 video_capture_impl_->StartCapture(client.get(), capability); |
167 message_loop_->RunAllPending(); | 167 message_loop_->RunAllPending(); |
168 | 168 |
169 EXPECT_CALL(*client, OnStopped(_)) | 169 EXPECT_CALL(*client, OnStopped(_)) |
(...skipping 14 matching lines...) Expand all Loading... |
184 | 184 |
185 EXPECT_CALL(*client, OnStopped(_)) | 185 EXPECT_CALL(*client, OnStopped(_)) |
186 .WillOnce(Return()); | 186 .WillOnce(Return()); |
187 EXPECT_CALL(*client, OnRemoved(_)) | 187 EXPECT_CALL(*client, OnRemoved(_)) |
188 .WillOnce(Return()); | 188 .WillOnce(Return()); |
189 | 189 |
190 video_capture_impl_->StopCapture(client.get()); | 190 video_capture_impl_->StopCapture(client.get()); |
191 message_loop_->RunAllPending(); | 191 message_loop_->RunAllPending(); |
192 } | 192 } |
193 | 193 |
194 TEST_F(VideoCaptureImplTest, MasterAndRegular) { | 194 TEST_F(VideoCaptureImplTest, LargeAndSmall) { |
195 // Execute SetCapture() and StopCapture() for 2 clients simultaneously. | 195 // Execute SetCapture() and StopCapture() for 2 clients simultaneously. |
196 // The master client starts first and stops first. | 196 // The large client starts first and stops first. |
197 scoped_ptr<MockVideoCaptureClient> client_regular(new MockVideoCaptureClient); | 197 scoped_ptr<MockVideoCaptureClient> client_small(new MockVideoCaptureClient); |
198 scoped_ptr<MockVideoCaptureClient> client_master(new MockVideoCaptureClient); | 198 scoped_ptr<MockVideoCaptureClient> client_large(new MockVideoCaptureClient); |
199 media::VideoCapture::VideoCaptureCapability capability_regular = | 199 media::VideoCapture::VideoCaptureCapability capability_small = |
200 DEFAULT_CAPABILITY_REGULAR; | 200 CAPABILITY_SMALL; |
201 media::VideoCapture::VideoCaptureCapability capability_master = | 201 media::VideoCapture::VideoCaptureCapability capability_large = |
202 DEFAULT_CAPABILITY_MASTER; | 202 CAPABILITY_LARGE; |
203 | 203 |
204 EXPECT_CALL(*client_master, OnStarted(_)) | 204 EXPECT_CALL(*client_large, OnStarted(_)) |
205 .WillOnce(Return()); | 205 .WillOnce(Return()); |
206 EXPECT_CALL(*client_master, OnDeviceInfoReceived(_,_)) | 206 EXPECT_CALL(*client_large, OnDeviceInfoReceived(_,_)) |
207 .WillOnce(Return()); | 207 .WillOnce(Return()); |
208 EXPECT_CALL(*client_regular, OnStarted(_)) | 208 EXPECT_CALL(*client_small, OnStarted(_)) |
209 .WillOnce(Return()); | 209 .WillOnce(Return()); |
210 EXPECT_CALL(*client_regular, OnDeviceInfoReceived(_,_)) | 210 EXPECT_CALL(*client_small, OnDeviceInfoReceived(_,_)) |
211 .WillOnce(Return()); | 211 .WillOnce(Return()); |
212 | 212 |
213 video_capture_impl_->StartCapture(client_master.get(), capability_master); | 213 video_capture_impl_->StartCapture(client_large.get(), capability_large); |
214 video_capture_impl_->StartCapture(client_regular.get(), capability_regular); | 214 video_capture_impl_->StartCapture(client_small.get(), capability_small); |
215 message_loop_->RunAllPending(); | 215 message_loop_->RunAllPending(); |
216 | 216 |
217 EXPECT_CALL(*client_master, OnStopped(_)) | 217 EXPECT_CALL(*client_large, OnStopped(_)) |
218 .WillOnce(Return()); | 218 .WillOnce(Return()); |
219 EXPECT_CALL(*client_master, OnRemoved(_)) | 219 EXPECT_CALL(*client_large, OnRemoved(_)) |
220 .WillOnce(Return()); | 220 .WillOnce(Return()); |
221 EXPECT_CALL(*client_regular, OnStopped(_)) | 221 EXPECT_CALL(*client_small, OnStopped(_)) |
222 .WillOnce(Return()); | 222 .WillOnce(Return()); |
223 EXPECT_CALL(*client_regular, OnRemoved(_)) | 223 EXPECT_CALL(*client_small, OnRemoved(_)) |
224 .WillOnce(Return()); | 224 .WillOnce(Return()); |
225 | 225 |
226 video_capture_impl_->StopCapture(client_master.get()); | 226 video_capture_impl_->StopCapture(client_large.get()); |
227 video_capture_impl_->StopCapture(client_regular.get()); | 227 video_capture_impl_->StopCapture(client_small.get()); |
228 message_loop_->RunAllPending(); | 228 message_loop_->RunAllPending(); |
229 } | 229 } |
230 | 230 |
231 TEST_F(VideoCaptureImplTest, RegularAndMaster) { | 231 TEST_F(VideoCaptureImplTest, SmallAndLarge) { |
232 // Execute SetCapture() and StopCapture() for 2 clients simultaneously. | 232 // Execute SetCapture() and StopCapture() for 2 clients simultaneously. |
233 // The regular client starts first and stops first. | 233 // The small client starts first and stops first. |
234 scoped_ptr<MockVideoCaptureClient> client_regular(new MockVideoCaptureClient); | 234 scoped_ptr<MockVideoCaptureClient> client_small(new MockVideoCaptureClient); |
235 scoped_ptr<MockVideoCaptureClient> client_master(new MockVideoCaptureClient); | 235 scoped_ptr<MockVideoCaptureClient> client_large(new MockVideoCaptureClient); |
236 media::VideoCapture::VideoCaptureCapability capability_regular = | 236 media::VideoCapture::VideoCaptureCapability capability_small = |
237 DEFAULT_CAPABILITY_REGULAR; | 237 CAPABILITY_SMALL; |
238 media::VideoCapture::VideoCaptureCapability capability_master = | 238 media::VideoCapture::VideoCaptureCapability capability_large = |
239 DEFAULT_CAPABILITY_MASTER; | 239 CAPABILITY_LARGE; |
240 | 240 |
241 EXPECT_CALL(*client_master, OnStarted(_)) | 241 EXPECT_CALL(*client_large, OnStarted(_)) |
242 .WillOnce(Return()); | 242 .WillOnce(Return()); |
243 EXPECT_CALL(*client_master, OnDeviceInfoReceived(_,_)) | 243 EXPECT_CALL(*client_large, OnDeviceInfoReceived(_,_)) |
244 .WillOnce(Return()); | 244 .WillOnce(Return()); |
245 EXPECT_CALL(*client_regular, OnStarted(_)) | 245 EXPECT_CALL(*client_small, OnStarted(_)) |
246 .WillOnce(Return()); | 246 .WillOnce(Return()); |
247 EXPECT_CALL(*client_regular, OnDeviceInfoReceived(_,_)) | 247 EXPECT_CALL(*client_small, OnDeviceInfoReceived(_,_)) |
248 .Times(AtLeast(1)) | 248 .Times(AtLeast(1)) |
249 .WillRepeatedly(Return()); | 249 .WillRepeatedly(Return()); |
250 | 250 |
251 video_capture_impl_->StartCapture(client_regular.get(), capability_regular); | 251 video_capture_impl_->StartCapture(client_small.get(), capability_small); |
252 video_capture_impl_->StartCapture(client_master.get(), capability_master); | 252 video_capture_impl_->StartCapture(client_large.get(), capability_large); |
253 message_loop_->RunAllPending(); | 253 message_loop_->RunAllPending(); |
254 | 254 |
255 EXPECT_CALL(*client_master, OnStopped(_)) | 255 EXPECT_CALL(*client_large, OnStopped(_)) |
256 .WillOnce(Return()); | 256 .WillOnce(Return()); |
257 EXPECT_CALL(*client_master, OnRemoved(_)) | 257 EXPECT_CALL(*client_large, OnRemoved(_)) |
258 .WillOnce(Return()); | 258 .WillOnce(Return()); |
259 EXPECT_CALL(*client_regular, OnStopped(_)) | 259 EXPECT_CALL(*client_small, OnStopped(_)) |
260 .WillOnce(Return()); | 260 .WillOnce(Return()); |
261 EXPECT_CALL(*client_regular, OnRemoved(_)) | 261 EXPECT_CALL(*client_small, OnRemoved(_)) |
262 .WillOnce(Return()); | 262 .WillOnce(Return()); |
263 | 263 |
264 video_capture_impl_->StopCapture(client_regular.get()); | 264 video_capture_impl_->StopCapture(client_small.get()); |
265 video_capture_impl_->StopCapture(client_master.get()); | 265 video_capture_impl_->StopCapture(client_large.get()); |
266 message_loop_->RunAllPending(); | 266 message_loop_->RunAllPending(); |
267 } | 267 } |
268 | 268 |
269 TEST_F(VideoCaptureImplTest, Master1AndMaster2) { | 269 TEST_F(VideoCaptureImplTest, TwoClientsWithSameSize) { |
270 // Execute SetCapture() and StopCapture() for 2 master clients simultaneously. | 270 // Execute SetCapture() and StopCapture() for 2 clients simultaneously. |
271 // The two clients have different resolution. The second client is expected to | 271 // The client1 starts first and stops first. |
272 // recevie an error. | 272 scoped_ptr<MockVideoCaptureClient> client1(new MockVideoCaptureClient); |
273 scoped_ptr<MockVideoCaptureClient> client_master1(new MockVideoCaptureClient); | 273 scoped_ptr<MockVideoCaptureClient> client2(new MockVideoCaptureClient); |
274 scoped_ptr<MockVideoCaptureClient> client_master2(new MockVideoCaptureClient); | 274 media::VideoCapture::VideoCaptureCapability capability = CAPABILITY_SMALL; |
275 media::VideoCapture::VideoCaptureCapability capability1 = | |
276 DEFAULT_CAPABILITY_MASTER; | |
277 media::VideoCapture::VideoCaptureCapability capability2 = | |
278 DEFAULT_CAPABILITY_MASTER; | |
279 capability2.width++; | |
280 | 275 |
281 EXPECT_CALL(*client_master1, OnStarted(_)) | 276 EXPECT_CALL(*client1, OnStarted(_)) |
282 .WillOnce(Return()); | 277 .WillOnce(Return()); |
283 EXPECT_CALL(*client_master1, OnDeviceInfoReceived(_,_)) | 278 EXPECT_CALL(*client1, OnDeviceInfoReceived(_,_)) |
284 .WillOnce(Return()); | 279 .WillOnce(Return()); |
285 EXPECT_CALL(*client_master2, OnError(_,_)) | 280 EXPECT_CALL(*client2, OnStarted(_)) |
286 .WillOnce(Return()); | 281 .WillOnce(Return()); |
287 EXPECT_CALL(*client_master2, OnRemoved(_)) | 282 EXPECT_CALL(*client2, OnDeviceInfoReceived(_,_)) |
288 .WillOnce(Return()); | 283 .WillOnce(Return()); |
289 | 284 |
290 video_capture_impl_->StartCapture(client_master1.get(), capability1); | 285 video_capture_impl_->StartCapture(client1.get(), capability); |
291 video_capture_impl_->StartCapture(client_master2.get(), capability2); | 286 video_capture_impl_->StartCapture(client2.get(), capability); |
292 message_loop_->RunAllPending(); | 287 message_loop_->RunAllPending(); |
293 | 288 |
294 EXPECT_CALL(*client_master1, OnStopped(_)) | 289 EXPECT_CALL(*client1, OnStopped(_)) |
295 .WillOnce(Return()); | 290 .WillOnce(Return()); |
296 EXPECT_CALL(*client_master1, OnRemoved(_)) | 291 EXPECT_CALL(*client1, OnRemoved(_)) |
297 .WillOnce(Return()); | 292 .WillOnce(Return()); |
298 EXPECT_CALL(*client_master2, OnStopped(_)) | 293 EXPECT_CALL(*client2, OnStopped(_)) |
299 .Times(0); | 294 .WillOnce(Return()); |
| 295 EXPECT_CALL(*client2, OnRemoved(_)) |
| 296 .WillOnce(Return()); |
300 | 297 |
301 video_capture_impl_->StopCapture(client_master1.get()); | 298 video_capture_impl_->StopCapture(client1.get()); |
302 video_capture_impl_->StopCapture(client_master2.get()); | 299 video_capture_impl_->StopCapture(client2.get()); |
303 message_loop_->RunAllPending(); | 300 message_loop_->RunAllPending(); |
304 } | 301 } |
OLD | NEW |