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 "core/html/FormData.h" |
7 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" | 8 #include "modules/fetch/BytesConsumerForDataConsumerHandle.h" |
8 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 9 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
9 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
11 #include <memory> | 12 #include <memory> |
12 | 13 |
13 namespace blink { | 14 namespace blink { |
14 | 15 |
15 namespace { | 16 namespace { |
16 | 17 |
(...skipping 13 matching lines...) Expand all Loading... |
30 constexpr WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; | 31 constexpr WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; |
31 constexpr WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle
::UnexpectedError; | 32 constexpr WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle
::UnexpectedError; |
32 constexpr WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::Sho
uldWait; | 33 constexpr WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::Sho
uldWait; |
33 constexpr WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done; | 34 constexpr WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done; |
34 constexpr WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; | 35 constexpr WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; |
35 constexpr FetchDataConsumerHandle::Reader::BlobSizePolicy kDisallowBlobWithInval
idSize = FetchDataConsumerHandle::Reader::DisallowBlobWithInvalidSize; | 36 constexpr FetchDataConsumerHandle::Reader::BlobSizePolicy kDisallowBlobWithInval
idSize = FetchDataConsumerHandle::Reader::DisallowBlobWithInvalidSize; |
36 | 37 |
37 constexpr char kQuickBrownFox[] = "Quick brown fox"; | 38 constexpr char kQuickBrownFox[] = "Quick brown fox"; |
38 constexpr size_t kQuickBrownFoxLength = 15; | 39 constexpr size_t kQuickBrownFoxLength = 15; |
39 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16; | 40 constexpr size_t kQuickBrownFoxLengthWithTerminatingNull = 16; |
| 41 constexpr char kQuickBrownFoxFormData[] = |
| 42 "--boundary\r\n" |
| 43 "Content-Disposition: form-data; name=\"string\"\r\n" |
| 44 "\r\n" |
| 45 "Quick brown fox\r\n" |
| 46 "--boundary--\r\n"; |
| 47 constexpr size_t kQuickBrownFoxFormDataLength = WTF_ARRAY_LENGTH(kQuickBrownFoxF
ormData) - 1u; |
40 | 48 |
41 TEST(FetchDataLoaderTest, LoadAsBlob) | 49 TEST(FetchDataLoaderTest, LoadAsBlob) |
42 { | 50 { |
43 WebDataConsumerHandle::Client *client = nullptr; | 51 WebDataConsumerHandle::Client *client = nullptr; |
44 Checkpoint checkpoint; | 52 Checkpoint checkpoint; |
45 | 53 |
46 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 54 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
47 | 55 |
48 // |reader| will be adopted by |obtainFetchDataReader|. | 56 // |reader| will be adopted by |obtainFetchDataReader|. |
49 MockReader* reader = MockReader::create().release(); | 57 MockReader* reader = MockReader::create().release(); |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 EXPECT_CALL(*reader, destruct()); | 331 EXPECT_CALL(*reader, destruct()); |
324 EXPECT_CALL(checkpoint, Call(3)); | 332 EXPECT_CALL(checkpoint, Call(3)); |
325 | 333 |
326 checkpoint.Call(1); | 334 checkpoint.Call(1); |
327 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); | 335 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
328 checkpoint.Call(2); | 336 checkpoint.Call(2); |
329 fetchDataLoader->cancel(); | 337 fetchDataLoader->cancel(); |
330 checkpoint.Call(3); | 338 checkpoint.Call(3); |
331 } | 339 } |
332 | 340 |
| 341 TEST(FetchDataLoaderTest, LoadAsFormData) |
| 342 { |
| 343 WebDataConsumerHandle::Client *client = nullptr; |
| 344 Checkpoint checkpoint; |
| 345 |
| 346 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
| 347 |
| 348 // |reader| will be adopted by |obtainFetchDataReader|. |
| 349 MockReader* reader = MockReader::create().release(); |
| 350 |
| 351 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsFormData("
boundary"); |
| 352 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
| 353 FormData* formData = nullptr; |
| 354 |
| 355 InSequence s; |
| 356 EXPECT_CALL(checkpoint, Call(1)); |
| 357 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
| 358 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(nullptr), SetArgPointee<2>(0), Return(kShouldWait))); |
| 359 EXPECT_CALL(checkpoint, Call(2)); |
| 360 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe
e<3>(0), Return(kShouldWait))); |
| 361 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFoxFormData)), SetArgPointee<2>(kQuickBrown
FoxFormDataLength), Return(kOk))); |
| 362 EXPECT_CALL(*reader, endRead(kQuickBrownFoxFormDataLength)).WillOnce(Return(
kOk)); |
| 363 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
| 364 EXPECT_CALL(*reader, destruct()); |
| 365 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedFormDataMock(_)).WillO
nce(SaveArg<0>(&formData)); |
| 366 EXPECT_CALL(checkpoint, Call(3)); |
| 367 EXPECT_CALL(checkpoint, Call(4)); |
| 368 |
| 369 checkpoint.Call(1); |
| 370 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
| 371 checkpoint.Call(2); |
| 372 ASSERT_TRUE(client); |
| 373 client->didGetReadable(); |
| 374 checkpoint.Call(3); |
| 375 fetchDataLoader->cancel(); |
| 376 checkpoint.Call(4); |
| 377 |
| 378 ASSERT_TRUE(formData); |
| 379 ASSERT_EQ(1u, formData->entries().size()); |
| 380 ASSERT_TRUE(formData->entries()[0]->isString()); |
| 381 EXPECT_EQ(kQuickBrownFox, formData->entries()[0]->value()); |
| 382 } |
| 383 |
| 384 TEST(FetchDataLoaderTest, LoadAsFormDataPartialInput) |
| 385 { |
| 386 WebDataConsumerHandle::Client *client = nullptr; |
| 387 Checkpoint checkpoint; |
| 388 |
| 389 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
| 390 |
| 391 // |reader| will be adopted by |obtainFetchDataReader|. |
| 392 MockReader* reader = MockReader::create().release(); |
| 393 |
| 394 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsFormData("
boundary"); |
| 395 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
| 396 |
| 397 InSequence s; |
| 398 EXPECT_CALL(checkpoint, Call(1)); |
| 399 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
| 400 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(nullptr), SetArgPointee<2>(0), Return(kShouldWait))); |
| 401 EXPECT_CALL(checkpoint, Call(2)); |
| 402 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe
e<3>(0), Return(kShouldWait))); |
| 403 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFoxFormData)), SetArgPointee<2>(kQuickBrown
FoxFormDataLength - 3u), Return(kOk))); |
| 404 EXPECT_CALL(*reader, endRead(kQuickBrownFoxFormDataLength - 3u)).WillOnce(Re
turn(kOk)); |
| 405 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
| 406 EXPECT_CALL(*reader, destruct()); |
| 407 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
| 408 EXPECT_CALL(checkpoint, Call(3)); |
| 409 EXPECT_CALL(checkpoint, Call(4)); |
| 410 |
| 411 checkpoint.Call(1); |
| 412 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
| 413 checkpoint.Call(2); |
| 414 ASSERT_TRUE(client); |
| 415 client->didGetReadable(); |
| 416 checkpoint.Call(3); |
| 417 fetchDataLoader->cancel(); |
| 418 checkpoint.Call(4); |
| 419 } |
| 420 |
| 421 TEST(FetchDataLoaderTest, LoadAsFormDataError) |
| 422 { |
| 423 WebDataConsumerHandle::Client *client = nullptr; |
| 424 Checkpoint checkpoint; |
| 425 |
| 426 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
| 427 |
| 428 // |reader| will be adopted by |obtainFetchDataReader|. |
| 429 MockReader* reader = MockReader::create().release(); |
| 430 |
| 431 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsFormData("
boundary"); |
| 432 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
| 433 |
| 434 InSequence s; |
| 435 EXPECT_CALL(checkpoint, Call(1)); |
| 436 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
| 437 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(nullptr), SetArgPointee<2>(0), Return(kShouldWait))); |
| 438 EXPECT_CALL(checkpoint, Call(2)); |
| 439 EXPECT_CALL(*reader, read(nullptr, kNone, 0, _)).WillOnce(DoAll(SetArgPointe
e<3>(0), Return(kShouldWait))); |
| 440 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFoxFormData)), SetArgPointee<2>(kQuickBrown
FoxFormDataLength), Return(kOk))); |
| 441 EXPECT_CALL(*reader, endRead(kQuickBrownFoxFormDataLength)).WillOnce(Return(
kOk)); |
| 442 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); |
| 443 EXPECT_CALL(*reader, destruct()); |
| 444 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
| 445 EXPECT_CALL(checkpoint, Call(3)); |
| 446 EXPECT_CALL(checkpoint, Call(4)); |
| 447 |
| 448 checkpoint.Call(1); |
| 449 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
| 450 checkpoint.Call(2); |
| 451 ASSERT_TRUE(client); |
| 452 client->didGetReadable(); |
| 453 checkpoint.Call(3); |
| 454 fetchDataLoader->cancel(); |
| 455 checkpoint.Call(4); |
| 456 } |
| 457 |
| 458 TEST(FetchDataLoaderTest, LoadAsFormDataCancel) |
| 459 { |
| 460 Checkpoint checkpoint; |
| 461 |
| 462 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
| 463 |
| 464 // |reader| will be adopted by |obtainFetchDataReader|. |
| 465 MockReader* reader = MockReader::create().release(); |
| 466 |
| 467 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsFormData("
boundary"); |
| 468 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
| 469 |
| 470 InSequence s; |
| 471 EXPECT_CALL(checkpoint, Call(1)); |
| 472 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
| 473 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(nullptr), SetArgPointee<2>(0), Return(kShouldWait))); |
| 474 EXPECT_CALL(checkpoint, Call(2)); |
| 475 EXPECT_CALL(*reader, destruct()); |
| 476 EXPECT_CALL(checkpoint, Call(3)); |
| 477 |
| 478 checkpoint.Call(1); |
| 479 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
| 480 checkpoint.Call(2); |
| 481 fetchDataLoader->cancel(); |
| 482 checkpoint.Call(3); |
| 483 } |
| 484 |
333 TEST(FetchDataLoaderTest, LoadAsString) | 485 TEST(FetchDataLoaderTest, LoadAsString) |
334 { | 486 { |
335 WebDataConsumerHandle::Client *client = nullptr; | 487 WebDataConsumerHandle::Client *client = nullptr; |
336 Checkpoint checkpoint; | 488 Checkpoint checkpoint; |
337 | 489 |
338 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 490 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
339 | 491 |
340 // |reader| will be adopted by |obtainFetchDataReader|. | 492 // |reader| will be adopted by |obtainFetchDataReader|. |
341 MockReader* reader = MockReader::create().release(); | 493 MockReader* reader = MockReader::create().release(); |
342 | 494 |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 checkpoint.Call(1); | 616 checkpoint.Call(1); |
465 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); | 617 fetchDataLoader->start(new BytesConsumerForDataConsumerHandle(nullptr, std::
move(handle)), fetchDataLoaderClient); |
466 checkpoint.Call(2); | 618 checkpoint.Call(2); |
467 fetchDataLoader->cancel(); | 619 fetchDataLoader->cancel(); |
468 checkpoint.Call(3); | 620 checkpoint.Call(3); |
469 } | 621 } |
470 | 622 |
471 } // namespace | 623 } // namespace |
472 | 624 |
473 } // namespace blink | 625 } // namespace blink |
OLD | NEW |