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

Side by Side Diff: content/child/shared_memory_data_consumer_handle_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698