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

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

Issue 1179393007: [2a] Implement FetchDataLoader (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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
« no previous file with comments | « Source/modules/fetch/FetchDataLoader.cpp ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "modules/fetch/FetchDataLoader.h"
7
8 #include <gmock/gmock.h>
9 #include <gtest/gtest.h>
10
11 namespace blink {
12
13 namespace {
14
15 using ::testing::InSequence;
16 using ::testing::Return;
17 using ::testing::DoAll;
18 using ::testing::StrictMock;
19 using ::testing::_;
20 using ::testing::SaveArg;
21 using ::testing::SetArgPointee;
22 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
23
24 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok;
25 const WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle::Un expectedError;
26 const WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done;
27 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
28
29 class MockReader : public FetchDataConsumerHandle::Reader {
30 public:
31 static PassOwnPtr<StrictMock<MockReader>> create() { return adoptPtr(new Str ictMock<MockReader>); }
32
33 using Result = WebDataConsumerHandle::Result;
34 using Flags = WebDataConsumerHandle::Flags;
35 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
36 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
37 MOCK_METHOD1(endRead, Result(size_t));
38 MOCK_METHOD0(drainAsBlobDataHandle, PassRefPtr<BlobDataHandle>());
39
40 ~MockReader() override
41 {
42 destruct();
43 }
44 MOCK_METHOD0(destruct, void());
45 };
46
47 class MockHandle : public FetchDataConsumerHandle {
48 public:
49 static PassOwnPtr<StrictMock<MockHandle>> create() { return adoptPtr(new Str ictMock<MockHandle>); }
50
51 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*));
52 };
53
54 class MockFetchDataLoaderClient : public GarbageCollectedFinalized<MockFetchData LoaderClient>, public FetchDataLoader::Client {
55 USING_GARBAGE_COLLECTED_MIXIN(MockFetchDataLoaderClient);
56 public:
57 static StrictMock<MockFetchDataLoaderClient>* create() { return new StrictMo ck<MockFetchDataLoaderClient>; }
58
59 DEFINE_INLINE_VIRTUAL_TRACE()
60 {
61 FetchDataLoader::Client::trace(visitor);
62 }
63
64 MOCK_METHOD1(didFetchDataLoadedBlobHandleMock, void(RefPtr<BlobDataHandle>)) ;
65 MOCK_METHOD1(didFetchDataLoadedArrayBufferMock, void(RefPtr<DOMArrayBuffer>) );
66 MOCK_METHOD1(didFetchDataLoadedString, void(const String&));
67 MOCK_METHOD0(didFetchDataLoadFailed, void());
68
69 // In mock methods we use RefPtr<> rather than PassRefPtr<>.
70 void didFetchDataLoadedArrayBuffer(PassRefPtr<DOMArrayBuffer> arrayBuffer) o verride
71 {
72 didFetchDataLoadedArrayBufferMock(arrayBuffer);
73 }
74 void didFetchDataLoadedBlobHandle(PassRefPtr<BlobDataHandle> blobDataHandle) override
75 {
76 didFetchDataLoadedBlobHandleMock(blobDataHandle);
77 }
78 };
79
80 const char kQuickBrownFox[] = "Quick brown fox";
81 const size_t kQuickBrownFoxLength = 15;
82 const size_t kQuickBrownFoxLengthWithTerminatingNull = 16;
83
84 TEST(FetchDataLoaderTest, LoadAsBlob)
85 {
86 WebDataConsumerHandle::Client *client = nullptr;
87 Checkpoint checkpoint;
88
89 OwnPtr<MockHandle> handle = MockHandle::create();
90 OwnPtr<MockReader> reader = MockReader::create();
91 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test");
92 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
93 RefPtr<BlobDataHandle> blobDataHandle;
94
95 InSequence s;
96 EXPECT_CALL(checkpoint, Call(1));
97 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
98 EXPECT_CALL(*reader, drainAsBlobDataHandle()).WillOnce(Return(nullptr));
99 EXPECT_CALL(checkpoint, Call(2));
100 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk)));
101 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk));
102 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone));
103 EXPECT_CALL(*reader, destruct());
104 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle));
105 EXPECT_CALL(checkpoint, Call(3));
106 EXPECT_CALL(checkpoint, Call(4));
107
108 // |reader| is adopted by |obtainReader|.
109 ASSERT_TRUE(reader.leakPtr());
110
111 checkpoint.Call(1);
112 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
113 checkpoint.Call(2);
114 ASSERT_TRUE(client);
115 client->didGetReadable();
116 checkpoint.Call(3);
117 fetchDataLoader->cancel();
118 checkpoint.Call(4);
119
120 ASSERT_TRUE(blobDataHandle);
121 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size());
122 EXPECT_EQ(String("text/test"), blobDataHandle->type());
123 }
124
125 TEST(FetchDataLoaderTest, LoadAsBlobFailed)
126 {
127 WebDataConsumerHandle::Client *client = nullptr;
128 Checkpoint checkpoint;
129
130 OwnPtr<MockHandle> handle = MockHandle::create();
131 OwnPtr<MockReader> reader = MockReader::create();
132 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test");
133 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
134
135 InSequence s;
136 EXPECT_CALL(checkpoint, Call(1));
137 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
138 EXPECT_CALL(*reader, drainAsBlobDataHandle()).WillOnce(Return(nullptr));
139 EXPECT_CALL(checkpoint, Call(2));
140 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk)));
141 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk));
142 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r));
143 EXPECT_CALL(*reader, destruct());
144 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed());
145 EXPECT_CALL(checkpoint, Call(3));
146 EXPECT_CALL(checkpoint, Call(4));
147
148 // |reader| is adopted by |obtainReader|.
149 ASSERT_TRUE(reader.leakPtr());
150
151 checkpoint.Call(1);
152 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
153 checkpoint.Call(2);
154 ASSERT_TRUE(client);
155 client->didGetReadable();
156 checkpoint.Call(3);
157 fetchDataLoader->cancel();
158 checkpoint.Call(4);
159 }
160
161 TEST(FetchDataLoaderTest, LoadAsBlobCancel)
162 {
163 Checkpoint checkpoint;
164
165 OwnPtr<MockHandle> handle = MockHandle::create();
166 OwnPtr<MockReader> reader = MockReader::create();
167 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test");
168 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
169
170 InSequence s;
171 EXPECT_CALL(checkpoint, Call(1));
172 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get())) ;
173 EXPECT_CALL(*reader, drainAsBlobDataHandle()).WillOnce(Return(nullptr));
174 EXPECT_CALL(checkpoint, Call(2));
175 EXPECT_CALL(*reader, destruct());
176 EXPECT_CALL(checkpoint, Call(3));
177
178 // |reader| is adopted by |obtainReader|.
179 ASSERT_TRUE(reader.leakPtr());
180
181 checkpoint.Call(1);
182 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
183 checkpoint.Call(2);
184 fetchDataLoader->cancel();
185 checkpoint.Call(3);
186 }
187
188 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType)
189 {
190 OwnPtr<BlobData> blobData = BlobData::create();
191 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l);
192 blobData->setContentType("text/test");
193 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(blobData .release(), kQuickBrownFoxLengthWithTerminatingNull);
194
195 Checkpoint checkpoint;
196
197 OwnPtr<MockHandle> handle = MockHandle::create();
198 OwnPtr<MockReader> reader = MockReader::create();
199 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test");
200 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
201 RefPtr<BlobDataHandle> blobDataHandle;
202
203 InSequence s;
204 EXPECT_CALL(checkpoint, Call(1));
205 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get())) ;
206 EXPECT_CALL(*reader, drainAsBlobDataHandle()).WillOnce(Return(inputBlobDataH andle));
207 EXPECT_CALL(*reader, destruct());
208 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle));
209 EXPECT_CALL(checkpoint, Call(2));
210 EXPECT_CALL(checkpoint, Call(3));
211
212 // |reader| is adopted by |obtainReader|.
213 ASSERT_TRUE(reader.leakPtr());
214
215 checkpoint.Call(1);
216 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
217 checkpoint.Call(2);
218 fetchDataLoader->cancel();
219 checkpoint.Call(3);
220
221 ASSERT_TRUE(blobDataHandle);
222 EXPECT_EQ(inputBlobDataHandle, blobDataHandle);
223 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size());
224 EXPECT_EQ(String("text/test"), blobDataHandle->type());
225 }
226
227 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContent Type)
228 {
229 OwnPtr<BlobData> blobData = BlobData::create();
230 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul l);
231 blobData->setContentType("text/different");
232 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(blobData .release(), kQuickBrownFoxLengthWithTerminatingNull);
233
234 Checkpoint checkpoint;
235
236 OwnPtr<MockHandle> handle = MockHandle::create();
237 OwnPtr<MockReader> reader = MockReader::create();
238 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle ("text/test");
239 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
240 RefPtr<BlobDataHandle> blobDataHandle;
241
242 InSequence s;
243 EXPECT_CALL(checkpoint, Call(1));
244 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get())) ;
245 EXPECT_CALL(*reader, drainAsBlobDataHandle()).WillOnce(Return(inputBlobDataH andle));
246 EXPECT_CALL(*reader, destruct());
247 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil lOnce(SaveArg<0>(&blobDataHandle));
248 EXPECT_CALL(checkpoint, Call(2));
249 EXPECT_CALL(checkpoint, Call(3));
250
251 // |reader| is adopted by |obtainReader|.
252 ASSERT_TRUE(reader.leakPtr());
253
254 checkpoint.Call(1);
255 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
256 checkpoint.Call(2);
257 fetchDataLoader->cancel();
258 checkpoint.Call(3);
259
260 ASSERT_TRUE(blobDataHandle);
261 EXPECT_NE(inputBlobDataHandle, blobDataHandle);
262 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size());
263 EXPECT_EQ(String("text/test"), blobDataHandle->type());
264 }
265
266 TEST(FetchDataLoaderTest, LoadAsArrayBuffer)
267 {
268 WebDataConsumerHandle::Client *client = nullptr;
269 Checkpoint checkpoint;
270
271 OwnPtr<MockHandle> handle = MockHandle::create();
272 OwnPtr<MockReader> reader = MockReader::create();
273 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r();
274 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
275 RefPtr<DOMArrayBuffer> arrayBuffer;
276
277 InSequence s;
278 EXPECT_CALL(checkpoint, Call(1));
279 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
280 EXPECT_CALL(checkpoint, Call(2));
281 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk)));
282 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk));
283 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone));
284 EXPECT_CALL(*reader, destruct());
285 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedArrayBufferMock(_)).Wi llOnce(SaveArg<0>(&arrayBuffer));
286 EXPECT_CALL(checkpoint, Call(3));
287 EXPECT_CALL(checkpoint, Call(4));
288
289 // |reader| is adopted by |obtainReader|.
290 ASSERT_TRUE(reader.leakPtr());
291
292 checkpoint.Call(1);
293 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
294 checkpoint.Call(2);
295 ASSERT_TRUE(client);
296 client->didGetReadable();
297 checkpoint.Call(3);
298 fetchDataLoader->cancel();
299 checkpoint.Call(4);
300
301 ASSERT_TRUE(arrayBuffer);
302 ASSERT_EQ(kQuickBrownFoxLengthWithTerminatingNull, arrayBuffer->byteLength() );
303 EXPECT_STREQ(kQuickBrownFox, static_cast<const char*>(arrayBuffer->data()));
304 }
305
306 TEST(FetchDataLoaderTest, LoadAsArrayBufferFailed)
307 {
308 WebDataConsumerHandle::Client *client = nullptr;
309 Checkpoint checkpoint;
310
311 OwnPtr<MockHandle> handle = MockHandle::create();
312 OwnPtr<MockReader> reader = MockReader::create();
313 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r();
314 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
315
316 InSequence s;
317 EXPECT_CALL(checkpoint, Call(1));
318 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
319 EXPECT_CALL(checkpoint, Call(2));
320 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt hWithTerminatingNull), Return(kOk)));
321 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk));
322 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r));
323 EXPECT_CALL(*reader, destruct());
324 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed());
325 EXPECT_CALL(checkpoint, Call(3));
326 EXPECT_CALL(checkpoint, Call(4));
327
328 // |reader| is adopted by |obtainReader|.
329 ASSERT_TRUE(reader.leakPtr());
330
331 checkpoint.Call(1);
332 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
333 checkpoint.Call(2);
334 ASSERT_TRUE(client);
335 client->didGetReadable();
336 checkpoint.Call(3);
337 fetchDataLoader->cancel();
338 checkpoint.Call(4);
339 }
340
341 TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel)
342 {
343 Checkpoint checkpoint;
344
345 OwnPtr<MockHandle> handle = MockHandle::create();
346 OwnPtr<MockReader> reader = MockReader::create();
347 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe r();
348 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
349
350 InSequence s;
351 EXPECT_CALL(checkpoint, Call(1));
352 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get())) ;
353 EXPECT_CALL(checkpoint, Call(2));
354 EXPECT_CALL(*reader, destruct());
355 EXPECT_CALL(checkpoint, Call(3));
356
357 // |reader| is adopted by |obtainReader|.
358 ASSERT_TRUE(reader.leakPtr());
359
360 checkpoint.Call(1);
361 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
362 checkpoint.Call(2);
363 fetchDataLoader->cancel();
364 checkpoint.Call(3);
365 }
366
367 TEST(FetchDataLoaderTest, LoadAsString)
368 {
369 WebDataConsumerHandle::Client *client = nullptr;
370 Checkpoint checkpoint;
371
372 OwnPtr<MockHandle> handle = MockHandle::create();
373 OwnPtr<MockReader> reader = MockReader::create();
374 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
375 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
376
377 InSequence s;
378 EXPECT_CALL(checkpoint, Call(1));
379 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
380 EXPECT_CALL(checkpoint, Call(2));
381 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt h), Return(kOk)));
382 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk));
383 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone));
384 EXPECT_CALL(*reader, destruct());
385 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kQuickBr ownFox)));
386 EXPECT_CALL(checkpoint, Call(3));
387 EXPECT_CALL(checkpoint, Call(4));
388
389 // |reader| is adopted by |obtainReader|.
390 ASSERT_TRUE(reader.leakPtr());
391
392 checkpoint.Call(1);
393 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
394 checkpoint.Call(2);
395 ASSERT_TRUE(client);
396 client->didGetReadable();
397 checkpoint.Call(3);
398 fetchDataLoader->cancel();
399 checkpoint.Call(4);
400 }
401
402 TEST(FetchDataLoaderTest, LoadAsStringWithNullBytes)
403 {
404 WebDataConsumerHandle::Client *client = nullptr;
405 Checkpoint checkpoint;
406
407 OwnPtr<MockHandle> handle = MockHandle::create();
408 OwnPtr<MockReader> reader = MockReader::create();
409 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
410 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
411
412 InSequence s;
413 EXPECT_CALL(checkpoint, Call(1));
414 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
415 EXPECT_CALL(checkpoint, Call(2));
416 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>("Quick\0brown\0fox")), SetArgPointee<2>(16), Return(kO k)));
417 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO nce(Return(kOk));
418 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone));
419 EXPECT_CALL(*reader, destruct());
420 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String("Quick\0 brown\0fox", 16)));
421 EXPECT_CALL(checkpoint, Call(3));
422 EXPECT_CALL(checkpoint, Call(4));
423
424 // |reader| is adopted by |obtainReader|.
425 ASSERT_TRUE(reader.leakPtr());
426
427 checkpoint.Call(1);
428 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
429 checkpoint.Call(2);
430 ASSERT_TRUE(client);
431 client->didGetReadable();
432 checkpoint.Call(3);
433 fetchDataLoader->cancel();
434 checkpoint.Call(4);
435 }
436
437 TEST(FetchDataLoaderTest, LoadAsStringError)
438 {
439 WebDataConsumerHandle::Client *client = nullptr;
440 Checkpoint checkpoint;
441
442 OwnPtr<MockHandle> handle = MockHandle::create();
443 OwnPtr<MockReader> reader = MockReader::create();
444 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
445 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
446
447 InSequence s;
448 EXPECT_CALL(checkpoint, Call(1));
449 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli ent), Return(reader.get())));
450 EXPECT_CALL(checkpoint, Call(2));
451 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0> (static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt h), Return(kOk)));
452 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk));
453 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro r));
454 EXPECT_CALL(*reader, destruct());
455 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed());
456 EXPECT_CALL(checkpoint, Call(3));
457 EXPECT_CALL(checkpoint, Call(4));
458
459 // |reader| is adopted by |obtainReader|.
460 ASSERT_TRUE(reader.leakPtr());
461
462 checkpoint.Call(1);
463 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
464 checkpoint.Call(2);
465 ASSERT_TRUE(client);
466 client->didGetReadable();
467 checkpoint.Call(3);
468 fetchDataLoader->cancel();
469 checkpoint.Call(4);
470 }
471
472 TEST(FetchDataLoaderTest, LoadAsStringCancel)
473 {
474 Checkpoint checkpoint;
475
476 OwnPtr<MockHandle> handle = MockHandle::create();
477 OwnPtr<MockReader> reader = MockReader::create();
478 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString();
479 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient ::create();
480
481 InSequence s;
482 EXPECT_CALL(checkpoint, Call(1));
483 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get())) ;
484 EXPECT_CALL(checkpoint, Call(2));
485 EXPECT_CALL(*reader, destruct());
486 EXPECT_CALL(checkpoint, Call(3));
487
488 // |reader| is adopted by |obtainReader|.
489 ASSERT_TRUE(reader.leakPtr());
490
491 checkpoint.Call(1);
492 fetchDataLoader->start(handle.get(), fetchDataLoaderClient);
493 checkpoint.Call(2);
494 fetchDataLoader->cancel();
495 checkpoint.Call(3);
496 }
497
498 } // namespace
499
500 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchDataLoader.cpp ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698