OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/child/shared_memory_data_consumer_handle.h" | 5 #include "content/child/shared_memory_data_consumer_handle.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 const base::Closure& on_done) | 139 const base::Closure& on_done) |
140 : handle_(std::move(handle)), | 140 : handle_(std::move(handle)), |
141 main_message_loop_(main_message_loop), | 141 main_message_loop_(main_message_loop), |
142 on_done_(on_done) {} | 142 on_done_(on_done) {} |
143 | 143 |
144 const std::string& result() const { return result_; } | 144 const std::string& result() const { return result_; } |
145 | 145 |
146 void ReadData() { | 146 void ReadData() { |
147 if (!client_) { | 147 if (!client_) { |
148 client_.reset(new ClientImpl(this)); | 148 client_.reset(new ClientImpl(this)); |
149 reader_ = handle_->ObtainReader(client_.get()); | 149 reader_ = handle_->obtainReader(client_.get()); |
150 } | 150 } |
151 | 151 |
152 Result rv = kOk; | 152 Result rv = kOk; |
153 size_t read_size = 0; | 153 size_t read_size = 0; |
154 | 154 |
155 while (true) { | 155 while (true) { |
156 char buffer[16]; | 156 char buffer[16]; |
157 rv = reader_->read(&buffer, sizeof(buffer), kNone, &read_size); | 157 rv = reader_->read(&buffer, sizeof(buffer), kNone, &read_size); |
158 if (rv != kOk) | 158 if (rv != kOk) |
159 break; | 159 break; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 void RunPostedTasks() { | 215 void RunPostedTasks() { |
216 base::RunLoop run_loop; | 216 base::RunLoop run_loop; |
217 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 217 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
218 run_loop.QuitClosure()); | 218 run_loop.QuitClosure()); |
219 run_loop.Run(); | 219 run_loop.Run(); |
220 } | 220 } |
221 | 221 |
222 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) { | 222 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) { |
223 char buffer[4]; | 223 char buffer[4]; |
224 size_t read = 88; | 224 size_t read = 88; |
225 auto reader = handle_->ObtainReader(nullptr); | 225 auto reader = handle_->obtainReader(nullptr); |
226 Result result = reader->read(buffer, 4, kNone, &read); | 226 Result result = reader->read(buffer, 4, kNone, &read); |
227 | 227 |
228 EXPECT_EQ(kShouldWait, result); | 228 EXPECT_EQ(kShouldWait, result); |
229 EXPECT_EQ(0u, read); | 229 EXPECT_EQ(0u, read); |
230 } | 230 } |
231 | 231 |
232 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) { | 232 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) { |
233 char buffer[4]; | 233 char buffer[4]; |
234 size_t read = 88; | 234 size_t read = 88; |
235 | 235 |
236 writer_.reset(); | 236 writer_.reset(); |
237 auto reader = handle_->ObtainReader(nullptr); | 237 auto reader = handle_->obtainReader(nullptr); |
238 Result result = reader->read(buffer, 4, kNone, &read); | 238 Result result = reader->read(buffer, 4, kNone, &read); |
239 | 239 |
240 EXPECT_EQ(kDone, result); | 240 EXPECT_EQ(kDone, result); |
241 EXPECT_EQ(0u, read); | 241 EXPECT_EQ(0u, read); |
242 } | 242 } |
243 | 243 |
244 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) { | 244 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) { |
245 writer_->AddData(NewFixedData("hello")); | 245 writer_->AddData(NewFixedData("hello")); |
246 | 246 |
247 char buffer[4] = {}; | 247 char buffer[4] = {}; |
248 size_t read = 88; | 248 size_t read = 88; |
249 auto reader = handle_->ObtainReader(nullptr); | 249 auto reader = handle_->obtainReader(nullptr); |
250 Result result = reader->read(buffer, 3, kNone, &read); | 250 Result result = reader->read(buffer, 3, kNone, &read); |
251 | 251 |
252 EXPECT_EQ(kOk, result); | 252 EXPECT_EQ(kOk, result); |
253 EXPECT_EQ(3u, read); | 253 EXPECT_EQ(3u, read); |
254 EXPECT_STREQ("hel", buffer); | 254 EXPECT_STREQ("hel", buffer); |
255 | 255 |
256 result = reader->read(buffer, 3, kNone, &read); | 256 result = reader->read(buffer, 3, kNone, &read); |
257 EXPECT_EQ(kOk, result); | 257 EXPECT_EQ(kOk, result); |
258 EXPECT_EQ(2u, read); | 258 EXPECT_EQ(2u, read); |
259 EXPECT_STREQ("lol", buffer); | 259 EXPECT_STREQ("lol", buffer); |
260 | 260 |
261 result = reader->read(buffer, 3, kNone, &read); | 261 result = reader->read(buffer, 3, kNone, &read); |
262 EXPECT_EQ(kShouldWait, result); | 262 EXPECT_EQ(kShouldWait, result); |
263 EXPECT_EQ(0u, read); | 263 EXPECT_EQ(0u, read); |
264 | 264 |
265 writer_->Close(); | 265 writer_->Close(); |
266 | 266 |
267 result = reader->read(buffer, 3, kNone, &read); | 267 result = reader->read(buffer, 3, kNone, &read); |
268 EXPECT_EQ(kDone, result); | 268 EXPECT_EQ(kDone, result); |
269 EXPECT_EQ(0u, read); | 269 EXPECT_EQ(0u, read); |
270 } | 270 } |
271 | 271 |
272 TEST_P(SharedMemoryDataConsumerHandleTest, ReadAfterHandleIsGone) { | 272 TEST_P(SharedMemoryDataConsumerHandleTest, ReadAfterHandleIsGone) { |
273 writer_->AddData(NewFixedData("hello")); | 273 writer_->AddData(NewFixedData("hello")); |
274 | 274 |
275 char buffer[8] = {}; | 275 char buffer[8] = {}; |
276 size_t read = 88; | 276 size_t read = 88; |
277 auto reader = handle_->ObtainReader(nullptr); | 277 auto reader = handle_->obtainReader(nullptr); |
278 | 278 |
279 handle_.reset(); | 279 handle_.reset(); |
280 | 280 |
281 Result result = reader->read(buffer, sizeof(buffer), kNone, &read); | 281 Result result = reader->read(buffer, sizeof(buffer), kNone, &read); |
282 | 282 |
283 EXPECT_EQ(kOk, result); | 283 EXPECT_EQ(kOk, result); |
284 EXPECT_EQ(5u, read); | 284 EXPECT_EQ(5u, read); |
285 EXPECT_STREQ("hello", buffer); | 285 EXPECT_STREQ("hello", buffer); |
286 | 286 |
287 result = reader->read(buffer, 3, kNone, &read); | 287 result = reader->read(buffer, 3, kNone, &read); |
288 EXPECT_EQ(kShouldWait, result); | 288 EXPECT_EQ(kShouldWait, result); |
289 EXPECT_EQ(0u, read); | 289 EXPECT_EQ(0u, read); |
290 | 290 |
291 writer_->Close(); | 291 writer_->Close(); |
292 | 292 |
293 result = reader->read(buffer, 3, kNone, &read); | 293 result = reader->read(buffer, 3, kNone, &read); |
294 EXPECT_EQ(kDone, result); | 294 EXPECT_EQ(kDone, result); |
295 EXPECT_EQ(0u, read); | 295 EXPECT_EQ(0u, read); |
296 } | 296 } |
297 | 297 |
298 TEST_P(SharedMemoryDataConsumerHandleTest, ReObtainReader) { | 298 TEST_P(SharedMemoryDataConsumerHandleTest, ReObtainReader) { |
299 writer_->AddData(NewFixedData("hello")); | 299 writer_->AddData(NewFixedData("hello")); |
300 | 300 |
301 char buffer[4] = {}; | 301 char buffer[4] = {}; |
302 size_t read = 88; | 302 size_t read = 88; |
303 auto reader = handle_->ObtainReader(nullptr); | 303 auto reader = handle_->obtainReader(nullptr); |
304 Result result = reader->read(buffer, 3, kNone, &read); | 304 Result result = reader->read(buffer, 3, kNone, &read); |
305 | 305 |
306 EXPECT_EQ(kOk, result); | 306 EXPECT_EQ(kOk, result); |
307 EXPECT_EQ(3u, read); | 307 EXPECT_EQ(3u, read); |
308 EXPECT_STREQ("hel", buffer); | 308 EXPECT_STREQ("hel", buffer); |
309 | 309 |
310 reader.reset(); | 310 reader.reset(); |
311 reader = handle_->ObtainReader(nullptr); | 311 reader = handle_->obtainReader(nullptr); |
312 | 312 |
313 result = reader->read(buffer, 3, kNone, &read); | 313 result = reader->read(buffer, 3, kNone, &read); |
314 EXPECT_EQ(kOk, result); | 314 EXPECT_EQ(kOk, result); |
315 EXPECT_EQ(2u, read); | 315 EXPECT_EQ(2u, read); |
316 EXPECT_STREQ("lol", buffer); | 316 EXPECT_STREQ("lol", buffer); |
317 | 317 |
318 result = reader->read(buffer, 3, kNone, &read); | 318 result = reader->read(buffer, 3, kNone, &read); |
319 EXPECT_EQ(kShouldWait, result); | 319 EXPECT_EQ(kShouldWait, result); |
320 EXPECT_EQ(0u, read); | 320 EXPECT_EQ(0u, read); |
321 | 321 |
322 writer_->Close(); | 322 writer_->Close(); |
323 | 323 |
324 result = reader->read(buffer, 3, kNone, &read); | 324 result = reader->read(buffer, 3, kNone, &read); |
325 EXPECT_EQ(kDone, result); | 325 EXPECT_EQ(kDone, result); |
326 EXPECT_EQ(0u, read); | 326 EXPECT_EQ(0u, read); |
327 } | 327 } |
328 | 328 |
329 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) { | 329 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) { |
330 writer_->AddData(NewFixedData("hello")); | 330 writer_->AddData(NewFixedData("hello")); |
331 writer_->Close(); | 331 writer_->Close(); |
332 | 332 |
333 char buffer[20] = {}; | 333 char buffer[20] = {}; |
334 size_t read = 88; | 334 size_t read = 88; |
335 auto reader = handle_->ObtainReader(nullptr); | 335 auto reader = handle_->obtainReader(nullptr); |
336 Result result = reader->read(buffer, sizeof(buffer), kNone, &read); | 336 Result result = reader->read(buffer, sizeof(buffer), kNone, &read); |
337 | 337 |
338 EXPECT_EQ(kOk, result); | 338 EXPECT_EQ(kOk, result); |
339 EXPECT_EQ(5u, read); | 339 EXPECT_EQ(5u, read); |
340 EXPECT_STREQ("hello", buffer); | 340 EXPECT_STREQ("hello", buffer); |
341 | 341 |
342 result = reader->read(buffer, sizeof(buffer), kNone, &read); | 342 result = reader->read(buffer, sizeof(buffer), kNone, &read); |
343 EXPECT_EQ(kDone, result); | 343 EXPECT_EQ(kDone, result); |
344 EXPECT_EQ(0u, read); | 344 EXPECT_EQ(0u, read); |
345 } | 345 } |
346 | 346 |
347 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithDataBeforeZeroRead) { | 347 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithDataBeforeZeroRead) { |
348 writer_->AddData(NewFixedData("hello")); | 348 writer_->AddData(NewFixedData("hello")); |
349 writer_->Close(); | 349 writer_->Close(); |
350 | 350 |
351 size_t read = 88; | 351 size_t read = 88; |
352 auto reader = handle_->ObtainReader(nullptr); | 352 auto reader = handle_->obtainReader(nullptr); |
353 Result result = reader->read(nullptr, 0, kNone, &read); | 353 Result result = reader->read(nullptr, 0, kNone, &read); |
354 | 354 |
355 EXPECT_EQ(kOk, result); | 355 EXPECT_EQ(kOk, result); |
356 EXPECT_EQ(0u, read); | 356 EXPECT_EQ(0u, read); |
357 } | 357 } |
358 | 358 |
359 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithoutDataBeforeZeroRead) { | 359 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithoutDataBeforeZeroRead) { |
360 writer_->Close(); | 360 writer_->Close(); |
361 | 361 |
362 size_t read = 88; | 362 size_t read = 88; |
363 auto reader = handle_->ObtainReader(nullptr); | 363 auto reader = handle_->obtainReader(nullptr); |
364 Result result = reader->read(nullptr, 0, kNone, &read); | 364 Result result = reader->read(nullptr, 0, kNone, &read); |
365 | 365 |
366 EXPECT_EQ(kDone, result); | 366 EXPECT_EQ(kDone, result); |
367 } | 367 } |
368 | 368 |
369 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) { | 369 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) { |
370 writer_->AddData(NewFixedData("Once ")); | 370 writer_->AddData(NewFixedData("Once ")); |
371 writer_->AddData(NewFixedData("upon ")); | 371 writer_->AddData(NewFixedData("upon ")); |
372 writer_->AddData(NewFixedData("a ")); | 372 writer_->AddData(NewFixedData("a ")); |
373 writer_->AddData(NewFixedData("time ")); | 373 writer_->AddData(NewFixedData("time ")); |
374 writer_->AddData(NewFixedData("there ")); | 374 writer_->AddData(NewFixedData("there ")); |
375 writer_->AddData(NewFixedData("was ")); | 375 writer_->AddData(NewFixedData("was ")); |
376 writer_->AddData(NewFixedData("a ")); | 376 writer_->AddData(NewFixedData("a ")); |
377 writer_->Close(); | 377 writer_->Close(); |
378 | 378 |
379 char buffer[20]; | 379 char buffer[20]; |
380 size_t read; | 380 size_t read; |
381 Result result; | 381 Result result; |
382 | 382 |
383 auto reader = handle_->ObtainReader(nullptr); | 383 auto reader = handle_->obtainReader(nullptr); |
384 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); | 384 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); |
385 result = reader->read(buffer, 6, kNone, &read); | 385 result = reader->read(buffer, 6, kNone, &read); |
386 EXPECT_EQ(kOk, result); | 386 EXPECT_EQ(kOk, result); |
387 EXPECT_EQ(6u, read); | 387 EXPECT_EQ(6u, read); |
388 EXPECT_STREQ("Once u", buffer); | 388 EXPECT_STREQ("Once u", buffer); |
389 | 389 |
390 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); | 390 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); |
391 result = reader->read(buffer, 2, kNone, &read); | 391 result = reader->read(buffer, 2, kNone, &read); |
392 EXPECT_EQ(kOk, result); | 392 EXPECT_EQ(kOk, result); |
393 EXPECT_EQ(2u, read); | 393 EXPECT_EQ(2u, read); |
(...skipping 23 matching lines...) Expand all Loading... |
417 } | 417 } |
418 | 418 |
419 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) { | 419 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) { |
420 writer_->AddData(NewFixedData("Once ")); | 420 writer_->AddData(NewFixedData("Once ")); |
421 writer_->AddData(NewFixedData("upon ")); | 421 writer_->AddData(NewFixedData("upon ")); |
422 | 422 |
423 char buffer[20]; | 423 char buffer[20]; |
424 size_t read; | 424 size_t read; |
425 Result result; | 425 Result result; |
426 | 426 |
427 auto reader = handle_->ObtainReader(nullptr); | 427 auto reader = handle_->obtainReader(nullptr); |
428 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); | 428 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); |
429 result = reader->read(buffer, 6, kNone, &read); | 429 result = reader->read(buffer, 6, kNone, &read); |
430 EXPECT_EQ(kOk, result); | 430 EXPECT_EQ(kOk, result); |
431 EXPECT_EQ(6u, read); | 431 EXPECT_EQ(6u, read); |
432 EXPECT_STREQ("Once u", buffer); | 432 EXPECT_STREQ("Once u", buffer); |
433 | 433 |
434 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); | 434 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); |
435 result = reader->read(buffer, 2, kNone, &read); | 435 result = reader->read(buffer, 2, kNone, &read); |
436 EXPECT_EQ(kOk, result); | 436 EXPECT_EQ(kOk, result); |
437 EXPECT_EQ(2u, read); | 437 EXPECT_EQ(2u, read); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
479 | 479 |
480 InSequence s; | 480 InSequence s; |
481 EXPECT_CALL(checkpoint, Call(0)); | 481 EXPECT_CALL(checkpoint, Call(0)); |
482 EXPECT_CALL(checkpoint, Call(1)); | 482 EXPECT_CALL(checkpoint, Call(1)); |
483 EXPECT_CALL(checkpoint, Call(2)); | 483 EXPECT_CALL(checkpoint, Call(2)); |
484 EXPECT_CALL(checkpoint, Call(3)); | 484 EXPECT_CALL(checkpoint, Call(3)); |
485 EXPECT_CALL(client_, didGetReadable()); | 485 EXPECT_CALL(client_, didGetReadable()); |
486 EXPECT_CALL(checkpoint, Call(4)); | 486 EXPECT_CALL(checkpoint, Call(4)); |
487 | 487 |
488 checkpoint.Call(0); | 488 checkpoint.Call(0); |
489 auto reader = handle_->ObtainReader(&client_); | 489 auto reader = handle_->obtainReader(&client_); |
490 checkpoint.Call(1); | 490 checkpoint.Call(1); |
491 RunPostedTasks(); | 491 RunPostedTasks(); |
492 checkpoint.Call(2); | 492 checkpoint.Call(2); |
493 writer_->Close(); | 493 writer_->Close(); |
494 checkpoint.Call(3); | 494 checkpoint.Call(3); |
495 RunPostedTasks(); | 495 RunPostedTasks(); |
496 checkpoint.Call(4); | 496 checkpoint.Call(4); |
497 } | 497 } |
498 | 498 |
499 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) { | 499 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) { |
500 Checkpoint checkpoint; | 500 Checkpoint checkpoint; |
501 | 501 |
502 InSequence s; | 502 InSequence s; |
503 EXPECT_CALL(checkpoint, Call(0)); | 503 EXPECT_CALL(checkpoint, Call(0)); |
504 EXPECT_CALL(checkpoint, Call(1)); | 504 EXPECT_CALL(checkpoint, Call(1)); |
505 EXPECT_CALL(checkpoint, Call(2)); | 505 EXPECT_CALL(checkpoint, Call(2)); |
506 EXPECT_CALL(client_, didGetReadable()); | 506 EXPECT_CALL(client_, didGetReadable()); |
507 EXPECT_CALL(checkpoint, Call(3)); | 507 EXPECT_CALL(checkpoint, Call(3)); |
508 | 508 |
509 checkpoint.Call(0); | 509 checkpoint.Call(0); |
510 writer_->AddData(NewFixedData("Once ")); | 510 writer_->AddData(NewFixedData("Once ")); |
511 checkpoint.Call(1); | 511 checkpoint.Call(1); |
512 auto reader = handle_->ObtainReader(&client_); | 512 auto reader = handle_->obtainReader(&client_); |
513 checkpoint.Call(2); | 513 checkpoint.Call(2); |
514 RunPostedTasks(); | 514 RunPostedTasks(); |
515 checkpoint.Call(3); | 515 checkpoint.Call(3); |
516 } | 516 } |
517 | 517 |
518 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) { | 518 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) { |
519 Checkpoint checkpoint; | 519 Checkpoint checkpoint; |
520 char buffer[20]; | 520 char buffer[20]; |
521 Result result; | 521 Result result; |
522 size_t size; | 522 size_t size; |
523 | 523 |
524 InSequence s; | 524 InSequence s; |
525 EXPECT_CALL(checkpoint, Call(0)); | 525 EXPECT_CALL(checkpoint, Call(0)); |
526 EXPECT_CALL(checkpoint, Call(1)); | 526 EXPECT_CALL(checkpoint, Call(1)); |
527 EXPECT_CALL(client_, didGetReadable()); | 527 EXPECT_CALL(client_, didGetReadable()); |
528 EXPECT_CALL(checkpoint, Call(2)); | 528 EXPECT_CALL(checkpoint, Call(2)); |
529 EXPECT_CALL(checkpoint, Call(3)); | 529 EXPECT_CALL(checkpoint, Call(3)); |
530 EXPECT_CALL(checkpoint, Call(4)); | 530 EXPECT_CALL(checkpoint, Call(4)); |
531 EXPECT_CALL(client_, didGetReadable()); | 531 EXPECT_CALL(client_, didGetReadable()); |
532 EXPECT_CALL(checkpoint, Call(5)); | 532 EXPECT_CALL(checkpoint, Call(5)); |
533 | 533 |
534 checkpoint.Call(0); | 534 checkpoint.Call(0); |
535 auto reader = handle_->ObtainReader(&client_); | 535 auto reader = handle_->obtainReader(&client_); |
536 checkpoint.Call(1); | 536 checkpoint.Call(1); |
537 writer_->AddData(NewFixedData("Once ")); | 537 writer_->AddData(NewFixedData("Once ")); |
538 checkpoint.Call(2); | 538 checkpoint.Call(2); |
539 writer_->AddData(NewFixedData("upon ")); | 539 writer_->AddData(NewFixedData("upon ")); |
540 checkpoint.Call(3); | 540 checkpoint.Call(3); |
541 result = reader->read(buffer, sizeof(buffer), kNone, &size); | 541 result = reader->read(buffer, sizeof(buffer), kNone, &size); |
542 EXPECT_EQ(kOk, result); | 542 EXPECT_EQ(kOk, result); |
543 EXPECT_EQ(10u, size); | 543 EXPECT_EQ(10u, size); |
544 checkpoint.Call(4); | 544 checkpoint.Call(4); |
545 writer_->AddData(NewFixedData("a ")); | 545 writer_->AddData(NewFixedData("a ")); |
546 checkpoint.Call(5); | 546 checkpoint.Call(5); |
547 } | 547 } |
548 | 548 |
549 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) { | 549 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) { |
550 Checkpoint checkpoint; | 550 Checkpoint checkpoint; |
551 | 551 |
552 InSequence s; | 552 InSequence s; |
553 EXPECT_CALL(checkpoint, Call(0)); | 553 EXPECT_CALL(checkpoint, Call(0)); |
554 EXPECT_CALL(checkpoint, Call(1)); | 554 EXPECT_CALL(checkpoint, Call(1)); |
555 EXPECT_CALL(client_, didGetReadable()); | 555 EXPECT_CALL(client_, didGetReadable()); |
556 EXPECT_CALL(checkpoint, Call(2)); | 556 EXPECT_CALL(checkpoint, Call(2)); |
557 EXPECT_CALL(checkpoint, Call(3)); | 557 EXPECT_CALL(checkpoint, Call(3)); |
558 | 558 |
559 checkpoint.Call(0); | 559 checkpoint.Call(0); |
560 auto reader = handle_->ObtainReader(&client_); | 560 auto reader = handle_->obtainReader(&client_); |
561 checkpoint.Call(1); | 561 checkpoint.Call(1); |
562 writer_->AddData(NewFixedData("Once ")); | 562 writer_->AddData(NewFixedData("Once ")); |
563 checkpoint.Call(2); | 563 checkpoint.Call(2); |
564 writer_->Close(); | 564 writer_->Close(); |
565 checkpoint.Call(3); | 565 checkpoint.Call(3); |
566 } | 566 } |
567 | 567 |
568 TEST_P(SharedMemoryDataConsumerHandleTest, ReleaseReader) { | 568 TEST_P(SharedMemoryDataConsumerHandleTest, ReleaseReader) { |
569 Checkpoint checkpoint; | 569 Checkpoint checkpoint; |
570 | 570 |
571 InSequence s; | 571 InSequence s; |
572 EXPECT_CALL(checkpoint, Call(0)); | 572 EXPECT_CALL(checkpoint, Call(0)); |
573 EXPECT_CALL(checkpoint, Call(1)); | 573 EXPECT_CALL(checkpoint, Call(1)); |
574 EXPECT_CALL(checkpoint, Call(2)); | 574 EXPECT_CALL(checkpoint, Call(2)); |
575 | 575 |
576 checkpoint.Call(0); | 576 checkpoint.Call(0); |
577 auto reader = handle_->ObtainReader(&client_); | 577 auto reader = handle_->obtainReader(&client_); |
578 checkpoint.Call(1); | 578 checkpoint.Call(1); |
579 reader.reset(); | 579 reader.reset(); |
580 writer_->AddData(NewFixedData("Once ")); | 580 writer_->AddData(NewFixedData("Once ")); |
581 checkpoint.Call(2); | 581 checkpoint.Call(2); |
582 } | 582 } |
583 | 583 |
584 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) { | 584 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) { |
585 Result result; | 585 Result result; |
586 const void* buffer = &result; | 586 const void* buffer = &result; |
587 size_t size = 99; | 587 size_t size = 99; |
588 | 588 |
589 auto reader = handle_->ObtainReader(nullptr); | 589 auto reader = handle_->obtainReader(nullptr); |
590 result = reader->beginRead(&buffer, kNone, &size); | 590 result = reader->beginRead(&buffer, kNone, &size); |
591 EXPECT_EQ(kShouldWait, result); | 591 EXPECT_EQ(kShouldWait, result); |
592 EXPECT_EQ(nullptr, buffer); | 592 EXPECT_EQ(nullptr, buffer); |
593 EXPECT_EQ(0u, size); | 593 EXPECT_EQ(0u, size); |
594 } | 594 } |
595 | 595 |
596 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) { | 596 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) { |
597 writer_->AddData(NewFixedData("Once ")); | 597 writer_->AddData(NewFixedData("Once ")); |
598 | 598 |
599 Result result; | 599 Result result; |
600 const void* buffer = &result; | 600 const void* buffer = &result; |
601 size_t size = 99; | 601 size_t size = 99; |
602 | 602 |
603 auto reader = handle_->ObtainReader(nullptr); | 603 auto reader = handle_->obtainReader(nullptr); |
604 result = reader->beginRead(&buffer, kNone, &size); | 604 result = reader->beginRead(&buffer, kNone, &size); |
605 EXPECT_EQ(kOk, result); | 605 EXPECT_EQ(kOk, result); |
606 EXPECT_EQ(5u, size); | 606 EXPECT_EQ(5u, size); |
607 EXPECT_EQ("Once ", ToString(buffer, 5)); | 607 EXPECT_EQ("Once ", ToString(buffer, 5)); |
608 | 608 |
609 reader->endRead(1); | 609 reader->endRead(1); |
610 | 610 |
611 result = reader->beginRead(&buffer, kNone, &size); | 611 result = reader->beginRead(&buffer, kNone, &size); |
612 EXPECT_EQ(kOk, result); | 612 EXPECT_EQ(kOk, result); |
613 EXPECT_EQ(4u, size); | 613 EXPECT_EQ(4u, size); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 EXPECT_CALL(checkpoint, Call(2)); | 664 EXPECT_CALL(checkpoint, Call(2)); |
665 EXPECT_CALL(checkpoint, Call(3)); | 665 EXPECT_CALL(checkpoint, Call(3)); |
666 EXPECT_CALL(*on_clear, Call()); | 666 EXPECT_CALL(*on_clear, Call()); |
667 EXPECT_CALL(*on_clear, Destruct()); | 667 EXPECT_CALL(*on_clear, Destruct()); |
668 EXPECT_CALL(checkpoint, Call(4)); | 668 EXPECT_CALL(checkpoint, Call(4)); |
669 | 669 |
670 checkpoint.Call(0); | 670 checkpoint.Call(0); |
671 handle_.reset(new SharedMemoryDataConsumerHandle( | 671 handle_.reset(new SharedMemoryDataConsumerHandle( |
672 kApplyBackpressure, | 672 kApplyBackpressure, |
673 base::Bind(&DestructionTrackingFunction::Call, on_clear), &writer_)); | 673 base::Bind(&DestructionTrackingFunction::Call, on_clear), &writer_)); |
674 auto reader = handle_->ObtainReader(nullptr); | 674 auto reader = handle_->obtainReader(nullptr); |
675 handle_.reset(); | 675 handle_.reset(); |
676 on_clear = nullptr; | 676 on_clear = nullptr; |
677 checkpoint.Call(1); | 677 checkpoint.Call(1); |
678 RunPostedTasks(); | 678 RunPostedTasks(); |
679 checkpoint.Call(2); | 679 checkpoint.Call(2); |
680 reader.reset(); | 680 reader.reset(); |
681 checkpoint.Call(3); | 681 checkpoint.Call(3); |
682 RunPostedTasks(); | 682 RunPostedTasks(); |
683 checkpoint.Call(4); | 683 checkpoint.Call(4); |
684 } | 684 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 } | 738 } |
739 | 739 |
740 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) { | 740 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) { |
741 writer_->AddData(NewFixedData("Once ")); | 741 writer_->AddData(NewFixedData("Once ")); |
742 writer_->AddData(NewFixedData("upon ")); | 742 writer_->AddData(NewFixedData("upon ")); |
743 | 743 |
744 Result result; | 744 Result result; |
745 const void* buffer = &result; | 745 const void* buffer = &result; |
746 size_t size = 99; | 746 size_t size = 99; |
747 | 747 |
748 auto reader = handle_->ObtainReader(nullptr); | 748 auto reader = handle_->obtainReader(nullptr); |
749 result = reader->beginRead(&buffer, kNone, &size); | 749 result = reader->beginRead(&buffer, kNone, &size); |
750 EXPECT_EQ(kOk, result); | 750 EXPECT_EQ(kOk, result); |
751 EXPECT_EQ(5u, size); | 751 EXPECT_EQ(5u, size); |
752 EXPECT_EQ("Once ", ToString(buffer, 5)); | 752 EXPECT_EQ("Once ", ToString(buffer, 5)); |
753 | 753 |
754 reader->endRead(1); | 754 reader->endRead(1); |
755 | 755 |
756 result = reader->beginRead(&buffer, kNone, &size); | 756 result = reader->beginRead(&buffer, kNone, &size); |
757 EXPECT_EQ(kOk, result); | 757 EXPECT_EQ(kOk, result); |
758 EXPECT_EQ(4u, size); | 758 EXPECT_EQ(4u, size); |
(...skipping 19 matching lines...) Expand all Loading... |
778 EXPECT_EQ(kDone, result); | 778 EXPECT_EQ(kDone, result); |
779 EXPECT_EQ(0u, size); | 779 EXPECT_EQ(0u, size); |
780 EXPECT_EQ(nullptr, buffer); | 780 EXPECT_EQ(nullptr, buffer); |
781 } | 781 } |
782 | 782 |
783 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorRead) { | 783 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorRead) { |
784 Checkpoint checkpoint; | 784 Checkpoint checkpoint; |
785 Result result; | 785 Result result; |
786 char buffer[20] = {}; | 786 char buffer[20] = {}; |
787 size_t read = 99; | 787 size_t read = 99; |
788 auto reader = handle_->ObtainReader(nullptr); | 788 auto reader = handle_->obtainReader(nullptr); |
789 | 789 |
790 writer_->Fail(); | 790 writer_->Fail(); |
791 result = reader->read(buffer, sizeof(buffer), kNone, &read); | 791 result = reader->read(buffer, sizeof(buffer), kNone, &read); |
792 | 792 |
793 EXPECT_EQ(kUnexpectedError, result); | 793 EXPECT_EQ(kUnexpectedError, result); |
794 EXPECT_EQ(0u, read); | 794 EXPECT_EQ(0u, read); |
795 } | 795 } |
796 | 796 |
797 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorTwoPhaseRead) { | 797 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorTwoPhaseRead) { |
798 Result result; | 798 Result result; |
799 const void* pointer = &result; | 799 const void* pointer = &result; |
800 size_t size = 99; | 800 size_t size = 99; |
801 auto reader = handle_->ObtainReader(nullptr); | 801 auto reader = handle_->obtainReader(nullptr); |
802 | 802 |
803 writer_->Fail(); | 803 writer_->Fail(); |
804 result = reader->beginRead(&pointer, kNone, &size); | 804 result = reader->beginRead(&pointer, kNone, &size); |
805 | 805 |
806 EXPECT_EQ(kUnexpectedError, result); | 806 EXPECT_EQ(kUnexpectedError, result); |
807 EXPECT_EQ(nullptr, pointer); | 807 EXPECT_EQ(nullptr, pointer); |
808 EXPECT_EQ(0u, size); | 808 EXPECT_EQ(0u, size); |
809 } | 809 } |
810 | 810 |
811 TEST_P(SharedMemoryDataConsumerHandleTest, FailWhileTwoPhaseReadIsInProgress) { | 811 TEST_P(SharedMemoryDataConsumerHandleTest, FailWhileTwoPhaseReadIsInProgress) { |
812 Result result; | 812 Result result; |
813 const void* pointer = nullptr; | 813 const void* pointer = nullptr; |
814 size_t size = 0; | 814 size_t size = 0; |
815 auto reader = handle_->ObtainReader(nullptr); | 815 auto reader = handle_->obtainReader(nullptr); |
816 | 816 |
817 writer_->AddData(NewFixedData("Once ")); | 817 writer_->AddData(NewFixedData("Once ")); |
818 result = reader->beginRead(&pointer, kNone, &size); | 818 result = reader->beginRead(&pointer, kNone, &size); |
819 auto* buffer = static_cast<const char*>(pointer); | 819 auto* buffer = static_cast<const char*>(pointer); |
820 | 820 |
821 ASSERT_EQ(kOk, result); | 821 ASSERT_EQ(kOk, result); |
822 ASSERT_NE(nullptr, pointer); | 822 ASSERT_NE(nullptr, pointer); |
823 ASSERT_EQ(size, 5u); | 823 ASSERT_EQ(size, 5u); |
824 | 824 |
825 writer_->Fail(); | 825 writer_->Fail(); |
(...skipping 15 matching lines...) Expand all Loading... |
841 Checkpoint checkpoint; | 841 Checkpoint checkpoint; |
842 | 842 |
843 InSequence s; | 843 InSequence s; |
844 EXPECT_CALL(checkpoint, Call(0)); | 844 EXPECT_CALL(checkpoint, Call(0)); |
845 EXPECT_CALL(checkpoint, Call(1)); | 845 EXPECT_CALL(checkpoint, Call(1)); |
846 EXPECT_CALL(checkpoint, Call(2)); | 846 EXPECT_CALL(checkpoint, Call(2)); |
847 EXPECT_CALL(client_, didGetReadable()); | 847 EXPECT_CALL(client_, didGetReadable()); |
848 EXPECT_CALL(checkpoint, Call(3)); | 848 EXPECT_CALL(checkpoint, Call(3)); |
849 | 849 |
850 checkpoint.Call(0); | 850 checkpoint.Call(0); |
851 auto reader = handle_->ObtainReader(&client_); | 851 auto reader = handle_->obtainReader(&client_); |
852 checkpoint.Call(1); | 852 checkpoint.Call(1); |
853 writer_->Fail(); | 853 writer_->Fail(); |
854 checkpoint.Call(2); | 854 checkpoint.Call(2); |
855 RunPostedTasks(); | 855 RunPostedTasks(); |
856 checkpoint.Call(3); | 856 checkpoint.Call(3); |
857 } | 857 } |
858 | 858 |
859 TEST_P(SharedMemoryDataConsumerHandleTest, FailWithClientAndData) { | 859 TEST_P(SharedMemoryDataConsumerHandleTest, FailWithClientAndData) { |
860 Checkpoint checkpoint; | 860 Checkpoint checkpoint; |
861 | 861 |
862 InSequence s; | 862 InSequence s; |
863 EXPECT_CALL(checkpoint, Call(0)); | 863 EXPECT_CALL(checkpoint, Call(0)); |
864 EXPECT_CALL(checkpoint, Call(1)); | 864 EXPECT_CALL(checkpoint, Call(1)); |
865 EXPECT_CALL(client_, didGetReadable()); | 865 EXPECT_CALL(client_, didGetReadable()); |
866 EXPECT_CALL(checkpoint, Call(2)); | 866 EXPECT_CALL(checkpoint, Call(2)); |
867 EXPECT_CALL(checkpoint, Call(3)); | 867 EXPECT_CALL(checkpoint, Call(3)); |
868 EXPECT_CALL(client_, didGetReadable()); | 868 EXPECT_CALL(client_, didGetReadable()); |
869 EXPECT_CALL(checkpoint, Call(4)); | 869 EXPECT_CALL(checkpoint, Call(4)); |
870 | 870 |
871 checkpoint.Call(0); | 871 checkpoint.Call(0); |
872 auto reader = handle_->ObtainReader(&client_); | 872 auto reader = handle_->obtainReader(&client_); |
873 checkpoint.Call(1); | 873 checkpoint.Call(1); |
874 writer_->AddData(NewFixedData("Once ")); | 874 writer_->AddData(NewFixedData("Once ")); |
875 checkpoint.Call(2); | 875 checkpoint.Call(2); |
876 writer_->Fail(); | 876 writer_->Fail(); |
877 checkpoint.Call(3); | 877 checkpoint.Call(3); |
878 RunPostedTasks(); | 878 RunPostedTasks(); |
879 checkpoint.Call(4); | 879 checkpoint.Call(4); |
880 } | 880 } |
881 | 881 |
882 TEST_P(SharedMemoryDataConsumerHandleTest, RecursiveErrorNotification) { | 882 TEST_P(SharedMemoryDataConsumerHandleTest, RecursiveErrorNotification) { |
883 Checkpoint checkpoint; | 883 Checkpoint checkpoint; |
884 | 884 |
885 InSequence s; | 885 InSequence s; |
886 EXPECT_CALL(checkpoint, Call(0)); | 886 EXPECT_CALL(checkpoint, Call(0)); |
887 EXPECT_CALL(checkpoint, Call(1)); | 887 EXPECT_CALL(checkpoint, Call(1)); |
888 EXPECT_CALL(client_, didGetReadable()) | 888 EXPECT_CALL(client_, didGetReadable()) |
889 .WillOnce(Invoke(writer_.get(), &Writer::Fail)); | 889 .WillOnce(Invoke(writer_.get(), &Writer::Fail)); |
890 EXPECT_CALL(checkpoint, Call(2)); | 890 EXPECT_CALL(checkpoint, Call(2)); |
891 EXPECT_CALL(client_, didGetReadable()); | 891 EXPECT_CALL(client_, didGetReadable()); |
892 EXPECT_CALL(checkpoint, Call(3)); | 892 EXPECT_CALL(checkpoint, Call(3)); |
893 | 893 |
894 checkpoint.Call(0); | 894 checkpoint.Call(0); |
895 auto reader = handle_->ObtainReader(&client_); | 895 auto reader = handle_->obtainReader(&client_); |
896 checkpoint.Call(1); | 896 checkpoint.Call(1); |
897 writer_->AddData(NewFixedData("Once ")); | 897 writer_->AddData(NewFixedData("Once ")); |
898 checkpoint.Call(2); | 898 checkpoint.Call(2); |
899 RunPostedTasks(); | 899 RunPostedTasks(); |
900 checkpoint.Call(3); | 900 checkpoint.Call(3); |
901 } | 901 } |
902 | 902 |
903 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) { | 903 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) { |
904 base::MessageLoop loop; | 904 base::MessageLoop loop; |
905 char buffer[20]; | 905 char buffer[20]; |
906 Result result; | 906 Result result; |
907 size_t size; | 907 size_t size; |
908 | 908 |
909 std::unique_ptr<Writer> writer; | 909 std::unique_ptr<Writer> writer; |
910 auto handle = base::WrapUnique( | 910 auto handle = base::WrapUnique( |
911 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer)); | 911 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer)); |
912 scoped_refptr<Logger> logger(new Logger); | 912 scoped_refptr<Logger> logger(new Logger); |
913 writer->AddData( | 913 writer->AddData( |
914 base::WrapUnique(new LoggingFixedReceivedData("data1", "Once ", logger))); | 914 base::WrapUnique(new LoggingFixedReceivedData("data1", "Once ", logger))); |
915 writer->AddData( | 915 writer->AddData( |
916 base::WrapUnique(new LoggingFixedReceivedData("data2", "upon ", logger))); | 916 base::WrapUnique(new LoggingFixedReceivedData("data2", "upon ", logger))); |
917 writer->AddData( | 917 writer->AddData( |
918 base::WrapUnique(new LoggingFixedReceivedData("data3", "a ", logger))); | 918 base::WrapUnique(new LoggingFixedReceivedData("data3", "a ", logger))); |
919 writer->AddData( | 919 writer->AddData( |
920 base::WrapUnique(new LoggingFixedReceivedData("data4", "time ", logger))); | 920 base::WrapUnique(new LoggingFixedReceivedData("data4", "time ", logger))); |
921 | 921 |
922 auto reader = handle->ObtainReader(nullptr); | 922 auto reader = handle->obtainReader(nullptr); |
923 logger->Add("1"); | 923 logger->Add("1"); |
924 result = reader->read(buffer, 2, kNone, &size); | 924 result = reader->read(buffer, 2, kNone, &size); |
925 EXPECT_EQ(kOk, result); | 925 EXPECT_EQ(kOk, result); |
926 EXPECT_EQ(2u, size); | 926 EXPECT_EQ(2u, size); |
927 logger->Add("2"); | 927 logger->Add("2"); |
928 result = reader->read(buffer, 5, kNone, &size); | 928 result = reader->read(buffer, 5, kNone, &size); |
929 EXPECT_EQ(kOk, result); | 929 EXPECT_EQ(kOk, result); |
930 EXPECT_EQ(5u, size); | 930 EXPECT_EQ(5u, size); |
931 logger->Add("3"); | 931 logger->Add("3"); |
932 result = reader->read(buffer, 6, kNone, &size); | 932 result = reader->read(buffer, 6, kNone, &size); |
(...skipping 22 matching lines...) Expand all Loading... |
955 auto handle = base::WrapUnique( | 955 auto handle = base::WrapUnique( |
956 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer)); | 956 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer)); |
957 scoped_refptr<Logger> logger(new Logger); | 957 scoped_refptr<Logger> logger(new Logger); |
958 writer->AddData( | 958 writer->AddData( |
959 base::WrapUnique(new LoggingFixedReceivedData("data1", "Once ", logger))); | 959 base::WrapUnique(new LoggingFixedReceivedData("data1", "Once ", logger))); |
960 writer->AddData( | 960 writer->AddData( |
961 base::WrapUnique(new LoggingFixedReceivedData("data2", "upon ", logger))); | 961 base::WrapUnique(new LoggingFixedReceivedData("data2", "upon ", logger))); |
962 writer->AddData( | 962 writer->AddData( |
963 base::WrapUnique(new LoggingFixedReceivedData("data3", "a ", logger))); | 963 base::WrapUnique(new LoggingFixedReceivedData("data3", "a ", logger))); |
964 | 964 |
965 auto reader = handle->ObtainReader(nullptr); | 965 auto reader = handle->obtainReader(nullptr); |
966 logger->Add("1"); | 966 logger->Add("1"); |
967 result = reader->read(buffer, 2, kNone, &size); | 967 result = reader->read(buffer, 2, kNone, &size); |
968 EXPECT_EQ(kOk, result); | 968 EXPECT_EQ(kOk, result); |
969 EXPECT_EQ(2u, size); | 969 EXPECT_EQ(2u, size); |
970 logger->Add("2"); | 970 logger->Add("2"); |
971 writer->Close(); | 971 writer->Close(); |
972 logger->Add("3"); | 972 logger->Add("3"); |
973 handle.reset(); | 973 handle.reset(); |
974 reader.reset(); | 974 reader.reset(); |
975 logger->Add("4"); | 975 logger->Add("4"); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1051 logger->log()); | 1051 logger->log()); |
1052 } | 1052 } |
1053 | 1053 |
1054 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest, | 1054 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest, |
1055 SharedMemoryDataConsumerHandleTest, | 1055 SharedMemoryDataConsumerHandleTest, |
1056 ::testing::Values(kApplyBackpressure, | 1056 ::testing::Values(kApplyBackpressure, |
1057 kDoNotApplyBackpressure)); | 1057 kDoNotApplyBackpressure)); |
1058 } // namespace | 1058 } // namespace |
1059 | 1059 |
1060 } // namespace content | 1060 } // namespace content |
OLD | NEW |