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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp

Issue 2376193004: Stop FetchDataLoaderTest from using [Web|Fetch]DataConsumerHandle. (Closed)
Patch Set: fix Created 4 years, 2 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 "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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698