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

Side by Side Diff: content/browser/service_worker/service_worker_cache_writer_unittest.cc

Issue 1704293002: ServiceWorker: Stop asynchronously creating response accessors to fix crash due to null context (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix win bots Created 4 years, 10 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/browser/service_worker/service_worker_cache_writer.h" 5 #include "content/browser/service_worker/service_worker_cache_writer.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <list> 9 #include <list>
10 #include <queue> 10 #include <queue>
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 DCHECK(write.async); 307 DCHECK(write.async);
308 expected_writes_.pop(); 308 expected_writes_.pop();
309 pending_callback_.Run(write.result); 309 pending_callback_.Run(write.result);
310 } 310 }
311 311
312 class ServiceWorkerCacheWriterTest : public ::testing::Test { 312 class ServiceWorkerCacheWriterTest : public ::testing::Test {
313 public: 313 public:
314 ServiceWorkerCacheWriterTest() 314 ServiceWorkerCacheWriterTest()
315 : readers_deleter_(&readers_), writers_deleter_(&writers_) {} 315 : readers_deleter_(&readers_), writers_deleter_(&writers_) {}
316 316
317 void SetUp() override {
318 ::testing::Test::SetUp();
319 cache_writer_.reset(new ServiceWorkerCacheWriter(
320 base::Bind(&ServiceWorkerCacheWriterTest::CreateReader,
321 base::Unretained(this)),
322 base::Bind(&ServiceWorkerCacheWriterTest::CreateWriter,
323 base::Unretained(this))));
324 write_complete_ = false;
325 }
326
327 MockServiceWorkerResponseReader* ExpectReader() { 317 MockServiceWorkerResponseReader* ExpectReader() {
328 scoped_ptr<MockServiceWorkerResponseReader> reader( 318 scoped_ptr<MockServiceWorkerResponseReader> reader(
329 new MockServiceWorkerResponseReader); 319 new MockServiceWorkerResponseReader);
330 MockServiceWorkerResponseReader* borrowed_reader = reader.get(); 320 MockServiceWorkerResponseReader* borrowed_reader = reader.get();
331 readers_.push_back(reader.release()); // give ownership to |readers_| 321 readers_.push_back(reader.release()); // give ownership to |readers_|
332 return borrowed_reader; 322 return borrowed_reader;
333 } 323 }
334 324
335 MockServiceWorkerResponseWriter* ExpectWriter() { 325 MockServiceWorkerResponseWriter* ExpectWriter() {
336 scoped_ptr<MockServiceWorkerResponseWriter> writer( 326 scoped_ptr<MockServiceWorkerResponseWriter> writer(
337 new MockServiceWorkerResponseWriter); 327 new MockServiceWorkerResponseWriter);
338 MockServiceWorkerResponseWriter* borrowed_writer = writer.get(); 328 MockServiceWorkerResponseWriter* borrowed_writer = writer.get();
339 writers_.push_back(writer.release()); // give ownership to |writers_| 329 writers_.push_back(writer.release()); // give ownership to |writers_|
340 return borrowed_writer; 330 return borrowed_writer;
341 } 331 }
342 332
333 // This should be called after ExpectReader() and ExpectWriter().
334 void Initialize() {
335 scoped_ptr<ServiceWorkerResponseReader> compare_reader(CreateReader());
336 scoped_ptr<ServiceWorkerResponseReader> copy_reader(CreateReader());
337 scoped_ptr<ServiceWorkerResponseWriter> writer(CreateWriter());
338 cache_writer_.reset(new ServiceWorkerCacheWriter(
339 std::move(compare_reader), std::move(copy_reader), std::move(writer)));
340 }
341
343 protected: 342 protected:
344 // TODO(ellyjones): when unique_ptr<> is allowed, make these instead: 343 // TODO(ellyjones): when unique_ptr<> is allowed, make these instead:
345 // std::list<unique_ptr<...>> 344 // std::list<unique_ptr<...>>
346 // Right now, these cannot use scoped_ptr. 345 // Right now, these cannot use scoped_ptr.
347 // Their elements are deleted by the STLElementDeleters below when this object 346 // Their elements are deleted by the STLElementDeleters below when this object
348 // goes out of scope. 347 // goes out of scope.
349 std::list<MockServiceWorkerResponseReader*> readers_; 348 std::list<MockServiceWorkerResponseReader*> readers_;
350 std::list<MockServiceWorkerResponseWriter*> writers_; 349 std::list<MockServiceWorkerResponseWriter*> writers_;
351 STLElementDeleter<std::list<MockServiceWorkerResponseReader*>> 350 STLElementDeleter<std::list<MockServiceWorkerResponseReader*>>
352 readers_deleter_; 351 readers_deleter_;
353 STLElementDeleter<std::list<MockServiceWorkerResponseWriter*>> 352 STLElementDeleter<std::list<MockServiceWorkerResponseWriter*>>
354 writers_deleter_; 353 writers_deleter_;
355 scoped_ptr<ServiceWorkerCacheWriter> cache_writer_; 354 scoped_ptr<ServiceWorkerCacheWriter> cache_writer_;
356 bool write_complete_; 355 bool write_complete_ = false;
357 net::Error last_error_; 356 net::Error last_error_;
358 357
359 scoped_ptr<ServiceWorkerResponseReader> CreateReader() { 358 scoped_ptr<ServiceWorkerResponseReader> CreateReader() {
360 if (readers_.empty()) 359 if (readers_.empty())
361 return make_scoped_ptr<ServiceWorkerResponseReader>(nullptr); 360 return make_scoped_ptr<ServiceWorkerResponseReader>(nullptr);
362 scoped_ptr<ServiceWorkerResponseReader> reader(readers_.front()); 361 scoped_ptr<ServiceWorkerResponseReader> reader(readers_.front());
363 readers_.pop_front(); 362 readers_.pop_front();
364 return reader; 363 return reader;
365 } 364 }
366 scoped_ptr<ServiceWorkerResponseWriter> CreateWriter() { 365 scoped_ptr<ServiceWorkerResponseWriter> CreateWriter() {
(...skipping 30 matching lines...) Expand all
397 // Passthrough tests: 396 // Passthrough tests:
398 // In these tests, the ServiceWorkerCacheWriter under test has no existing 397 // In these tests, the ServiceWorkerCacheWriter under test has no existing
399 // reader, since no calls to ExpectReader() have been made; this means that 398 // reader, since no calls to ExpectReader() have been made; this means that
400 // there is no existing cached response and the incoming data is written back to 399 // there is no existing cached response and the incoming data is written back to
401 // the cache directly. 400 // the cache directly.
402 401
403 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersSync) { 402 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersSync) {
404 const size_t kHeaderSize = 16; 403 const size_t kHeaderSize = 16;
405 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 404 MockServiceWorkerResponseWriter* writer = ExpectWriter();
406 writer->ExpectWriteInfoOk(kHeaderSize, false); 405 writer->ExpectWriteInfoOk(kHeaderSize, false);
406 Initialize();
407 407
408 net::Error error = WriteHeaders(kHeaderSize); 408 net::Error error = WriteHeaders(kHeaderSize);
409 EXPECT_EQ(net::OK, error); 409 EXPECT_EQ(net::OK, error);
410 EXPECT_FALSE(write_complete_); 410 EXPECT_FALSE(write_complete_);
411 EXPECT_TRUE(writer->AllExpectedWritesDone()); 411 EXPECT_TRUE(writer->AllExpectedWritesDone());
412 EXPECT_EQ(0U, cache_writer_->bytes_written()); 412 EXPECT_EQ(0U, cache_writer_->bytes_written());
413 } 413 }
414 414
415 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersAsync) { 415 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersAsync) {
416 size_t kHeaderSize = 16; 416 size_t kHeaderSize = 16;
417 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 417 MockServiceWorkerResponseWriter* writer = ExpectWriter();
418 writer->ExpectWriteInfoOk(kHeaderSize, true); 418 writer->ExpectWriteInfoOk(kHeaderSize, true);
419 Initialize();
419 420
420 net::Error error = WriteHeaders(kHeaderSize); 421 net::Error error = WriteHeaders(kHeaderSize);
421 EXPECT_EQ(net::ERR_IO_PENDING, error); 422 EXPECT_EQ(net::ERR_IO_PENDING, error);
422 EXPECT_FALSE(write_complete_); 423 EXPECT_FALSE(write_complete_);
423 writer->CompletePendingWrite(); 424 writer->CompletePendingWrite();
424 EXPECT_TRUE(write_complete_); 425 EXPECT_TRUE(write_complete_);
425 EXPECT_EQ(net::OK, last_error_); 426 EXPECT_EQ(net::OK, last_error_);
426 EXPECT_TRUE(writer->AllExpectedWritesDone()); 427 EXPECT_TRUE(writer->AllExpectedWritesDone());
427 EXPECT_EQ(0U, cache_writer_->bytes_written()); 428 EXPECT_EQ(0U, cache_writer_->bytes_written());
428 } 429 }
429 430
430 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataSync) { 431 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataSync) {
431 const std::string data1 = "abcdef"; 432 const std::string data1 = "abcdef";
432 const std::string data2 = "ghijklmno"; 433 const std::string data2 = "ghijklmno";
433 size_t response_size = data1.size() + data2.size(); 434 size_t response_size = data1.size() + data2.size();
434 435
435 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 436 MockServiceWorkerResponseWriter* writer = ExpectWriter();
436 writer->ExpectWriteInfoOk(response_size, false); 437 writer->ExpectWriteInfoOk(response_size, false);
437 writer->ExpectWriteDataOk(data1.size(), false); 438 writer->ExpectWriteDataOk(data1.size(), false);
438 writer->ExpectWriteDataOk(data2.size(), false); 439 writer->ExpectWriteDataOk(data2.size(), false);
440 Initialize();
439 441
440 net::Error error = WriteHeaders(response_size); 442 net::Error error = WriteHeaders(response_size);
441 EXPECT_EQ(net::OK, error); 443 EXPECT_EQ(net::OK, error);
442 444
443 error = WriteData(data1); 445 error = WriteData(data1);
444 EXPECT_EQ(net::OK, error); 446 EXPECT_EQ(net::OK, error);
445 447
446 error = WriteData(data2); 448 error = WriteData(data2);
447 EXPECT_EQ(net::OK, error); 449 EXPECT_EQ(net::OK, error);
448 EXPECT_TRUE(writer->AllExpectedWritesDone()); 450 EXPECT_TRUE(writer->AllExpectedWritesDone());
449 } 451 }
450 452
451 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataAsync) { 453 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataAsync) {
452 const std::string data1 = "abcdef"; 454 const std::string data1 = "abcdef";
453 const std::string data2 = "ghijklmno"; 455 const std::string data2 = "ghijklmno";
454 size_t response_size = data1.size() + data2.size(); 456 size_t response_size = data1.size() + data2.size();
455 457
456 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 458 MockServiceWorkerResponseWriter* writer = ExpectWriter();
457 writer->ExpectWriteInfoOk(response_size, false); 459 writer->ExpectWriteInfoOk(response_size, false);
458 writer->ExpectWriteDataOk(data1.size(), true); 460 writer->ExpectWriteDataOk(data1.size(), true);
459 writer->ExpectWriteDataOk(data2.size(), true); 461 writer->ExpectWriteDataOk(data2.size(), true);
462 Initialize();
460 463
461 net::Error error = WriteHeaders(response_size); 464 net::Error error = WriteHeaders(response_size);
462 EXPECT_EQ(net::OK, error); 465 EXPECT_EQ(net::OK, error);
463 466
464 error = WriteData(data1); 467 error = WriteData(data1);
465 EXPECT_EQ(net::ERR_IO_PENDING, error); 468 EXPECT_EQ(net::ERR_IO_PENDING, error);
466 writer->CompletePendingWrite(); 469 writer->CompletePendingWrite();
467 EXPECT_TRUE(write_complete_); 470 EXPECT_TRUE(write_complete_);
468 471
469 write_complete_ = false; 472 write_complete_ = false;
470 error = WriteData(data2); 473 error = WriteData(data2);
471 EXPECT_EQ(net::ERR_IO_PENDING, error); 474 EXPECT_EQ(net::ERR_IO_PENDING, error);
472 writer->CompletePendingWrite(); 475 writer->CompletePendingWrite();
473 EXPECT_TRUE(write_complete_); 476 EXPECT_TRUE(write_complete_);
474 EXPECT_EQ(net::OK, last_error_); 477 EXPECT_EQ(net::OK, last_error_);
475 EXPECT_TRUE(writer->AllExpectedWritesDone()); 478 EXPECT_TRUE(writer->AllExpectedWritesDone());
476 } 479 }
477 480
478 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailSync) { 481 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailSync) {
479 const size_t kHeaderSize = 16; 482 const size_t kHeaderSize = 16;
480 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 483 MockServiceWorkerResponseWriter* writer = ExpectWriter();
481 writer->ExpectWriteInfo(kHeaderSize, false, net::ERR_FAILED); 484 writer->ExpectWriteInfo(kHeaderSize, false, net::ERR_FAILED);
485 Initialize();
482 486
483 net::Error error = WriteHeaders(kHeaderSize); 487 net::Error error = WriteHeaders(kHeaderSize);
484 EXPECT_EQ(net::ERR_FAILED, error); 488 EXPECT_EQ(net::ERR_FAILED, error);
485 EXPECT_FALSE(write_complete_); 489 EXPECT_FALSE(write_complete_);
486 EXPECT_TRUE(writer->AllExpectedWritesDone()); 490 EXPECT_TRUE(writer->AllExpectedWritesDone());
487 EXPECT_EQ(0U, cache_writer_->bytes_written()); 491 EXPECT_EQ(0U, cache_writer_->bytes_written());
488 } 492 }
489 493
490 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailAsync) { 494 TEST_F(ServiceWorkerCacheWriterTest, PassthroughHeadersFailAsync) {
491 size_t kHeaderSize = 16; 495 size_t kHeaderSize = 16;
492 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 496 MockServiceWorkerResponseWriter* writer = ExpectWriter();
493 writer->ExpectWriteInfo(kHeaderSize, true, net::ERR_FAILED); 497 writer->ExpectWriteInfo(kHeaderSize, true, net::ERR_FAILED);
498 Initialize();
494 499
495 net::Error error = WriteHeaders(kHeaderSize); 500 net::Error error = WriteHeaders(kHeaderSize);
496 EXPECT_EQ(net::ERR_IO_PENDING, error); 501 EXPECT_EQ(net::ERR_IO_PENDING, error);
497 EXPECT_FALSE(write_complete_); 502 EXPECT_FALSE(write_complete_);
498 writer->CompletePendingWrite(); 503 writer->CompletePendingWrite();
499 EXPECT_TRUE(write_complete_); 504 EXPECT_TRUE(write_complete_);
500 EXPECT_EQ(net::ERR_FAILED, last_error_); 505 EXPECT_EQ(net::ERR_FAILED, last_error_);
501 EXPECT_TRUE(writer->AllExpectedWritesDone()); 506 EXPECT_TRUE(writer->AllExpectedWritesDone());
502 EXPECT_EQ(0U, cache_writer_->bytes_written()); 507 EXPECT_EQ(0U, cache_writer_->bytes_written());
503 } 508 }
504 509
505 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailSync) { 510 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailSync) {
506 const std::string data = "abcdef"; 511 const std::string data = "abcdef";
507 512
508 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 513 MockServiceWorkerResponseWriter* writer = ExpectWriter();
509 writer->ExpectWriteInfoOk(data.size(), false); 514 writer->ExpectWriteInfoOk(data.size(), false);
510 writer->ExpectWriteData(data.size(), false, net::ERR_FAILED); 515 writer->ExpectWriteData(data.size(), false, net::ERR_FAILED);
516 Initialize();
511 517
512 EXPECT_EQ(net::OK, WriteHeaders(data.size())); 518 EXPECT_EQ(net::OK, WriteHeaders(data.size()));
513 EXPECT_EQ(net::ERR_FAILED, WriteData(data)); 519 EXPECT_EQ(net::ERR_FAILED, WriteData(data));
514 EXPECT_TRUE(writer->AllExpectedWritesDone()); 520 EXPECT_TRUE(writer->AllExpectedWritesDone());
515 } 521 }
516 522
517 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailAsync) { 523 TEST_F(ServiceWorkerCacheWriterTest, PassthroughDataFailAsync) {
518 const std::string data = "abcdef"; 524 const std::string data = "abcdef";
519 525
520 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 526 MockServiceWorkerResponseWriter* writer = ExpectWriter();
521 writer->ExpectWriteInfoOk(data.size(), false); 527 writer->ExpectWriteInfoOk(data.size(), false);
522 writer->ExpectWriteData(data.size(), true, net::ERR_FAILED); 528 writer->ExpectWriteData(data.size(), true, net::ERR_FAILED);
529 Initialize();
523 530
524 EXPECT_EQ(net::OK, WriteHeaders(data.size())); 531 EXPECT_EQ(net::OK, WriteHeaders(data.size()));
525 532
526 EXPECT_EQ(net::ERR_IO_PENDING, WriteData(data)); 533 EXPECT_EQ(net::ERR_IO_PENDING, WriteData(data));
527 writer->CompletePendingWrite(); 534 writer->CompletePendingWrite();
528 EXPECT_EQ(net::ERR_FAILED, last_error_); 535 EXPECT_EQ(net::ERR_FAILED, last_error_);
529 EXPECT_TRUE(write_complete_); 536 EXPECT_TRUE(write_complete_);
530 EXPECT_TRUE(writer->AllExpectedWritesDone()); 537 EXPECT_TRUE(writer->AllExpectedWritesDone());
531 } 538 }
532 539
533 // Comparison tests: 540 // Comparison tests:
534 // For the Compare* tests below, the ServiceWorkerCacheWriter under test has a 541 // For the Compare* tests below, the ServiceWorkerCacheWriter under test has a
535 // reader for an existing cached response, so it will compare the response being 542 // reader for an existing cached response, so it will compare the response being
536 // written to it against the existing cached response. 543 // written to it against the existing cached response.
537 544
538 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersSync) { 545 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersSync) {
539 size_t response_size = 3; 546 size_t response_size = 3;
540 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 547 MockServiceWorkerResponseWriter* writer = ExpectWriter();
541 MockServiceWorkerResponseReader* reader = ExpectReader(); 548 MockServiceWorkerResponseReader* reader = ExpectReader();
542 549
543 reader->ExpectReadInfoOk(response_size, false); 550 reader->ExpectReadInfoOk(response_size, false);
551 Initialize();
544 552
545 net::Error error = WriteHeaders(response_size); 553 net::Error error = WriteHeaders(response_size);
546 EXPECT_EQ(net::OK, error); 554 EXPECT_EQ(net::OK, error);
547 EXPECT_TRUE(writer->AllExpectedWritesDone()); 555 EXPECT_TRUE(writer->AllExpectedWritesDone());
548 EXPECT_TRUE(reader->AllExpectedReadsDone()); 556 EXPECT_TRUE(reader->AllExpectedReadsDone());
549 } 557 }
550 558
551 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkSync) { 559 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkSync) {
552 const std::string data1 = "abcdef"; 560 const std::string data1 = "abcdef";
553 size_t response_size = data1.size(); 561 size_t response_size = data1.size();
554 562
555 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 563 MockServiceWorkerResponseWriter* writer = ExpectWriter();
556 MockServiceWorkerResponseReader* reader = ExpectReader(); 564 MockServiceWorkerResponseReader* reader = ExpectReader();
557 565
558 reader->ExpectReadInfoOk(response_size, false); 566 reader->ExpectReadInfoOk(response_size, false);
559 reader->ExpectReadDataOk(data1, false); 567 reader->ExpectReadDataOk(data1, false);
568 Initialize();
560 569
561 net::Error error = WriteHeaders(response_size); 570 net::Error error = WriteHeaders(response_size);
562 EXPECT_EQ(net::OK, error); 571 EXPECT_EQ(net::OK, error);
563 572
564 error = WriteData(data1); 573 error = WriteData(data1);
565 EXPECT_EQ(net::OK, error); 574 EXPECT_EQ(net::OK, error);
566 575
567 EXPECT_TRUE(writer->AllExpectedWritesDone()); 576 EXPECT_TRUE(writer->AllExpectedWritesDone());
568 EXPECT_TRUE(reader->AllExpectedReadsDone()); 577 EXPECT_TRUE(reader->AllExpectedReadsDone());
569 EXPECT_EQ(0U, cache_writer_->bytes_written()); 578 EXPECT_EQ(0U, cache_writer_->bytes_written());
570 } 579 }
571 580
572 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersFailSync) { 581 TEST_F(ServiceWorkerCacheWriterTest, CompareHeadersFailSync) {
573 size_t response_size = 3; 582 size_t response_size = 3;
574 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 583 MockServiceWorkerResponseWriter* writer = ExpectWriter();
575 MockServiceWorkerResponseReader* reader = ExpectReader(); 584 MockServiceWorkerResponseReader* reader = ExpectReader();
576 585
577 reader->ExpectReadInfo(response_size, false, net::ERR_FAILED); 586 reader->ExpectReadInfo(response_size, false, net::ERR_FAILED);
587 Initialize();
578 588
579 EXPECT_EQ(net::ERR_FAILED, WriteHeaders(response_size)); 589 EXPECT_EQ(net::ERR_FAILED, WriteHeaders(response_size));
580 EXPECT_TRUE(writer->AllExpectedWritesDone()); 590 EXPECT_TRUE(writer->AllExpectedWritesDone());
581 EXPECT_TRUE(reader->AllExpectedReadsDone()); 591 EXPECT_TRUE(reader->AllExpectedReadsDone());
582 } 592 }
583 593
584 TEST_F(ServiceWorkerCacheWriterTest, CompareDataFailSync) { 594 TEST_F(ServiceWorkerCacheWriterTest, CompareDataFailSync) {
585 const std::string data1 = "abcdef"; 595 const std::string data1 = "abcdef";
586 size_t response_size = data1.size(); 596 size_t response_size = data1.size();
587 597
588 MockServiceWorkerResponseWriter* writer = ExpectWriter(); 598 MockServiceWorkerResponseWriter* writer = ExpectWriter();
589 MockServiceWorkerResponseReader* reader = ExpectReader(); 599 MockServiceWorkerResponseReader* reader = ExpectReader();
590 600
591 reader->ExpectReadInfoOk(response_size, false); 601 reader->ExpectReadInfoOk(response_size, false);
592 reader->ExpectReadData(data1.c_str(), data1.length(), false, net::ERR_FAILED); 602 reader->ExpectReadData(data1.c_str(), data1.length(), false, net::ERR_FAILED);
603 Initialize();
593 604
594 net::Error error = WriteHeaders(response_size); 605 net::Error error = WriteHeaders(response_size);
595 EXPECT_EQ(net::OK, error); 606 EXPECT_EQ(net::OK, error);
596 607
597 EXPECT_EQ(net::ERR_FAILED, WriteData(data1)); 608 EXPECT_EQ(net::ERR_FAILED, WriteData(data1));
598 609
599 EXPECT_TRUE(writer->AllExpectedWritesDone()); 610 EXPECT_TRUE(writer->AllExpectedWritesDone());
600 EXPECT_TRUE(reader->AllExpectedReadsDone()); 611 EXPECT_TRUE(reader->AllExpectedReadsDone());
601 EXPECT_EQ(0U, cache_writer_->bytes_written()); 612 EXPECT_EQ(0U, cache_writer_->bytes_written());
602 } 613 }
603 614
604 TEST_F(ServiceWorkerCacheWriterTest, CompareShortCacheReads) { 615 TEST_F(ServiceWorkerCacheWriterTest, CompareShortCacheReads) {
605 const size_t kHeaderSize = 16; 616 const size_t kHeaderSize = 16;
606 const std::string& data1 = "abcdef"; 617 const std::string& data1 = "abcdef";
607 const std::string& cache_data2 = "ghi"; 618 const std::string& cache_data2 = "ghi";
608 const std::string& cache_data3 = "j"; 619 const std::string& cache_data3 = "j";
609 const std::string& cache_data4 = "kl"; 620 const std::string& cache_data4 = "kl";
610 const std::string& net_data2 = "ghijkl"; 621 const std::string& net_data2 = "ghijkl";
611 const std::string& data5 = "mnopqrst"; 622 const std::string& data5 = "mnopqrst";
612 623
613 MockServiceWorkerResponseReader* reader = ExpectReader(); 624 MockServiceWorkerResponseReader* reader = ExpectReader();
614 reader->ExpectReadInfo(kHeaderSize, false, kHeaderSize); 625 reader->ExpectReadInfo(kHeaderSize, false, kHeaderSize);
615 reader->ExpectReadDataOk(data1, false); 626 reader->ExpectReadDataOk(data1, false);
616 reader->ExpectReadDataOk(cache_data2, false); 627 reader->ExpectReadDataOk(cache_data2, false);
617 reader->ExpectReadDataOk(cache_data3, false); 628 reader->ExpectReadDataOk(cache_data3, false);
618 reader->ExpectReadDataOk(cache_data4, false); 629 reader->ExpectReadDataOk(cache_data4, false);
619 reader->ExpectReadDataOk(data5, false); 630 reader->ExpectReadDataOk(data5, false);
631 Initialize();
620 632
621 net::Error error = WriteHeaders(kHeaderSize); 633 net::Error error = WriteHeaders(kHeaderSize);
622 EXPECT_EQ(net::OK, error); 634 EXPECT_EQ(net::OK, error);
623 error = WriteData(data1); 635 error = WriteData(data1);
624 EXPECT_EQ(net::OK, error); 636 EXPECT_EQ(net::OK, error);
625 error = WriteData(net_data2); 637 error = WriteData(net_data2);
626 EXPECT_EQ(net::OK, error); 638 EXPECT_EQ(net::OK, error);
627 error = WriteData(data5); 639 error = WriteData(data5);
628 EXPECT_EQ(net::OK, error); 640 EXPECT_EQ(net::OK, error);
629 EXPECT_TRUE(reader->AllExpectedReadsDone()); 641 EXPECT_TRUE(reader->AllExpectedReadsDone());
630 EXPECT_EQ(0U, cache_writer_->bytes_written()); 642 EXPECT_EQ(0U, cache_writer_->bytes_written());
631 } 643 }
632 644
633 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkAsync) { 645 TEST_F(ServiceWorkerCacheWriterTest, CompareDataOkAsync) {
634 const std::string data1 = "abcdef"; 646 const std::string data1 = "abcdef";
635 size_t response_size = data1.size(); 647 size_t response_size = data1.size();
636 648
637 MockServiceWorkerResponseReader* reader = ExpectReader(); 649 MockServiceWorkerResponseReader* reader = ExpectReader();
638 650
639 reader->ExpectReadInfoOk(response_size, true); 651 reader->ExpectReadInfoOk(response_size, true);
640 reader->ExpectReadDataOk(data1, true); 652 reader->ExpectReadDataOk(data1, true);
653 Initialize();
641 654
642 net::Error error = WriteHeaders(response_size); 655 net::Error error = WriteHeaders(response_size);
643 EXPECT_EQ(net::ERR_IO_PENDING, error); 656 EXPECT_EQ(net::ERR_IO_PENDING, error);
644 reader->CompletePendingRead(); 657 reader->CompletePendingRead();
645 658
646 error = WriteData(data1); 659 error = WriteData(data1);
647 EXPECT_EQ(net::ERR_IO_PENDING, error); 660 EXPECT_EQ(net::ERR_IO_PENDING, error);
648 reader->CompletePendingRead(); 661 reader->CompletePendingRead();
649 662
650 EXPECT_TRUE(reader->AllExpectedReadsDone()); 663 EXPECT_TRUE(reader->AllExpectedReadsDone());
651 EXPECT_EQ(0U, cache_writer_->bytes_written()); 664 EXPECT_EQ(0U, cache_writer_->bytes_written());
652 } 665 }
653 666
654 TEST_F(ServiceWorkerCacheWriterTest, CompareDataManyOkAsync) { 667 TEST_F(ServiceWorkerCacheWriterTest, CompareDataManyOkAsync) {
655 const std::string expected_data[] = { 668 const std::string expected_data[] = {
656 "abcdef", "ghijkl", "mnopqr", "stuvwxyz", 669 "abcdef", "ghijkl", "mnopqr", "stuvwxyz",
657 }; 670 };
658 size_t response_size = 0; 671 size_t response_size = 0;
659 for (size_t i = 0; i < arraysize(expected_data); ++i) 672 for (size_t i = 0; i < arraysize(expected_data); ++i)
660 response_size += expected_data[i].size(); 673 response_size += expected_data[i].size();
661 674
662 MockServiceWorkerResponseReader* reader = ExpectReader(); 675 MockServiceWorkerResponseReader* reader = ExpectReader();
663 676
664 reader->ExpectReadInfoOk(response_size, true); 677 reader->ExpectReadInfoOk(response_size, true);
665 for (size_t i = 0; i < arraysize(expected_data); ++i) { 678 for (size_t i = 0; i < arraysize(expected_data); ++i) {
666 reader->ExpectReadDataOk(expected_data[i], true); 679 reader->ExpectReadDataOk(expected_data[i], true);
667 } 680 }
681 Initialize();
668 682
669 net::Error error = WriteHeaders(response_size); 683 net::Error error = WriteHeaders(response_size);
670 EXPECT_EQ(net::ERR_IO_PENDING, error); 684 EXPECT_EQ(net::ERR_IO_PENDING, error);
671 reader->CompletePendingRead(); 685 reader->CompletePendingRead();
672 686
673 for (size_t i = 0; i < arraysize(expected_data); ++i) { 687 for (size_t i = 0; i < arraysize(expected_data); ++i) {
674 error = WriteData(expected_data[i]); 688 error = WriteData(expected_data[i]);
675 EXPECT_EQ(net::ERR_IO_PENDING, error); 689 EXPECT_EQ(net::ERR_IO_PENDING, error);
676 reader->CompletePendingRead(); 690 reader->CompletePendingRead();
677 EXPECT_EQ(net::OK, last_error_); 691 EXPECT_EQ(net::OK, last_error_);
(...skipping 24 matching lines...) Expand all
702 compare_reader->ExpectReadDataOk(cache_data2, false); 716 compare_reader->ExpectReadDataOk(cache_data2, false);
703 717
704 copy_reader->ExpectReadInfoOk(cache_response_size, false); 718 copy_reader->ExpectReadInfoOk(cache_response_size, false);
705 copy_reader->ExpectReadDataOk(data1, false); 719 copy_reader->ExpectReadDataOk(data1, false);
706 720
707 writer->ExpectWriteInfoOk(net_response_size, false); 721 writer->ExpectWriteInfoOk(net_response_size, false);
708 writer->ExpectWriteDataOk(data1.size(), false); 722 writer->ExpectWriteDataOk(data1.size(), false);
709 writer->ExpectWriteDataOk(net_data2.size(), false); 723 writer->ExpectWriteDataOk(net_data2.size(), false);
710 writer->ExpectWriteDataOk(data3.size(), false); 724 writer->ExpectWriteDataOk(data3.size(), false);
711 725
726 Initialize();
727
712 net::Error error = WriteHeaders(net_response_size); 728 net::Error error = WriteHeaders(net_response_size);
713 EXPECT_EQ(net::OK, error); 729 EXPECT_EQ(net::OK, error);
714 error = WriteData(data1); 730 error = WriteData(data1);
715 EXPECT_EQ(net::OK, error); 731 EXPECT_EQ(net::OK, error);
716 error = WriteData(net_data2); 732 error = WriteData(net_data2);
717 EXPECT_EQ(net::OK, error); 733 EXPECT_EQ(net::OK, error);
718 error = WriteData(data3); 734 error = WriteData(data3);
719 EXPECT_EQ(net::OK, error); 735 EXPECT_EQ(net::OK, error);
720 736
721 EXPECT_TRUE(writer->AllExpectedWritesDone()); 737 EXPECT_TRUE(writer->AllExpectedWritesDone());
(...skipping 20 matching lines...) Expand all
742 compare_reader->ExpectReadDataOk("", false); // EOF read 758 compare_reader->ExpectReadDataOk("", false); // EOF read
743 759
744 copy_reader->ExpectReadInfoOk(cache_response_size, false); 760 copy_reader->ExpectReadInfoOk(cache_response_size, false);
745 copy_reader->ExpectReadDataOk(data1, false); 761 copy_reader->ExpectReadDataOk(data1, false);
746 762
747 writer->ExpectWriteInfoOk(net_response_size, false); 763 writer->ExpectWriteInfoOk(net_response_size, false);
748 writer->ExpectWriteDataOk(data1.size(), false); 764 writer->ExpectWriteDataOk(data1.size(), false);
749 writer->ExpectWriteDataOk(net_data2.size(), false); 765 writer->ExpectWriteDataOk(net_data2.size(), false);
750 writer->ExpectWriteDataOk(data3.size(), false); 766 writer->ExpectWriteDataOk(data3.size(), false);
751 767
768 Initialize();
769
752 net::Error error = WriteHeaders(net_response_size); 770 net::Error error = WriteHeaders(net_response_size);
753 EXPECT_EQ(net::OK, error); 771 EXPECT_EQ(net::OK, error);
754 error = WriteData(data1); 772 error = WriteData(data1);
755 EXPECT_EQ(net::OK, error); 773 EXPECT_EQ(net::OK, error);
756 error = WriteData(net_data2); 774 error = WriteData(net_data2);
757 EXPECT_EQ(net::OK, error); 775 EXPECT_EQ(net::OK, error);
758 error = WriteData(data3); 776 error = WriteData(data3);
759 EXPECT_EQ(net::OK, error); 777 EXPECT_EQ(net::OK, error);
760 778
761 EXPECT_TRUE(writer->AllExpectedWritesDone()); 779 EXPECT_TRUE(writer->AllExpectedWritesDone());
(...skipping 22 matching lines...) Expand all
784 // writer realizes the two responses are different sizes, and then the network 802 // writer realizes the two responses are different sizes, and then the network
785 // data should be written back starting with |net_data2|. 803 // data should be written back starting with |net_data2|.
786 copy_reader->ExpectReadInfoOk(cached_size, false); 804 copy_reader->ExpectReadInfoOk(cached_size, false);
787 copy_reader->ExpectReadDataOk(data1, false); 805 copy_reader->ExpectReadDataOk(data1, false);
788 copy_reader->ExpectReadDataOk(net_data2, false); 806 copy_reader->ExpectReadDataOk(net_data2, false);
789 807
790 writer->ExpectWriteInfoOk(net_size, false); 808 writer->ExpectWriteInfoOk(net_size, false);
791 writer->ExpectWriteDataOk(data1.size(), false); 809 writer->ExpectWriteDataOk(data1.size(), false);
792 writer->ExpectWriteDataOk(net_data2.size(), false); 810 writer->ExpectWriteDataOk(net_data2.size(), false);
793 811
812 Initialize();
813
794 net::Error error = WriteHeaders(net_size); 814 net::Error error = WriteHeaders(net_size);
795 EXPECT_EQ(net::OK, error); 815 EXPECT_EQ(net::OK, error);
796 error = WriteData(data1); 816 error = WriteData(data1);
797 EXPECT_EQ(net::OK, error); 817 EXPECT_EQ(net::OK, error);
798 error = WriteData(net_data2); 818 error = WriteData(net_data2);
799 EXPECT_EQ(net::OK, error); 819 EXPECT_EQ(net::OK, error);
800 error = WriteData(""); 820 error = WriteData("");
801 EXPECT_EQ(net::OK, error); 821 EXPECT_EQ(net::OK, error);
802 822
803 EXPECT_TRUE(writer->AllExpectedWritesDone()); 823 EXPECT_TRUE(writer->AllExpectedWritesDone());
804 EXPECT_TRUE(compare_reader->AllExpectedReadsDone()); 824 EXPECT_TRUE(compare_reader->AllExpectedReadsDone());
805 EXPECT_TRUE(copy_reader->AllExpectedReadsDone()); 825 EXPECT_TRUE(copy_reader->AllExpectedReadsDone());
806 } 826 }
807 827
808 } // namespace 828 } // namespace
809 } // namespace content 829 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698