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 "build/build_config.h" | 5 #include "build/build_config.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <shlobj.h> | 9 #include <shlobj.h> |
10 #endif | 10 #endif |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
65 #include "net/proxy/proxy_service.h" | 65 #include "net/proxy/proxy_service.h" |
66 #include "net/socket/ssl_client_socket.h" | 66 #include "net/socket/ssl_client_socket.h" |
67 #include "net/ssl/ssl_cipher_suite_names.h" | 67 #include "net/ssl/ssl_cipher_suite_names.h" |
68 #include "net/ssl/ssl_connection_status_flags.h" | 68 #include "net/ssl/ssl_connection_status_flags.h" |
69 #include "net/test/cert_test_util.h" | 69 #include "net/test/cert_test_util.h" |
70 #include "net/test/spawned_test_server/spawned_test_server.h" | 70 #include "net/test/spawned_test_server/spawned_test_server.h" |
71 #include "net/url_request/data_protocol_handler.h" | 71 #include "net/url_request/data_protocol_handler.h" |
72 #include "net/url_request/static_http_user_agent_settings.h" | 72 #include "net/url_request/static_http_user_agent_settings.h" |
73 #include "net/url_request/url_request.h" | 73 #include "net/url_request/url_request.h" |
74 #include "net/url_request/url_request_http_job.h" | 74 #include "net/url_request/url_request_http_job.h" |
75 #include "net/url_request/url_request_intercepting_job_factory.h" | |
76 #include "net/url_request/url_request_interceptor.h" | |
75 #include "net/url_request/url_request_job_factory_impl.h" | 77 #include "net/url_request/url_request_job_factory_impl.h" |
76 #include "net/url_request/url_request_redirect_job.h" | 78 #include "net/url_request/url_request_redirect_job.h" |
77 #include "net/url_request/url_request_test_job.h" | 79 #include "net/url_request/url_request_test_job.h" |
78 #include "net/url_request/url_request_test_util.h" | 80 #include "net/url_request/url_request_test_util.h" |
79 #include "testing/gtest/include/gtest/gtest.h" | 81 #include "testing/gtest/include/gtest/gtest.h" |
80 #include "testing/platform_test.h" | 82 #include "testing/platform_test.h" |
81 | 83 |
82 #if !defined(DISABLE_FILE_SUPPORT) | 84 #if !defined(DISABLE_FILE_SUPPORT) |
83 #include "net/base/filename_util.h" | 85 #include "net/base/filename_util.h" |
84 #include "net/url_request/file_protocol_handler.h" | 86 #include "net/url_request/file_protocol_handler.h" |
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
600 }; | 602 }; |
601 | 603 |
602 } // namespace | 604 } // namespace |
603 | 605 |
604 // Inherit PlatformTest since we require the autorelease pool on Mac OS X. | 606 // Inherit PlatformTest since we require the autorelease pool on Mac OS X. |
605 class URLRequestTest : public PlatformTest { | 607 class URLRequestTest : public PlatformTest { |
606 public: | 608 public: |
607 URLRequestTest() : default_context_(true) { | 609 URLRequestTest() : default_context_(true) { |
608 default_context_.set_network_delegate(&default_network_delegate_); | 610 default_context_.set_network_delegate(&default_network_delegate_); |
609 default_context_.set_net_log(&net_log_); | 611 default_context_.set_net_log(&net_log_); |
610 job_factory_.SetProtocolHandler("data", new DataProtocolHandler); | 612 job_factory_impl_ = new URLRequestJobFactoryImpl(); |
611 #if !defined(DISABLE_FILE_SUPPORT) | 613 job_factory_.reset(job_factory_impl_); |
612 job_factory_.SetProtocolHandler( | |
613 "file", new FileProtocolHandler(base::MessageLoopProxy::current())); | |
614 #endif | |
615 default_context_.set_job_factory(&job_factory_); | |
616 default_context_.Init(); | |
617 } | 614 } |
615 | |
618 ~URLRequestTest() override { | 616 ~URLRequestTest() override { |
619 // URLRequestJobs may post clean-up tasks on destruction. | 617 // URLRequestJobs may post clean-up tasks on destruction. |
620 base::RunLoop().RunUntilIdle(); | 618 base::RunLoop().RunUntilIdle(); |
621 } | 619 } |
622 | 620 |
621 virtual void SetUp() { | |
622 SetUpFactory(); | |
623 default_context_.set_job_factory(job_factory_.get()); | |
624 default_context_.Init(); | |
625 PlatformTest::SetUp(); | |
626 } | |
627 | |
628 virtual void SetUpFactory() { | |
629 job_factory_impl_->SetProtocolHandler("data", new DataProtocolHandler); | |
630 #if !defined(DISABLE_FILE_SUPPORT) | |
631 job_factory_impl_->SetProtocolHandler( | |
632 "file", new FileProtocolHandler(base::MessageLoopProxy::current())); | |
633 #endif | |
634 } | |
635 | |
636 TestNetworkDelegate* default_network_delegate() { | |
637 return &default_network_delegate_; | |
638 } | |
639 | |
640 const TestURLRequestContext& default_context() const { | |
641 return default_context_; | |
642 } | |
643 | |
644 | |
623 // Adds the TestJobInterceptor to the default context. | 645 // Adds the TestJobInterceptor to the default context. |
624 TestJobInterceptor* AddTestInterceptor() { | 646 TestJobInterceptor* AddTestInterceptor() { |
625 TestJobInterceptor* protocol_handler_ = new TestJobInterceptor(); | 647 TestJobInterceptor* protocol_handler_ = new TestJobInterceptor(); |
626 job_factory_.SetProtocolHandler("http", NULL); | 648 job_factory_impl_->SetProtocolHandler("http", NULL); |
627 job_factory_.SetProtocolHandler("http", protocol_handler_); | 649 job_factory_impl_->SetProtocolHandler("http", protocol_handler_); |
628 return protocol_handler_; | 650 return protocol_handler_; |
629 } | 651 } |
630 | 652 |
631 protected: | 653 protected: |
632 CapturingNetLog net_log_; | 654 CapturingNetLog net_log_; |
633 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. | 655 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. |
634 URLRequestJobFactoryImpl job_factory_; | 656 URLRequestJobFactoryImpl* job_factory_impl_; |
657 scoped_ptr<URLRequestJobFactory> job_factory_; | |
635 TestURLRequestContext default_context_; | 658 TestURLRequestContext default_context_; |
636 }; | 659 }; |
637 | 660 |
638 TEST_F(URLRequestTest, AboutBlankTest) { | 661 TEST_F(URLRequestTest, AboutBlankTest) { |
639 TestDelegate d; | 662 TestDelegate d; |
640 { | 663 { |
641 scoped_ptr<URLRequest> r(default_context_.CreateRequest( | 664 scoped_ptr<URLRequest> r(default_context_.CreateRequest( |
642 GURL("about:blank"), DEFAULT_PRIORITY, &d, NULL)); | 665 GURL("about:blank"), DEFAULT_PRIORITY, &d, NULL)); |
643 | 666 |
644 r->Start(); | 667 r->Start(); |
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1567 | 1590 |
1568 // Check the interceptor got called as expected | 1591 // Check the interceptor got called as expected |
1569 EXPECT_TRUE(interceptor.did_cancel_then_restart_main_); | 1592 EXPECT_TRUE(interceptor.did_cancel_then_restart_main_); |
1570 EXPECT_FALSE(interceptor.did_intercept_final_); | 1593 EXPECT_FALSE(interceptor.did_intercept_final_); |
1571 | 1594 |
1572 // Check we see a canceled request | 1595 // Check we see a canceled request |
1573 EXPECT_FALSE(req->status().is_success()); | 1596 EXPECT_FALSE(req->status().is_success()); |
1574 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | 1597 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); |
1575 } | 1598 } |
1576 | 1599 |
1577 LoadTimingInfo RunLoadTimingTest(const LoadTimingInfo& job_load_timing, | 1600 // An Interceptor for use with interceptor tests. |
1578 URLRequestContext* context) { | 1601 class MockURLRequestInterceptor : public URLRequestInterceptor { |
1579 TestInterceptor interceptor; | 1602 public: |
1580 interceptor.intercept_main_request_ = true; | 1603 // Static getters for canned response header and data strings. |
1581 interceptor.main_request_load_timing_info_ = job_load_timing; | 1604 static std::string ok_data() { |
1582 TestDelegate d; | 1605 return URLRequestTestJob::test_data_1(); |
1583 scoped_ptr<URLRequest> req(context->CreateRequest( | 1606 } |
1584 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, NULL)); | 1607 |
1585 req->Start(); | 1608 static std::string ok_headers() { |
1586 base::RunLoop().Run(); | 1609 return URLRequestTestJob::test_headers(); |
1587 | 1610 } |
1588 LoadTimingInfo resulting_load_timing; | 1611 |
1589 req->GetLoadTimingInfo(&resulting_load_timing); | 1612 static std::string redirect_data() { |
1590 | 1613 return std::string(); |
1591 // None of these should be modified by the URLRequest. | 1614 } |
1592 EXPECT_EQ(job_load_timing.socket_reused, resulting_load_timing.socket_reused); | 1615 |
1593 EXPECT_EQ(job_load_timing.socket_log_id, resulting_load_timing.socket_log_id); | 1616 static std::string redirect_headers() { |
1594 EXPECT_EQ(job_load_timing.send_start, resulting_load_timing.send_start); | 1617 return URLRequestTestJob::test_redirect_headers(); |
1595 EXPECT_EQ(job_load_timing.send_end, resulting_load_timing.send_end); | 1618 } |
1596 EXPECT_EQ(job_load_timing.receive_headers_end, | 1619 |
1597 resulting_load_timing.receive_headers_end); | 1620 static std::string error_data() { |
1598 | 1621 return std::string("ohhh nooooo mr. bill!"); |
1599 return resulting_load_timing; | 1622 } |
1623 | |
1624 static std::string error_headers() { | |
1625 return URLRequestTestJob::test_error_headers(); | |
1626 } | |
1627 | |
1628 MockURLRequestInterceptor() | |
1629 : intercept_main_request_(false), restart_main_request_(false), | |
1630 cancel_main_request_(false), cancel_then_restart_main_request_(false), | |
1631 simulate_main_network_error_(false), | |
1632 intercept_redirect_(false), cancel_redirect_request_(false), | |
1633 intercept_final_response_(false), cancel_final_request_(false), | |
1634 use_url_request_http_job_(false), | |
1635 did_intercept_main_(false), did_restart_main_(false), | |
1636 did_cancel_main_(false), did_cancel_then_restart_main_(false), | |
1637 did_simulate_error_main_(false), | |
1638 did_intercept_redirect_(false), did_cancel_redirect_(false), | |
1639 did_intercept_final_(false), did_cancel_final_(false) { | |
1640 } | |
1641 | |
1642 ~MockURLRequestInterceptor() override { | |
1643 } | |
1644 | |
1645 // URLRequestInterceptor implementation: | |
1646 URLRequestJob* MaybeInterceptRequest( | |
1647 URLRequest* request, | |
1648 NetworkDelegate* network_delegate) const override { | |
1649 if (restart_main_request_) { | |
1650 restart_main_request_ = false; | |
1651 did_restart_main_ = true; | |
1652 return new RestartTestJob(request, network_delegate); | |
1653 } | |
1654 if (cancel_main_request_) { | |
1655 cancel_main_request_ = false; | |
1656 did_cancel_main_ = true; | |
1657 return new CancelTestJob(request, network_delegate); | |
1658 } | |
1659 if (cancel_then_restart_main_request_) { | |
1660 cancel_then_restart_main_request_ = false; | |
1661 did_cancel_then_restart_main_ = true; | |
1662 return new CancelThenRestartTestJob(request, network_delegate); | |
1663 } | |
1664 if (simulate_main_network_error_) { | |
1665 simulate_main_network_error_ = false; | |
1666 did_simulate_error_main_ = true; | |
1667 if (use_url_request_http_job_) { | |
1668 return URLRequestHttpJob::Factory(request, network_delegate, "http"); | |
1669 } | |
1670 // This job will result in error since the requested URL is not one of the | |
1671 // URLs supported by these tests. | |
1672 return new URLRequestTestJob(request, network_delegate, true); | |
1673 } | |
1674 if (!intercept_main_request_) | |
1675 return nullptr; | |
1676 intercept_main_request_ = false; | |
1677 did_intercept_main_ = true; | |
1678 URLRequestTestJob* job = new URLRequestTestJob(request, | |
1679 network_delegate, | |
1680 main_headers_, | |
1681 main_data_, | |
1682 true); | |
1683 job->set_load_timing_info(main_request_load_timing_info_); | |
1684 return job; | |
1685 } | |
1686 | |
1687 URLRequestJob* MaybeInterceptRedirect(URLRequest* request, | |
1688 NetworkDelegate* network_delegate, | |
1689 const GURL& location) const override { | |
1690 if (cancel_redirect_request_) { | |
1691 cancel_redirect_request_ = false; | |
1692 did_cancel_redirect_ = true; | |
1693 return new CancelTestJob(request, network_delegate); | |
1694 } | |
1695 if (!intercept_redirect_) | |
1696 return nullptr; | |
1697 intercept_redirect_ = false; | |
1698 did_intercept_redirect_ = true; | |
1699 if (use_url_request_http_job_) { | |
1700 return URLRequestHttpJob::Factory(request, network_delegate, "http"); | |
1701 } | |
1702 return new URLRequestTestJob(request, | |
1703 network_delegate, | |
1704 redirect_headers_, | |
1705 redirect_data_, | |
1706 true); | |
1707 } | |
1708 | |
1709 URLRequestJob* MaybeInterceptResponse( | |
1710 URLRequest* request, | |
1711 NetworkDelegate* network_delegate) const override { | |
1712 if (cancel_final_request_) { | |
1713 cancel_final_request_ = false; | |
1714 did_cancel_final_ = true; | |
1715 return new CancelTestJob(request, network_delegate); | |
1716 } | |
1717 if (!intercept_final_response_) | |
1718 return nullptr; | |
1719 intercept_final_response_ = false; | |
1720 did_intercept_final_ = true; | |
1721 if (use_url_request_http_job_) { | |
1722 return URLRequestHttpJob::Factory(request, network_delegate, "http"); | |
1723 } | |
1724 return new URLRequestTestJob(request, | |
1725 network_delegate, | |
1726 final_headers_, | |
1727 final_data_, | |
1728 true); | |
1729 } | |
1730 | |
1731 void set_intercept_main_request(bool intercept_main_request) { | |
1732 intercept_main_request_ = intercept_main_request; | |
1733 } | |
1734 | |
1735 void set_main_headers(const std::string& main_headers) { | |
1736 main_headers_ = main_headers; | |
1737 } | |
1738 | |
1739 void set_main_data(const std::string& main_data) { | |
1740 main_data_ = main_data; | |
1741 } | |
1742 | |
1743 void set_main_request_load_timing_info( | |
1744 const LoadTimingInfo& main_request_load_timing_info) { | |
1745 main_request_load_timing_info_ = main_request_load_timing_info; | |
1746 } | |
1747 | |
1748 void set_restart_main_request(bool restart_main_request) { | |
1749 restart_main_request_ = restart_main_request; | |
1750 } | |
1751 | |
1752 void set_cancel_main_request(bool cancel_main_request) { | |
1753 cancel_main_request_ = cancel_main_request; | |
1754 } | |
1755 | |
1756 void set_cancel_then_restart_main_request( | |
1757 bool cancel_then_restart_main_request) { | |
1758 cancel_then_restart_main_request_ = cancel_then_restart_main_request; | |
1759 } | |
1760 | |
1761 void set_simulate_main_network_error(bool simulate_main_network_error) { | |
1762 simulate_main_network_error_ = simulate_main_network_error; | |
1763 } | |
1764 | |
1765 void set_intercept_redirect(bool intercept_redirect) { | |
1766 intercept_redirect_ = intercept_redirect; | |
1767 } | |
1768 | |
1769 void set_redirect_headers(const std::string& redirect_headers) { | |
1770 redirect_headers_ = redirect_headers; | |
1771 } | |
1772 | |
1773 void set_redirect_data(const std::string& redirect_data) { | |
1774 redirect_data_ = redirect_data; | |
1775 } | |
1776 | |
1777 void set_cancel_redirect_request(bool cancel_redirect_request) { | |
1778 cancel_redirect_request_ = cancel_redirect_request; | |
1779 } | |
1780 | |
1781 void set_intercept_final_response(bool intercept_final_response) { | |
1782 intercept_final_response_ = intercept_final_response; | |
1783 } | |
1784 | |
1785 void set_final_headers(const std::string& final_headers) { | |
1786 final_headers_ = final_headers; | |
1787 } | |
1788 | |
1789 void set_final_data(const std::string& final_data) { | |
1790 final_data_ = final_data; | |
1791 } | |
1792 | |
1793 void set_cancel_final_request(bool cancel_final_request) { | |
1794 cancel_final_request_ = cancel_final_request; | |
1795 } | |
1796 | |
1797 void set_use_url_request_http_job(bool use_url_request_http_job) { | |
1798 use_url_request_http_job_ = use_url_request_http_job; | |
1799 } | |
1800 | |
1801 bool did_intercept_main() const { | |
1802 return did_intercept_main_; | |
1803 } | |
1804 | |
1805 bool did_restart_main() const { | |
1806 return did_restart_main_; | |
1807 } | |
1808 | |
1809 bool did_cancel_main() const { | |
1810 return did_cancel_main_; | |
1811 } | |
1812 | |
1813 bool did_cancel_then_restart_main() const { | |
1814 return did_cancel_then_restart_main_; | |
1815 } | |
1816 | |
1817 bool did_simulate_error_main() const { | |
1818 return did_simulate_error_main_; | |
1819 } | |
1820 | |
1821 bool did_intercept_redirect() const { | |
1822 return did_intercept_redirect_; | |
1823 } | |
1824 | |
1825 bool did_cancel_redirect() const { | |
1826 return did_cancel_redirect_; | |
1827 } | |
1828 | |
1829 bool did_intercept_final() const { | |
1830 return did_intercept_final_; | |
1831 } | |
1832 | |
1833 bool did_cancel_final() const { | |
1834 return did_cancel_final_; | |
1835 } | |
1836 | |
1837 private: | |
1838 // Indicate whether to intercept the main request, and if so specify the | |
1839 // response to return and the LoadTimingInfo to use. | |
1840 mutable bool intercept_main_request_; | |
1841 mutable std::string main_headers_; | |
1842 mutable std::string main_data_; | |
1843 mutable LoadTimingInfo main_request_load_timing_info_; | |
1844 | |
1845 // These indicate actions that can be taken within MaybeInterceptRequest. | |
1846 mutable bool restart_main_request_; | |
1847 mutable bool cancel_main_request_; | |
1848 mutable bool cancel_then_restart_main_request_; | |
1849 mutable bool simulate_main_network_error_; | |
1850 | |
1851 // Indicate whether to intercept redirects, and if so specify the response to | |
1852 // return. | |
1853 mutable bool intercept_redirect_; | |
1854 mutable std::string redirect_headers_; | |
1855 mutable std::string redirect_data_; | |
1856 | |
1857 // Cancel the request within MaybeInterceptRedirect. | |
1858 mutable bool cancel_redirect_request_; | |
1859 | |
1860 // Indicate whether to intercept the final response, and if so specify the | |
1861 // response to return. | |
1862 mutable bool intercept_final_response_; | |
1863 mutable std::string final_headers_; | |
1864 mutable std::string final_data_; | |
1865 | |
1866 // Cancel the final request within MaybeInterceptResponse. | |
1867 mutable bool cancel_final_request_; | |
1868 | |
1869 // Instruct the interceptor to use a real URLRequestHTTPJob. | |
1870 mutable bool use_url_request_http_job_; | |
1871 | |
1872 // These indicate if the interceptor did something or not. | |
1873 mutable bool did_intercept_main_; | |
1874 mutable bool did_restart_main_; | |
1875 mutable bool did_cancel_main_; | |
1876 mutable bool did_cancel_then_restart_main_; | |
1877 mutable bool did_simulate_error_main_; | |
1878 mutable bool did_intercept_redirect_; | |
1879 mutable bool did_cancel_redirect_; | |
1880 mutable bool did_intercept_final_; | |
1881 mutable bool did_cancel_final_; | |
1882 }; | |
1883 | |
1884 // Inherit PlatformTest since we require the autorelease pool on Mac OS X. | |
1885 class URLRequestInterceptorTest : public URLRequestTest { | |
1886 public: | |
1887 URLRequestInterceptorTest() : URLRequestTest(), interceptor_(NULL) { | |
1888 } | |
1889 | |
1890 ~URLRequestInterceptorTest() override { | |
1891 // URLRequestJobs may post clean-up tasks on destruction. | |
1892 base::RunLoop().RunUntilIdle(); | |
1893 } | |
1894 | |
1895 void SetUpFactory() override { | |
1896 interceptor_ = new MockURLRequestInterceptor(); | |
1897 job_factory_.reset(new URLRequestInterceptingJobFactory( | |
1898 job_factory_.Pass(), make_scoped_ptr(interceptor_))); | |
1899 } | |
1900 | |
1901 MockURLRequestInterceptor* interceptor() const { | |
1902 return interceptor_; | |
1903 } | |
1904 | |
1905 private: | |
1906 MockURLRequestInterceptor* interceptor_; | |
1907 }; | |
1908 | |
1909 TEST_F(URLRequestInterceptorTest, Intercept) { | |
1910 // Intercept the main request and respond with a simple response. | |
1911 interceptor()->set_intercept_main_request(true); | |
1912 interceptor()->set_main_headers(MockURLRequestInterceptor::ok_headers()); | |
1913 interceptor()->set_main_data(MockURLRequestInterceptor::ok_data()); | |
1914 TestDelegate d; | |
1915 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
1916 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
1917 base::SupportsUserData::Data* user_data0 = new base::SupportsUserData::Data(); | |
1918 base::SupportsUserData::Data* user_data1 = new base::SupportsUserData::Data(); | |
1919 base::SupportsUserData::Data* user_data2 = new base::SupportsUserData::Data(); | |
1920 req->SetUserData(nullptr, user_data0); | |
1921 req->SetUserData(&user_data1, user_data1); | |
1922 req->SetUserData(&user_data2, user_data2); | |
1923 req->set_method("GET"); | |
1924 req->Start(); | |
1925 base::RunLoop().Run(); | |
1926 | |
1927 // Make sure we can retrieve our specific user data. | |
1928 EXPECT_EQ(user_data0, req->GetUserData(nullptr)); | |
1929 EXPECT_EQ(user_data1, req->GetUserData(&user_data1)); | |
1930 EXPECT_EQ(user_data2, req->GetUserData(&user_data2)); | |
1931 | |
1932 // Check that we got one good response. | |
1933 EXPECT_TRUE(req->status().is_success()); | |
1934 EXPECT_EQ(200, req->response_headers()->response_code()); | |
1935 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
1936 EXPECT_EQ(1, d.response_started_count()); | |
1937 EXPECT_EQ(0, d.received_redirect_count()); | |
1938 } | |
1939 | |
1940 TEST_F(URLRequestInterceptorTest, InterceptRedirect) { | |
1941 // Intercept the main request and respond with a redirect. | |
1942 interceptor()->set_intercept_main_request(true); | |
1943 interceptor()->set_main_headers( | |
1944 MockURLRequestInterceptor::redirect_headers()); | |
1945 interceptor()->set_main_data(MockURLRequestInterceptor::redirect_data()); | |
1946 | |
1947 // Intercept that redirect and respond with a final OK response. | |
1948 interceptor()->set_intercept_redirect(true); | |
1949 interceptor()->set_redirect_headers(MockURLRequestInterceptor::ok_headers()); | |
1950 interceptor()->set_redirect_data(MockURLRequestInterceptor::ok_data()); | |
1951 | |
1952 TestDelegate d; | |
1953 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
1954 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
1955 req->set_method("GET"); | |
1956 req->Start(); | |
1957 base::RunLoop().Run(); | |
1958 | |
1959 // Check that the interceptor got called as expected. | |
1960 EXPECT_TRUE(interceptor()->did_intercept_main()); | |
1961 EXPECT_TRUE(interceptor()->did_intercept_redirect()); | |
1962 | |
1963 // Check that we got one good response. | |
1964 EXPECT_TRUE(req->status().is_success()); | |
1965 if (req->status().is_success()) | |
1966 EXPECT_EQ(200, req->response_headers()->response_code()); | |
1967 | |
1968 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
1969 EXPECT_EQ(1, d.response_started_count()); | |
1970 EXPECT_EQ(0, d.received_redirect_count()); | |
1971 } | |
1972 | |
1973 TEST_F(URLRequestInterceptorTest, InterceptServerError) { | |
1974 // Intercept the main request to generate a server error response. | |
1975 interceptor()->set_intercept_main_request(true); | |
1976 interceptor()->set_main_headers(MockURLRequestInterceptor::error_headers()); | |
1977 interceptor()->set_main_data(MockURLRequestInterceptor::error_data()); | |
1978 | |
1979 // Intercept that error and respond with an OK response. | |
1980 interceptor()->set_intercept_final_response(true); | |
1981 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); | |
1982 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); | |
1983 | |
1984 TestDelegate d; | |
1985 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
1986 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
1987 req->set_method("GET"); | |
1988 req->Start(); | |
1989 base::RunLoop().Run(); | |
1990 | |
1991 // Check that the interceptor got called as expected. | |
1992 EXPECT_TRUE(interceptor()->did_intercept_main()); | |
1993 EXPECT_TRUE(interceptor()->did_intercept_final()); | |
1994 | |
1995 // Check that we got one good response. | |
1996 EXPECT_TRUE(req->status().is_success()); | |
1997 EXPECT_EQ(200, req->response_headers()->response_code()); | |
1998 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
1999 EXPECT_EQ(1, d.response_started_count()); | |
2000 EXPECT_EQ(0, d.received_redirect_count()); | |
2001 } | |
2002 | |
2003 TEST_F(URLRequestInterceptorTest, InterceptNetworkError) { | |
2004 // Intercept the main request to simulate a network error. | |
2005 interceptor()->set_simulate_main_network_error(true); | |
2006 | |
2007 // Intercept that error and respond with an OK response. | |
2008 interceptor()->set_intercept_final_response(true); | |
2009 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); | |
2010 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); | |
2011 | |
2012 TestDelegate d; | |
2013 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2014 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2015 req->set_method("GET"); | |
2016 req->Start(); | |
2017 base::RunLoop().Run(); | |
2018 | |
2019 // Check that the interceptor got called as expected. | |
2020 EXPECT_TRUE(interceptor()->did_simulate_error_main()); | |
2021 EXPECT_TRUE(interceptor()->did_intercept_final()); | |
2022 | |
2023 // Check that we received one good response. | |
2024 EXPECT_TRUE(req->status().is_success()); | |
2025 EXPECT_EQ(200, req->response_headers()->response_code()); | |
2026 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
2027 EXPECT_EQ(1, d.response_started_count()); | |
2028 EXPECT_EQ(0, d.received_redirect_count()); | |
2029 } | |
2030 | |
2031 TEST_F(URLRequestInterceptorTest, InterceptRestartRequired) { | |
2032 // Restart the main request. | |
2033 interceptor()->set_restart_main_request(true); | |
2034 | |
2035 // then intercept the new main request and respond with an OK response | |
2036 interceptor()->set_intercept_main_request(true); | |
2037 interceptor()->set_main_headers(MockURLRequestInterceptor::ok_headers()); | |
2038 interceptor()->set_main_data(MockURLRequestInterceptor::ok_data()); | |
2039 | |
2040 TestDelegate d; | |
2041 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2042 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2043 req->set_method("GET"); | |
2044 req->Start(); | |
2045 base::RunLoop().Run(); | |
2046 | |
2047 // Check that the interceptor got called as expected. | |
2048 EXPECT_TRUE(interceptor()->did_restart_main()); | |
2049 EXPECT_TRUE(interceptor()->did_intercept_main()); | |
2050 | |
2051 // Check that we received one good response. | |
2052 EXPECT_TRUE(req->status().is_success()); | |
2053 if (req->status().is_success()) | |
2054 EXPECT_EQ(200, req->response_headers()->response_code()); | |
2055 | |
2056 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
2057 EXPECT_EQ(1, d.response_started_count()); | |
2058 EXPECT_EQ(0, d.received_redirect_count()); | |
2059 } | |
2060 | |
2061 TEST_F(URLRequestInterceptorTest, InterceptRespectsCancelMain) { | |
2062 // Intercept the main request and cancel from within the restarted job. | |
2063 interceptor()->set_cancel_main_request(true); | |
2064 | |
2065 // Set up to intercept the final response and override it with an OK response. | |
2066 interceptor()->set_intercept_final_response(true); | |
2067 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); | |
2068 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); | |
2069 | |
2070 TestDelegate d; | |
2071 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2072 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2073 req->set_method("GET"); | |
2074 req->Start(); | |
2075 base::RunLoop().Run(); | |
2076 | |
2077 // Check that the interceptor got called as expected. | |
2078 EXPECT_TRUE(interceptor()->did_cancel_main()); | |
2079 EXPECT_FALSE(interceptor()->did_intercept_final()); | |
2080 | |
2081 // Check that we see a canceled request. | |
2082 EXPECT_FALSE(req->status().is_success()); | |
2083 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | |
2084 } | |
2085 | |
2086 TEST_F(URLRequestInterceptorTest, InterceptRespectsCancelRedirect) { | |
2087 // Intercept the main request and respond with a redirect. | |
2088 interceptor()->set_intercept_main_request(true); | |
2089 interceptor()->set_main_headers( | |
2090 MockURLRequestInterceptor::redirect_headers()); | |
2091 interceptor()->set_main_data(MockURLRequestInterceptor::redirect_data()); | |
2092 | |
2093 // Intercept the redirect and cancel from within that job. | |
2094 interceptor()->set_cancel_redirect_request(true); | |
2095 | |
2096 // Set up to intercept the final response and override it with an OK response. | |
2097 interceptor()->set_intercept_final_response(true); | |
2098 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); | |
2099 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); | |
2100 | |
2101 TestDelegate d; | |
2102 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2103 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2104 req->set_method("GET"); | |
2105 req->Start(); | |
2106 base::RunLoop().Run(); | |
2107 | |
2108 // Check that the interceptor got called as expected. | |
2109 EXPECT_TRUE(interceptor()->did_intercept_main()); | |
2110 EXPECT_TRUE(interceptor()->did_cancel_redirect()); | |
2111 EXPECT_FALSE(interceptor()->did_intercept_final()); | |
2112 | |
2113 // Check that we see a canceled request. | |
2114 EXPECT_FALSE(req->status().is_success()); | |
2115 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | |
2116 } | |
2117 | |
2118 TEST_F(URLRequestInterceptorTest, InterceptRespectsCancelFinal) { | |
2119 // Intercept the main request to simulate a network error. | |
2120 interceptor()->set_simulate_main_network_error(true); | |
2121 | |
2122 // Set up to intercept final the response and cancel from within that job. | |
2123 interceptor()->set_cancel_final_request(true); | |
2124 | |
2125 TestDelegate d; | |
2126 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2127 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2128 req->set_method("GET"); | |
2129 req->Start(); | |
2130 base::RunLoop().Run(); | |
2131 | |
2132 // Check that the interceptor got called as expected. | |
2133 EXPECT_TRUE(interceptor()->did_simulate_error_main()); | |
2134 EXPECT_TRUE(interceptor()->did_cancel_final()); | |
2135 | |
2136 // Check that we see a canceled request. | |
2137 EXPECT_FALSE(req->status().is_success()); | |
2138 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | |
2139 } | |
2140 | |
2141 TEST_F(URLRequestInterceptorTest, InterceptRespectsCancelInRestart) { | |
2142 // Intercept the main request and cancel then restart from within that job. | |
2143 interceptor()->set_cancel_then_restart_main_request(true); | |
2144 | |
2145 // Set up to intercept the final response and override it with an OK response. | |
2146 interceptor()->set_intercept_final_response(true); | |
2147 interceptor()->set_final_headers(TestInterceptor::ok_headers()); | |
2148 interceptor()->set_final_data(TestInterceptor::ok_data()); | |
2149 | |
2150 TestDelegate d; | |
2151 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
2152 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2153 req->set_method("GET"); | |
2154 req->Start(); | |
2155 base::RunLoop().Run(); | |
2156 | |
2157 // Check that the interceptor got called as expected. | |
2158 EXPECT_TRUE(interceptor()->did_cancel_then_restart_main()); | |
2159 EXPECT_FALSE(interceptor()->did_intercept_final()); | |
2160 | |
2161 // Check that we see a canceled request. | |
2162 EXPECT_FALSE(req->status().is_success()); | |
2163 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); | |
1600 } | 2164 } |
1601 | 2165 |
1602 // "Normal" LoadTimingInfo as returned by a job. Everything is in order, not | 2166 // "Normal" LoadTimingInfo as returned by a job. Everything is in order, not |
1603 // reused. |connect_time_flags| is used to indicate if there should be dns | 2167 // reused. |connect_time_flags| is used to indicate if there should be dns |
1604 // or SSL times, and |used_proxy| is used for proxy times. | 2168 // or SSL times, and |used_proxy| is used for proxy times. |
1605 LoadTimingInfo NormalLoadTimingInfo(base::TimeTicks now, | 2169 LoadTimingInfo NormalLoadTimingInfo(base::TimeTicks now, |
1606 int connect_time_flags, | 2170 int connect_time_flags, |
1607 bool used_proxy) { | 2171 bool used_proxy) { |
1608 LoadTimingInfo load_timing; | 2172 LoadTimingInfo load_timing; |
1609 load_timing.socket_log_id = 1; | 2173 load_timing.socket_log_id = 1; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1642 load_timing.proxy_resolve_start = now + base::TimeDelta::FromDays(1); | 2206 load_timing.proxy_resolve_start = now + base::TimeDelta::FromDays(1); |
1643 load_timing.proxy_resolve_end = now + base::TimeDelta::FromDays(2); | 2207 load_timing.proxy_resolve_end = now + base::TimeDelta::FromDays(2); |
1644 } | 2208 } |
1645 | 2209 |
1646 load_timing.send_start = now + base::TimeDelta::FromDays(9); | 2210 load_timing.send_start = now + base::TimeDelta::FromDays(9); |
1647 load_timing.send_end = now + base::TimeDelta::FromDays(10); | 2211 load_timing.send_end = now + base::TimeDelta::FromDays(10); |
1648 load_timing.receive_headers_end = now + base::TimeDelta::FromDays(11); | 2212 load_timing.receive_headers_end = now + base::TimeDelta::FromDays(11); |
1649 return load_timing; | 2213 return load_timing; |
1650 } | 2214 } |
1651 | 2215 |
2216 LoadTimingInfo RunURLRequestInterceptorLoadTimingTest( | |
2217 const LoadTimingInfo& job_load_timing, | |
2218 const URLRequestContext& context, | |
2219 MockURLRequestInterceptor* interceptor) { | |
2220 interceptor->set_intercept_main_request(true); | |
2221 interceptor->set_main_request_load_timing_info(job_load_timing); | |
2222 TestDelegate d; | |
2223 scoped_ptr<URLRequest> req(context.CreateRequest( | |
2224 GURL("http://test_intercept/foo"), DEFAULT_PRIORITY, &d, nullptr)); | |
2225 req->Start(); | |
2226 base::RunLoop().Run(); | |
2227 | |
2228 LoadTimingInfo resulting_load_timing; | |
2229 req->GetLoadTimingInfo(&resulting_load_timing); | |
2230 | |
2231 // None of these should be modified by the URLRequest. | |
2232 EXPECT_EQ(job_load_timing.socket_reused, resulting_load_timing.socket_reused); | |
2233 EXPECT_EQ(job_load_timing.socket_log_id, resulting_load_timing.socket_log_id); | |
2234 EXPECT_EQ(job_load_timing.send_start, resulting_load_timing.send_start); | |
2235 EXPECT_EQ(job_load_timing.send_end, resulting_load_timing.send_end); | |
2236 EXPECT_EQ(job_load_timing.receive_headers_end, | |
2237 resulting_load_timing.receive_headers_end); | |
2238 | |
2239 return resulting_load_timing; | |
2240 } | |
2241 | |
1652 // Basic test that the intercept + load timing tests work. | 2242 // Basic test that the intercept + load timing tests work. |
1653 TEST_F(URLRequestTest, InterceptLoadTiming) { | 2243 TEST_F(URLRequestInterceptorTest, InterceptLoadTiming) { |
1654 base::TimeTicks now = base::TimeTicks::Now(); | 2244 base::TimeTicks now = base::TimeTicks::Now(); |
1655 LoadTimingInfo job_load_timing = | 2245 LoadTimingInfo job_load_timing = |
1656 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, false); | 2246 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, false); |
1657 | 2247 |
1658 LoadTimingInfo load_timing_result = | 2248 LoadTimingInfo load_timing_result = |
1659 RunLoadTimingTest(job_load_timing, &default_context_); | 2249 RunURLRequestInterceptorLoadTimingTest( |
2250 job_load_timing, default_context(), interceptor()); | |
1660 | 2251 |
1661 // Nothing should have been changed by the URLRequest. | 2252 // Nothing should have been changed by the URLRequest. |
1662 EXPECT_EQ(job_load_timing.proxy_resolve_start, | 2253 EXPECT_EQ(job_load_timing.proxy_resolve_start, |
1663 load_timing_result.proxy_resolve_start); | 2254 load_timing_result.proxy_resolve_start); |
1664 EXPECT_EQ(job_load_timing.proxy_resolve_end, | 2255 EXPECT_EQ(job_load_timing.proxy_resolve_end, |
1665 load_timing_result.proxy_resolve_end); | 2256 load_timing_result.proxy_resolve_end); |
1666 EXPECT_EQ(job_load_timing.connect_timing.dns_start, | 2257 EXPECT_EQ(job_load_timing.connect_timing.dns_start, |
1667 load_timing_result.connect_timing.dns_start); | 2258 load_timing_result.connect_timing.dns_start); |
1668 EXPECT_EQ(job_load_timing.connect_timing.dns_end, | 2259 EXPECT_EQ(job_load_timing.connect_timing.dns_end, |
1669 load_timing_result.connect_timing.dns_end); | 2260 load_timing_result.connect_timing.dns_end); |
1670 EXPECT_EQ(job_load_timing.connect_timing.connect_start, | 2261 EXPECT_EQ(job_load_timing.connect_timing.connect_start, |
1671 load_timing_result.connect_timing.connect_start); | 2262 load_timing_result.connect_timing.connect_start); |
1672 EXPECT_EQ(job_load_timing.connect_timing.connect_end, | 2263 EXPECT_EQ(job_load_timing.connect_timing.connect_end, |
1673 load_timing_result.connect_timing.connect_end); | 2264 load_timing_result.connect_timing.connect_end); |
1674 EXPECT_EQ(job_load_timing.connect_timing.ssl_start, | 2265 EXPECT_EQ(job_load_timing.connect_timing.ssl_start, |
1675 load_timing_result.connect_timing.ssl_start); | 2266 load_timing_result.connect_timing.ssl_start); |
1676 EXPECT_EQ(job_load_timing.connect_timing.ssl_end, | 2267 EXPECT_EQ(job_load_timing.connect_timing.ssl_end, |
1677 load_timing_result.connect_timing.ssl_end); | 2268 load_timing_result.connect_timing.ssl_end); |
1678 | 2269 |
1679 // Redundant sanity check. | 2270 // Redundant sanity check. |
1680 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_DNS_TIMES); | 2271 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_DNS_TIMES); |
1681 } | 2272 } |
1682 | 2273 |
1683 // Another basic test, with proxy and SSL times, but no DNS times. | 2274 // Another basic test, with proxy and SSL times, but no DNS times. |
1684 TEST_F(URLRequestTest, InterceptLoadTimingProxy) { | 2275 TEST_F(URLRequestInterceptorTest, InterceptLoadTimingProxy) { |
1685 base::TimeTicks now = base::TimeTicks::Now(); | 2276 base::TimeTicks now = base::TimeTicks::Now(); |
1686 LoadTimingInfo job_load_timing = | 2277 LoadTimingInfo job_load_timing = |
1687 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, true); | 2278 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, true); |
1688 | 2279 |
1689 LoadTimingInfo load_timing_result = | 2280 LoadTimingInfo load_timing_result = |
1690 RunLoadTimingTest(job_load_timing, &default_context_); | 2281 RunURLRequestInterceptorLoadTimingTest( |
2282 job_load_timing, default_context(), interceptor()); | |
1691 | 2283 |
1692 // Nothing should have been changed by the URLRequest. | 2284 // Nothing should have been changed by the URLRequest. |
1693 EXPECT_EQ(job_load_timing.proxy_resolve_start, | 2285 EXPECT_EQ(job_load_timing.proxy_resolve_start, |
1694 load_timing_result.proxy_resolve_start); | 2286 load_timing_result.proxy_resolve_start); |
1695 EXPECT_EQ(job_load_timing.proxy_resolve_end, | 2287 EXPECT_EQ(job_load_timing.proxy_resolve_end, |
1696 load_timing_result.proxy_resolve_end); | 2288 load_timing_result.proxy_resolve_end); |
1697 EXPECT_EQ(job_load_timing.connect_timing.dns_start, | 2289 EXPECT_EQ(job_load_timing.connect_timing.dns_start, |
1698 load_timing_result.connect_timing.dns_start); | 2290 load_timing_result.connect_timing.dns_start); |
1699 EXPECT_EQ(job_load_timing.connect_timing.dns_end, | 2291 EXPECT_EQ(job_load_timing.connect_timing.dns_end, |
1700 load_timing_result.connect_timing.dns_end); | 2292 load_timing_result.connect_timing.dns_end); |
(...skipping 10 matching lines...) Expand all Loading... | |
1711 TestLoadTimingNotReusedWithProxy(load_timing_result, | 2303 TestLoadTimingNotReusedWithProxy(load_timing_result, |
1712 CONNECT_TIMING_HAS_SSL_TIMES); | 2304 CONNECT_TIMING_HAS_SSL_TIMES); |
1713 } | 2305 } |
1714 | 2306 |
1715 // Make sure that URLRequest correctly adjusts proxy times when they're before | 2307 // Make sure that URLRequest correctly adjusts proxy times when they're before |
1716 // |request_start|, due to already having a connected socket. This happens in | 2308 // |request_start|, due to already having a connected socket. This happens in |
1717 // the case of reusing a SPDY session. The connected socket is not considered | 2309 // the case of reusing a SPDY session. The connected socket is not considered |
1718 // reused in this test (May be a preconnect). | 2310 // reused in this test (May be a preconnect). |
1719 // | 2311 // |
1720 // To mix things up from the test above, assumes DNS times but no SSL times. | 2312 // To mix things up from the test above, assumes DNS times but no SSL times. |
1721 TEST_F(URLRequestTest, InterceptLoadTimingEarlyProxyResolution) { | 2313 TEST_F(URLRequestInterceptorTest, InterceptLoadTimingEarlyProxyResolution) { |
1722 base::TimeTicks now = base::TimeTicks::Now(); | 2314 base::TimeTicks now = base::TimeTicks::Now(); |
1723 LoadTimingInfo job_load_timing = | 2315 LoadTimingInfo job_load_timing = |
1724 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, true); | 2316 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_DNS_TIMES, true); |
1725 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(6); | 2317 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(6); |
1726 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(5); | 2318 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(5); |
1727 job_load_timing.connect_timing.dns_start = now - base::TimeDelta::FromDays(4); | 2319 job_load_timing.connect_timing.dns_start = now - base::TimeDelta::FromDays(4); |
1728 job_load_timing.connect_timing.dns_end = now - base::TimeDelta::FromDays(3); | 2320 job_load_timing.connect_timing.dns_end = now - base::TimeDelta::FromDays(3); |
1729 job_load_timing.connect_timing.connect_start = | 2321 job_load_timing.connect_timing.connect_start = |
1730 now - base::TimeDelta::FromDays(2); | 2322 now - base::TimeDelta::FromDays(2); |
1731 job_load_timing.connect_timing.connect_end = | 2323 job_load_timing.connect_timing.connect_end = |
1732 now - base::TimeDelta::FromDays(1); | 2324 now - base::TimeDelta::FromDays(1); |
1733 | 2325 |
1734 LoadTimingInfo load_timing_result = | 2326 LoadTimingInfo load_timing_result = |
1735 RunLoadTimingTest(job_load_timing, &default_context_); | 2327 RunURLRequestInterceptorLoadTimingTest( |
2328 job_load_timing, default_context(), interceptor()); | |
1736 | 2329 |
1737 // Proxy times, connect times, and DNS times should all be replaced with | 2330 // Proxy times, connect times, and DNS times should all be replaced with |
1738 // request_start. | 2331 // request_start. |
1739 EXPECT_EQ(load_timing_result.request_start, | 2332 EXPECT_EQ(load_timing_result.request_start, |
1740 load_timing_result.proxy_resolve_start); | 2333 load_timing_result.proxy_resolve_start); |
1741 EXPECT_EQ(load_timing_result.request_start, | 2334 EXPECT_EQ(load_timing_result.request_start, |
1742 load_timing_result.proxy_resolve_end); | 2335 load_timing_result.proxy_resolve_end); |
1743 EXPECT_EQ(load_timing_result.request_start, | 2336 EXPECT_EQ(load_timing_result.request_start, |
1744 load_timing_result.connect_timing.dns_start); | 2337 load_timing_result.connect_timing.dns_start); |
1745 EXPECT_EQ(load_timing_result.request_start, | 2338 EXPECT_EQ(load_timing_result.request_start, |
1746 load_timing_result.connect_timing.dns_end); | 2339 load_timing_result.connect_timing.dns_end); |
1747 EXPECT_EQ(load_timing_result.request_start, | 2340 EXPECT_EQ(load_timing_result.request_start, |
1748 load_timing_result.connect_timing.connect_start); | 2341 load_timing_result.connect_timing.connect_start); |
1749 EXPECT_EQ(load_timing_result.request_start, | 2342 EXPECT_EQ(load_timing_result.request_start, |
1750 load_timing_result.connect_timing.connect_end); | 2343 load_timing_result.connect_timing.connect_end); |
1751 | 2344 |
1752 // Other times should have been left null. | 2345 // Other times should have been left null. |
1753 TestLoadTimingNotReusedWithProxy(load_timing_result, | 2346 TestLoadTimingNotReusedWithProxy(load_timing_result, |
1754 CONNECT_TIMING_HAS_DNS_TIMES); | 2347 CONNECT_TIMING_HAS_DNS_TIMES); |
1755 } | 2348 } |
1756 | 2349 |
1757 // Same as above, but in the reused case. | 2350 // Same as above, but in the reused case. |
1758 TEST_F(URLRequestTest, InterceptLoadTimingEarlyProxyResolutionReused) { | 2351 TEST_F(URLRequestInterceptorTest, |
2352 InterceptLoadTimingEarlyProxyResolutionReused) { | |
1759 base::TimeTicks now = base::TimeTicks::Now(); | 2353 base::TimeTicks now = base::TimeTicks::Now(); |
1760 LoadTimingInfo job_load_timing = NormalLoadTimingInfoReused(now, true); | 2354 LoadTimingInfo job_load_timing = NormalLoadTimingInfoReused(now, true); |
1761 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(4); | 2355 job_load_timing.proxy_resolve_start = now - base::TimeDelta::FromDays(4); |
1762 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(3); | 2356 job_load_timing.proxy_resolve_end = now - base::TimeDelta::FromDays(3); |
1763 | 2357 |
1764 LoadTimingInfo load_timing_result = | 2358 LoadTimingInfo load_timing_result = |
1765 RunLoadTimingTest(job_load_timing, &default_context_); | 2359 RunURLRequestInterceptorLoadTimingTest( |
2360 job_load_timing, default_context(), interceptor()); | |
1766 | 2361 |
1767 // Proxy times and connect times should all be replaced with request_start. | 2362 // Proxy times and connect times should all be replaced with request_start. |
1768 EXPECT_EQ(load_timing_result.request_start, | 2363 EXPECT_EQ(load_timing_result.request_start, |
1769 load_timing_result.proxy_resolve_start); | 2364 load_timing_result.proxy_resolve_start); |
1770 EXPECT_EQ(load_timing_result.request_start, | 2365 EXPECT_EQ(load_timing_result.request_start, |
1771 load_timing_result.proxy_resolve_end); | 2366 load_timing_result.proxy_resolve_end); |
1772 | 2367 |
1773 // Other times should have been left null. | 2368 // Other times should have been left null. |
1774 TestLoadTimingReusedWithProxy(load_timing_result); | 2369 TestLoadTimingReusedWithProxy(load_timing_result); |
1775 } | 2370 } |
1776 | 2371 |
1777 // Make sure that URLRequest correctly adjusts connect times when they're before | 2372 // Make sure that URLRequest correctly adjusts connect times when they're before |
1778 // |request_start|, due to reusing a connected socket. The connected socket is | 2373 // |request_start|, due to reusing a connected socket. The connected socket is |
1779 // not considered reused in this test (May be a preconnect). | 2374 // not considered reused in this test (May be a preconnect). |
1780 // | 2375 // |
1781 // To mix things up, the request has SSL times, but no DNS times. | 2376 // To mix things up, the request has SSL times, but no DNS times. |
1782 TEST_F(URLRequestTest, InterceptLoadTimingEarlyConnect) { | 2377 TEST_F(URLRequestInterceptorTest, InterceptLoadTimingEarlyConnect) { |
1783 base::TimeTicks now = base::TimeTicks::Now(); | 2378 base::TimeTicks now = base::TimeTicks::Now(); |
1784 LoadTimingInfo job_load_timing = | 2379 LoadTimingInfo job_load_timing = |
1785 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, false); | 2380 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_SSL_TIMES, false); |
1786 job_load_timing.connect_timing.connect_start = | 2381 job_load_timing.connect_timing.connect_start = |
1787 now - base::TimeDelta::FromDays(1); | 2382 now - base::TimeDelta::FromDays(1); |
1788 job_load_timing.connect_timing.ssl_start = now - base::TimeDelta::FromDays(2); | 2383 job_load_timing.connect_timing.ssl_start = now - base::TimeDelta::FromDays(2); |
1789 job_load_timing.connect_timing.ssl_end = now - base::TimeDelta::FromDays(3); | 2384 job_load_timing.connect_timing.ssl_end = now - base::TimeDelta::FromDays(3); |
1790 job_load_timing.connect_timing.connect_end = | 2385 job_load_timing.connect_timing.connect_end = |
1791 now - base::TimeDelta::FromDays(4); | 2386 now - base::TimeDelta::FromDays(4); |
1792 | 2387 |
1793 LoadTimingInfo load_timing_result = | 2388 LoadTimingInfo load_timing_result = |
1794 RunLoadTimingTest(job_load_timing, &default_context_); | 2389 RunURLRequestInterceptorLoadTimingTest( |
2390 job_load_timing, default_context(), interceptor()); | |
1795 | 2391 |
1796 // Connect times, and SSL times should be replaced with request_start. | 2392 // Connect times, and SSL times should be replaced with request_start. |
1797 EXPECT_EQ(load_timing_result.request_start, | 2393 EXPECT_EQ(load_timing_result.request_start, |
1798 load_timing_result.connect_timing.connect_start); | 2394 load_timing_result.connect_timing.connect_start); |
1799 EXPECT_EQ(load_timing_result.request_start, | 2395 EXPECT_EQ(load_timing_result.request_start, |
1800 load_timing_result.connect_timing.ssl_start); | 2396 load_timing_result.connect_timing.ssl_start); |
1801 EXPECT_EQ(load_timing_result.request_start, | 2397 EXPECT_EQ(load_timing_result.request_start, |
1802 load_timing_result.connect_timing.ssl_end); | 2398 load_timing_result.connect_timing.ssl_end); |
1803 EXPECT_EQ(load_timing_result.request_start, | 2399 EXPECT_EQ(load_timing_result.request_start, |
1804 load_timing_result.connect_timing.connect_end); | 2400 load_timing_result.connect_timing.connect_end); |
1805 | 2401 |
1806 // Other times should have been left null. | 2402 // Other times should have been left null. |
1807 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_SSL_TIMES); | 2403 TestLoadTimingNotReused(load_timing_result, CONNECT_TIMING_HAS_SSL_TIMES); |
1808 } | 2404 } |
1809 | 2405 |
1810 // Make sure that URLRequest correctly adjusts connect times when they're before | 2406 // Make sure that URLRequest correctly adjusts connect times when they're before |
1811 // |request_start|, due to reusing a connected socket in the case that there | 2407 // |request_start|, due to reusing a connected socket in the case that there |
1812 // are also proxy times. The connected socket is not considered reused in this | 2408 // are also proxy times. The connected socket is not considered reused in this |
1813 // test (May be a preconnect). | 2409 // test (May be a preconnect). |
1814 // | 2410 // |
1815 // In this test, there are no SSL or DNS times. | 2411 // In this test, there are no SSL or DNS times. |
1816 TEST_F(URLRequestTest, InterceptLoadTimingEarlyConnectWithProxy) { | 2412 TEST_F(URLRequestInterceptorTest, InterceptLoadTimingEarlyConnectWithProxy) { |
1817 base::TimeTicks now = base::TimeTicks::Now(); | 2413 base::TimeTicks now = base::TimeTicks::Now(); |
1818 LoadTimingInfo job_load_timing = | 2414 LoadTimingInfo job_load_timing = |
1819 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY, true); | 2415 NormalLoadTimingInfo(now, CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY, true); |
1820 job_load_timing.connect_timing.connect_start = | 2416 job_load_timing.connect_timing.connect_start = |
1821 now - base::TimeDelta::FromDays(1); | 2417 now - base::TimeDelta::FromDays(1); |
1822 job_load_timing.connect_timing.connect_end = | 2418 job_load_timing.connect_timing.connect_end = |
1823 now - base::TimeDelta::FromDays(2); | 2419 now - base::TimeDelta::FromDays(2); |
1824 | 2420 |
1825 LoadTimingInfo load_timing_result = | 2421 LoadTimingInfo load_timing_result = |
1826 RunLoadTimingTest(job_load_timing, &default_context_); | 2422 RunURLRequestInterceptorLoadTimingTest( |
2423 job_load_timing, default_context(), interceptor()); | |
1827 | 2424 |
1828 // Connect times should be replaced with proxy_resolve_end. | 2425 // Connect times should be replaced with proxy_resolve_end. |
1829 EXPECT_EQ(load_timing_result.proxy_resolve_end, | 2426 EXPECT_EQ(load_timing_result.proxy_resolve_end, |
1830 load_timing_result.connect_timing.connect_start); | 2427 load_timing_result.connect_timing.connect_start); |
1831 EXPECT_EQ(load_timing_result.proxy_resolve_end, | 2428 EXPECT_EQ(load_timing_result.proxy_resolve_end, |
1832 load_timing_result.connect_timing.connect_end); | 2429 load_timing_result.connect_timing.connect_end); |
1833 | 2430 |
1834 // Other times should have been left null. | 2431 // Other times should have been left null. |
1835 TestLoadTimingNotReusedWithProxy(load_timing_result, | 2432 TestLoadTimingNotReusedWithProxy(load_timing_result, |
1836 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); | 2433 CONNECT_TIMING_HAS_CONNECT_TIMES_ONLY); |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2658 EXPECT_TRUE(r->status().error() == ERR_RESPONSE_HEADERS_TOO_BIG); | 3255 EXPECT_TRUE(r->status().error() == ERR_RESPONSE_HEADERS_TOO_BIG); |
2659 // The test server appears to be unable to handle subsequent requests | 3256 // The test server appears to be unable to handle subsequent requests |
2660 // after this error is triggered. Force it to restart. | 3257 // after this error is triggered. Force it to restart. |
2661 EXPECT_TRUE(test_server_.Stop()); | 3258 EXPECT_TRUE(test_server_.Stop()); |
2662 EXPECT_TRUE(test_server_.Start()); | 3259 EXPECT_TRUE(test_server_.Start()); |
2663 } | 3260 } |
2664 | 3261 |
2665 return is_success; | 3262 return is_success; |
2666 } | 3263 } |
2667 | 3264 |
3265 LocalHttpTestServer* test_server() { | |
3266 return &test_server_; | |
3267 } | |
3268 | |
3269 protected: | |
2668 LocalHttpTestServer test_server_; | 3270 LocalHttpTestServer test_server_; |
2669 }; | 3271 }; |
2670 | 3272 |
2671 // In this unit test, we're using the HTTPTestServer as a proxy server and | 3273 // In this unit test, we're using the HTTPTestServer as a proxy server and |
2672 // issuing a CONNECT request with the magic host name "www.redirect.com". | 3274 // issuing a CONNECT request with the magic host name "www.redirect.com". |
2673 // The HTTPTestServer will return a 302 response, which we should not | 3275 // The HTTPTestServer will return a 302 response, which we should not |
2674 // follow. | 3276 // follow. |
2675 TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { | 3277 TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { |
2676 ASSERT_TRUE(test_server_.Start()); | 3278 ASSERT_TRUE(test_server_.Start()); |
2677 | 3279 |
(...skipping 2481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5159 req->Cancel(); | 5761 req->Cancel(); |
5160 } | 5762 } |
5161 | 5763 |
5162 TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictDataRedirects) { | 5764 TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictDataRedirects) { |
5163 // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). | 5765 // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). |
5164 GURL data_url("data:,foo"); | 5766 GURL data_url("data:,foo"); |
5165 DataProtocolHandler data_protocol_handler; | 5767 DataProtocolHandler data_protocol_handler; |
5166 EXPECT_FALSE(data_protocol_handler.IsSafeRedirectTarget(data_url)); | 5768 EXPECT_FALSE(data_protocol_handler.IsSafeRedirectTarget(data_url)); |
5167 | 5769 |
5168 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). | 5770 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). |
5169 EXPECT_FALSE(job_factory_.IsSafeRedirectTarget(data_url)); | 5771 EXPECT_FALSE(job_factory_->IsSafeRedirectTarget(data_url)); |
5170 } | 5772 } |
5171 | 5773 |
5172 #if !defined(DISABLE_FILE_SUPPORT) | 5774 #if !defined(DISABLE_FILE_SUPPORT) |
5173 TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictFileRedirects) { | 5775 TEST_F(URLRequestTestHTTP, ProtocolHandlerAndFactoryRestrictFileRedirects) { |
5174 // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). | 5776 // Test URLRequestJobFactory::ProtocolHandler::IsSafeRedirectTarget(). |
5175 GURL file_url("file:///foo.txt"); | 5777 GURL file_url("file:///foo.txt"); |
5176 FileProtocolHandler file_protocol_handler(base::MessageLoopProxy::current()); | 5778 FileProtocolHandler file_protocol_handler(base::MessageLoopProxy::current()); |
5177 EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url)); | 5779 EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url)); |
5178 | 5780 |
5179 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). | 5781 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). |
5180 EXPECT_FALSE(job_factory_.IsSafeRedirectTarget(file_url)); | 5782 EXPECT_FALSE(job_factory_->IsSafeRedirectTarget(file_url)); |
5181 } | 5783 } |
5182 | 5784 |
5183 TEST_F(URLRequestTestHTTP, RestrictFileRedirects) { | 5785 TEST_F(URLRequestTestHTTP, RestrictFileRedirects) { |
5184 ASSERT_TRUE(test_server_.Start()); | 5786 ASSERT_TRUE(test_server_.Start()); |
5185 | 5787 |
5186 TestDelegate d; | 5788 TestDelegate d; |
5187 scoped_ptr<URLRequest> req(default_context_.CreateRequest( | 5789 scoped_ptr<URLRequest> req(default_context_.CreateRequest( |
5188 test_server_.GetURL("files/redirect-to-file.html"), DEFAULT_PRIORITY, &d, | 5790 test_server_.GetURL("files/redirect-to-file.html"), DEFAULT_PRIORITY, &d, |
5189 NULL)); | 5791 NULL)); |
5190 req->Start(); | 5792 req->Start(); |
(...skipping 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6439 scoped_ptr<URLRequest> req(context.CreateRequest( | 7041 scoped_ptr<URLRequest> req(context.CreateRequest( |
6440 GURL("http://127.0.0.1/"), DEFAULT_PRIORITY, &d, NULL)); | 7042 GURL("http://127.0.0.1/"), DEFAULT_PRIORITY, &d, NULL)); |
6441 req->Start(); | 7043 req->Start(); |
6442 base::RunLoop().Run(); | 7044 base::RunLoop().Run(); |
6443 | 7045 |
6444 EXPECT_TRUE(d.request_failed()); | 7046 EXPECT_TRUE(d.request_failed()); |
6445 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); | 7047 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); |
6446 EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, req->status().error()); | 7048 EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, req->status().error()); |
6447 } | 7049 } |
6448 | 7050 |
7051 class URLRequestInterceptorTestHTTP : public URLRequestTestHTTP { | |
7052 public: | |
7053 // TODO(bengr): Merge this with the URLRequestInterceptorHTTPTest fixture, | |
7054 // ideally remove the dependency on URLRequestTestJob, and maybe move these | |
7055 // tests into the factory tests. | |
7056 URLRequestInterceptorTestHTTP() : URLRequestTestHTTP(), interceptor_(NULL) { | |
7057 } | |
7058 | |
7059 void SetUpFactory() override { | |
7060 interceptor_ = new MockURLRequestInterceptor(); | |
7061 job_factory_.reset(new URLRequestInterceptingJobFactory( | |
7062 job_factory_.Pass(), make_scoped_ptr(interceptor_))); | |
7063 } | |
7064 | |
7065 MockURLRequestInterceptor* interceptor() const { | |
7066 return interceptor_; | |
7067 } | |
7068 | |
7069 private: | |
7070 MockURLRequestInterceptor* interceptor_; | |
7071 | |
mmenke
2014/11/06 18:49:37
nit: Remove blank line.
bengr
2014/11/06 23:58:01
Done.
| |
7072 }; | |
7073 | |
7074 TEST_F(URLRequestInterceptorTestHTTP, | |
7075 NetworkDelegateNotificationOnRedirectIntercept) { | |
7076 interceptor()->set_intercept_redirect(true); | |
7077 interceptor()->set_redirect_headers(MockURLRequestInterceptor::ok_headers()); | |
7078 interceptor()->set_redirect_data(MockURLRequestInterceptor::ok_data()); | |
7079 | |
7080 ASSERT_TRUE(test_server()->Start()); | |
7081 | |
7082 TestDelegate d; | |
7083 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
7084 test_server()->GetURL("files/redirect-test.html"), DEFAULT_PRIORITY, | |
7085 &d, nullptr)); | |
7086 req->Start(); | |
7087 base::RunLoop().Run(); | |
7088 | |
7089 EXPECT_TRUE(interceptor()->did_intercept_redirect()); | |
7090 // Check we got one good response | |
7091 EXPECT_TRUE(req->status().is_success()); | |
7092 if (req->status().is_success()) { | |
7093 EXPECT_EQ(200, req->response_headers()->response_code()); | |
7094 } | |
mmenke
2014/11/06 18:49:37
nit: Don't use braces when both parts of an if ta
bengr
2014/11/06 23:58:01
Done.
| |
7095 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
7096 EXPECT_EQ(1, d.response_started_count()); | |
7097 EXPECT_EQ(0, d.received_redirect_count()); | |
7098 | |
7099 EXPECT_EQ(1, default_network_delegate()->created_requests()); | |
7100 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count()); | |
7101 EXPECT_EQ(1, default_network_delegate()->headers_received_count()); | |
7102 } | |
7103 | |
7104 TEST_F(URLRequestInterceptorTestHTTP, | |
7105 NetworkDelegateNotificationOnErrorIntercept) { | |
7106 // Intercept that error and respond with an OK response. | |
7107 interceptor()->set_intercept_final_response(true); | |
7108 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); | |
7109 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); | |
7110 default_network_delegate()->set_can_be_intercepted_on_error(true); | |
7111 | |
7112 ASSERT_TRUE(test_server()->Start()); | |
7113 | |
7114 TestDelegate d; | |
7115 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
7116 test_server()->GetURL("files/two-content-lengths.html"), DEFAULT_PRIORITY, | |
7117 &d, nullptr)); | |
7118 req->set_method("GET"); | |
7119 req->Start(); | |
7120 base::RunLoop().Run(); | |
7121 | |
7122 EXPECT_TRUE(interceptor()->did_intercept_final()); | |
7123 | |
7124 // Check we received one good response. | |
7125 EXPECT_TRUE(req->status().is_success()); | |
7126 EXPECT_EQ(200, req->response_headers()->response_code()); | |
mmenke
2014/11/06 18:49:37
Should probably check if the response was a succes
bengr
2014/11/06 23:58:01
Done.
| |
7127 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); | |
7128 EXPECT_EQ(1, d.response_started_count()); | |
7129 EXPECT_EQ(0, d.received_redirect_count()); | |
7130 | |
7131 EXPECT_EQ(1, default_network_delegate()->created_requests()); | |
7132 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count()); | |
7133 EXPECT_EQ(0, default_network_delegate()->headers_received_count()); | |
7134 } | |
7135 | |
7136 TEST_F(URLRequestInterceptorTestHTTP, | |
7137 NetworkDelegateNotificationOnResponseIntercept) { | |
7138 // Intercept that error and respond with an OK response. | |
7139 interceptor()->set_intercept_final_response(true); | |
7140 | |
7141 // Intercept with a real URLRequestHttpJob. | |
7142 interceptor()->set_use_url_request_http_job(true); | |
7143 | |
7144 ASSERT_TRUE(test_server()->Start()); | |
7145 | |
7146 TestDelegate d; | |
7147 scoped_ptr<URLRequest> req(default_context().CreateRequest( | |
7148 test_server()->GetURL("files/simple.html"), DEFAULT_PRIORITY, | |
7149 &d, nullptr)); | |
7150 req->set_method("GET"); | |
7151 req->Start(); | |
7152 base::RunLoop().Run(); | |
7153 | |
7154 EXPECT_TRUE(interceptor()->did_intercept_final()); | |
7155 | |
7156 // Check we received one good response. | |
7157 EXPECT_TRUE(req->status().is_success()); | |
7158 EXPECT_EQ(200, req->response_headers()->response_code()); | |
mmenke
2014/11/06 18:49:37
Should probably check if the response was a succes
bengr
2014/11/06 23:58:01
Done.
| |
7159 EXPECT_EQ("hello", d.data_received()); | |
7160 EXPECT_EQ(1, d.response_started_count()); | |
7161 EXPECT_EQ(0, d.received_redirect_count()); | |
7162 | |
7163 EXPECT_EQ(1, default_network_delegate()->created_requests()); | |
7164 EXPECT_EQ(2, default_network_delegate()->before_send_headers_count()); | |
7165 EXPECT_EQ(2, default_network_delegate()->headers_received_count()); | |
7166 } | |
7167 | |
6449 class HTTPSRequestTest : public testing::Test { | 7168 class HTTPSRequestTest : public testing::Test { |
6450 public: | 7169 public: |
6451 HTTPSRequestTest() : default_context_(true) { | 7170 HTTPSRequestTest() : default_context_(true) { |
6452 default_context_.set_network_delegate(&default_network_delegate_); | 7171 default_context_.set_network_delegate(&default_network_delegate_); |
6453 default_context_.Init(); | 7172 default_context_.Init(); |
6454 } | 7173 } |
6455 ~HTTPSRequestTest() override {} | 7174 ~HTTPSRequestTest() override {} |
6456 | 7175 |
6457 protected: | 7176 protected: |
6458 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. | 7177 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. |
(...skipping 1828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8287 | 9006 |
8288 EXPECT_FALSE(r->is_pending()); | 9007 EXPECT_FALSE(r->is_pending()); |
8289 EXPECT_EQ(1, d->response_started_count()); | 9008 EXPECT_EQ(1, d->response_started_count()); |
8290 EXPECT_FALSE(d->received_data_before_response()); | 9009 EXPECT_FALSE(d->received_data_before_response()); |
8291 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 9010 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
8292 } | 9011 } |
8293 } | 9012 } |
8294 #endif // !defined(DISABLE_FTP_SUPPORT) | 9013 #endif // !defined(DISABLE_FTP_SUPPORT) |
8295 | 9014 |
8296 } // namespace net | 9015 } // namespace net |
OLD | NEW |