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

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

Issue 1181573003: Set error on WebDataConsumerHandle while loading body. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@use-ipc-data-consumer
Patch Set: rebase Created 5 years, 6 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 <string.h> 7 #include <string.h>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 17 matching lines...) Expand all
28 using BackpressureMode = SharedMemoryDataConsumerHandle::BackpressureMode; 28 using BackpressureMode = SharedMemoryDataConsumerHandle::BackpressureMode;
29 const BackpressureMode kApplyBackpressure = 29 const BackpressureMode kApplyBackpressure =
30 SharedMemoryDataConsumerHandle::kApplyBackpressure; 30 SharedMemoryDataConsumerHandle::kApplyBackpressure;
31 const BackpressureMode kDoNotApplyBackpressure = 31 const BackpressureMode kDoNotApplyBackpressure =
32 SharedMemoryDataConsumerHandle::kDoNotApplyBackpressure; 32 SharedMemoryDataConsumerHandle::kDoNotApplyBackpressure;
33 33
34 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; 34 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
35 const Result kOk = WebDataConsumerHandle::Ok; 35 const Result kOk = WebDataConsumerHandle::Ok;
36 const Result kDone = WebDataConsumerHandle::Done; 36 const Result kDone = WebDataConsumerHandle::Done;
37 const Result kShouldWait = WebDataConsumerHandle::ShouldWait; 37 const Result kShouldWait = WebDataConsumerHandle::ShouldWait;
38 const Result kUnexpectedError = WebDataConsumerHandle::UnexpectedError;
38 39
39 using ::testing::_; 40 using ::testing::_;
40 using ::testing::InSequence; 41 using ::testing::InSequence;
41 using ::testing::MockFunction; 42 using ::testing::MockFunction;
42 using ::testing::Return; 43 using ::testing::Return;
43 using ::testing::StrictMock; 44 using ::testing::StrictMock;
44 45
45 using Checkpoint = StrictMock<MockFunction<void(int)>>; 46 using Checkpoint = StrictMock<MockFunction<void(int)>>;
46 using ReceivedData = RequestPeer::ReceivedData; 47 using ReceivedData = RequestPeer::ReceivedData;
47 48
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 EXPECT_EQ(nullptr, buffer); 614 EXPECT_EQ(nullptr, buffer);
614 615
615 writer_->Close(); 616 writer_->Close();
616 617
617 result = reader->beginRead(&buffer, kNone, &size); 618 result = reader->beginRead(&buffer, kNone, &size);
618 EXPECT_EQ(kDone, result); 619 EXPECT_EQ(kDone, result);
619 EXPECT_EQ(0u, size); 620 EXPECT_EQ(0u, size);
620 EXPECT_EQ(nullptr, buffer); 621 EXPECT_EQ(nullptr, buffer);
621 } 622 }
622 623
624 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorRead) {
625 Checkpoint checkpoint;
626 Result result;
627 char buffer[20] = {};
628 size_t read = 99;
629 auto reader = handle_->obtainReader(nullptr);
630
631 writer_->Error();
632 result = reader->read(buffer, sizeof(buffer), kNone, &read);
633
634 EXPECT_EQ(kUnexpectedError, result);
635 EXPECT_EQ(0u, read);
636 }
637
638 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorTwoPhaseRead) {
639 Result result;
640 const void* pointer = &result;
641 size_t size = 99;
642 auto reader = handle_->obtainReader(nullptr);
643
644 writer_->Error();
645 result = reader->beginRead(&pointer, kNone, &size);
646
647 EXPECT_EQ(kUnexpectedError, result);
648 EXPECT_EQ(nullptr, pointer);
649 EXPECT_EQ(0u, size);
650 }
651
652 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorWhileTwoPhaseReadIsInProgress) {
653 Result result;
654 const void* pointer = nullptr;
655 size_t size = 0;
656 auto reader = handle_->obtainReader(nullptr);
657
658 writer_->AddData(NewFixedData("Once "));
659 result = reader->beginRead(&pointer, kNone, &size);
660 auto buffer = static_cast<const char*>(pointer);
661
662 ASSERT_EQ(kOk, result);
663 ASSERT_NE(nullptr, pointer);
664 ASSERT_EQ(size, 5u);
665
666 writer_->Error();
667
668 // We can access the buffer after calling |Error|. I hope ASAN will detect
669 // an error if the region is already freed.
670 EXPECT_EQ('O', buffer[0]);
671 EXPECT_EQ('n', buffer[1]);
672 EXPECT_EQ('c', buffer[2]);
673 EXPECT_EQ('e', buffer[3]);
674 EXPECT_EQ(' ', buffer[4]);
675
676 reader->endRead(size);
hiroshige 2015/06/18 07:01:21 Should we add EXPECT_EQ(kUnexpectedError) for the
yhirano 2015/06/18 08:13:33 Currently it returns Ok and I'm fine with it. I do
hiroshige 2015/06/18 08:35:11 OK; endRead() returns OK because we can read 'Once
yhirano 2015/06/18 08:40:55 Done.
677 }
678
679 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorWithClient) {
680 Checkpoint checkpoint;
681
682 InSequence s;
683 EXPECT_CALL(checkpoint, Call(0));
684 EXPECT_CALL(checkpoint, Call(1));
685 EXPECT_CALL(client_, didGetReadable());
686 EXPECT_CALL(checkpoint, Call(2));
687
688 checkpoint.Call(0);
689 auto reader = handle_->obtainReader(&client_);
690 checkpoint.Call(1);
691 writer_->Error();
692 checkpoint.Call(2);
693 }
694
695 TEST_P(SharedMemoryDataConsumerHandleTest, ErrorWithClientAndData) {
696 Checkpoint checkpoint;
697
698 InSequence s;
699 EXPECT_CALL(checkpoint, Call(0));
700 EXPECT_CALL(checkpoint, Call(1));
701 EXPECT_CALL(client_, didGetReadable());
702 EXPECT_CALL(checkpoint, Call(2));
703 EXPECT_CALL(client_, didGetReadable());
704 EXPECT_CALL(checkpoint, Call(3));
705
706 checkpoint.Call(0);
707 auto reader = handle_->obtainReader(&client_);
708 checkpoint.Call(1);
709 writer_->AddData(NewFixedData("Once "));
710 checkpoint.Call(2);
711 writer_->Error();
712 checkpoint.Call(3);
713 }
714
623 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) { 715 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) {
624 base::MessageLoop loop; 716 base::MessageLoop loop;
625 char buffer[20]; 717 char buffer[20];
626 Result result; 718 Result result;
627 size_t size; 719 size_t size;
628 720
629 scoped_ptr<Writer> writer; 721 scoped_ptr<Writer> writer;
630 auto handle = make_scoped_ptr( 722 auto handle = make_scoped_ptr(
631 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer)); 723 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer));
632 scoped_refptr<Logger> logger(new Logger); 724 scoped_refptr<Logger> logger(new Logger);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 logger->log()); 860 logger->log());
769 } 861 }
770 862
771 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest, 863 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest,
772 SharedMemoryDataConsumerHandleTest, 864 SharedMemoryDataConsumerHandleTest,
773 ::testing::Values(kApplyBackpressure, 865 ::testing::Values(kApplyBackpressure,
774 kDoNotApplyBackpressure)); 866 kDoNotApplyBackpressure));
775 } // namespace 867 } // namespace
776 868
777 } // namespace content 869 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698