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

Side by Side Diff: trunk/src/content/browser/renderer_host/media/video_capture_controller_unittest.cc

Issue 84393002: Revert 236927 "Reorganize media::VideoCapture* types" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years 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 VideoCaptureController. 5 // Unit test for VideoCaptureController.
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 scoped_ptr<media::VideoCaptureDevice::Client> device_; 106 scoped_ptr<media::VideoCaptureDevice::Client> device_;
107 107
108 private: 108 private:
109 DISALLOW_COPY_AND_ASSIGN(VideoCaptureControllerTest); 109 DISALLOW_COPY_AND_ASSIGN(VideoCaptureControllerTest);
110 }; 110 };
111 111
112 // A simple test of VideoCaptureController's ability to add, remove, and keep 112 // A simple test of VideoCaptureController's ability to add, remove, and keep
113 // track of clients. 113 // track of clients.
114 TEST_F(VideoCaptureControllerTest, AddAndRemoveClients) { 114 TEST_F(VideoCaptureControllerTest, AddAndRemoveClients) {
115 media::VideoCaptureParams session_100; 115 media::VideoCaptureParams session_100;
116 session_100.session_id = 100;
116 session_100.requested_format = media::VideoCaptureFormat( 117 session_100.requested_format = media::VideoCaptureFormat(
117 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420); 118 320, 240, 30, media::ConstantResolutionVideoCaptureDevice);
119
118 media::VideoCaptureParams session_200 = session_100; 120 media::VideoCaptureParams session_200 = session_100;
121 session_200.session_id = 200;
119 122
120 media::VideoCaptureParams session_300 = session_100; 123 media::VideoCaptureParams session_300 = session_100;
124 session_300.session_id = 300;
121 125
122 media::VideoCaptureParams session_400 = session_100; 126 media::VideoCaptureParams session_400 = session_100;
127 session_400.session_id = 400;
123 128
124 // Intentionally use the same route ID for two of the clients: the device_ids 129 // Intentionally use the same route ID for two of the clients: the device_ids
125 // are a per-VideoCaptureHost namespace, and can overlap across hosts. 130 // are a per-VideoCaptureHost namespace, and can overlap across hosts.
126 const VideoCaptureControllerID client_a_route_1(44); 131 const VideoCaptureControllerID client_a_route_1(44);
127 const VideoCaptureControllerID client_a_route_2(30); 132 const VideoCaptureControllerID client_a_route_2(30);
128 const VideoCaptureControllerID client_b_route_1(30); 133 const VideoCaptureControllerID client_b_route_1(30);
129 const VideoCaptureControllerID client_b_route_2(1); 134 const VideoCaptureControllerID client_b_route_2(1);
130 135
131 // Clients in controller: [] 136 // Clients in controller: []
132 ASSERT_EQ(0, controller_->GetClientCount()) 137 ASSERT_EQ(0, controller_->GetClientCount())
133 << "Client count should initially be zero."; 138 << "Client count should initially be zero.";
134 controller_->AddClient(client_a_route_1, 139 controller_->AddClient(client_a_route_1, client_a_.get(),
135 client_a_.get(), 140 base::kNullProcessHandle, session_100);
136 base::kNullProcessHandle,
137 100,
138 session_100);
139 // Clients in controller: [A/1] 141 // Clients in controller: [A/1]
140 ASSERT_EQ(1, controller_->GetClientCount()) 142 ASSERT_EQ(1, controller_->GetClientCount())
141 << "Adding client A/1 should bump client count.";; 143 << "Adding client A/1 should bump client count.";;
142 controller_->AddClient(client_a_route_2, 144 controller_->AddClient(client_a_route_2, client_a_.get(),
143 client_a_.get(), 145 base::kNullProcessHandle, session_200);
144 base::kNullProcessHandle,
145 200,
146 session_200);
147 // Clients in controller: [A/1, A/2] 146 // Clients in controller: [A/1, A/2]
148 ASSERT_EQ(2, controller_->GetClientCount()) 147 ASSERT_EQ(2, controller_->GetClientCount())
149 << "Adding client A/2 should bump client count."; 148 << "Adding client A/2 should bump client count.";
150 controller_->AddClient(client_b_route_1, 149 controller_->AddClient(client_b_route_1, client_b_.get(),
151 client_b_.get(), 150 base::kNullProcessHandle, session_300);
152 base::kNullProcessHandle,
153 300,
154 session_300);
155 // Clients in controller: [A/1, A/2, B/1] 151 // Clients in controller: [A/1, A/2, B/1]
156 ASSERT_EQ(3, controller_->GetClientCount()) 152 ASSERT_EQ(3, controller_->GetClientCount())
157 << "Adding client B/1 should bump client count."; 153 << "Adding client B/1 should bump client count.";
158 ASSERT_EQ(200, 154 ASSERT_EQ(200,
159 controller_->RemoveClient(client_a_route_2, client_a_.get())) 155 controller_->RemoveClient(client_a_route_2, client_a_.get()))
160 << "Removing client A/1 should return its session_id."; 156 << "Removing client A/1 should return its session_id.";
161 // Clients in controller: [A/1, B/1] 157 // Clients in controller: [A/1, B/1]
162 ASSERT_EQ(2, controller_->GetClientCount()); 158 ASSERT_EQ(2, controller_->GetClientCount());
163 ASSERT_EQ(static_cast<int>(kInvalidMediaCaptureSessionId), 159 ASSERT_EQ(static_cast<int>(kInvalidMediaCaptureSessionId),
164 controller_->RemoveClient(client_a_route_2, client_a_.get())) 160 controller_->RemoveClient(client_a_route_2, client_a_.get()))
165 << "Removing a nonexistant client should fail."; 161 << "Removing a nonexistant client should fail.";
166 // Clients in controller: [A/1, B/1] 162 // Clients in controller: [A/1, B/1]
167 ASSERT_EQ(2, controller_->GetClientCount()); 163 ASSERT_EQ(2, controller_->GetClientCount());
168 ASSERT_EQ(300, 164 ASSERT_EQ(300,
169 controller_->RemoveClient(client_b_route_1, client_b_.get())) 165 controller_->RemoveClient(client_b_route_1, client_b_.get()))
170 << "Removing client B/1 should return its session_id."; 166 << "Removing client B/1 should return its session_id.";
171 // Clients in controller: [A/1] 167 // Clients in controller: [A/1]
172 ASSERT_EQ(1, controller_->GetClientCount()); 168 ASSERT_EQ(1, controller_->GetClientCount());
173 controller_->AddClient(client_b_route_2, 169 controller_->AddClient(client_b_route_2, client_b_.get(),
174 client_b_.get(), 170 base::kNullProcessHandle, session_400);
175 base::kNullProcessHandle,
176 400,
177 session_400);
178 // Clients in controller: [A/1, B/2] 171 // Clients in controller: [A/1, B/2]
179 172
180 EXPECT_CALL(*client_a_, DoEnded(client_a_route_1)).Times(1); 173 EXPECT_CALL(*client_a_, DoEnded(client_a_route_1)).Times(1);
181 controller_->StopSession(100); // Session 100 == client A/1 174 controller_->StopSession(100); // Session 100 == client A/1
182 Mock::VerifyAndClearExpectations(client_a_.get()); 175 Mock::VerifyAndClearExpectations(client_a_.get());
183 ASSERT_EQ(2, controller_->GetClientCount()) 176 ASSERT_EQ(2, controller_->GetClientCount())
184 << "Client should be closed but still exist after StopSession."; 177 << "Client should be closed but still exist after StopSession.";
185 // Clients in controller: [A/1 (closed, removal pending), B/2] 178 // Clients in controller: [A/1 (closed, removal pending), B/2]
186 base::RunLoop().RunUntilIdle(); 179 base::RunLoop().RunUntilIdle();
187 // Clients in controller: [B/2] 180 // Clients in controller: [B/2]
(...skipping 19 matching lines...) Expand all
207 // Clients in controller: [] 200 // Clients in controller: []
208 ASSERT_EQ(0, controller_->GetClientCount()) 201 ASSERT_EQ(0, controller_->GetClientCount())
209 << "Client count should return to zero after all clients are gone."; 202 << "Client count should return to zero after all clients are gone.";
210 } 203 }
211 204
212 // This test will connect and disconnect several clients while simulating an 205 // This test will connect and disconnect several clients while simulating an
213 // active capture device being started and generating frames. It runs on one 206 // active capture device being started and generating frames. It runs on one
214 // thread and is intended to behave deterministically. 207 // thread and is intended to behave deterministically.
215 TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) { 208 TEST_F(VideoCaptureControllerTest, NormalCaptureMultipleClients) {
216 media::VideoCaptureParams session_100; 209 media::VideoCaptureParams session_100;
210 session_100.session_id = 100;
217 session_100.requested_format = media::VideoCaptureFormat( 211 session_100.requested_format = media::VideoCaptureFormat(
218 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420); 212 320, 240, 30, media::ConstantResolutionVideoCaptureDevice);
219 213
220 media::VideoCaptureParams session_200 = session_100; 214 media::VideoCaptureParams session_200 = session_100;
215 session_200.session_id = 200;
221 216
222 media::VideoCaptureParams session_300 = session_100; 217 media::VideoCaptureParams session_300 = session_100;
218 session_300.session_id = 300;
223 219
224 media::VideoCaptureParams session_1 = session_100; 220 media::VideoCaptureParams session_1 = session_100;
221 session_1.session_id = 1;
225 222
226 gfx::Size capture_resolution(444, 200); 223 gfx::Size capture_resolution(444, 200);
227 224
228 // The device format needn't match the VideoCaptureParams (the camera can do 225 // The device format needn't match the VideoCaptureParams (the camera can do
229 // what it wants). Pick something random. 226 // what it wants). Pick something random.
230 media::VideoCaptureFormat device_format( 227 media::VideoCaptureCapability device_format(
231 gfx::Size(10, 10), 25, media::PIXEL_FORMAT_RGB24); 228 10, 10, 25, media::PIXEL_FORMAT_RGB24,
229 media::ConstantResolutionVideoCaptureDevice);
232 230
233 const VideoCaptureControllerID client_a_route_1(0xa1a1a1a1); 231 const VideoCaptureControllerID client_a_route_1(0xa1a1a1a1);
234 const VideoCaptureControllerID client_a_route_2(0xa2a2a2a2); 232 const VideoCaptureControllerID client_a_route_2(0xa2a2a2a2);
235 const VideoCaptureControllerID client_b_route_1(0xb1b1b1b1); 233 const VideoCaptureControllerID client_b_route_1(0xb1b1b1b1);
236 const VideoCaptureControllerID client_b_route_2(0xb2b2b2b2); 234 const VideoCaptureControllerID client_b_route_2(0xb2b2b2b2);
237 235
238 // Start with two clients. 236 // Start with two clients.
239 controller_->AddClient(client_a_route_1, 237 controller_->AddClient(client_a_route_1, client_a_.get(),
240 client_a_.get(), 238 base::kNullProcessHandle, session_100);
241 base::kNullProcessHandle, 239 controller_->AddClient(client_b_route_1, client_b_.get(),
242 100, 240 base::kNullProcessHandle, session_300);
243 session_100); 241 controller_->AddClient(client_a_route_2, client_a_.get(),
244 controller_->AddClient(client_b_route_1, 242 base::kNullProcessHandle, session_200);
245 client_b_.get(),
246 base::kNullProcessHandle,
247 300,
248 session_300);
249 controller_->AddClient(client_a_route_2,
250 client_a_.get(),
251 base::kNullProcessHandle,
252 200,
253 session_200);
254 ASSERT_EQ(3, controller_->GetClientCount()); 243 ASSERT_EQ(3, controller_->GetClientCount());
255 244
256 // Now, simulate an incoming captured buffer from the capture device. As a 245 // Now, simulate an incoming captured buffer from the capture device. As a
257 // side effect this will cause the first buffer to be shared with clients. 246 // side effect this will cause the first buffer to be shared with clients.
258 uint8 buffer_no = 1; 247 uint8 buffer_no = 1;
259 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer; 248 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer;
260 buffer = 249 buffer =
261 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); 250 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution);
262 ASSERT_TRUE(buffer); 251 ASSERT_TRUE(buffer);
263 memset(buffer->data(), buffer_no++, buffer->size()); 252 memset(buffer->data(), buffer_no++, buffer->size());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 292
304 // The buffer should be delivered to the clients in any order. 293 // The buffer should be delivered to the clients in any order.
305 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1)).Times(1); 294 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_1)).Times(1);
306 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1)).Times(1); 295 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_1)).Times(1);
307 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2)).Times(1); 296 EXPECT_CALL(*client_a_, DoBufferReady(client_a_route_2)).Times(1);
308 base::RunLoop().RunUntilIdle(); 297 base::RunLoop().RunUntilIdle();
309 Mock::VerifyAndClearExpectations(client_a_.get()); 298 Mock::VerifyAndClearExpectations(client_a_.get());
310 Mock::VerifyAndClearExpectations(client_b_.get()); 299 Mock::VerifyAndClearExpectations(client_b_.get());
311 300
312 // Add a fourth client now that some buffers have come through. 301 // Add a fourth client now that some buffers have come through.
313 controller_->AddClient(client_b_route_2, 302 controller_->AddClient(client_b_route_2, client_b_.get(),
314 client_b_.get(), 303 base::kNullProcessHandle, session_1);
315 base::kNullProcessHandle,
316 1,
317 session_1);
318 Mock::VerifyAndClearExpectations(client_b_.get()); 304 Mock::VerifyAndClearExpectations(client_b_.get());
319 305
320 // Third, fourth, and fifth buffers. Pretend they all arrive at the same time. 306 // Third, fourth, and fifth buffers. Pretend they all arrive at the same time.
321 for (int i = 0; i < kPoolSize; i++) { 307 for (int i = 0; i < kPoolSize; i++) {
322 buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420, 308 buffer = device_->ReserveOutputBuffer(media::VideoFrame::I420,
323 capture_resolution); 309 capture_resolution);
324 ASSERT_TRUE(buffer); 310 ASSERT_TRUE(buffer);
325 memset(buffer->data(), buffer_no++, buffer->size()); 311 memset(buffer->data(), buffer_no++, buffer->size());
326 device_->OnIncomingCapturedBuffer(buffer, 312 device_->OnIncomingCapturedBuffer(buffer,
327 media::VideoFrame::I420, 313 media::VideoFrame::I420,
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2)).Times(2); 374 EXPECT_CALL(*client_b_, DoBufferReady(client_b_route_2)).Times(2);
389 base::RunLoop().RunUntilIdle(); 375 base::RunLoop().RunUntilIdle();
390 Mock::VerifyAndClearExpectations(client_a_.get()); 376 Mock::VerifyAndClearExpectations(client_a_.get());
391 Mock::VerifyAndClearExpectations(client_b_.get()); 377 Mock::VerifyAndClearExpectations(client_b_.get());
392 } 378 }
393 379
394 // Exercises the OnError() codepath of VideoCaptureController, and tests the 380 // Exercises the OnError() codepath of VideoCaptureController, and tests the
395 // behavior of various operations after the error state has been signalled. 381 // behavior of various operations after the error state has been signalled.
396 TEST_F(VideoCaptureControllerTest, ErrorBeforeDeviceCreation) { 382 TEST_F(VideoCaptureControllerTest, ErrorBeforeDeviceCreation) {
397 media::VideoCaptureParams session_100; 383 media::VideoCaptureParams session_100;
384 session_100.session_id = 100;
398 session_100.requested_format = media::VideoCaptureFormat( 385 session_100.requested_format = media::VideoCaptureFormat(
399 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420); 386 320, 240, 30, media::ConstantResolutionVideoCaptureDevice);
400 387
401 media::VideoCaptureParams session_200 = session_100; 388 media::VideoCaptureParams session_200 = session_100;
389 session_200.session_id = 200;
402 390
403 const gfx::Size capture_resolution(320, 240); 391 const gfx::Size capture_resolution(320, 240);
404 392
405 const VideoCaptureControllerID route_id(0x99); 393 const VideoCaptureControllerID route_id(0x99);
406 394
407 // Start with one client. 395 // Start with one client.
408 controller_->AddClient( 396 controller_->AddClient(route_id, client_a_.get(),
409 route_id, client_a_.get(), base::kNullProcessHandle, 100, session_100); 397 base::kNullProcessHandle, session_100);
410 device_->OnError(); 398 device_->OnError();
411 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1); 399 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
412 base::RunLoop().RunUntilIdle(); 400 base::RunLoop().RunUntilIdle();
413 Mock::VerifyAndClearExpectations(client_a_.get()); 401 Mock::VerifyAndClearExpectations(client_a_.get());
414 402
415 // Second client connects after the error state. It also should get told of 403 // Second client connects after the error state. It also should get told of
416 // the error. 404 // the error.
417 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1); 405 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1);
418 controller_->AddClient( 406 controller_->AddClient(route_id, client_b_.get(),
419 route_id, client_b_.get(), base::kNullProcessHandle, 200, session_200); 407 base::kNullProcessHandle, session_200);
420 base::RunLoop().RunUntilIdle(); 408 base::RunLoop().RunUntilIdle();
421 Mock::VerifyAndClearExpectations(client_b_.get()); 409 Mock::VerifyAndClearExpectations(client_b_.get());
422 410
423 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = 411 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer =
424 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution); 412 device_->ReserveOutputBuffer(media::VideoFrame::I420, capture_resolution);
425 ASSERT_TRUE(buffer); 413 ASSERT_TRUE(buffer);
426 414
427 device_->OnIncomingCapturedBuffer( 415 device_->OnIncomingCapturedBuffer(
428 buffer, media::VideoFrame::I420, capture_resolution, base::Time(), 30); 416 buffer, media::VideoFrame::I420, capture_resolution, base::Time(), 30);
429 buffer = NULL; 417 buffer = NULL;
430 418
431 base::RunLoop().RunUntilIdle(); 419 base::RunLoop().RunUntilIdle();
432 } 420 }
433 421
434 // Exercises the OnError() codepath of VideoCaptureController, and tests the 422 // Exercises the OnError() codepath of VideoCaptureController, and tests the
435 // behavior of various operations after the error state has been signalled. 423 // behavior of various operations after the error state has been signalled.
436 TEST_F(VideoCaptureControllerTest, ErrorAfterDeviceCreation) { 424 TEST_F(VideoCaptureControllerTest, ErrorAfterDeviceCreation) {
437 media::VideoCaptureParams session_100; 425 media::VideoCaptureParams session_100;
426 session_100.session_id = 100;
438 session_100.requested_format = media::VideoCaptureFormat( 427 session_100.requested_format = media::VideoCaptureFormat(
439 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420); 428 320, 240, 30, media::ConstantResolutionVideoCaptureDevice);
440 429
441 media::VideoCaptureParams session_200 = session_100; 430 media::VideoCaptureParams session_200 = session_100;
431 session_200.session_id = 200;
442 432
443 const VideoCaptureControllerID route_id(0x99); 433 const VideoCaptureControllerID route_id(0x99);
444 434
445 // Start with one client. 435 // Start with one client.
446 controller_->AddClient( 436 controller_->AddClient(route_id, client_a_.get(),
447 route_id, client_a_.get(), base::kNullProcessHandle, 100, session_100); 437 base::kNullProcessHandle, session_100);
448 media::VideoCaptureFormat device_format( 438 // OnFrameInfo from the VCD should become a no-op after the error occurs.
449 gfx::Size(10, 10), 25, media::PIXEL_FORMAT_ARGB); 439 media::VideoCaptureCapability device_format(
440 10, 10, 25, media::PIXEL_FORMAT_ARGB,
441 media::ConstantResolutionVideoCaptureDevice);
450 442
451 // Start the device. Then, before the first buffer, signal an error and 443 // Start the device. Then, before the first buffer, signal an error and
452 // deliver the buffer. The error should be propagated to clients; the buffer 444 // deliver the buffer. The error should be propagated to clients; the buffer
453 // should not be. 445 // should not be.
454 base::RunLoop().RunUntilIdle(); 446 base::RunLoop().RunUntilIdle();
455 Mock::VerifyAndClearExpectations(client_a_.get()); 447 Mock::VerifyAndClearExpectations(client_a_.get());
456 448
457 const gfx::Size dims(320, 240); 449 const gfx::Size dims(320, 240);
458 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer = 450 scoped_refptr<media::VideoCaptureDevice::Client::Buffer> buffer =
459 device_->ReserveOutputBuffer(media::VideoFrame::I420, dims); 451 device_->ReserveOutputBuffer(media::VideoFrame::I420, dims);
460 ASSERT_TRUE(buffer); 452 ASSERT_TRUE(buffer);
461 453
462 device_->OnError(); 454 device_->OnError();
463 device_->OnIncomingCapturedBuffer(buffer, 455 device_->OnIncomingCapturedBuffer(buffer,
464 media::VideoFrame::I420, 456 media::VideoFrame::I420,
465 dims, 457 dims,
466 base::Time(), 458 base::Time(),
467 device_format.frame_rate); 459 device_format.frame_rate);
468 buffer = NULL; 460 buffer = NULL;
469 461
470 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1); 462 EXPECT_CALL(*client_a_, DoError(route_id)).Times(1);
471 base::RunLoop().RunUntilIdle(); 463 base::RunLoop().RunUntilIdle();
472 Mock::VerifyAndClearExpectations(client_a_.get()); 464 Mock::VerifyAndClearExpectations(client_a_.get());
473 465
474 // Second client connects after the error state. It also should get told of 466 // Second client connects after the error state. It also should get told of
475 // the error. 467 // the error.
476 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1); 468 EXPECT_CALL(*client_b_, DoError(route_id)).Times(1);
477 controller_->AddClient( 469 controller_->AddClient(route_id, client_b_.get(),
478 route_id, client_b_.get(), base::kNullProcessHandle, 200, session_200); 470 base::kNullProcessHandle, session_200);
479 Mock::VerifyAndClearExpectations(client_b_.get()); 471 Mock::VerifyAndClearExpectations(client_b_.get());
480 } 472 }
481 473
482 } // namespace content 474 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698