| 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 5531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5542 base::RunLoop().Run(); | 5542 base::RunLoop().Run(); |
| 5543 | 5543 |
| 5544 std::string value; | 5544 std::string value; |
| 5545 const HttpRequestHeaders& headers = req->extra_request_headers(); | 5545 const HttpRequestHeaders& headers = req->extra_request_headers(); |
| 5546 EXPECT_FALSE(headers.GetHeader(kExtraHeaderToRemove, &value)); | 5546 EXPECT_FALSE(headers.GetHeader(kExtraHeaderToRemove, &value)); |
| 5547 EXPECT_FALSE(req->is_pending()); | 5547 EXPECT_FALSE(req->is_pending()); |
| 5548 EXPECT_FALSE(req->is_redirecting()); | 5548 EXPECT_FALSE(req->is_redirecting()); |
| 5549 EXPECT_EQ("None", d.data_received()); | 5549 EXPECT_EQ("None", d.data_received()); |
| 5550 } | 5550 } |
| 5551 | 5551 |
| 5552 TEST_F(URLRequestTestHTTP, CancelTest) { | 5552 TEST_F(URLRequestTestHTTP, CancelAfterStart) { |
| 5553 TestDelegate d; | 5553 TestDelegate d; |
| 5554 { | 5554 { |
| 5555 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( | 5555 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5556 GURL("http://www.google.com/"), DEFAULT_PRIORITY, &d)); | 5556 GURL("http://www.google.com/"), DEFAULT_PRIORITY, &d)); |
| 5557 | 5557 |
| 5558 r->Start(); | 5558 r->Start(); |
| 5559 EXPECT_TRUE(r->is_pending()); | 5559 EXPECT_TRUE(r->is_pending()); |
| 5560 | 5560 |
| 5561 r->Cancel(); | 5561 r->Cancel(); |
| 5562 | 5562 |
| 5563 base::RunLoop().Run(); | 5563 base::RunLoop().Run(); |
| 5564 | 5564 |
| 5565 // We expect to receive OnResponseStarted even though the request has been | 5565 // We expect to receive OnResponseStarted even though the request has been |
| 5566 // cancelled. | 5566 // cancelled. |
| 5567 EXPECT_EQ(1, d.response_started_count()); | 5567 EXPECT_EQ(1, d.response_started_count()); |
| 5568 EXPECT_EQ(0, d.bytes_received()); | 5568 EXPECT_EQ(0, d.bytes_received()); |
| 5569 EXPECT_FALSE(d.received_data_before_response()); | 5569 EXPECT_FALSE(d.received_data_before_response()); |
| 5570 } | 5570 } |
| 5571 } | 5571 } |
| 5572 | 5572 |
| 5573 TEST_F(URLRequestTestHTTP, CancelTest2) { | 5573 TEST_F(URLRequestTestHTTP, CancelInResponseStarted) { |
| 5574 ASSERT_TRUE(http_test_server()->Start()); | 5574 ASSERT_TRUE(http_test_server()->Start()); |
| 5575 | 5575 |
| 5576 TestDelegate d; | 5576 TestDelegate d; |
| 5577 { | 5577 { |
| 5578 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( | 5578 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5579 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); | 5579 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); |
| 5580 | 5580 |
| 5581 d.set_cancel_in_response_started(true); | 5581 d.set_cancel_in_response_started(true); |
| 5582 | 5582 |
| 5583 r->Start(); | 5583 r->Start(); |
| 5584 EXPECT_TRUE(r->is_pending()); | 5584 EXPECT_TRUE(r->is_pending()); |
| 5585 | 5585 |
| 5586 base::RunLoop().Run(); | 5586 base::RunLoop().Run(); |
| 5587 | 5587 |
| 5588 EXPECT_EQ(1, d.response_started_count()); | 5588 EXPECT_EQ(1, d.response_started_count()); |
| 5589 EXPECT_EQ(0, d.bytes_received()); | 5589 EXPECT_EQ(0, d.bytes_received()); |
| 5590 EXPECT_FALSE(d.received_data_before_response()); | 5590 EXPECT_FALSE(d.received_data_before_response()); |
| 5591 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 5591 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
| 5592 } | 5592 } |
| 5593 } | 5593 } |
| 5594 | 5594 |
| 5595 TEST_F(URLRequestTestHTTP, CancelTest3) { | 5595 TEST_F(URLRequestTestHTTP, CancelOnDataReceived) { |
| 5596 ASSERT_TRUE(http_test_server()->Start()); | 5596 ASSERT_TRUE(http_test_server()->Start()); |
| 5597 | 5597 |
| 5598 TestDelegate d; | 5598 TestDelegate d; |
| 5599 { | 5599 { |
| 5600 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( | 5600 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5601 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d)); |
| 5602 |
| 5603 d.set_cancel_in_received_data(true); |
| 5604 |
| 5605 r->Start(); |
| 5606 EXPECT_TRUE(r->is_pending()); |
| 5607 |
| 5608 base::RunLoop().Run(); |
| 5609 |
| 5610 EXPECT_EQ(1, d.response_started_count()); |
| 5611 EXPECT_NE(0, d.received_bytes_count()); |
| 5612 EXPECT_FALSE(d.received_data_before_response()); |
| 5613 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
| 5614 } |
| 5615 } |
| 5616 |
| 5617 TEST_F(URLRequestTestHTTP, CancelDuringEofRead) { |
| 5618 ASSERT_TRUE(http_test_server()->Start()); |
| 5619 |
| 5620 TestDelegate d; |
| 5621 { |
| 5622 // This returns an empty response (With headers). |
| 5623 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5601 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); | 5624 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); |
| 5602 | 5625 |
| 5603 d.set_cancel_in_received_data(true); | 5626 d.set_cancel_in_received_data(true); |
| 5604 | 5627 |
| 5605 r->Start(); | 5628 r->Start(); |
| 5606 EXPECT_TRUE(r->is_pending()); | 5629 EXPECT_TRUE(r->is_pending()); |
| 5607 | 5630 |
| 5608 base::RunLoop().Run(); | 5631 base::RunLoop().Run(); |
| 5609 | 5632 |
| 5610 EXPECT_EQ(1, d.response_started_count()); | 5633 EXPECT_EQ(1, d.response_started_count()); |
| 5611 // There is no guarantee about how much data was received | 5634 EXPECT_EQ(0, d.received_bytes_count()); |
| 5612 // before the cancel was issued. It could have been 0 bytes, | |
| 5613 // or it could have been all the bytes. | |
| 5614 // EXPECT_EQ(0, d.bytes_received()); | |
| 5615 EXPECT_FALSE(d.received_data_before_response()); | 5635 EXPECT_FALSE(d.received_data_before_response()); |
| 5616 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 5636 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
| 5617 } | 5637 } |
| 5618 } | 5638 } |
| 5619 | 5639 |
| 5620 TEST_F(URLRequestTestHTTP, CancelTest4) { | 5640 TEST_F(URLRequestTestHTTP, CancelByDestroyingAfterStart) { |
| 5621 ASSERT_TRUE(http_test_server()->Start()); | 5641 ASSERT_TRUE(http_test_server()->Start()); |
| 5622 | 5642 |
| 5623 TestDelegate d; | 5643 TestDelegate d; |
| 5624 { | 5644 { |
| 5625 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( | 5645 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5626 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); | 5646 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d)); |
| 5627 | 5647 |
| 5628 r->Start(); | 5648 r->Start(); |
| 5629 EXPECT_TRUE(r->is_pending()); | 5649 EXPECT_TRUE(r->is_pending()); |
| 5630 | 5650 |
| 5631 // The request will be implicitly canceled when it is destroyed. The | 5651 // The request will be implicitly canceled when it is destroyed. The |
| 5632 // test delegate must not post a quit message when this happens because | 5652 // test delegate must not post a quit message when this happens because |
| 5633 // this test doesn't actually have a message loop. The quit message would | 5653 // this test doesn't actually have a message loop. The quit message would |
| 5634 // get put on this thread's message queue and the next test would exit | 5654 // get put on this thread's message queue and the next test would exit |
| 5635 // early, causing problems. | 5655 // early, causing problems. |
| 5636 d.set_quit_on_complete(false); | 5656 d.set_quit_on_complete(false); |
| 5637 } | 5657 } |
| 5638 // expect things to just cleanup properly. | 5658 // expect things to just cleanup properly. |
| 5639 | 5659 |
| 5640 // we won't actually get a received response here because we've never run the | 5660 // we won't actually get a received response here because we've never run the |
| 5641 // message loop | 5661 // message loop |
| 5642 EXPECT_FALSE(d.received_data_before_response()); | 5662 EXPECT_FALSE(d.received_data_before_response()); |
| 5643 EXPECT_EQ(0, d.bytes_received()); | 5663 EXPECT_EQ(0, d.bytes_received()); |
| 5644 } | 5664 } |
| 5645 | 5665 |
| 5646 TEST_F(URLRequestTestHTTP, CancelTest5) { | 5666 TEST_F(URLRequestTestHTTP, CancelWhileReadingFromCache) { |
| 5647 ASSERT_TRUE(http_test_server()->Start()); | 5667 ASSERT_TRUE(http_test_server()->Start()); |
| 5648 | 5668 |
| 5649 // populate cache | 5669 // populate cache |
| 5650 { | 5670 { |
| 5651 TestDelegate d; | 5671 TestDelegate d; |
| 5652 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( | 5672 std::unique_ptr<URLRequest> r(default_context_.CreateRequest( |
| 5653 http_test_server()->GetURL("/cachetime"), DEFAULT_PRIORITY, &d)); | 5673 http_test_server()->GetURL("/cachetime"), DEFAULT_PRIORITY, &d)); |
| 5654 r->Start(); | 5674 r->Start(); |
| 5655 base::RunLoop().Run(); | 5675 base::RunLoop().Run(); |
| 5656 EXPECT_EQ(OK, d.request_status()); | 5676 EXPECT_EQ(OK, d.request_status()); |
| (...skipping 4957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10614 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 10634 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
| 10615 | 10635 |
| 10616 req->Start(); | 10636 req->Start(); |
| 10617 req->Cancel(); | 10637 req->Cancel(); |
| 10618 base::RunLoop().RunUntilIdle(); | 10638 base::RunLoop().RunUntilIdle(); |
| 10619 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 10639 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
| 10620 EXPECT_EQ(0, d.received_redirect_count()); | 10640 EXPECT_EQ(0, d.received_redirect_count()); |
| 10621 } | 10641 } |
| 10622 | 10642 |
| 10623 } // namespace net | 10643 } // namespace net |
| OLD | NEW |