OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/browser/loader/intercepting_resource_handler.h" | 5 #include "content/browser/loader/intercepting_resource_handler.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 true, // is_main_frame | 226 true, // is_main_frame |
227 false, // parent_is_main_frame | 227 false, // parent_is_main_frame |
228 true, // allow_download | 228 true, // allow_download |
229 true, // is_async | 229 true, // is_async |
230 false); // is_using_lofi | 230 false); // is_using_lofi |
231 | 231 |
232 net::URLRequestStatus old_handler_status; | 232 net::URLRequestStatus old_handler_status; |
233 std::string old_handler_body; | 233 std::string old_handler_body; |
234 std::unique_ptr<TestResourceHandler> old_handler_scoped( | 234 std::unique_ptr<TestResourceHandler> old_handler_scoped( |
235 new TestResourceHandler(&old_handler_status, &old_handler_body)); | 235 new TestResourceHandler(&old_handler_status, &old_handler_body)); |
| 236 // When sending a payload to the old ResourceHandler, the |
| 237 // InterceptingResourceHandler doesn't send a final EOF read. |
| 238 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 239 // entirely? |
| 240 old_handler_scoped->set_expect_eof_read(false); |
236 TestResourceHandler* old_handler = old_handler_scoped.get(); | 241 TestResourceHandler* old_handler = old_handler_scoped.get(); |
237 scoped_refptr<net::IOBuffer> old_buffer = old_handler->buffer(); | 242 scoped_refptr<net::IOBuffer> old_buffer = old_handler->buffer(); |
238 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( | 243 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( |
239 new InterceptingResourceHandler(std::move(old_handler_scoped), | 244 new InterceptingResourceHandler(std::move(old_handler_scoped), |
240 request.get())); | 245 request.get())); |
241 | 246 |
242 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 247 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
243 | 248 |
244 // Simulate the MimeSniffingResourceHandler buffering the data. | 249 // Simulate the MimeSniffingResourceHandler buffering the data. |
245 scoped_refptr<net::IOBuffer> read_buffer; | 250 scoped_refptr<net::IOBuffer> read_buffer; |
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 true, // is_async | 598 true, // is_async |
594 false); // is_using_lofi | 599 false); // is_using_lofi |
595 | 600 |
596 std::unique_ptr<TestResourceController> resource_controller = | 601 std::unique_ptr<TestResourceController> resource_controller = |
597 base::MakeUnique<TestResourceController>(); | 602 base::MakeUnique<TestResourceController>(); |
598 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, | 603 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, |
599 0}; | 604 0}; |
600 std::string old_handler_body; | 605 std::string old_handler_body; |
601 std::unique_ptr<TestResourceHandler> old_handler( | 606 std::unique_ptr<TestResourceHandler> old_handler( |
602 new TestResourceHandler(&old_handler_status, &old_handler_body)); | 607 new TestResourceHandler(&old_handler_status, &old_handler_body)); |
| 608 // When sending a payload to the old ResourceHandler, the |
| 609 // InterceptingResourceHandler doesn't send a final EOF read. |
| 610 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 611 // entirely? |
| 612 old_handler->set_expect_eof_read(false); |
603 old_handler->SetBufferSize(10); | 613 old_handler->SetBufferSize(10); |
604 old_handler->set_defer_on_read_completed(true); | 614 old_handler->set_defer_on_read_completed(true); |
605 | 615 |
606 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); | 616 scoped_refptr<net::IOBuffer> old_buffer = old_handler.get()->buffer(); |
607 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( | 617 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( |
608 new InterceptingResourceHandler(std::move(old_handler), request.get())); | 618 new InterceptingResourceHandler(std::move(old_handler), request.get())); |
609 intercepting_handler->SetController(resource_controller.get()); | 619 intercepting_handler->SetController(resource_controller.get()); |
610 | 620 |
611 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 621 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
612 | 622 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 EXPECT_EQ("T", new_handler_body); | 690 EXPECT_EQ("T", new_handler_body); |
681 | 691 |
682 intercepting_handler->Resume(); | 692 intercepting_handler->Resume(); |
683 EXPECT_EQ(2, resource_controller->resume_calls()); | 693 EXPECT_EQ(2, resource_controller->resume_calls()); |
684 EXPECT_EQ(kPayload, old_handler_body); | 694 EXPECT_EQ(kPayload, old_handler_body); |
685 EXPECT_EQ(kData, new_handler_body); | 695 EXPECT_EQ(kData, new_handler_body); |
686 | 696 |
687 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); | 697 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); |
688 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); | 698 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::IO_PENDING); |
689 | 699 |
| 700 // Final EOF byte is read. |
| 701 ASSERT_TRUE(intercepting_handler->OnReadCompleted(0, &defer)); |
| 702 ASSERT_FALSE(defer); |
| 703 |
690 defer = false; | 704 defer = false; |
691 intercepting_handler->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0}, | 705 intercepting_handler->OnResponseCompleted({net::URLRequestStatus::SUCCESS, 0}, |
692 &defer); | 706 &defer); |
693 ASSERT_TRUE(defer); | 707 ASSERT_TRUE(defer); |
694 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); | 708 EXPECT_EQ(old_handler_status.status(), net::URLRequestStatus::SUCCESS); |
695 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::SUCCESS); | 709 EXPECT_EQ(new_handler_status.status(), net::URLRequestStatus::SUCCESS); |
696 } | 710 } |
697 | 711 |
698 // Test cancellation where there is only the old handler in an | 712 // Test cancellation where there is only the old handler in an |
699 // InterceptingResourceHandler. | 713 // InterceptingResourceHandler. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 true, // is_async | 767 true, // is_async |
754 false); // is_using_lofi | 768 false); // is_using_lofi |
755 | 769 |
756 std::unique_ptr<TestResourceController> resource_controller = | 770 std::unique_ptr<TestResourceController> resource_controller = |
757 base::MakeUnique<TestResourceController>(); | 771 base::MakeUnique<TestResourceController>(); |
758 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, | 772 net::URLRequestStatus old_handler_status = {net::URLRequestStatus::IO_PENDING, |
759 0}; | 773 0}; |
760 std::string old_handler_body; | 774 std::string old_handler_body; |
761 std::unique_ptr<TestResourceHandler> old_handler( | 775 std::unique_ptr<TestResourceHandler> old_handler( |
762 new TestResourceHandler(&old_handler_status, &old_handler_body)); | 776 new TestResourceHandler(&old_handler_status, &old_handler_body)); |
| 777 // When sending a payload to the old ResourceHandler, the |
| 778 // InterceptingResourceHandler doesn't send a final EOF read. |
| 779 // TODO(mmenke): Should it? Or can we just get rid of that 0-byte read |
| 780 // entirely? |
| 781 old_handler->set_expect_eof_read(false); |
763 | 782 |
764 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( | 783 std::unique_ptr<InterceptingResourceHandler> intercepting_handler( |
765 new InterceptingResourceHandler(std::move(old_handler), request.get())); | 784 new InterceptingResourceHandler(std::move(old_handler), request.get())); |
766 intercepting_handler->SetController(resource_controller.get()); | 785 intercepting_handler->SetController(resource_controller.get()); |
767 | 786 |
768 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 787 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
769 | 788 |
770 // Simulate the MimeSniffingResourceHandler buffering the data. | 789 // Simulate the MimeSniffingResourceHandler buffering the data. |
771 scoped_refptr<net::IOBuffer> read_buffer; | 790 scoped_refptr<net::IOBuffer> read_buffer; |
772 int buf_size = 0; | 791 int buf_size = 0; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
879 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer); | 898 {net::URLRequestStatus::CANCELED, net::ERR_FAILED}, &defer); |
880 ASSERT_TRUE(defer); | 899 ASSERT_TRUE(defer); |
881 EXPECT_EQ(0, resource_controller->resume_calls()); | 900 EXPECT_EQ(0, resource_controller->resume_calls()); |
882 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); | 901 EXPECT_EQ(net::URLRequestStatus::CANCELED, old_handler_status.status()); |
883 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); | 902 EXPECT_EQ(net::URLRequestStatus::CANCELED, new_handler_status.status()); |
884 } | 903 } |
885 | 904 |
886 } // namespace | 905 } // namespace |
887 | 906 |
888 } // namespace content | 907 } // namespace content |
OLD | NEW |