OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/spdy/spdy_http_stream.h" | 5 #include "net/spdy/spdy_http_stream.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 public: | 69 public: |
70 enum class FailureMode { SYNC, ASYNC }; | 70 enum class FailureMode { SYNC, ASYNC }; |
71 | 71 |
72 explicit ReadErrorUploadDataStream(FailureMode mode) | 72 explicit ReadErrorUploadDataStream(FailureMode mode) |
73 : UploadDataStream(true, 0), async_(mode), weak_factory_(this) {} | 73 : UploadDataStream(true, 0), async_(mode), weak_factory_(this) {} |
74 | 74 |
75 private: | 75 private: |
76 void CompleteRead() { UploadDataStream::OnReadCompleted(ERR_FAILED); } | 76 void CompleteRead() { UploadDataStream::OnReadCompleted(ERR_FAILED); } |
77 | 77 |
78 // UploadDataStream implementation: | 78 // UploadDataStream implementation: |
79 int InitInternal() override { return OK; } | 79 int InitInternal(const BoundNetLog& net_log) override { return OK; } |
80 | 80 |
81 int ReadInternal(IOBuffer* buf, int buf_len) override { | 81 int ReadInternal(IOBuffer* buf, int buf_len) override { |
82 if (async_ == FailureMode::ASYNC) { | 82 if (async_ == FailureMode::ASYNC) { |
83 base::ThreadTaskRunnerHandle::Get()->PostTask( | 83 base::ThreadTaskRunnerHandle::Get()->PostTask( |
84 FROM_HERE, base::Bind(&ReadErrorUploadDataStream::CompleteRead, | 84 FROM_HERE, base::Bind(&ReadErrorUploadDataStream::CompleteRead, |
85 weak_factory_.GetWeakPtr())); | 85 weak_factory_.GetWeakPtr())); |
86 return ERR_IO_PENDING; | 86 return ERR_IO_PENDING; |
87 } | 87 } |
88 return ERR_FAILED; | 88 return ERR_FAILED; |
89 } | 89 } |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 const int kFirstChunkSize = kUploadDataSize/2; | 357 const int kFirstChunkSize = kUploadDataSize/2; |
358 upload_stream.AppendData(kUploadData, kFirstChunkSize, false); | 358 upload_stream.AppendData(kUploadData, kFirstChunkSize, false); |
359 upload_stream.AppendData(kUploadData + kFirstChunkSize, | 359 upload_stream.AppendData(kUploadData + kFirstChunkSize, |
360 kUploadDataSize - kFirstChunkSize, true); | 360 kUploadDataSize - kFirstChunkSize, true); |
361 | 361 |
362 HttpRequestInfo request; | 362 HttpRequestInfo request; |
363 request.method = "POST"; | 363 request.method = "POST"; |
364 request.url = GURL("http://www.example.org/"); | 364 request.url = GURL("http://www.example.org/"); |
365 request.upload_data_stream = &upload_stream; | 365 request.upload_data_stream = &upload_stream; |
366 | 366 |
367 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 367 ASSERT_THAT( |
| 368 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 369 IsOk()); |
368 | 370 |
369 TestCompletionCallback callback; | 371 TestCompletionCallback callback; |
370 HttpResponseInfo response; | 372 HttpResponseInfo response; |
371 HttpRequestHeaders headers; | 373 HttpRequestHeaders headers; |
372 BoundNetLog net_log; | 374 BoundNetLog net_log; |
373 SpdyHttpStream http_stream(session_, true); | 375 SpdyHttpStream http_stream(session_, true); |
374 ASSERT_EQ( | 376 ASSERT_EQ( |
375 OK, | 377 OK, |
376 http_stream.InitializeStream(&request, DEFAULT_PRIORITY, | 378 http_stream.InitializeStream(&request, DEFAULT_PRIORITY, |
377 net_log, CompletionCallback())); | 379 net_log, CompletionCallback())); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 413 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
412 | 414 |
413 ChunkedUploadDataStream upload_stream(0); | 415 ChunkedUploadDataStream upload_stream(0); |
414 upload_stream.AppendData(nullptr, 0, true); | 416 upload_stream.AppendData(nullptr, 0, true); |
415 | 417 |
416 HttpRequestInfo request; | 418 HttpRequestInfo request; |
417 request.method = "POST"; | 419 request.method = "POST"; |
418 request.url = GURL("http://www.example.org/"); | 420 request.url = GURL("http://www.example.org/"); |
419 request.upload_data_stream = &upload_stream; | 421 request.upload_data_stream = &upload_stream; |
420 | 422 |
421 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 423 ASSERT_THAT( |
| 424 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 425 IsOk()); |
422 | 426 |
423 TestCompletionCallback callback; | 427 TestCompletionCallback callback; |
424 HttpResponseInfo response; | 428 HttpResponseInfo response; |
425 HttpRequestHeaders headers; | 429 HttpRequestHeaders headers; |
426 BoundNetLog net_log; | 430 BoundNetLog net_log; |
427 SpdyHttpStream http_stream(session_, true); | 431 SpdyHttpStream http_stream(session_, true); |
428 ASSERT_EQ(OK, http_stream.InitializeStream(&request, DEFAULT_PRIORITY, | 432 ASSERT_EQ(OK, http_stream.InitializeStream(&request, DEFAULT_PRIORITY, |
429 net_log, CompletionCallback())); | 433 net_log, CompletionCallback())); |
430 EXPECT_EQ(ERR_IO_PENDING, | 434 EXPECT_EQ(ERR_IO_PENDING, |
431 http_stream.SendRequest(headers, &response, callback.callback())); | 435 http_stream.SendRequest(headers, &response, callback.callback())); |
(...skipping 30 matching lines...) Expand all Loading... |
462 | 466 |
463 ChunkedUploadDataStream upload_stream(0); | 467 ChunkedUploadDataStream upload_stream(0); |
464 // Append first chunk. | 468 // Append first chunk. |
465 upload_stream.AppendData(kUploadData, kUploadDataSize, false); | 469 upload_stream.AppendData(kUploadData, kUploadDataSize, false); |
466 | 470 |
467 HttpRequestInfo request; | 471 HttpRequestInfo request; |
468 request.method = "POST"; | 472 request.method = "POST"; |
469 request.url = GURL("http://www.example.org/"); | 473 request.url = GURL("http://www.example.org/"); |
470 request.upload_data_stream = &upload_stream; | 474 request.upload_data_stream = &upload_stream; |
471 | 475 |
472 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 476 ASSERT_THAT( |
| 477 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 478 IsOk()); |
473 | 479 |
474 TestCompletionCallback callback; | 480 TestCompletionCallback callback; |
475 HttpResponseInfo response; | 481 HttpResponseInfo response; |
476 HttpRequestHeaders headers; | 482 HttpRequestHeaders headers; |
477 BoundNetLog net_log; | 483 BoundNetLog net_log; |
478 SpdyHttpStream http_stream(session_, true); | 484 SpdyHttpStream http_stream(session_, true); |
479 ASSERT_EQ(OK, http_stream.InitializeStream(&request, DEFAULT_PRIORITY, | 485 ASSERT_EQ(OK, http_stream.InitializeStream(&request, DEFAULT_PRIORITY, |
480 net_log, CompletionCallback())); | 486 net_log, CompletionCallback())); |
481 | 487 |
482 EXPECT_EQ(ERR_IO_PENDING, | 488 EXPECT_EQ(ERR_IO_PENDING, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 | 535 |
530 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 536 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
531 | 537 |
532 ChunkedUploadDataStream upload_stream(0); | 538 ChunkedUploadDataStream upload_stream(0); |
533 | 539 |
534 HttpRequestInfo request; | 540 HttpRequestInfo request; |
535 request.method = "POST"; | 541 request.method = "POST"; |
536 request.url = GURL("http://www.example.org/"); | 542 request.url = GURL("http://www.example.org/"); |
537 request.upload_data_stream = &upload_stream; | 543 request.upload_data_stream = &upload_stream; |
538 | 544 |
539 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 545 ASSERT_THAT( |
| 546 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 547 IsOk()); |
540 upload_stream.AppendData(kUploadData, kUploadDataSize, false); | 548 upload_stream.AppendData(kUploadData, kUploadDataSize, false); |
541 | 549 |
542 BoundNetLog net_log; | 550 BoundNetLog net_log; |
543 std::unique_ptr<SpdyHttpStream> http_stream( | 551 std::unique_ptr<SpdyHttpStream> http_stream( |
544 new SpdyHttpStream(session_, true)); | 552 new SpdyHttpStream(session_, true)); |
545 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, | 553 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, |
546 net_log, CompletionCallback())); | 554 net_log, CompletionCallback())); |
547 | 555 |
548 TestCompletionCallback callback; | 556 TestCompletionCallback callback; |
549 HttpRequestHeaders headers; | 557 HttpRequestHeaders headers; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
621 | 629 |
622 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 630 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
623 | 631 |
624 ChunkedUploadDataStream upload_stream(0); | 632 ChunkedUploadDataStream upload_stream(0); |
625 | 633 |
626 HttpRequestInfo request; | 634 HttpRequestInfo request; |
627 request.method = "POST"; | 635 request.method = "POST"; |
628 request.url = GURL("http://www.example.org/"); | 636 request.url = GURL("http://www.example.org/"); |
629 request.upload_data_stream = &upload_stream; | 637 request.upload_data_stream = &upload_stream; |
630 | 638 |
631 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 639 ASSERT_THAT( |
| 640 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 641 IsOk()); |
632 upload_stream.AppendData(kUploadData, kUploadDataSize, false); | 642 upload_stream.AppendData(kUploadData, kUploadDataSize, false); |
633 | 643 |
634 BoundNetLog net_log; | 644 BoundNetLog net_log; |
635 std::unique_ptr<SpdyHttpStream> http_stream( | 645 std::unique_ptr<SpdyHttpStream> http_stream( |
636 new SpdyHttpStream(session_, true)); | 646 new SpdyHttpStream(session_, true)); |
637 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, | 647 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, |
638 net_log, CompletionCallback())); | 648 net_log, CompletionCallback())); |
639 | 649 |
640 TestCompletionCallback callback; | 650 TestCompletionCallback callback; |
641 HttpRequestHeaders headers; | 651 HttpRequestHeaders headers; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 | 712 |
703 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 713 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
704 | 714 |
705 ChunkedUploadDataStream upload_stream(0); | 715 ChunkedUploadDataStream upload_stream(0); |
706 | 716 |
707 HttpRequestInfo request; | 717 HttpRequestInfo request; |
708 request.method = "POST"; | 718 request.method = "POST"; |
709 request.url = GURL("http://www.example.org/"); | 719 request.url = GURL("http://www.example.org/"); |
710 request.upload_data_stream = &upload_stream; | 720 request.upload_data_stream = &upload_stream; |
711 | 721 |
712 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 722 ASSERT_THAT( |
| 723 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 724 IsOk()); |
713 upload_stream.AppendData("", 0, true); | 725 upload_stream.AppendData("", 0, true); |
714 | 726 |
715 BoundNetLog net_log; | 727 BoundNetLog net_log; |
716 std::unique_ptr<SpdyHttpStream> http_stream( | 728 std::unique_ptr<SpdyHttpStream> http_stream( |
717 new SpdyHttpStream(session_, true)); | 729 new SpdyHttpStream(session_, true)); |
718 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, | 730 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, |
719 net_log, CompletionCallback())); | 731 net_log, CompletionCallback())); |
720 | 732 |
721 TestCompletionCallback callback; | 733 TestCompletionCallback callback; |
722 HttpRequestHeaders headers; | 734 HttpRequestHeaders headers; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 | 825 |
814 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 826 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
815 | 827 |
816 ChunkedUploadDataStream upload_stream(0); | 828 ChunkedUploadDataStream upload_stream(0); |
817 | 829 |
818 HttpRequestInfo request; | 830 HttpRequestInfo request; |
819 request.method = "POST"; | 831 request.method = "POST"; |
820 request.url = GURL("http://www.example.org/"); | 832 request.url = GURL("http://www.example.org/"); |
821 request.upload_data_stream = &upload_stream; | 833 request.upload_data_stream = &upload_stream; |
822 | 834 |
823 ASSERT_THAT(upload_stream.Init(TestCompletionCallback().callback()), IsOk()); | 835 ASSERT_THAT( |
| 836 upload_stream.Init(TestCompletionCallback().callback(), BoundNetLog()), |
| 837 IsOk()); |
824 | 838 |
825 BoundNetLog net_log; | 839 BoundNetLog net_log; |
826 std::unique_ptr<SpdyHttpStream> http_stream( | 840 std::unique_ptr<SpdyHttpStream> http_stream( |
827 new SpdyHttpStream(session_, true)); | 841 new SpdyHttpStream(session_, true)); |
828 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, | 842 ASSERT_EQ(OK, http_stream->InitializeStream(&request, DEFAULT_PRIORITY, |
829 net_log, CompletionCallback())); | 843 net_log, CompletionCallback())); |
830 | 844 |
831 HttpRequestHeaders headers; | 845 HttpRequestHeaders headers; |
832 HttpResponseInfo response; | 846 HttpResponseInfo response; |
833 // This will attempt to Write() the initial request and headers, which will | 847 // This will attempt to Write() the initial request and headers, which will |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
907 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 921 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
908 | 922 |
909 MockRead reads[] = { | 923 MockRead reads[] = { |
910 CreateMockRead(resp, 2), MockRead(SYNCHRONOUS, 0, 3), | 924 CreateMockRead(resp, 2), MockRead(SYNCHRONOUS, 0, 3), |
911 }; | 925 }; |
912 | 926 |
913 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 927 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
914 | 928 |
915 ReadErrorUploadDataStream upload_data_stream( | 929 ReadErrorUploadDataStream upload_data_stream( |
916 ReadErrorUploadDataStream::FailureMode::SYNC); | 930 ReadErrorUploadDataStream::FailureMode::SYNC); |
917 ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), | 931 ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), |
| 932 BoundNetLog()), |
918 IsOk()); | 933 IsOk()); |
919 | 934 |
920 HttpRequestInfo request; | 935 HttpRequestInfo request; |
921 request.method = "POST"; | 936 request.method = "POST"; |
922 request.url = GURL("http://www.example.org/"); | 937 request.url = GURL("http://www.example.org/"); |
923 request.upload_data_stream = &upload_data_stream; | 938 request.upload_data_stream = &upload_data_stream; |
924 | 939 |
925 TestCompletionCallback callback; | 940 TestCompletionCallback callback; |
926 HttpResponseInfo response; | 941 HttpResponseInfo response; |
927 HttpRequestHeaders headers; | 942 HttpRequestHeaders headers; |
(...skipping 27 matching lines...) Expand all Loading... |
955 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 970 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
956 | 971 |
957 MockRead reads[] = { | 972 MockRead reads[] = { |
958 MockRead(ASYNC, 0, 2), | 973 MockRead(ASYNC, 0, 2), |
959 }; | 974 }; |
960 | 975 |
961 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 976 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
962 | 977 |
963 ReadErrorUploadDataStream upload_data_stream( | 978 ReadErrorUploadDataStream upload_data_stream( |
964 ReadErrorUploadDataStream::FailureMode::ASYNC); | 979 ReadErrorUploadDataStream::FailureMode::ASYNC); |
965 ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback()), | 980 ASSERT_THAT(upload_data_stream.Init(TestCompletionCallback().callback(), |
| 981 BoundNetLog()), |
966 IsOk()); | 982 IsOk()); |
967 | 983 |
968 HttpRequestInfo request; | 984 HttpRequestInfo request; |
969 request.method = "POST"; | 985 request.method = "POST"; |
970 request.url = GURL("http://www.example.org/"); | 986 request.url = GURL("http://www.example.org/"); |
971 request.upload_data_stream = &upload_data_stream; | 987 request.upload_data_stream = &upload_data_stream; |
972 | 988 |
973 TestCompletionCallback callback; | 989 TestCompletionCallback callback; |
974 HttpResponseInfo response; | 990 HttpResponseInfo response; |
975 HttpRequestHeaders headers; | 991 HttpRequestHeaders headers; |
(...skipping 23 matching lines...) Expand all Loading... |
999 MockRead reads[] = {MockRead(ASYNC, 0, 3)}; | 1015 MockRead reads[] = {MockRead(ASYNC, 0, 3)}; |
1000 InitSession(reads, arraysize(reads), writes, arraysize(writes)); | 1016 InitSession(reads, arraysize(reads), writes, arraysize(writes)); |
1001 | 1017 |
1002 HttpRequestInfo request; | 1018 HttpRequestInfo request; |
1003 request.method = "POST"; | 1019 request.method = "POST"; |
1004 request.url = GURL("http://www.example.org/"); | 1020 request.url = GURL("http://www.example.org/"); |
1005 ChunkedUploadDataStream upload_stream(0); | 1021 ChunkedUploadDataStream upload_stream(0); |
1006 request.upload_data_stream = &upload_stream; | 1022 request.upload_data_stream = &upload_stream; |
1007 | 1023 |
1008 TestCompletionCallback upload_callback; | 1024 TestCompletionCallback upload_callback; |
1009 ASSERT_THAT(upload_stream.Init(upload_callback.callback()), IsOk()); | 1025 ASSERT_THAT(upload_stream.Init(upload_callback.callback(), BoundNetLog()), |
| 1026 IsOk()); |
1010 upload_stream.AppendData("", 0, true); | 1027 upload_stream.AppendData("", 0, true); |
1011 | 1028 |
1012 BoundNetLog net_log; | 1029 BoundNetLog net_log; |
1013 SpdyHttpStream http_stream(session_, true); | 1030 SpdyHttpStream http_stream(session_, true); |
1014 ASSERT_THAT(http_stream.InitializeStream(&request, DEFAULT_PRIORITY, net_log, | 1031 ASSERT_THAT(http_stream.InitializeStream(&request, DEFAULT_PRIORITY, net_log, |
1015 CompletionCallback()), | 1032 CompletionCallback()), |
1016 IsOk()); | 1033 IsOk()); |
1017 | 1034 |
1018 CancelStreamCallback callback(&http_stream); | 1035 CancelStreamCallback callback(&http_stream); |
1019 HttpRequestHeaders headers; | 1036 HttpRequestHeaders headers; |
1020 HttpResponseInfo response; | 1037 HttpResponseInfo response; |
1021 // This will attempt to Write() the initial request and headers, which will | 1038 // This will attempt to Write() the initial request and headers, which will |
1022 // complete asynchronously. | 1039 // complete asynchronously. |
1023 EXPECT_EQ(ERR_IO_PENDING, | 1040 EXPECT_EQ(ERR_IO_PENDING, |
1024 http_stream.SendRequest(headers, &response, callback.callback())); | 1041 http_stream.SendRequest(headers, &response, callback.callback())); |
1025 EXPECT_TRUE(HasSpdySession(http_session_->spdy_session_pool(), key_)); | 1042 EXPECT_TRUE(HasSpdySession(http_session_->spdy_session_pool(), key_)); |
1026 | 1043 |
1027 // The callback cancels |http_stream|. | 1044 // The callback cancels |http_stream|. |
1028 EXPECT_THAT(callback.WaitForResult(), IsOk()); | 1045 EXPECT_THAT(callback.WaitForResult(), IsOk()); |
1029 | 1046 |
1030 EXPECT_FALSE(HasSpdySession(http_session_->spdy_session_pool(), key_)); | 1047 EXPECT_FALSE(HasSpdySession(http_session_->spdy_session_pool(), key_)); |
1031 } | 1048 } |
1032 | 1049 |
1033 // TODO(willchan): Write a longer test for SpdyStream that exercises all | 1050 // TODO(willchan): Write a longer test for SpdyStream that exercises all |
1034 // methods. | 1051 // methods. |
1035 | 1052 |
1036 } // namespace net | 1053 } // namespace net |
OLD | NEW |