Chromium Code Reviews| 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 "modules/fetch/FetchDataLoader.h" | 5 #include "modules/fetch/FetchDataLoader.h" |
| 6 | 6 |
| 7 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" | 7 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" |
| 8 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 8 #include "modules/fetch/BytesConsumerTestUtil.h" |
| 9 #include "testing/gmock/include/gmock/gmock.h" | 9 #include "testing/gmock/include/gmock/gmock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include <memory> | 11 #include <memory> |
| 12 | 12 |
| 13 namespace blink { | 13 namespace blink { |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 using ::testing::ByMove; | 17 using ::testing::ByMove; |
| 18 using ::testing::InSequence; | 18 using ::testing::InSequence; |
| 19 using ::testing::Return; | 19 using ::testing::Return; |
| 20 using ::testing::DoAll; | 20 using ::testing::DoAll; |
| 21 using ::testing::StrictMock; | 21 using ::testing::StrictMock; |
| 22 using ::testing::_; | 22 using ::testing::_; |
| 23 using ::testing::SaveArg; | 23 using ::testing::SaveArg; |
| 24 using ::testing::SetArgPointee; | 24 using ::testing::SetArgPointee; |
| 25 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; | 25 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; |
| 26 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade rClient; | 26 using MockFetchDataLoaderClient = BytesConsumerTestUtil::MockFetchDataLoaderClie nt; |
| 27 using MockHandle = DataConsumerHandleTestUtil::MockFetchDataConsumerHandle; | 27 using MockBytesConsumer = BytesConsumerTestUtil::MockBytesConsumer; |
| 28 using MockReader = DataConsumerHandleTestUtil::MockFetchDataConsumerReader; | 28 using Result = BytesConsumer::Result; |
| 29 | |
| 30 constexpr WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; | |
| 31 constexpr WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle ::UnexpectedError; | |
| 32 constexpr WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::Sho uldWait; | |
| 33 constexpr WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done; | |
| 34 constexpr WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; | |
| 35 constexpr FetchDataConsumerHandle::Reader::BlobSizePolicy kDisallowBlobWithInval idSize = FetchDataConsumerHandle::Reader::DisallowBlobWithInvalidSize; | |
| 36 | 29 |
| 37 constexpr char kQuickBrownFox[] = "Quick brown fox"; | 30 constexpr char kQuickBrownFox[] = "Quick brown fox"; |
| 38 constexpr size_t kQuickBrownFoxLength = 15; | 31 constexpr size_t kQuickBrownFoxLength = 15; |
| 39 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16; | 32 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16; |
| 40 | 33 |
| 41 TEST(FetchDataLoaderTest, LoadAsBlob) | 34 TEST(FetchDataLoaderTest, LoadAsBlob) |
| 42 { | 35 { |
| 43 WebDataConsumerHandle::Client *client = nullptr; | |
| 44 Checkpoint checkpoint; | 36 Checkpoint checkpoint; |
| 45 | 37 BytesConsumer::Client* client = nullptr; |
| 46 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 38 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 47 | |
| 48 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 49 MockReader* reader = MockReader::create().release(); | |
| 50 | 39 |
| 51 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); | 40 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); |
| 52 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 41 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 53 RefPtr<BlobDataHandle> blobDataHandle; | 42 RefPtr<BlobDataHandle> blobDataHandle; |
| 54 | 43 |
| 55 InSequence s; | 44 InSequence s; |
| 56 EXPECT_CALL(checkpoint, Call(1)); | 45 EXPECT_CALL(checkpoint, Call(1)); |
| 57 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 46 EXPECT_CALL(*consumer, drainAsBlobDataHandle(BytesConsumer::BlobSizePolicy:: DisallowBlobWithInvalidSize)).WillOnce(Return(nullptr)); |
| 58 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi llOnce(Return(nullptr)); | 47 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 59 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 48 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 60 EXPECT_CALL(checkpoint, Call(2)); | 49 EXPECT_CALL(checkpoint, Call(2)); |
| 61 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 50 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLengthWithTerminatingNull), Return( Result::Ok))); |
| 62 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk))); | 51 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLengthWithTerminatingNull)).Wil lOnce(Return(Result::Ok)); |
| 63 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk)); | 52 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done)); |
| 64 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | |
| 65 EXPECT_CALL(*reader, destruct()); | |
| 66 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); | 53 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); |
| 67 EXPECT_CALL(checkpoint, Call(3)); | 54 EXPECT_CALL(checkpoint, Call(3)); |
| 55 EXPECT_CALL(*consumer, cancel()); | |
|
hiroshige
2016/09/30 08:16:48
Memo: In this and the following tests, there are t
| |
| 68 EXPECT_CALL(checkpoint, Call(4)); | 56 EXPECT_CALL(checkpoint, Call(4)); |
| 69 | 57 |
| 70 checkpoint.Call(1); | 58 checkpoint.Call(1); |
| 71 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 59 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 72 checkpoint.Call(2); | 60 checkpoint.Call(2); |
| 73 ASSERT_TRUE(client); | 61 ASSERT_TRUE(client); |
| 74 client->didGetReadable(); | 62 client->onStateChange(); |
| 75 checkpoint.Call(3); | 63 checkpoint.Call(3); |
| 76 fetchDataLoader->cancel(); | 64 consumer->cancel(); |
|
hiroshige
2016/09/30 08:16:48
I think |fetchDataLoader->cancel();| should be cal
yhirano
2016/09/30 09:18:09
Done.
| |
| 77 checkpoint.Call(4); | 65 checkpoint.Call(4); |
| 78 | 66 |
| 79 ASSERT_TRUE(blobDataHandle); | 67 ASSERT_TRUE(blobDataHandle); |
| 80 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 68 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
| 81 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 69 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
| 82 } | 70 } |
| 83 | 71 |
| 84 TEST(FetchDataLoaderTest, LoadAsBlobFailed) | 72 TEST(FetchDataLoaderTest, LoadAsBlobFailed) |
| 85 { | 73 { |
| 86 WebDataConsumerHandle::Client *client = nullptr; | |
| 87 Checkpoint checkpoint; | 74 Checkpoint checkpoint; |
| 88 | 75 BytesConsumer::Client* client = nullptr; |
| 89 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 76 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 90 | |
| 91 // |reader| is adopted by |obtainFetchDataReader|. | |
| 92 MockReader* reader = MockReader::create().release(); | |
| 93 | 77 |
| 94 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); | 78 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); |
| 95 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 79 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 96 | 80 |
| 97 InSequence s; | 81 InSequence s; |
| 98 EXPECT_CALL(checkpoint, Call(1)); | 82 EXPECT_CALL(checkpoint, Call(1)); |
| 99 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 83 EXPECT_CALL(*consumer, drainAsBlobDataHandle(BytesConsumer::BlobSizePolicy:: DisallowBlobWithInvalidSize)).WillOnce(Return(nullptr)); |
| 100 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi llOnce(Return(nullptr)); | 84 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 101 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 85 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 102 EXPECT_CALL(checkpoint, Call(2)); | 86 EXPECT_CALL(checkpoint, Call(2)); |
| 103 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 87 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLengthWithTerminatingNull), Return( Result::Ok))); |
| 104 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk))); | 88 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLengthWithTerminatingNull)).Wil lOnce(Return(Result::Ok)); |
| 105 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk)); | 89 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Error)); |
| 106 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r)); | |
| 107 EXPECT_CALL(*reader, destruct()); | |
| 108 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 90 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
| 109 EXPECT_CALL(checkpoint, Call(3)); | 91 EXPECT_CALL(checkpoint, Call(3)); |
| 92 EXPECT_CALL(*consumer, cancel()); | |
| 110 EXPECT_CALL(checkpoint, Call(4)); | 93 EXPECT_CALL(checkpoint, Call(4)); |
| 111 | 94 |
| 112 checkpoint.Call(1); | 95 checkpoint.Call(1); |
| 113 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 96 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 114 checkpoint.Call(2); | 97 checkpoint.Call(2); |
| 115 ASSERT_TRUE(client); | 98 ASSERT_TRUE(client); |
| 116 client->didGetReadable(); | 99 client->onStateChange(); |
| 117 checkpoint.Call(3); | 100 checkpoint.Call(3); |
| 118 fetchDataLoader->cancel(); | 101 consumer->cancel(); |
| 119 checkpoint.Call(4); | 102 checkpoint.Call(4); |
| 120 } | 103 } |
| 121 | 104 |
| 122 TEST(FetchDataLoaderTest, LoadAsBlobCancel) | 105 TEST(FetchDataLoaderTest, LoadAsBlobCancel) |
| 123 { | 106 { |
| 124 Checkpoint checkpoint; | 107 Checkpoint checkpoint; |
| 125 | 108 BytesConsumer::Client* client = nullptr; |
| 126 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 109 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 127 | |
| 128 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 129 MockReader* reader = MockReader::create().release(); | |
| 130 | 110 |
| 131 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); | 111 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); |
| 132 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 112 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 133 | 113 |
| 134 InSequence s; | 114 InSequence s; |
| 135 EXPECT_CALL(checkpoint, Call(1)); | 115 EXPECT_CALL(checkpoint, Call(1)); |
| 136 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w rapUnique(reader)))); | 116 EXPECT_CALL(*consumer, drainAsBlobDataHandle(BytesConsumer::BlobSizePolicy:: DisallowBlobWithInvalidSize)).WillOnce(Return(nullptr)); |
| 137 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi llOnce(Return(nullptr)); | 117 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 138 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 118 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 139 EXPECT_CALL(checkpoint, Call(2)); | 119 EXPECT_CALL(checkpoint, Call(2)); |
| 140 EXPECT_CALL(*reader, destruct()); | 120 EXPECT_CALL(*consumer, cancel()); |
| 141 EXPECT_CALL(checkpoint, Call(3)); | 121 EXPECT_CALL(checkpoint, Call(3)); |
| 142 | 122 |
| 143 checkpoint.Call(1); | 123 checkpoint.Call(1); |
| 144 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 124 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 145 checkpoint.Call(2); | 125 checkpoint.Call(2); |
| 146 fetchDataLoader->cancel(); | 126 fetchDataLoader->cancel(); |
| 147 checkpoint.Call(3); | 127 checkpoint.Call(3); |
| 148 } | 128 } |
| 149 | 129 |
| 150 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType) | 130 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType) |
| 151 { | 131 { |
| 152 std::unique_ptr<BlobData> blobData = BlobData::create(); | 132 std::unique_ptr<BlobData> blobData = BlobData::create(); |
| 153 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l); | 133 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l); |
| 154 blobData->setContentType("text/test"); | 134 blobData->setContentType("text/test"); |
| 155 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov e(blobData), kQuickBrownFoxLengthWithTerminatingNull); | 135 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov e(blobData), kQuickBrownFoxLengthWithTerminatingNull); |
| 156 | 136 |
| 157 Checkpoint checkpoint; | 137 Checkpoint checkpoint; |
| 158 | 138 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 159 std::unique_ptr<MockHandle> handle = MockHandle::create(); | |
| 160 | |
| 161 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 162 MockReader* reader = MockReader::create().release(); | |
| 163 | 139 |
| 164 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); | 140 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); |
| 165 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 141 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 166 RefPtr<BlobDataHandle> blobDataHandle; | 142 RefPtr<BlobDataHandle> blobDataHandle; |
| 167 | 143 |
| 168 InSequence s; | 144 InSequence s; |
| 169 EXPECT_CALL(checkpoint, Call(1)); | 145 EXPECT_CALL(checkpoint, Call(1)); |
| 170 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w rapUnique(reader)))); | 146 EXPECT_CALL(*consumer, drainAsBlobDataHandle(BytesConsumer::BlobSizePolicy:: DisallowBlobWithInvalidSize)).WillOnce(Return(inputBlobDataHandle)); |
| 171 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi llOnce(Return(inputBlobDataHandle)); | |
| 172 EXPECT_CALL(*reader, destruct()); | |
| 173 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); | 147 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); |
| 174 EXPECT_CALL(checkpoint, Call(2)); | 148 EXPECT_CALL(checkpoint, Call(2)); |
| 149 EXPECT_CALL(*consumer, cancel()); | |
| 175 EXPECT_CALL(checkpoint, Call(3)); | 150 EXPECT_CALL(checkpoint, Call(3)); |
| 176 | 151 |
| 177 checkpoint.Call(1); | 152 checkpoint.Call(1); |
| 178 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 153 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 179 checkpoint.Call(2); | 154 checkpoint.Call(2); |
| 180 fetchDataLoader->cancel(); | 155 fetchDataLoader->cancel(); |
| 181 checkpoint.Call(3); | 156 checkpoint.Call(3); |
| 182 | 157 |
| 183 ASSERT_TRUE(blobDataHandle); | 158 ASSERT_TRUE(blobDataHandle); |
| 184 EXPECT_EQ(inputBlobDataHandle, blobDataHandle); | 159 EXPECT_EQ(inputBlobDataHandle, blobDataHandle); |
| 185 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 160 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
| 186 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 161 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
| 187 } | 162 } |
| 188 | 163 |
| 189 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContent Type) | 164 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContent Type) |
| 190 { | 165 { |
| 191 std::unique_ptr<BlobData> blobData = BlobData::create(); | 166 std::unique_ptr<BlobData> blobData = BlobData::create(); |
| 192 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l); | 167 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l); |
| 193 blobData->setContentType("text/different"); | 168 blobData->setContentType("text/different"); |
| 194 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov e(blobData), kQuickBrownFoxLengthWithTerminatingNull); | 169 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov e(blobData), kQuickBrownFoxLengthWithTerminatingNull); |
| 195 | 170 |
| 196 Checkpoint checkpoint; | 171 Checkpoint checkpoint; |
| 197 | 172 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 198 std::unique_ptr<MockHandle> handle = MockHandle::create(); | |
| 199 | |
| 200 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 201 MockReader* reader = MockReader::create().release(); | |
| 202 | 173 |
| 203 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); | 174 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test"); |
| 204 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 175 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 205 RefPtr<BlobDataHandle> blobDataHandle; | 176 RefPtr<BlobDataHandle> blobDataHandle; |
| 206 | 177 |
| 207 InSequence s; | 178 InSequence s; |
| 208 EXPECT_CALL(checkpoint, Call(1)); | 179 EXPECT_CALL(checkpoint, Call(1)); |
| 209 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w rapUnique(reader)))); | 180 EXPECT_CALL(*consumer, drainAsBlobDataHandle(BytesConsumer::BlobSizePolicy:: DisallowBlobWithInvalidSize)).WillOnce(Return(inputBlobDataHandle)); |
| 210 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi llOnce(Return(inputBlobDataHandle)); | |
| 211 EXPECT_CALL(*reader, destruct()); | |
| 212 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); | 181 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle)); |
| 213 EXPECT_CALL(checkpoint, Call(2)); | 182 EXPECT_CALL(checkpoint, Call(2)); |
| 183 EXPECT_CALL(*consumer, cancel()); | |
| 214 EXPECT_CALL(checkpoint, Call(3)); | 184 EXPECT_CALL(checkpoint, Call(3)); |
| 215 | 185 |
| 216 checkpoint.Call(1); | 186 checkpoint.Call(1); |
| 217 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 187 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 218 checkpoint.Call(2); | 188 checkpoint.Call(2); |
| 219 fetchDataLoader->cancel(); | 189 fetchDataLoader->cancel(); |
| 220 checkpoint.Call(3); | 190 checkpoint.Call(3); |
| 221 | 191 |
| 222 ASSERT_TRUE(blobDataHandle); | 192 ASSERT_TRUE(blobDataHandle); |
| 223 EXPECT_NE(inputBlobDataHandle, blobDataHandle); | 193 EXPECT_NE(inputBlobDataHandle, blobDataHandle); |
| 224 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 194 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
| 225 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 195 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
| 226 } | 196 } |
| 227 | 197 |
| 228 TEST(FetchDataLoaderTest, LoadAsArrayBuffer) | 198 TEST(FetchDataLoaderTest, LoadAsArrayBuffer) |
| 229 { | 199 { |
| 230 WebDataConsumerHandle::Client *client = nullptr; | |
| 231 Checkpoint checkpoint; | 200 Checkpoint checkpoint; |
| 232 | 201 BytesConsumer::Client* client = nullptr; |
| 233 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 202 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 234 | |
| 235 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 236 MockReader* reader = MockReader::create().release(); | |
| 237 | 203 |
| 238 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); | 204 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); |
| 239 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 205 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 240 DOMArrayBuffer* arrayBuffer = nullptr; | 206 DOMArrayBuffer* arrayBuffer = nullptr; |
| 241 | 207 |
| 242 InSequence s; | 208 InSequence s; |
| 243 EXPECT_CALL(checkpoint, Call(1)); | 209 EXPECT_CALL(checkpoint, Call(1)); |
| 244 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 210 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 245 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 211 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 246 EXPECT_CALL(checkpoint, Call(2)); | 212 EXPECT_CALL(checkpoint, Call(2)); |
| 247 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 213 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLengthWithTerminatingNull), Return( Result::Ok))); |
| 248 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk))); | 214 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLengthWithTerminatingNull)).Wil lOnce(Return(Result::Ok)); |
| 249 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk)); | 215 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done)); |
| 250 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | |
| 251 EXPECT_CALL(*reader, destruct()); | |
| 252 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedArrayBufferMock(_)).Wi llOnce(SaveArg<0>(&arrayBuffer)); | 216 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedArrayBufferMock(_)).Wi llOnce(SaveArg<0>(&arrayBuffer)); |
| 253 EXPECT_CALL(checkpoint, Call(3)); | 217 EXPECT_CALL(checkpoint, Call(3)); |
| 218 EXPECT_CALL(*consumer, cancel()); | |
| 254 EXPECT_CALL(checkpoint, Call(4)); | 219 EXPECT_CALL(checkpoint, Call(4)); |
| 255 | 220 |
| 256 checkpoint.Call(1); | 221 checkpoint.Call(1); |
| 257 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 222 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 258 checkpoint.Call(2); | 223 checkpoint.Call(2); |
| 259 ASSERT_TRUE(client); | 224 ASSERT_TRUE(client); |
| 260 client->didGetReadable(); | 225 client->onStateChange(); |
| 261 checkpoint.Call(3); | 226 checkpoint.Call(3); |
| 262 fetchDataLoader->cancel(); | 227 fetchDataLoader->cancel(); |
| 263 checkpoint.Call(4); | 228 checkpoint.Call(4); |
| 264 | 229 |
| 265 ASSERT_TRUE(arrayBuffer); | 230 ASSERT_TRUE(arrayBuffer); |
| 266 ASSERT_EQ(kQuickBrownFoxLengthWithTerminatingNull, arrayBuffer->byteLength() ); | 231 ASSERT_EQ(kQuickBrownFoxLengthWithTerminatingNull, arrayBuffer->byteLength() ); |
| 267 EXPECT_STREQ(kQuickBrownFox, static_cast<const char*>(arrayBuffer->data())); | 232 EXPECT_STREQ(kQuickBrownFox, static_cast<const char*>(arrayBuffer->data())); |
| 268 } | 233 } |
| 269 | 234 |
| 270 TEST(FetchDataLoaderTest, LoadAsArrayBufferFailed) | 235 TEST(FetchDataLoaderTest, LoadAsArrayBufferFailed) |
| 271 { | 236 { |
| 272 WebDataConsumerHandle::Client *client = nullptr; | |
| 273 Checkpoint checkpoint; | 237 Checkpoint checkpoint; |
| 274 | 238 BytesConsumer::Client* client = nullptr; |
| 275 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 239 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 276 | |
| 277 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 278 MockReader* reader = MockReader::create().release(); | |
| 279 | 240 |
| 280 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); | 241 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); |
| 281 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 242 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 282 | 243 |
| 283 InSequence s; | 244 InSequence s; |
| 284 EXPECT_CALL(checkpoint, Call(1)); | 245 EXPECT_CALL(checkpoint, Call(1)); |
| 285 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 246 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 286 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 247 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 287 EXPECT_CALL(checkpoint, Call(2)); | 248 EXPECT_CALL(checkpoint, Call(2)); |
| 288 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 249 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLengthWithTerminatingNull), Return( Result::Ok))); |
| 289 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk))); | 250 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLengthWithTerminatingNull)).Wil lOnce(Return(Result::Ok)); |
| 290 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk)); | 251 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Error)); |
| 291 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r)); | |
| 292 EXPECT_CALL(*reader, destruct()); | |
| 293 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 252 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
| 294 EXPECT_CALL(checkpoint, Call(3)); | 253 EXPECT_CALL(checkpoint, Call(3)); |
| 254 EXPECT_CALL(*consumer, cancel()); | |
| 295 EXPECT_CALL(checkpoint, Call(4)); | 255 EXPECT_CALL(checkpoint, Call(4)); |
| 296 | 256 |
| 297 checkpoint.Call(1); | 257 checkpoint.Call(1); |
| 298 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 258 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 299 checkpoint.Call(2); | 259 checkpoint.Call(2); |
| 300 ASSERT_TRUE(client); | 260 ASSERT_TRUE(client); |
| 301 client->didGetReadable(); | 261 client->onStateChange(); |
| 302 checkpoint.Call(3); | 262 checkpoint.Call(3); |
| 303 fetchDataLoader->cancel(); | 263 fetchDataLoader->cancel(); |
| 304 checkpoint.Call(4); | 264 checkpoint.Call(4); |
| 305 } | 265 } |
| 306 | 266 |
| 307 TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel) | 267 TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel) |
| 308 { | 268 { |
| 309 Checkpoint checkpoint; | 269 Checkpoint checkpoint; |
| 270 BytesConsumer::Client* client = nullptr; | |
| 271 MockBytesConsumer* consumer = MockBytesConsumer::create(); | |
| 310 | 272 |
| 311 std::unique_ptr<MockHandle> handle = MockHandle::create(); | |
| 312 | |
| 313 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 314 MockReader* reader = MockReader::create().release(); | |
| 315 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); | 273 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r(); |
| 316 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 274 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 317 | 275 |
| 318 InSequence s; | 276 InSequence s; |
| 319 EXPECT_CALL(checkpoint, Call(1)); | 277 EXPECT_CALL(checkpoint, Call(1)); |
| 320 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w rapUnique(reader)))); | 278 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 321 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 279 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 322 EXPECT_CALL(checkpoint, Call(2)); | 280 EXPECT_CALL(checkpoint, Call(2)); |
| 323 EXPECT_CALL(*reader, destruct()); | 281 EXPECT_CALL(*consumer, cancel()); |
| 324 EXPECT_CALL(checkpoint, Call(3)); | 282 EXPECT_CALL(checkpoint, Call(3)); |
| 325 | 283 |
| 326 checkpoint.Call(1); | 284 checkpoint.Call(1); |
| 327 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 285 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 328 checkpoint.Call(2); | 286 checkpoint.Call(2); |
| 329 fetchDataLoader->cancel(); | 287 fetchDataLoader->cancel(); |
| 330 checkpoint.Call(3); | 288 checkpoint.Call(3); |
| 331 } | 289 } |
| 332 | 290 |
| 333 TEST(FetchDataLoaderTest, LoadAsString) | 291 TEST(FetchDataLoaderTest, LoadAsString) |
| 334 { | 292 { |
| 335 WebDataConsumerHandle::Client *client = nullptr; | |
| 336 Checkpoint checkpoint; | 293 Checkpoint checkpoint; |
| 337 | 294 BytesConsumer::Client* client = nullptr; |
| 338 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 295 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 339 | |
| 340 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 341 MockReader* reader = MockReader::create().release(); | |
| 342 | 296 |
| 343 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 297 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
| 344 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 298 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 345 | 299 |
| 346 InSequence s; | 300 InSequence s; |
| 347 EXPECT_CALL(checkpoint, Call(1)); | 301 EXPECT_CALL(checkpoint, Call(1)); |
| 348 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 302 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 349 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 303 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 350 EXPECT_CALL(checkpoint, Call(2)); | 304 EXPECT_CALL(checkpoint, Call(2)); |
| 351 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 305 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLength), Return(Result::Ok))); |
| 352 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt h), Return(kOk))); | 306 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLength)).WillOnce(Return(Result ::Ok)); |
| 353 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); | 307 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done)); |
| 354 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | |
| 355 EXPECT_CALL(*reader, destruct()); | |
| 356 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kQuickBr ownFox))); | 308 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kQuickBr ownFox))); |
| 357 EXPECT_CALL(checkpoint, Call(3)); | 309 EXPECT_CALL(checkpoint, Call(3)); |
| 310 EXPECT_CALL(*consumer, cancel()); | |
| 358 EXPECT_CALL(checkpoint, Call(4)); | 311 EXPECT_CALL(checkpoint, Call(4)); |
| 359 | 312 |
| 360 checkpoint.Call(1); | 313 checkpoint.Call(1); |
| 361 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 314 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 362 checkpoint.Call(2); | 315 checkpoint.Call(2); |
| 363 ASSERT_TRUE(client); | 316 ASSERT_TRUE(client); |
| 364 client->didGetReadable(); | 317 client->onStateChange(); |
| 365 checkpoint.Call(3); | 318 checkpoint.Call(3); |
| 366 fetchDataLoader->cancel(); | 319 fetchDataLoader->cancel(); |
| 367 checkpoint.Call(4); | 320 checkpoint.Call(4); |
| 368 } | 321 } |
| 369 | 322 |
| 370 TEST(FetchDataLoaderTest, LoadAsStringWithNullBytes) | 323 TEST(FetchDataLoaderTest, LoadAsStringWithNullBytes) |
| 371 { | 324 { |
| 372 WebDataConsumerHandle::Client *client = nullptr; | |
| 373 Checkpoint checkpoint; | 325 Checkpoint checkpoint; |
| 374 | 326 BytesConsumer::Client* client = nullptr; |
| 375 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 327 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 376 | |
| 377 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 378 MockReader* reader = MockReader::create().release(); | |
| 379 | 328 |
| 380 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 329 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
| 381 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 330 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 382 | 331 |
| 332 constexpr char kPattern[] = "Quick\0brown\0fox"; | |
| 333 constexpr size_t kLength = sizeof(kPattern); | |
| 334 | |
| 383 InSequence s; | 335 InSequence s; |
| 384 EXPECT_CALL(checkpoint, Call(1)); | 336 EXPECT_CALL(checkpoint, Call(1)); |
| 385 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 337 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 386 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 338 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 387 EXPECT_CALL(checkpoint, Call(2)); | 339 EXPECT_CALL(checkpoint, Call(2)); |
| 388 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 340 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kPat tern), SetArgPointee<1>(kLength), Return(Result::Ok))); |
| 389 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>("Quick\0brown\0fox")), SetArgPointee<2>(16), Return(kO k))); | 341 EXPECT_CALL(*consumer, endRead(16)).WillOnce(Return(Result::Ok)); |
| 390 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk)); | 342 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Done)); |
| 391 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | 343 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kPattern , kLength))); |
| 392 EXPECT_CALL(*reader, destruct()); | |
| 393 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String("Quick\0 brown\0fox", 16))); | |
| 394 EXPECT_CALL(checkpoint, Call(3)); | 344 EXPECT_CALL(checkpoint, Call(3)); |
| 345 EXPECT_CALL(*consumer, cancel()); | |
| 395 EXPECT_CALL(checkpoint, Call(4)); | 346 EXPECT_CALL(checkpoint, Call(4)); |
| 396 | 347 |
| 397 checkpoint.Call(1); | 348 checkpoint.Call(1); |
| 398 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 349 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 399 checkpoint.Call(2); | 350 checkpoint.Call(2); |
| 400 ASSERT_TRUE(client); | 351 ASSERT_TRUE(client); |
| 401 client->didGetReadable(); | 352 client->onStateChange(); |
| 402 checkpoint.Call(3); | 353 checkpoint.Call(3); |
| 403 fetchDataLoader->cancel(); | 354 fetchDataLoader->cancel(); |
| 404 checkpoint.Call(4); | 355 checkpoint.Call(4); |
| 405 } | 356 } |
| 406 | 357 |
| 407 TEST(FetchDataLoaderTest, LoadAsStringError) | 358 TEST(FetchDataLoaderTest, LoadAsStringError) |
| 408 { | 359 { |
| 409 WebDataConsumerHandle::Client *client = nullptr; | |
| 410 Checkpoint checkpoint; | 360 Checkpoint checkpoint; |
| 411 | 361 BytesConsumer::Client* client = nullptr; |
| 412 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 362 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 413 | |
| 414 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 415 MockReader* reader = MockReader::create().release(); | |
| 416 | 363 |
| 417 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 364 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
| 418 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 365 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 419 | 366 |
| 420 InSequence s; | 367 InSequence s; |
| 421 EXPECT_CALL(checkpoint, Call(1)); | 368 EXPECT_CALL(checkpoint, Call(1)); |
| 422 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl ient), Return(ByMove(WTF::wrapUnique(reader))))); | 369 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 423 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 370 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 424 EXPECT_CALL(checkpoint, Call(2)); | 371 EXPECT_CALL(checkpoint, Call(2)); |
| 425 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe e<3>(0), Return(kShouldWait))); | 372 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(kQu ickBrownFox), SetArgPointee<1>(kQuickBrownFoxLength), Return(Result::Ok))); |
| 426 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt h), Return(kOk))); | 373 EXPECT_CALL(*consumer, endRead(kQuickBrownFoxLength)).WillOnce(Return(Result ::Ok)); |
| 427 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); | 374 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(Return(Result::Error)); |
| 428 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r)); | |
| 429 EXPECT_CALL(*reader, destruct()); | |
| 430 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 375 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
| 431 EXPECT_CALL(checkpoint, Call(3)); | 376 EXPECT_CALL(checkpoint, Call(3)); |
| 377 EXPECT_CALL(*consumer, cancel()); | |
| 432 EXPECT_CALL(checkpoint, Call(4)); | 378 EXPECT_CALL(checkpoint, Call(4)); |
| 433 | 379 |
| 434 checkpoint.Call(1); | 380 checkpoint.Call(1); |
| 435 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 381 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 436 checkpoint.Call(2); | 382 checkpoint.Call(2); |
| 437 ASSERT_TRUE(client); | 383 ASSERT_TRUE(client); |
| 438 client->didGetReadable(); | 384 client->onStateChange(); |
| 439 checkpoint.Call(3); | 385 checkpoint.Call(3); |
| 440 fetchDataLoader->cancel(); | 386 fetchDataLoader->cancel(); |
| 441 checkpoint.Call(4); | 387 checkpoint.Call(4); |
| 442 } | 388 } |
| 443 | 389 |
| 444 TEST(FetchDataLoaderTest, LoadAsStringCancel) | 390 TEST(FetchDataLoaderTest, LoadAsStringCancel) |
| 445 { | 391 { |
| 446 Checkpoint checkpoint; | 392 Checkpoint checkpoint; |
| 447 | 393 BytesConsumer::Client* client = nullptr; |
| 448 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 394 MockBytesConsumer* consumer = MockBytesConsumer::create(); |
| 449 | |
| 450 // |reader| will be adopted by |obtainFetchDataReader|. | |
| 451 MockReader* reader = MockReader::create().release(); | |
| 452 | 395 |
| 453 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 396 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
| 454 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); | 397 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create(); |
| 455 | 398 |
| 456 InSequence s; | 399 InSequence s; |
| 457 EXPECT_CALL(checkpoint, Call(1)); | 400 EXPECT_CALL(checkpoint, Call(1)); |
| 458 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w rapUnique(reader)))); | 401 EXPECT_CALL(*consumer, setClient(_)).WillOnce(SaveArg<0>(&client)); |
| 459 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (nullptr), SetArgPointee<2>(0), Return(kShouldWait))); | 402 EXPECT_CALL(*consumer, beginRead(_, _)).WillOnce(DoAll(SetArgPointee<0>(nul lptr), SetArgPointee<1>(0), Return(Result::ShouldWait))); |
| 460 EXPECT_CALL(checkpoint, Call(2)); | 403 EXPECT_CALL(checkpoint, Call(2)); |
| 461 EXPECT_CALL(*reader, destruct()); | 404 EXPECT_CALL(*consumer, cancel()); |
| 462 EXPECT_CALL(checkpoint, Call(3)); | 405 EXPECT_CALL(checkpoint, Call(3)); |
| 463 | 406 |
| 464 checkpoint.Call(1); | 407 checkpoint.Call(1); |
| 465 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std:: move(handle)), fetchDataLoaderClient); | 408 fetchDataLoader->start(consumer, fetchDataLoaderClient); |
| 466 checkpoint.Call(2); | 409 checkpoint.Call(2); |
| 467 fetchDataLoader->cancel(); | 410 fetchDataLoader->cancel(); |
| 468 checkpoint.Call(3); | 411 checkpoint.Call(3); |
| 469 } | 412 } |
| 470 | 413 |
| 471 } // namespace | 414 } // namespace |
| 472 | 415 |
| 473 } // namespace blink | 416 } // namespace blink |
| OLD | NEW |