| 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 namespace net { | 97 namespace net { |
| 98 | 98 |
| 99 namespace { | 99 namespace { |
| 100 | 100 |
| 101 const base::string16 kChrome(ASCIIToUTF16("chrome")); | 101 const base::string16 kChrome(ASCIIToUTF16("chrome")); |
| 102 const base::string16 kSecret(ASCIIToUTF16("secret")); | 102 const base::string16 kSecret(ASCIIToUTF16("secret")); |
| 103 const base::string16 kUser(ASCIIToUTF16("user")); | 103 const base::string16 kUser(ASCIIToUTF16("user")); |
| 104 | 104 |
| 105 // Tests load timing information in the case a fresh connection was used, with | 105 // Tests load timing information in the case a fresh connection was used, with |
| 106 // no proxy. | 106 // no proxy. |
| 107 void TestLoadTimingNotReused(const net::LoadTimingInfo& load_timing_info, | 107 void TestLoadTimingNotReused(const LoadTimingInfo& load_timing_info, |
| 108 int connect_timing_flags) { | 108 int connect_timing_flags) { |
| 109 EXPECT_FALSE(load_timing_info.socket_reused); | 109 EXPECT_FALSE(load_timing_info.socket_reused); |
| 110 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 110 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 111 | 111 |
| 112 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 112 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 113 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 113 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 114 | 114 |
| 115 EXPECT_LE(load_timing_info.request_start, | 115 EXPECT_LE(load_timing_info.request_start, |
| 116 load_timing_info.connect_timing.connect_start); | 116 load_timing_info.connect_timing.connect_start); |
| 117 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 117 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
| 118 connect_timing_flags); | 118 connect_timing_flags); |
| 119 EXPECT_LE(load_timing_info.connect_timing.connect_end, | 119 EXPECT_LE(load_timing_info.connect_timing.connect_end, |
| 120 load_timing_info.send_start); | 120 load_timing_info.send_start); |
| 121 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 121 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 122 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); | 122 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 123 | 123 |
| 124 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); | 124 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 125 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); | 125 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 126 } | 126 } |
| 127 | 127 |
| 128 // Same as above, but with proxy times. | 128 // Same as above, but with proxy times. |
| 129 void TestLoadTimingNotReusedWithProxy( | 129 void TestLoadTimingNotReusedWithProxy( |
| 130 const net::LoadTimingInfo& load_timing_info, | 130 const LoadTimingInfo& load_timing_info, |
| 131 int connect_timing_flags) { | 131 int connect_timing_flags) { |
| 132 EXPECT_FALSE(load_timing_info.socket_reused); | 132 EXPECT_FALSE(load_timing_info.socket_reused); |
| 133 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 133 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 134 | 134 |
| 135 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 135 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 136 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 136 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 137 | 137 |
| 138 EXPECT_LE(load_timing_info.request_start, | 138 EXPECT_LE(load_timing_info.request_start, |
| 139 load_timing_info.proxy_resolve_start); | 139 load_timing_info.proxy_resolve_start); |
| 140 EXPECT_LE(load_timing_info.proxy_resolve_start, | 140 EXPECT_LE(load_timing_info.proxy_resolve_start, |
| 141 load_timing_info.proxy_resolve_end); | 141 load_timing_info.proxy_resolve_end); |
| 142 EXPECT_LE(load_timing_info.proxy_resolve_end, | 142 EXPECT_LE(load_timing_info.proxy_resolve_end, |
| 143 load_timing_info.connect_timing.connect_start); | 143 load_timing_info.connect_timing.connect_start); |
| 144 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, | 144 ExpectConnectTimingHasTimes(load_timing_info.connect_timing, |
| 145 connect_timing_flags); | 145 connect_timing_flags); |
| 146 EXPECT_LE(load_timing_info.connect_timing.connect_end, | 146 EXPECT_LE(load_timing_info.connect_timing.connect_end, |
| 147 load_timing_info.send_start); | 147 load_timing_info.send_start); |
| 148 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 148 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 149 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); | 149 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 150 } | 150 } |
| 151 | 151 |
| 152 // Same as above, but with a reused socket and proxy times. | 152 // Same as above, but with a reused socket and proxy times. |
| 153 void TestLoadTimingReusedWithProxy( | 153 void TestLoadTimingReusedWithProxy( |
| 154 const net::LoadTimingInfo& load_timing_info) { | 154 const LoadTimingInfo& load_timing_info) { |
| 155 EXPECT_TRUE(load_timing_info.socket_reused); | 155 EXPECT_TRUE(load_timing_info.socket_reused); |
| 156 EXPECT_NE(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 156 EXPECT_NE(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 157 | 157 |
| 158 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 158 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 159 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 159 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 160 | 160 |
| 161 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 161 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 162 | 162 |
| 163 EXPECT_LE(load_timing_info.request_start, | 163 EXPECT_LE(load_timing_info.request_start, |
| 164 load_timing_info.proxy_resolve_start); | 164 load_timing_info.proxy_resolve_start); |
| 165 EXPECT_LE(load_timing_info.proxy_resolve_start, | 165 EXPECT_LE(load_timing_info.proxy_resolve_start, |
| 166 load_timing_info.proxy_resolve_end); | 166 load_timing_info.proxy_resolve_end); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 186 | 186 |
| 187 for (size_t i = 0; i < len; i++) { | 187 for (size_t i = 0; i < len; i++) { |
| 188 buffer[i] = static_cast<char>(rand()); | 188 buffer[i] = static_cast<char>(rand()); |
| 189 if (!buffer[i]) | 189 if (!buffer[i]) |
| 190 buffer[i] = 'g'; | 190 buffer[i] = 'g'; |
| 191 } | 191 } |
| 192 } | 192 } |
| 193 | 193 |
| 194 #if !defined(OS_IOS) | 194 #if !defined(OS_IOS) |
| 195 void TestLoadTimingCacheHitNoNetwork( | 195 void TestLoadTimingCacheHitNoNetwork( |
| 196 const net::LoadTimingInfo& load_timing_info) { | 196 const LoadTimingInfo& load_timing_info) { |
| 197 EXPECT_FALSE(load_timing_info.socket_reused); | 197 EXPECT_FALSE(load_timing_info.socket_reused); |
| 198 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 198 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 199 | 199 |
| 200 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 200 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 201 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 201 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 202 | 202 |
| 203 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 203 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 204 EXPECT_LE(load_timing_info.request_start, load_timing_info.send_start); | 204 EXPECT_LE(load_timing_info.request_start, load_timing_info.send_start); |
| 205 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); | 205 EXPECT_LE(load_timing_info.send_start, load_timing_info.send_end); |
| 206 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); | 206 EXPECT_LE(load_timing_info.send_end, load_timing_info.receive_headers_end); |
| 207 | 207 |
| 208 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); | 208 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 209 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); | 209 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 210 } | 210 } |
| 211 | 211 |
| 212 // Tests load timing in the case that there is no HTTP response. This can be | 212 // Tests load timing in the case that there is no HTTP response. This can be |
| 213 // used to test in the case of errors or non-HTTP requests. | 213 // used to test in the case of errors or non-HTTP requests. |
| 214 void TestLoadTimingNoHttpResponse( | 214 void TestLoadTimingNoHttpResponse( |
| 215 const net::LoadTimingInfo& load_timing_info) { | 215 const LoadTimingInfo& load_timing_info) { |
| 216 EXPECT_FALSE(load_timing_info.socket_reused); | 216 EXPECT_FALSE(load_timing_info.socket_reused); |
| 217 EXPECT_EQ(net::NetLog::Source::kInvalidId, load_timing_info.socket_log_id); | 217 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); |
| 218 | 218 |
| 219 // Only the request times should be non-null. | 219 // Only the request times should be non-null. |
| 220 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 220 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 221 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 221 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 222 | 222 |
| 223 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); | 223 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); |
| 224 | 224 |
| 225 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); | 225 EXPECT_TRUE(load_timing_info.proxy_resolve_start.is_null()); |
| 226 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); | 226 EXPECT_TRUE(load_timing_info.proxy_resolve_end.is_null()); |
| 227 EXPECT_TRUE(load_timing_info.send_start.is_null()); | 227 EXPECT_TRUE(load_timing_info.send_start.is_null()); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 // Stages in which the delegate can block. | 298 // Stages in which the delegate can block. |
| 299 enum Stage { | 299 enum Stage { |
| 300 NOT_BLOCKED = 0, | 300 NOT_BLOCKED = 0, |
| 301 ON_BEFORE_URL_REQUEST = 1 << 0, | 301 ON_BEFORE_URL_REQUEST = 1 << 0, |
| 302 ON_BEFORE_SEND_HEADERS = 1 << 1, | 302 ON_BEFORE_SEND_HEADERS = 1 << 1, |
| 303 ON_HEADERS_RECEIVED = 1 << 2, | 303 ON_HEADERS_RECEIVED = 1 << 2, |
| 304 ON_AUTH_REQUIRED = 1 << 3 | 304 ON_AUTH_REQUIRED = 1 << 3 |
| 305 }; | 305 }; |
| 306 | 306 |
| 307 // Behavior during blocked stages. During other stages, just | 307 // Behavior during blocked stages. During other stages, just |
| 308 // returns net::OK or NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION. | 308 // returns OK or NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION. |
| 309 enum BlockMode { | 309 enum BlockMode { |
| 310 SYNCHRONOUS, // No callback, returns specified return values. | 310 SYNCHRONOUS, // No callback, returns specified return values. |
| 311 AUTO_CALLBACK, // |this| posts a task to run the callback using the | 311 AUTO_CALLBACK, // |this| posts a task to run the callback using the |
| 312 // specified return codes. | 312 // specified return codes. |
| 313 USER_CALLBACK, // User takes care of doing a callback. |retval_| and | 313 USER_CALLBACK, // User takes care of doing a callback. |retval_| and |
| 314 // |auth_retval_| are ignored. In every blocking stage the | 314 // |auth_retval_| are ignored. In every blocking stage the |
| 315 // message loop is quit. | 315 // message loop is quit. |
| 316 }; | 316 }; |
| 317 | 317 |
| 318 // Creates a delegate which does not block at all. | 318 // Creates a delegate which does not block at all. |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 std::string partial_buffer_string(buffer.get() + first_byte_position, | 764 std::string partial_buffer_string(buffer.get() + first_byte_position, |
| 765 buffer.get() + last_byte_position + 1); | 765 buffer.get() + last_byte_position + 1); |
| 766 | 766 |
| 767 TestDelegate d; | 767 TestDelegate d; |
| 768 { | 768 { |
| 769 URLRequest r(temp_url, DEFAULT_PRIORITY, &d, &default_context_); | 769 URLRequest r(temp_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 770 | 770 |
| 771 HttpRequestHeaders headers; | 771 HttpRequestHeaders headers; |
| 772 headers.SetHeader( | 772 headers.SetHeader( |
| 773 HttpRequestHeaders::kRange, | 773 HttpRequestHeaders::kRange, |
| 774 net::HttpByteRange::Bounded( | 774 HttpByteRange::Bounded( |
| 775 first_byte_position, last_byte_position).GetHeaderValue()); | 775 first_byte_position, last_byte_position).GetHeaderValue()); |
| 776 r.SetExtraRequestHeaders(headers); | 776 r.SetExtraRequestHeaders(headers); |
| 777 r.Start(); | 777 r.Start(); |
| 778 EXPECT_TRUE(r.is_pending()); | 778 EXPECT_TRUE(r.is_pending()); |
| 779 | 779 |
| 780 base::RunLoop().Run(); | 780 base::RunLoop().Run(); |
| 781 EXPECT_TRUE(!r.is_pending()); | 781 EXPECT_TRUE(!r.is_pending()); |
| 782 EXPECT_EQ(1, d.response_started_count()); | 782 EXPECT_EQ(1, d.response_started_count()); |
| 783 EXPECT_FALSE(d.received_data_before_response()); | 783 EXPECT_FALSE(d.received_data_before_response()); |
| 784 EXPECT_EQ(static_cast<int>(content_length), d.bytes_received()); | 784 EXPECT_EQ(static_cast<int>(content_length), d.bytes_received()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 807 const size_t content_length = last_byte_position - first_byte_position + 1; | 807 const size_t content_length = last_byte_position - first_byte_position + 1; |
| 808 std::string partial_buffer_string(buffer.get() + first_byte_position, | 808 std::string partial_buffer_string(buffer.get() + first_byte_position, |
| 809 buffer.get() + last_byte_position + 1); | 809 buffer.get() + last_byte_position + 1); |
| 810 | 810 |
| 811 TestDelegate d; | 811 TestDelegate d; |
| 812 { | 812 { |
| 813 URLRequest r(temp_url, DEFAULT_PRIORITY, &d, &default_context_); | 813 URLRequest r(temp_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 814 | 814 |
| 815 HttpRequestHeaders headers; | 815 HttpRequestHeaders headers; |
| 816 headers.SetHeader(HttpRequestHeaders::kRange, | 816 headers.SetHeader(HttpRequestHeaders::kRange, |
| 817 net::HttpByteRange::RightUnbounded( | 817 HttpByteRange::RightUnbounded( |
| 818 first_byte_position).GetHeaderValue()); | 818 first_byte_position).GetHeaderValue()); |
| 819 r.SetExtraRequestHeaders(headers); | 819 r.SetExtraRequestHeaders(headers); |
| 820 r.Start(); | 820 r.Start(); |
| 821 EXPECT_TRUE(r.is_pending()); | 821 EXPECT_TRUE(r.is_pending()); |
| 822 | 822 |
| 823 base::RunLoop().Run(); | 823 base::RunLoop().Run(); |
| 824 EXPECT_TRUE(!r.is_pending()); | 824 EXPECT_TRUE(!r.is_pending()); |
| 825 EXPECT_EQ(1, d.response_started_count()); | 825 EXPECT_EQ(1, d.response_started_count()); |
| 826 EXPECT_FALSE(d.received_data_before_response()); | 826 EXPECT_FALSE(d.received_data_before_response()); |
| 827 EXPECT_EQ(static_cast<int>(content_length), d.bytes_received()); | 827 EXPECT_EQ(static_cast<int>(content_length), d.bytes_received()); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 EXPECT_TRUE(base::DeleteFile(temp_path, false)); | 862 EXPECT_TRUE(base::DeleteFile(temp_path, false)); |
| 863 } | 863 } |
| 864 | 864 |
| 865 TEST_F(URLRequestTest, AllowFileURLs) { | 865 TEST_F(URLRequestTest, AllowFileURLs) { |
| 866 base::ScopedTempDir temp_dir; | 866 base::ScopedTempDir temp_dir; |
| 867 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | 867 ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
| 868 base::FilePath test_file; | 868 base::FilePath test_file; |
| 869 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &test_file)); | 869 ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir.path(), &test_file)); |
| 870 std::string test_data("monkey"); | 870 std::string test_data("monkey"); |
| 871 base::WriteFile(test_file, test_data.data(), test_data.size()); | 871 base::WriteFile(test_file, test_data.data(), test_data.size()); |
| 872 GURL test_file_url = net::FilePathToFileURL(test_file); | 872 GURL test_file_url = FilePathToFileURL(test_file); |
| 873 | 873 |
| 874 { | 874 { |
| 875 TestDelegate d; | 875 TestDelegate d; |
| 876 TestNetworkDelegate network_delegate; | 876 TestNetworkDelegate network_delegate; |
| 877 network_delegate.set_can_access_files(true); | 877 network_delegate.set_can_access_files(true); |
| 878 default_context_.set_network_delegate(&network_delegate); | 878 default_context_.set_network_delegate(&network_delegate); |
| 879 URLRequest r(test_file_url, DEFAULT_PRIORITY, &d, &default_context_); | 879 URLRequest r(test_file_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 880 r.Start(); | 880 r.Start(); |
| 881 base::RunLoop().Run(); | 881 base::RunLoop().Run(); |
| 882 EXPECT_FALSE(d.request_failed()); | 882 EXPECT_FALSE(d.request_failed()); |
| (...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1866 // The proxy server is not set before failure. | 1866 // The proxy server is not set before failure. |
| 1867 EXPECT_TRUE(req.proxy_server().IsEmpty()); | 1867 EXPECT_TRUE(req.proxy_server().IsEmpty()); |
| 1868 EXPECT_EQ(URLRequestStatus::FAILED, req.status().status()); | 1868 EXPECT_EQ(URLRequestStatus::FAILED, req.status().status()); |
| 1869 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, req.status().error()); | 1869 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, req.status().error()); |
| 1870 | 1870 |
| 1871 EXPECT_EQ(1, network_delegate.error_count()); | 1871 EXPECT_EQ(1, network_delegate.error_count()); |
| 1872 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, network_delegate.last_error()); | 1872 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, network_delegate.last_error()); |
| 1873 EXPECT_EQ(1, network_delegate.completed_requests()); | 1873 EXPECT_EQ(1, network_delegate.completed_requests()); |
| 1874 } | 1874 } |
| 1875 | 1875 |
| 1876 // Make sure that net::NetworkDelegate::NotifyCompleted is called if | 1876 // Make sure that NetworkDelegate::NotifyCompleted is called if |
| 1877 // content is empty. | 1877 // content is empty. |
| 1878 TEST_F(URLRequestTest, RequestCompletionForEmptyResponse) { | 1878 TEST_F(URLRequestTest, RequestCompletionForEmptyResponse) { |
| 1879 TestDelegate d; | 1879 TestDelegate d; |
| 1880 URLRequest req(GURL("data:,"), DEFAULT_PRIORITY, &d, &default_context_); | 1880 URLRequest req(GURL("data:,"), DEFAULT_PRIORITY, &d, &default_context_); |
| 1881 req.Start(); | 1881 req.Start(); |
| 1882 base::RunLoop().Run(); | 1882 base::RunLoop().Run(); |
| 1883 EXPECT_EQ("", d.data_received()); | 1883 EXPECT_EQ("", d.data_received()); |
| 1884 EXPECT_EQ(1, default_network_delegate_.completed_requests()); | 1884 EXPECT_EQ(1, default_network_delegate_.completed_requests()); |
| 1885 } | 1885 } |
| 1886 | 1886 |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2424 } | 2424 } |
| 2425 | 2425 |
| 2426 // FixedDateNetworkDelegate swaps out the server's HTTP Date response header | 2426 // FixedDateNetworkDelegate swaps out the server's HTTP Date response header |
| 2427 // value for the |fixed_date| argument given to the constructor. | 2427 // value for the |fixed_date| argument given to the constructor. |
| 2428 class FixedDateNetworkDelegate : public TestNetworkDelegate { | 2428 class FixedDateNetworkDelegate : public TestNetworkDelegate { |
| 2429 public: | 2429 public: |
| 2430 explicit FixedDateNetworkDelegate(const std::string& fixed_date) | 2430 explicit FixedDateNetworkDelegate(const std::string& fixed_date) |
| 2431 : fixed_date_(fixed_date) {} | 2431 : fixed_date_(fixed_date) {} |
| 2432 virtual ~FixedDateNetworkDelegate() {} | 2432 virtual ~FixedDateNetworkDelegate() {} |
| 2433 | 2433 |
| 2434 // net::NetworkDelegate implementation | 2434 // NetworkDelegate implementation |
| 2435 virtual int OnHeadersReceived( | 2435 virtual int OnHeadersReceived( |
| 2436 net::URLRequest* request, | 2436 URLRequest* request, |
| 2437 const net::CompletionCallback& callback, | 2437 const CompletionCallback& callback, |
| 2438 const net::HttpResponseHeaders* original_response_headers, | 2438 const HttpResponseHeaders* original_response_headers, |
| 2439 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, | 2439 scoped_refptr<HttpResponseHeaders>* override_response_headers, |
| 2440 GURL* allowed_unsafe_redirect_url) OVERRIDE; | 2440 GURL* allowed_unsafe_redirect_url) OVERRIDE; |
| 2441 | 2441 |
| 2442 private: | 2442 private: |
| 2443 std::string fixed_date_; | 2443 std::string fixed_date_; |
| 2444 | 2444 |
| 2445 DISALLOW_COPY_AND_ASSIGN(FixedDateNetworkDelegate); | 2445 DISALLOW_COPY_AND_ASSIGN(FixedDateNetworkDelegate); |
| 2446 }; | 2446 }; |
| 2447 | 2447 |
| 2448 int FixedDateNetworkDelegate::OnHeadersReceived( | 2448 int FixedDateNetworkDelegate::OnHeadersReceived( |
| 2449 net::URLRequest* request, | 2449 URLRequest* request, |
| 2450 const net::CompletionCallback& callback, | 2450 const CompletionCallback& callback, |
| 2451 const net::HttpResponseHeaders* original_response_headers, | 2451 const HttpResponseHeaders* original_response_headers, |
| 2452 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, | 2452 scoped_refptr<HttpResponseHeaders>* override_response_headers, |
| 2453 GURL* allowed_unsafe_redirect_url) { | 2453 GURL* allowed_unsafe_redirect_url) { |
| 2454 net::HttpResponseHeaders* new_response_headers = | 2454 HttpResponseHeaders* new_response_headers = |
| 2455 new net::HttpResponseHeaders(original_response_headers->raw_headers()); | 2455 new HttpResponseHeaders(original_response_headers->raw_headers()); |
| 2456 | 2456 |
| 2457 new_response_headers->RemoveHeader("Date"); | 2457 new_response_headers->RemoveHeader("Date"); |
| 2458 new_response_headers->AddHeader("Date: " + fixed_date_); | 2458 new_response_headers->AddHeader("Date: " + fixed_date_); |
| 2459 | 2459 |
| 2460 *override_response_headers = new_response_headers; | 2460 *override_response_headers = new_response_headers; |
| 2461 return TestNetworkDelegate::OnHeadersReceived(request, | 2461 return TestNetworkDelegate::OnHeadersReceived(request, |
| 2462 callback, | 2462 callback, |
| 2463 original_response_headers, | 2463 original_response_headers, |
| 2464 override_response_headers, | 2464 override_response_headers, |
| 2465 allowed_unsafe_redirect_url); | 2465 allowed_unsafe_redirect_url); |
| (...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3072 r.Start(); | 3072 r.Start(); |
| 3073 base::RunLoop().Run(); | 3073 base::RunLoop().Run(); |
| 3074 | 3074 |
| 3075 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 3075 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 3076 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair())); | 3076 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair())); |
| 3077 EXPECT_EQ( | 3077 EXPECT_EQ( |
| 3078 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); | 3078 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); |
| 3079 EXPECT_TRUE( | 3079 EXPECT_TRUE( |
| 3080 network_delegate.last_observed_proxy().Equals( | 3080 network_delegate.last_observed_proxy().Equals( |
| 3081 test_server_.host_port_pair())); | 3081 test_server_.host_port_pair())); |
| 3082 EXPECT_EQ(net::OK, r.status().error()); | 3082 EXPECT_EQ(OK, r.status().error()); |
| 3083 EXPECT_EQ(redirect_url, r.url()); | 3083 EXPECT_EQ(redirect_url, r.url()); |
| 3084 EXPECT_EQ(original_url, r.original_url()); | 3084 EXPECT_EQ(original_url, r.original_url()); |
| 3085 EXPECT_EQ(2U, r.url_chain().size()); | 3085 EXPECT_EQ(2U, r.url_chain().size()); |
| 3086 EXPECT_EQ(2, network_delegate.created_requests()); | 3086 EXPECT_EQ(2, network_delegate.created_requests()); |
| 3087 EXPECT_EQ(0, network_delegate.destroyed_requests()); | 3087 EXPECT_EQ(0, network_delegate.destroyed_requests()); |
| 3088 } | 3088 } |
| 3089 EXPECT_EQ(1, network_delegate.destroyed_requests()); | 3089 EXPECT_EQ(1, network_delegate.destroyed_requests()); |
| 3090 } | 3090 } |
| 3091 | 3091 |
| 3092 // Tests that the network delegate can synchronously complete OnAuthRequired | 3092 // Tests that the network delegate can synchronously complete OnAuthRequired |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4071 set_cancel_in_received_redirect(true); | 4071 set_cancel_in_received_redirect(true); |
| 4072 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED) | 4072 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED) |
| 4073 set_cancel_in_response_started(true); | 4073 set_cancel_in_response_started(true); |
| 4074 else if (cancel_stage == CANCEL_ON_READ_COMPLETED) | 4074 else if (cancel_stage == CANCEL_ON_READ_COMPLETED) |
| 4075 set_cancel_in_received_data(true); | 4075 set_cancel_in_received_data(true); |
| 4076 } | 4076 } |
| 4077 virtual ~AsyncLoggingUrlRequestDelegate() {} | 4077 virtual ~AsyncLoggingUrlRequestDelegate() {} |
| 4078 | 4078 |
| 4079 // URLRequest::Delegate implementation: | 4079 // URLRequest::Delegate implementation: |
| 4080 void virtual OnReceivedRedirect(URLRequest* request, | 4080 void virtual OnReceivedRedirect(URLRequest* request, |
| 4081 const GURL& new_url, | 4081 const RedirectInfo& redirect_info, |
| 4082 bool* defer_redirect) OVERRIDE { | 4082 bool* defer_redirect) OVERRIDE { |
| 4083 *defer_redirect = true; | 4083 *defer_redirect = true; |
| 4084 AsyncDelegateLogger::Run( | 4084 AsyncDelegateLogger::Run( |
| 4085 request, | 4085 request, |
| 4086 LOAD_STATE_WAITING_FOR_DELEGATE, | 4086 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4087 LOAD_STATE_WAITING_FOR_DELEGATE, | 4087 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4088 LOAD_STATE_WAITING_FOR_DELEGATE, | 4088 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4089 base::Bind( | 4089 base::Bind( |
| 4090 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete, | 4090 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete, |
| 4091 base::Unretained(this), request, new_url)); | 4091 base::Unretained(this), request, redirect_info)); |
| 4092 } | 4092 } |
| 4093 | 4093 |
| 4094 virtual void OnResponseStarted(URLRequest* request) OVERRIDE { | 4094 virtual void OnResponseStarted(URLRequest* request) OVERRIDE { |
| 4095 AsyncDelegateLogger::Run( | 4095 AsyncDelegateLogger::Run( |
| 4096 request, | 4096 request, |
| 4097 LOAD_STATE_WAITING_FOR_DELEGATE, | 4097 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4098 LOAD_STATE_WAITING_FOR_DELEGATE, | 4098 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4099 LOAD_STATE_WAITING_FOR_DELEGATE, | 4099 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4100 base::Bind( | 4100 base::Bind( |
| 4101 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete, | 4101 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete, |
| 4102 base::Unretained(this), request)); | 4102 base::Unretained(this), request)); |
| 4103 } | 4103 } |
| 4104 | 4104 |
| 4105 virtual void OnReadCompleted(URLRequest* request, | 4105 virtual void OnReadCompleted(URLRequest* request, |
| 4106 int bytes_read) OVERRIDE { | 4106 int bytes_read) OVERRIDE { |
| 4107 AsyncDelegateLogger::Run( | 4107 AsyncDelegateLogger::Run( |
| 4108 request, | 4108 request, |
| 4109 LOAD_STATE_IDLE, | 4109 LOAD_STATE_IDLE, |
| 4110 LOAD_STATE_IDLE, | 4110 LOAD_STATE_IDLE, |
| 4111 LOAD_STATE_IDLE, | 4111 LOAD_STATE_IDLE, |
| 4112 base::Bind( | 4112 base::Bind( |
| 4113 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete, | 4113 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete, |
| 4114 base::Unretained(this), request, bytes_read)); | 4114 base::Unretained(this), request, bytes_read)); |
| 4115 } | 4115 } |
| 4116 | 4116 |
| 4117 private: | 4117 private: |
| 4118 void OnReceivedRedirectLoggingComplete(URLRequest* request, | 4118 void OnReceivedRedirectLoggingComplete(URLRequest* request, |
| 4119 const GURL& new_url) { | 4119 const RedirectInfo& redirect_info) { |
| 4120 bool defer_redirect = false; | 4120 bool defer_redirect = false; |
| 4121 TestDelegate::OnReceivedRedirect(request, new_url, &defer_redirect); | 4121 TestDelegate::OnReceivedRedirect(request, redirect_info, &defer_redirect); |
| 4122 // FollowDeferredRedirect should not be called after cancellation. | 4122 // FollowDeferredRedirect should not be called after cancellation. |
| 4123 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT) | 4123 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT) |
| 4124 return; | 4124 return; |
| 4125 if (!defer_redirect) | 4125 if (!defer_redirect) |
| 4126 request->FollowDeferredRedirect(); | 4126 request->FollowDeferredRedirect(); |
| 4127 } | 4127 } |
| 4128 | 4128 |
| 4129 void OnResponseStartedLoggingComplete(URLRequest* request) { | 4129 void OnResponseStartedLoggingComplete(URLRequest* request) { |
| 4130 // The parent class continues the request. | 4130 // The parent class continues the request. |
| 4131 TestDelegate::OnResponseStarted(request); | 4131 TestDelegate::OnResponseStarted(request); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4569 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); | 4569 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); |
| 4570 } | 4570 } |
| 4571 } | 4571 } |
| 4572 | 4572 |
| 4573 namespace { | 4573 namespace { |
| 4574 | 4574 |
| 4575 const char kExtraHeader[] = "Allow-Snafu"; | 4575 const char kExtraHeader[] = "Allow-Snafu"; |
| 4576 const char kExtraValue[] = "fubar"; | 4576 const char kExtraValue[] = "fubar"; |
| 4577 | 4577 |
| 4578 class RedirectWithAdditionalHeadersDelegate : public TestDelegate { | 4578 class RedirectWithAdditionalHeadersDelegate : public TestDelegate { |
| 4579 virtual void OnReceivedRedirect(net::URLRequest* request, | 4579 virtual void OnReceivedRedirect(URLRequest* request, |
| 4580 const GURL& new_url, | 4580 const RedirectInfo& redirect_info, |
| 4581 bool* defer_redirect) OVERRIDE { | 4581 bool* defer_redirect) OVERRIDE { |
| 4582 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); | 4582 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); |
| 4583 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); | 4583 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); |
| 4584 } | 4584 } |
| 4585 }; | 4585 }; |
| 4586 | 4586 |
| 4587 } // namespace | 4587 } // namespace |
| 4588 | 4588 |
| 4589 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { | 4589 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { |
| 4590 ASSERT_TRUE(test_server_.Start()); | 4590 ASSERT_TRUE(test_server_.Start()); |
| 4591 | 4591 |
| 4592 GURL destination_url = test_server_.GetURL( | 4592 GURL destination_url = test_server_.GetURL( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4605 EXPECT_FALSE(req.is_pending()); | 4605 EXPECT_FALSE(req.is_pending()); |
| 4606 EXPECT_FALSE(req.is_redirecting()); | 4606 EXPECT_FALSE(req.is_redirecting()); |
| 4607 EXPECT_EQ(kExtraValue, d.data_received()); | 4607 EXPECT_EQ(kExtraValue, d.data_received()); |
| 4608 } | 4608 } |
| 4609 | 4609 |
| 4610 namespace { | 4610 namespace { |
| 4611 | 4611 |
| 4612 const char kExtraHeaderToRemove[] = "To-Be-Removed"; | 4612 const char kExtraHeaderToRemove[] = "To-Be-Removed"; |
| 4613 | 4613 |
| 4614 class RedirectWithHeaderRemovalDelegate : public TestDelegate { | 4614 class RedirectWithHeaderRemovalDelegate : public TestDelegate { |
| 4615 virtual void OnReceivedRedirect(net::URLRequest* request, | 4615 virtual void OnReceivedRedirect(URLRequest* request, |
| 4616 const GURL& new_url, | 4616 const RedirectInfo& redirect_info, |
| 4617 bool* defer_redirect) OVERRIDE { | 4617 bool* defer_redirect) OVERRIDE { |
| 4618 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); | 4618 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); |
| 4619 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); | 4619 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); |
| 4620 } | 4620 } |
| 4621 }; | 4621 }; |
| 4622 | 4622 |
| 4623 } // namespace | 4623 } // namespace |
| 4624 | 4624 |
| 4625 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { | 4625 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { |
| 4626 ASSERT_TRUE(test_server_.Start()); | 4626 ASSERT_TRUE(test_server_.Start()); |
| 4627 | 4627 |
| 4628 GURL destination_url = test_server_.GetURL( | 4628 GURL destination_url = test_server_.GetURL( |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5336 DEFAULT_PRIORITY, | 5336 DEFAULT_PRIORITY, |
| 5337 &d, | 5337 &d, |
| 5338 &default_context_); | 5338 &default_context_); |
| 5339 | 5339 |
| 5340 r.Start(); | 5340 r.Start(); |
| 5341 base::RunLoop().Run(); | 5341 base::RunLoop().Run(); |
| 5342 | 5342 |
| 5343 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5343 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5344 | 5344 |
| 5345 EXPECT_EQ(2U, r.url_chain().size()); | 5345 EXPECT_EQ(2U, r.url_chain().size()); |
| 5346 EXPECT_EQ(net::OK, r.status().error()); | 5346 EXPECT_EQ(OK, r.status().error()); |
| 5347 EXPECT_EQ(unsafe_url, r.url()); | 5347 EXPECT_EQ(unsafe_url, r.url()); |
| 5348 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); | 5348 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); |
| 5349 } | 5349 } |
| 5350 } | 5350 } |
| 5351 | 5351 |
| 5352 // Tests that a redirect to a different unsafe URL is blocked, even after adding | 5352 // Tests that a redirect to a different unsafe URL is blocked, even after adding |
| 5353 // some other URL to the whitelist. | 5353 // some other URL to the whitelist. |
| 5354 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { | 5354 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { |
| 5355 ASSERT_TRUE(test_server_.Start()); | 5355 ASSERT_TRUE(test_server_.Start()); |
| 5356 | 5356 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5389 | 5389 |
| 5390 TestDelegate d; | 5390 TestDelegate d; |
| 5391 { | 5391 { |
| 5392 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5392 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5393 | 5393 |
| 5394 r.Start(); | 5394 r.Start(); |
| 5395 base::RunLoop().Run(); | 5395 base::RunLoop().Run(); |
| 5396 | 5396 |
| 5397 EXPECT_EQ(2U, r.url_chain().size()); | 5397 EXPECT_EQ(2U, r.url_chain().size()); |
| 5398 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5398 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5399 EXPECT_EQ(net::OK, r.status().error()); | 5399 EXPECT_EQ(OK, r.status().error()); |
| 5400 EXPECT_EQ(original_url, r.original_url()); | 5400 EXPECT_EQ(original_url, r.original_url()); |
| 5401 EXPECT_EQ(expected_url, r.url()); | 5401 EXPECT_EQ(expected_url, r.url()); |
| 5402 } | 5402 } |
| 5403 } | 5403 } |
| 5404 | 5404 |
| 5405 // When a delegate has specified a safe redirect URL, but it does not match the | 5405 // When a delegate has specified a safe redirect URL, but it does not match the |
| 5406 // redirect target, then do not prevent the reference fragment from being added. | 5406 // redirect target, then do not prevent the reference fragment from being added. |
| 5407 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { | 5407 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { |
| 5408 ASSERT_TRUE(test_server_.Start()); | 5408 ASSERT_TRUE(test_server_.Start()); |
| 5409 | 5409 |
| 5410 GURL original_url(test_server_.GetURL("original#expected-fragment")); | 5410 GURL original_url(test_server_.GetURL("original#expected-fragment")); |
| 5411 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); | 5411 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); |
| 5412 GURL redirect_url(test_server_.GetURL("target")); | 5412 GURL redirect_url(test_server_.GetURL("target")); |
| 5413 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); | 5413 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); |
| 5414 | 5414 |
| 5415 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); | 5415 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); |
| 5416 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); | 5416 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); |
| 5417 | 5417 |
| 5418 TestDelegate d; | 5418 TestDelegate d; |
| 5419 { | 5419 { |
| 5420 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5420 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5421 | 5421 |
| 5422 r.Start(); | 5422 r.Start(); |
| 5423 base::RunLoop().Run(); | 5423 base::RunLoop().Run(); |
| 5424 | 5424 |
| 5425 EXPECT_EQ(2U, r.url_chain().size()); | 5425 EXPECT_EQ(2U, r.url_chain().size()); |
| 5426 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5426 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5427 EXPECT_EQ(net::OK, r.status().error()); | 5427 EXPECT_EQ(OK, r.status().error()); |
| 5428 EXPECT_EQ(original_url, r.original_url()); | 5428 EXPECT_EQ(original_url, r.original_url()); |
| 5429 EXPECT_EQ(expected_redirect_url, r.url()); | 5429 EXPECT_EQ(expected_redirect_url, r.url()); |
| 5430 } | 5430 } |
| 5431 } | 5431 } |
| 5432 | 5432 |
| 5433 // When a delegate has specified a safe redirect URL, assume that the redirect | 5433 // When a delegate has specified a safe redirect URL, assume that the redirect |
| 5434 // URL should not be changed. In particular, the reference fragment should not | 5434 // URL should not be changed. In particular, the reference fragment should not |
| 5435 // be modified. | 5435 // be modified. |
| 5436 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { | 5436 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { |
| 5437 ASSERT_TRUE(test_server_.Start()); | 5437 ASSERT_TRUE(test_server_.Start()); |
| 5438 | 5438 |
| 5439 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); | 5439 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
| 5440 GURL redirect_url("data:text/html,expect-no-reference-fragment"); | 5440 GURL redirect_url("data:text/html,expect-no-reference-fragment"); |
| 5441 | 5441 |
| 5442 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); | 5442 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); |
| 5443 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); | 5443 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); |
| 5444 | 5444 |
| 5445 TestDelegate d; | 5445 TestDelegate d; |
| 5446 { | 5446 { |
| 5447 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5447 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5448 | 5448 |
| 5449 r.Start(); | 5449 r.Start(); |
| 5450 base::RunLoop().Run(); | 5450 base::RunLoop().Run(); |
| 5451 | 5451 |
| 5452 EXPECT_EQ(2U, r.url_chain().size()); | 5452 EXPECT_EQ(2U, r.url_chain().size()); |
| 5453 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5453 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5454 EXPECT_EQ(net::OK, r.status().error()); | 5454 EXPECT_EQ(OK, r.status().error()); |
| 5455 EXPECT_EQ(original_url, r.original_url()); | 5455 EXPECT_EQ(original_url, r.original_url()); |
| 5456 EXPECT_EQ(redirect_url, r.url()); | 5456 EXPECT_EQ(redirect_url, r.url()); |
| 5457 } | 5457 } |
| 5458 } | 5458 } |
| 5459 | 5459 |
| 5460 // When a URLRequestRedirectJob is created, the redirection must be followed and | 5460 // When a URLRequestRedirectJob is created, the redirection must be followed and |
| 5461 // the reference fragment of the target URL must not be modified. | 5461 // the reference fragment of the target URL must not be modified. |
| 5462 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { | 5462 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { |
| 5463 ASSERT_TRUE(test_server_.Start()); | 5463 ASSERT_TRUE(test_server_.Start()); |
| 5464 | 5464 |
| 5465 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); | 5465 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
| 5466 GURL redirect_url(test_server_.GetURL("echo")); | 5466 GURL redirect_url(test_server_.GetURL("echo")); |
| 5467 | 5467 |
| 5468 TestDelegate d; | 5468 TestDelegate d; |
| 5469 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5469 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5470 | 5470 |
| 5471 URLRequestRedirectJob* job = new URLRequestRedirectJob( | 5471 URLRequestRedirectJob* job = new URLRequestRedirectJob( |
| 5472 &r, &default_network_delegate_, redirect_url, | 5472 &r, &default_network_delegate_, redirect_url, |
| 5473 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); | 5473 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); |
| 5474 AddTestInterceptor()->set_main_intercept_job(job); | 5474 AddTestInterceptor()->set_main_intercept_job(job); |
| 5475 | 5475 |
| 5476 r.Start(); | 5476 r.Start(); |
| 5477 base::RunLoop().Run(); | 5477 base::RunLoop().Run(); |
| 5478 | 5478 |
| 5479 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5479 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5480 EXPECT_EQ(net::OK, r.status().error()); | 5480 EXPECT_EQ(OK, r.status().error()); |
| 5481 EXPECT_EQ(original_url, r.original_url()); | 5481 EXPECT_EQ(original_url, r.original_url()); |
| 5482 EXPECT_EQ(redirect_url, r.url()); | 5482 EXPECT_EQ(redirect_url, r.url()); |
| 5483 } | 5483 } |
| 5484 | 5484 |
| 5485 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { | 5485 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { |
| 5486 ASSERT_TRUE(test_server_.Start()); | 5486 ASSERT_TRUE(test_server_.Start()); |
| 5487 | 5487 |
| 5488 TestDelegate d; | 5488 TestDelegate d; |
| 5489 URLRequest req(test_server_.GetURL("echoheader?Referer"), | 5489 URLRequest req(test_server_.GetURL("echoheader?Referer"), |
| 5490 DEFAULT_PRIORITY, | 5490 DEFAULT_PRIORITY, |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6099 | 6099 |
| 6100 TestDelegate d; | 6100 TestDelegate d; |
| 6101 { | 6101 { |
| 6102 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 6102 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6103 | 6103 |
| 6104 r.Start(); | 6104 r.Start(); |
| 6105 base::RunLoop().Run(); | 6105 base::RunLoop().Run(); |
| 6106 | 6106 |
| 6107 EXPECT_EQ(2U, r.url_chain().size()); | 6107 EXPECT_EQ(2U, r.url_chain().size()); |
| 6108 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 6108 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6109 EXPECT_EQ(net::OK, r.status().error()); | 6109 EXPECT_EQ(OK, r.status().error()); |
| 6110 EXPECT_EQ(original_url, r.original_url()); | 6110 EXPECT_EQ(original_url, r.original_url()); |
| 6111 EXPECT_EQ(expected_url, r.url()); | 6111 EXPECT_EQ(expected_url, r.url()); |
| 6112 } | 6112 } |
| 6113 } | 6113 } |
| 6114 | 6114 |
| 6115 TEST_F(URLRequestTestHTTP, RedirectPreserveFirstPartyURL) { |
| 6116 ASSERT_TRUE(test_server_.Start()); |
| 6117 |
| 6118 GURL url(test_server_.GetURL("files/redirect302-to-echo")); |
| 6119 GURL first_party_url("http://example.com"); |
| 6120 |
| 6121 TestDelegate d; |
| 6122 { |
| 6123 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6124 r.set_first_party_for_cookies(first_party_url); |
| 6125 |
| 6126 r.Start(); |
| 6127 base::RunLoop().Run(); |
| 6128 |
| 6129 EXPECT_EQ(2U, r.url_chain().size()); |
| 6130 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6131 EXPECT_EQ(OK, r.status().error()); |
| 6132 EXPECT_EQ(first_party_url, r.first_party_for_cookies()); |
| 6133 } |
| 6134 } |
| 6135 |
| 6136 TEST_F(URLRequestTestHTTP, RedirectUpdateFirstPartyURL) { |
| 6137 ASSERT_TRUE(test_server_.Start()); |
| 6138 |
| 6139 GURL url(test_server_.GetURL("files/redirect302-to-echo")); |
| 6140 GURL original_first_party_url("http://example.com"); |
| 6141 GURL expected_first_party_url(test_server_.GetURL("echo")); |
| 6142 |
| 6143 TestDelegate d; |
| 6144 { |
| 6145 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6146 r.set_first_party_for_cookies(original_first_party_url); |
| 6147 r.set_first_party_url_policy( |
| 6148 URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); |
| 6149 |
| 6150 r.Start(); |
| 6151 base::RunLoop().Run(); |
| 6152 |
| 6153 EXPECT_EQ(2U, r.url_chain().size()); |
| 6154 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6155 EXPECT_EQ(OK, r.status().error()); |
| 6156 EXPECT_EQ(expected_first_party_url, r.first_party_for_cookies()); |
| 6157 } |
| 6158 } |
| 6159 |
| 6115 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { | 6160 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { |
| 6116 ASSERT_TRUE(test_server_.Start()); | 6161 ASSERT_TRUE(test_server_.Start()); |
| 6117 | 6162 |
| 6118 const char kData[] = "hello world"; | 6163 const char kData[] = "hello world"; |
| 6119 | 6164 |
| 6120 TestDelegate d; | 6165 TestDelegate d; |
| 6121 URLRequest req(test_server_.GetURL("empty.html"), | 6166 URLRequest req(test_server_.GetURL("empty.html"), |
| 6122 DEFAULT_PRIORITY, | 6167 DEFAULT_PRIORITY, |
| 6123 &d, | 6168 &d, |
| 6124 &default_context_); | 6169 &default_context_); |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6918 params.cert_verifier = default_context_.cert_verifier(); | 6963 params.cert_verifier = default_context_.cert_verifier(); |
| 6919 params.transport_security_state = default_context_.transport_security_state(); | 6964 params.transport_security_state = default_context_.transport_security_state(); |
| 6920 params.proxy_service = default_context_.proxy_service(); | 6965 params.proxy_service = default_context_.proxy_service(); |
| 6921 params.ssl_config_service = default_context_.ssl_config_service(); | 6966 params.ssl_config_service = default_context_.ssl_config_service(); |
| 6922 params.http_auth_handler_factory = | 6967 params.http_auth_handler_factory = |
| 6923 default_context_.http_auth_handler_factory(); | 6968 default_context_.http_auth_handler_factory(); |
| 6924 params.network_delegate = &default_network_delegate_; | 6969 params.network_delegate = &default_network_delegate_; |
| 6925 params.http_server_properties = default_context_.http_server_properties(); | 6970 params.http_server_properties = default_context_.http_server_properties(); |
| 6926 params.ssl_session_cache_shard = "alternate"; | 6971 params.ssl_session_cache_shard = "alternate"; |
| 6927 | 6972 |
| 6928 scoped_ptr<net::HttpCache> cache(new net::HttpCache( | 6973 scoped_ptr<HttpCache> cache(new HttpCache( |
| 6929 new net::HttpNetworkSession(params), | 6974 new HttpNetworkSession(params), |
| 6930 net::HttpCache::DefaultBackend::InMemory(0))); | 6975 HttpCache::DefaultBackend::InMemory(0))); |
| 6931 | 6976 |
| 6932 default_context_.set_http_transaction_factory(cache.get()); | 6977 default_context_.set_http_transaction_factory(cache.get()); |
| 6933 | 6978 |
| 6934 { | 6979 { |
| 6935 TestDelegate d; | 6980 TestDelegate d; |
| 6936 URLRequest r(test_server.GetURL("ssl-session-cache"), | 6981 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 6937 DEFAULT_PRIORITY, | 6982 DEFAULT_PRIORITY, |
| 6938 &d, | 6983 &d, |
| 6939 &default_context_); | 6984 &default_context_); |
| 6940 | 6985 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7134 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; | 7179 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; |
| 7135 | 7180 |
| 7136 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | 7181 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); |
| 7137 ExpectFailure(ERR_CONNECTION_RESET); | 7182 ExpectFailure(ERR_CONNECTION_RESET); |
| 7138 } | 7183 } |
| 7139 #endif // !OS_ANDROID | 7184 #endif // !OS_ANDROID |
| 7140 | 7185 |
| 7141 class HTTPSSessionTest : public testing::Test { | 7186 class HTTPSSessionTest : public testing::Test { |
| 7142 public: | 7187 public: |
| 7143 HTTPSSessionTest() : default_context_(true) { | 7188 HTTPSSessionTest() : default_context_(true) { |
| 7144 cert_verifier_.set_default_result(net::OK); | 7189 cert_verifier_.set_default_result(OK); |
| 7145 | 7190 |
| 7146 default_context_.set_network_delegate(&default_network_delegate_); | 7191 default_context_.set_network_delegate(&default_network_delegate_); |
| 7147 default_context_.set_cert_verifier(&cert_verifier_); | 7192 default_context_.set_cert_verifier(&cert_verifier_); |
| 7148 default_context_.Init(); | 7193 default_context_.Init(); |
| 7149 } | 7194 } |
| 7150 virtual ~HTTPSSessionTest() {} | 7195 virtual ~HTTPSSessionTest() {} |
| 7151 | 7196 |
| 7152 protected: | 7197 protected: |
| 7153 MockCertVerifier cert_verifier_; | 7198 MockCertVerifier cert_verifier_; |
| 7154 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. | 7199 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. |
| 7155 TestURLRequestContext default_context_; | 7200 TestURLRequestContext default_context_; |
| 7156 }; | 7201 }; |
| 7157 | 7202 |
| 7158 // Tests that session resumption is not attempted if an invalid certificate | 7203 // Tests that session resumption is not attempted if an invalid certificate |
| 7159 // is presented. | 7204 // is presented. |
| 7160 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) { | 7205 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) { |
| 7161 SpawnedTestServer::SSLOptions ssl_options; | 7206 SpawnedTestServer::SSLOptions ssl_options; |
| 7162 ssl_options.record_resume = true; | 7207 ssl_options.record_resume = true; |
| 7163 SpawnedTestServer test_server( | 7208 SpawnedTestServer test_server( |
| 7164 SpawnedTestServer::TYPE_HTTPS, | 7209 SpawnedTestServer::TYPE_HTTPS, |
| 7165 ssl_options, | 7210 ssl_options, |
| 7166 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); | 7211 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); |
| 7167 ASSERT_TRUE(test_server.Start()); | 7212 ASSERT_TRUE(test_server.Start()); |
| 7168 | 7213 |
| 7169 SSLClientSocket::ClearSessionCache(); | 7214 SSLClientSocket::ClearSessionCache(); |
| 7170 | 7215 |
| 7171 // Simulate the certificate being expired and attempt a connection. | 7216 // Simulate the certificate being expired and attempt a connection. |
| 7172 cert_verifier_.set_default_result(net::ERR_CERT_DATE_INVALID); | 7217 cert_verifier_.set_default_result(ERR_CERT_DATE_INVALID); |
| 7173 { | 7218 { |
| 7174 TestDelegate d; | 7219 TestDelegate d; |
| 7175 URLRequest r(test_server.GetURL("ssl-session-cache"), | 7220 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 7176 DEFAULT_PRIORITY, | 7221 DEFAULT_PRIORITY, |
| 7177 &d, | 7222 &d, |
| 7178 &default_context_); | 7223 &default_context_); |
| 7179 | 7224 |
| 7180 r.Start(); | 7225 r.Start(); |
| 7181 EXPECT_TRUE(r.is_pending()); | 7226 EXPECT_TRUE(r.is_pending()); |
| 7182 | 7227 |
| 7183 base::RunLoop().Run(); | 7228 base::RunLoop().Run(); |
| 7184 | 7229 |
| 7185 EXPECT_EQ(1, d.response_started_count()); | 7230 EXPECT_EQ(1, d.response_started_count()); |
| 7186 } | 7231 } |
| 7187 | 7232 |
| 7188 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())-> | 7233 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())-> |
| 7189 CloseAllConnections(); | 7234 CloseAllConnections(); |
| 7190 | 7235 |
| 7191 // Now change the certificate to be acceptable (so that the response is | 7236 // Now change the certificate to be acceptable (so that the response is |
| 7192 // loaded), and ensure that no session id is presented to the peer. | 7237 // loaded), and ensure that no session id is presented to the peer. |
| 7193 cert_verifier_.set_default_result(net::OK); | 7238 cert_verifier_.set_default_result(OK); |
| 7194 { | 7239 { |
| 7195 TestDelegate d; | 7240 TestDelegate d; |
| 7196 URLRequest r(test_server.GetURL("ssl-session-cache"), | 7241 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 7197 DEFAULT_PRIORITY, | 7242 DEFAULT_PRIORITY, |
| 7198 &d, | 7243 &d, |
| 7199 &default_context_); | 7244 &default_context_); |
| 7200 | 7245 |
| 7201 r.Start(); | 7246 r.Start(); |
| 7202 EXPECT_TRUE(r.is_pending()); | 7247 EXPECT_TRUE(r.is_pending()); |
| 7203 | 7248 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7290 ev_test_policy_( | 7335 ev_test_policy_( |
| 7291 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(), | 7336 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(), |
| 7292 kOCSPTestCertFingerprint, | 7337 kOCSPTestCertFingerprint, |
| 7293 kOCSPTestCertPolicy)) { | 7338 kOCSPTestCertPolicy)) { |
| 7294 } | 7339 } |
| 7295 | 7340 |
| 7296 virtual void SetUp() OVERRIDE { | 7341 virtual void SetUp() OVERRIDE { |
| 7297 SetupContext(&context_); | 7342 SetupContext(&context_); |
| 7298 context_.Init(); | 7343 context_.Init(); |
| 7299 | 7344 |
| 7300 scoped_refptr<net::X509Certificate> root_cert = | 7345 scoped_refptr<X509Certificate> root_cert = |
| 7301 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem"); | 7346 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem"); |
| 7302 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert); | 7347 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert); |
| 7303 test_root_.reset(new ScopedTestRoot(root_cert.get())); | 7348 test_root_.reset(new ScopedTestRoot(root_cert.get())); |
| 7304 | 7349 |
| 7305 #if defined(USE_NSS) || defined(OS_IOS) | 7350 #if defined(USE_NSS) || defined(OS_IOS) |
| 7306 SetURLRequestContextForNSSHttpIO(&context_); | 7351 SetURLRequestContextForNSSHttpIO(&context_); |
| 7307 EnsureNSSHttpIOInit(); | 7352 EnsureNSSHttpIOInit(); |
| 7308 #endif | 7353 #endif |
| 7309 } | 7354 } |
| 7310 | 7355 |
| (...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8107 | 8152 |
| 8108 EXPECT_FALSE(r.is_pending()); | 8153 EXPECT_FALSE(r.is_pending()); |
| 8109 EXPECT_EQ(1, d->response_started_count()); | 8154 EXPECT_EQ(1, d->response_started_count()); |
| 8110 EXPECT_FALSE(d->received_data_before_response()); | 8155 EXPECT_FALSE(d->received_data_before_response()); |
| 8111 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 8156 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
| 8112 } | 8157 } |
| 8113 } | 8158 } |
| 8114 #endif // !defined(DISABLE_FTP_SUPPORT) | 8159 #endif // !defined(DISABLE_FTP_SUPPORT) |
| 8115 | 8160 |
| 8116 } // namespace net | 8161 } // namespace net |
| OLD | NEW |