| 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 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3117 r.Start(); | 3117 r.Start(); |
| 3118 base::RunLoop().Run(); | 3118 base::RunLoop().Run(); |
| 3119 | 3119 |
| 3120 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 3120 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 3121 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair())); | 3121 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair())); |
| 3122 EXPECT_EQ( | 3122 EXPECT_EQ( |
| 3123 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); | 3123 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); |
| 3124 EXPECT_TRUE( | 3124 EXPECT_TRUE( |
| 3125 network_delegate.last_observed_proxy().Equals( | 3125 network_delegate.last_observed_proxy().Equals( |
| 3126 test_server_.host_port_pair())); | 3126 test_server_.host_port_pair())); |
| 3127 EXPECT_EQ(net::OK, r.status().error()); | 3127 EXPECT_EQ(OK, r.status().error()); |
| 3128 EXPECT_EQ(redirect_url, r.url()); | 3128 EXPECT_EQ(redirect_url, r.url()); |
| 3129 EXPECT_EQ(original_url, r.original_url()); | 3129 EXPECT_EQ(original_url, r.original_url()); |
| 3130 EXPECT_EQ(2U, r.url_chain().size()); | 3130 EXPECT_EQ(2U, r.url_chain().size()); |
| 3131 EXPECT_EQ(2, network_delegate.created_requests()); | 3131 EXPECT_EQ(2, network_delegate.created_requests()); |
| 3132 EXPECT_EQ(0, network_delegate.destroyed_requests()); | 3132 EXPECT_EQ(0, network_delegate.destroyed_requests()); |
| 3133 } | 3133 } |
| 3134 EXPECT_EQ(1, network_delegate.destroyed_requests()); | 3134 EXPECT_EQ(1, network_delegate.destroyed_requests()); |
| 3135 } | 3135 } |
| 3136 | 3136 |
| 3137 // Tests that the network delegate can synchronously complete OnAuthRequired | 3137 // Tests that the network delegate can synchronously complete OnAuthRequired |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4116 set_cancel_in_received_redirect(true); | 4116 set_cancel_in_received_redirect(true); |
| 4117 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED) | 4117 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED) |
| 4118 set_cancel_in_response_started(true); | 4118 set_cancel_in_response_started(true); |
| 4119 else if (cancel_stage == CANCEL_ON_READ_COMPLETED) | 4119 else if (cancel_stage == CANCEL_ON_READ_COMPLETED) |
| 4120 set_cancel_in_received_data(true); | 4120 set_cancel_in_received_data(true); |
| 4121 } | 4121 } |
| 4122 virtual ~AsyncLoggingUrlRequestDelegate() {} | 4122 virtual ~AsyncLoggingUrlRequestDelegate() {} |
| 4123 | 4123 |
| 4124 // URLRequest::Delegate implementation: | 4124 // URLRequest::Delegate implementation: |
| 4125 void virtual OnReceivedRedirect(URLRequest* request, | 4125 void virtual OnReceivedRedirect(URLRequest* request, |
| 4126 const GURL& new_url, | 4126 const RedirectInfo& redirect_info, |
| 4127 bool* defer_redirect) OVERRIDE { | 4127 bool* defer_redirect) OVERRIDE { |
| 4128 *defer_redirect = true; | 4128 *defer_redirect = true; |
| 4129 AsyncDelegateLogger::Run( | 4129 AsyncDelegateLogger::Run( |
| 4130 request, | 4130 request, |
| 4131 LOAD_STATE_WAITING_FOR_DELEGATE, | 4131 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4132 LOAD_STATE_WAITING_FOR_DELEGATE, | 4132 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4133 LOAD_STATE_WAITING_FOR_DELEGATE, | 4133 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4134 base::Bind( | 4134 base::Bind( |
| 4135 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete, | 4135 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete, |
| 4136 base::Unretained(this), request, new_url)); | 4136 base::Unretained(this), request, redirect_info)); |
| 4137 } | 4137 } |
| 4138 | 4138 |
| 4139 virtual void OnResponseStarted(URLRequest* request) OVERRIDE { | 4139 virtual void OnResponseStarted(URLRequest* request) OVERRIDE { |
| 4140 AsyncDelegateLogger::Run( | 4140 AsyncDelegateLogger::Run( |
| 4141 request, | 4141 request, |
| 4142 LOAD_STATE_WAITING_FOR_DELEGATE, | 4142 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4143 LOAD_STATE_WAITING_FOR_DELEGATE, | 4143 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4144 LOAD_STATE_WAITING_FOR_DELEGATE, | 4144 LOAD_STATE_WAITING_FOR_DELEGATE, |
| 4145 base::Bind( | 4145 base::Bind( |
| 4146 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete, | 4146 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete, |
| 4147 base::Unretained(this), request)); | 4147 base::Unretained(this), request)); |
| 4148 } | 4148 } |
| 4149 | 4149 |
| 4150 virtual void OnReadCompleted(URLRequest* request, | 4150 virtual void OnReadCompleted(URLRequest* request, |
| 4151 int bytes_read) OVERRIDE { | 4151 int bytes_read) OVERRIDE { |
| 4152 AsyncDelegateLogger::Run( | 4152 AsyncDelegateLogger::Run( |
| 4153 request, | 4153 request, |
| 4154 LOAD_STATE_IDLE, | 4154 LOAD_STATE_IDLE, |
| 4155 LOAD_STATE_IDLE, | 4155 LOAD_STATE_IDLE, |
| 4156 LOAD_STATE_IDLE, | 4156 LOAD_STATE_IDLE, |
| 4157 base::Bind( | 4157 base::Bind( |
| 4158 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete, | 4158 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete, |
| 4159 base::Unretained(this), request, bytes_read)); | 4159 base::Unretained(this), request, bytes_read)); |
| 4160 } | 4160 } |
| 4161 | 4161 |
| 4162 private: | 4162 private: |
| 4163 void OnReceivedRedirectLoggingComplete(URLRequest* request, | 4163 void OnReceivedRedirectLoggingComplete(URLRequest* request, |
| 4164 const GURL& new_url) { | 4164 const RedirectInfo& redirect_info) { |
| 4165 bool defer_redirect = false; | 4165 bool defer_redirect = false; |
| 4166 TestDelegate::OnReceivedRedirect(request, new_url, &defer_redirect); | 4166 TestDelegate::OnReceivedRedirect(request, redirect_info, &defer_redirect); |
| 4167 // FollowDeferredRedirect should not be called after cancellation. | 4167 // FollowDeferredRedirect should not be called after cancellation. |
| 4168 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT) | 4168 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT) |
| 4169 return; | 4169 return; |
| 4170 if (!defer_redirect) | 4170 if (!defer_redirect) |
| 4171 request->FollowDeferredRedirect(); | 4171 request->FollowDeferredRedirect(); |
| 4172 } | 4172 } |
| 4173 | 4173 |
| 4174 void OnResponseStartedLoggingComplete(URLRequest* request) { | 4174 void OnResponseStartedLoggingComplete(URLRequest* request) { |
| 4175 // The parent class continues the request. | 4175 // The parent class continues the request. |
| 4176 TestDelegate::OnResponseStarted(request); | 4176 TestDelegate::OnResponseStarted(request); |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4614 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); | 4614 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); |
| 4615 } | 4615 } |
| 4616 } | 4616 } |
| 4617 | 4617 |
| 4618 namespace { | 4618 namespace { |
| 4619 | 4619 |
| 4620 const char kExtraHeader[] = "Allow-Snafu"; | 4620 const char kExtraHeader[] = "Allow-Snafu"; |
| 4621 const char kExtraValue[] = "fubar"; | 4621 const char kExtraValue[] = "fubar"; |
| 4622 | 4622 |
| 4623 class RedirectWithAdditionalHeadersDelegate : public TestDelegate { | 4623 class RedirectWithAdditionalHeadersDelegate : public TestDelegate { |
| 4624 virtual void OnReceivedRedirect(net::URLRequest* request, | 4624 virtual void OnReceivedRedirect(URLRequest* request, |
| 4625 const GURL& new_url, | 4625 const RedirectInfo& redirect_info, |
| 4626 bool* defer_redirect) OVERRIDE { | 4626 bool* defer_redirect) OVERRIDE { |
| 4627 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); | 4627 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); |
| 4628 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); | 4628 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); |
| 4629 } | 4629 } |
| 4630 }; | 4630 }; |
| 4631 | 4631 |
| 4632 } // namespace | 4632 } // namespace |
| 4633 | 4633 |
| 4634 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { | 4634 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { |
| 4635 ASSERT_TRUE(test_server_.Start()); | 4635 ASSERT_TRUE(test_server_.Start()); |
| 4636 | 4636 |
| 4637 GURL destination_url = test_server_.GetURL( | 4637 GURL destination_url = test_server_.GetURL( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4650 EXPECT_FALSE(req.is_pending()); | 4650 EXPECT_FALSE(req.is_pending()); |
| 4651 EXPECT_FALSE(req.is_redirecting()); | 4651 EXPECT_FALSE(req.is_redirecting()); |
| 4652 EXPECT_EQ(kExtraValue, d.data_received()); | 4652 EXPECT_EQ(kExtraValue, d.data_received()); |
| 4653 } | 4653 } |
| 4654 | 4654 |
| 4655 namespace { | 4655 namespace { |
| 4656 | 4656 |
| 4657 const char kExtraHeaderToRemove[] = "To-Be-Removed"; | 4657 const char kExtraHeaderToRemove[] = "To-Be-Removed"; |
| 4658 | 4658 |
| 4659 class RedirectWithHeaderRemovalDelegate : public TestDelegate { | 4659 class RedirectWithHeaderRemovalDelegate : public TestDelegate { |
| 4660 virtual void OnReceivedRedirect(net::URLRequest* request, | 4660 virtual void OnReceivedRedirect(URLRequest* request, |
| 4661 const GURL& new_url, | 4661 const RedirectInfo& redirect_info, |
| 4662 bool* defer_redirect) OVERRIDE { | 4662 bool* defer_redirect) OVERRIDE { |
| 4663 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); | 4663 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); |
| 4664 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); | 4664 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); |
| 4665 } | 4665 } |
| 4666 }; | 4666 }; |
| 4667 | 4667 |
| 4668 } // namespace | 4668 } // namespace |
| 4669 | 4669 |
| 4670 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { | 4670 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { |
| 4671 ASSERT_TRUE(test_server_.Start()); | 4671 ASSERT_TRUE(test_server_.Start()); |
| 4672 | 4672 |
| 4673 GURL destination_url = test_server_.GetURL( | 4673 GURL destination_url = test_server_.GetURL( |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5381 DEFAULT_PRIORITY, | 5381 DEFAULT_PRIORITY, |
| 5382 &d, | 5382 &d, |
| 5383 &default_context_); | 5383 &default_context_); |
| 5384 | 5384 |
| 5385 r.Start(); | 5385 r.Start(); |
| 5386 base::RunLoop().Run(); | 5386 base::RunLoop().Run(); |
| 5387 | 5387 |
| 5388 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5388 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5389 | 5389 |
| 5390 EXPECT_EQ(2U, r.url_chain().size()); | 5390 EXPECT_EQ(2U, r.url_chain().size()); |
| 5391 EXPECT_EQ(net::OK, r.status().error()); | 5391 EXPECT_EQ(OK, r.status().error()); |
| 5392 EXPECT_EQ(unsafe_url, r.url()); | 5392 EXPECT_EQ(unsafe_url, r.url()); |
| 5393 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); | 5393 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); |
| 5394 } | 5394 } |
| 5395 } | 5395 } |
| 5396 | 5396 |
| 5397 // Tests that a redirect to a different unsafe URL is blocked, even after adding | 5397 // Tests that a redirect to a different unsafe URL is blocked, even after adding |
| 5398 // some other URL to the whitelist. | 5398 // some other URL to the whitelist. |
| 5399 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { | 5399 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { |
| 5400 ASSERT_TRUE(test_server_.Start()); | 5400 ASSERT_TRUE(test_server_.Start()); |
| 5401 | 5401 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5434 | 5434 |
| 5435 TestDelegate d; | 5435 TestDelegate d; |
| 5436 { | 5436 { |
| 5437 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5437 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5438 | 5438 |
| 5439 r.Start(); | 5439 r.Start(); |
| 5440 base::RunLoop().Run(); | 5440 base::RunLoop().Run(); |
| 5441 | 5441 |
| 5442 EXPECT_EQ(2U, r.url_chain().size()); | 5442 EXPECT_EQ(2U, r.url_chain().size()); |
| 5443 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5443 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5444 EXPECT_EQ(net::OK, r.status().error()); | 5444 EXPECT_EQ(OK, r.status().error()); |
| 5445 EXPECT_EQ(original_url, r.original_url()); | 5445 EXPECT_EQ(original_url, r.original_url()); |
| 5446 EXPECT_EQ(expected_url, r.url()); | 5446 EXPECT_EQ(expected_url, r.url()); |
| 5447 } | 5447 } |
| 5448 } | 5448 } |
| 5449 | 5449 |
| 5450 // When a delegate has specified a safe redirect URL, but it does not match the | 5450 // When a delegate has specified a safe redirect URL, but it does not match the |
| 5451 // redirect target, then do not prevent the reference fragment from being added. | 5451 // redirect target, then do not prevent the reference fragment from being added. |
| 5452 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { | 5452 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { |
| 5453 ASSERT_TRUE(test_server_.Start()); | 5453 ASSERT_TRUE(test_server_.Start()); |
| 5454 | 5454 |
| 5455 GURL original_url(test_server_.GetURL("original#expected-fragment")); | 5455 GURL original_url(test_server_.GetURL("original#expected-fragment")); |
| 5456 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); | 5456 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); |
| 5457 GURL redirect_url(test_server_.GetURL("target")); | 5457 GURL redirect_url(test_server_.GetURL("target")); |
| 5458 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); | 5458 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); |
| 5459 | 5459 |
| 5460 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); | 5460 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); |
| 5461 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); | 5461 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); |
| 5462 | 5462 |
| 5463 TestDelegate d; | 5463 TestDelegate d; |
| 5464 { | 5464 { |
| 5465 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5465 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5466 | 5466 |
| 5467 r.Start(); | 5467 r.Start(); |
| 5468 base::RunLoop().Run(); | 5468 base::RunLoop().Run(); |
| 5469 | 5469 |
| 5470 EXPECT_EQ(2U, r.url_chain().size()); | 5470 EXPECT_EQ(2U, r.url_chain().size()); |
| 5471 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5471 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5472 EXPECT_EQ(net::OK, r.status().error()); | 5472 EXPECT_EQ(OK, r.status().error()); |
| 5473 EXPECT_EQ(original_url, r.original_url()); | 5473 EXPECT_EQ(original_url, r.original_url()); |
| 5474 EXPECT_EQ(expected_redirect_url, r.url()); | 5474 EXPECT_EQ(expected_redirect_url, r.url()); |
| 5475 } | 5475 } |
| 5476 } | 5476 } |
| 5477 | 5477 |
| 5478 // When a delegate has specified a safe redirect URL, assume that the redirect | 5478 // When a delegate has specified a safe redirect URL, assume that the redirect |
| 5479 // URL should not be changed. In particular, the reference fragment should not | 5479 // URL should not be changed. In particular, the reference fragment should not |
| 5480 // be modified. | 5480 // be modified. |
| 5481 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { | 5481 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { |
| 5482 ASSERT_TRUE(test_server_.Start()); | 5482 ASSERT_TRUE(test_server_.Start()); |
| 5483 | 5483 |
| 5484 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); | 5484 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
| 5485 GURL redirect_url("data:text/html,expect-no-reference-fragment"); | 5485 GURL redirect_url("data:text/html,expect-no-reference-fragment"); |
| 5486 | 5486 |
| 5487 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); | 5487 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); |
| 5488 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); | 5488 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); |
| 5489 | 5489 |
| 5490 TestDelegate d; | 5490 TestDelegate d; |
| 5491 { | 5491 { |
| 5492 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5492 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5493 | 5493 |
| 5494 r.Start(); | 5494 r.Start(); |
| 5495 base::RunLoop().Run(); | 5495 base::RunLoop().Run(); |
| 5496 | 5496 |
| 5497 EXPECT_EQ(2U, r.url_chain().size()); | 5497 EXPECT_EQ(2U, r.url_chain().size()); |
| 5498 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5498 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5499 EXPECT_EQ(net::OK, r.status().error()); | 5499 EXPECT_EQ(OK, r.status().error()); |
| 5500 EXPECT_EQ(original_url, r.original_url()); | 5500 EXPECT_EQ(original_url, r.original_url()); |
| 5501 EXPECT_EQ(redirect_url, r.url()); | 5501 EXPECT_EQ(redirect_url, r.url()); |
| 5502 } | 5502 } |
| 5503 } | 5503 } |
| 5504 | 5504 |
| 5505 // When a URLRequestRedirectJob is created, the redirection must be followed and | 5505 // When a URLRequestRedirectJob is created, the redirection must be followed and |
| 5506 // the reference fragment of the target URL must not be modified. | 5506 // the reference fragment of the target URL must not be modified. |
| 5507 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { | 5507 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { |
| 5508 ASSERT_TRUE(test_server_.Start()); | 5508 ASSERT_TRUE(test_server_.Start()); |
| 5509 | 5509 |
| 5510 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); | 5510 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); |
| 5511 GURL redirect_url(test_server_.GetURL("echo")); | 5511 GURL redirect_url(test_server_.GetURL("echo")); |
| 5512 | 5512 |
| 5513 TestDelegate d; | 5513 TestDelegate d; |
| 5514 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 5514 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 5515 | 5515 |
| 5516 URLRequestRedirectJob* job = new URLRequestRedirectJob( | 5516 URLRequestRedirectJob* job = new URLRequestRedirectJob( |
| 5517 &r, &default_network_delegate_, redirect_url, | 5517 &r, &default_network_delegate_, redirect_url, |
| 5518 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); | 5518 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); |
| 5519 AddTestInterceptor()->set_main_intercept_job(job); | 5519 AddTestInterceptor()->set_main_intercept_job(job); |
| 5520 | 5520 |
| 5521 r.Start(); | 5521 r.Start(); |
| 5522 base::RunLoop().Run(); | 5522 base::RunLoop().Run(); |
| 5523 | 5523 |
| 5524 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 5524 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 5525 EXPECT_EQ(net::OK, r.status().error()); | 5525 EXPECT_EQ(OK, r.status().error()); |
| 5526 EXPECT_EQ(original_url, r.original_url()); | 5526 EXPECT_EQ(original_url, r.original_url()); |
| 5527 EXPECT_EQ(redirect_url, r.url()); | 5527 EXPECT_EQ(redirect_url, r.url()); |
| 5528 } | 5528 } |
| 5529 | 5529 |
| 5530 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { | 5530 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { |
| 5531 ASSERT_TRUE(test_server_.Start()); | 5531 ASSERT_TRUE(test_server_.Start()); |
| 5532 | 5532 |
| 5533 TestDelegate d; | 5533 TestDelegate d; |
| 5534 URLRequest req(test_server_.GetURL("echoheader?Referer"), | 5534 URLRequest req(test_server_.GetURL("echoheader?Referer"), |
| 5535 DEFAULT_PRIORITY, | 5535 DEFAULT_PRIORITY, |
| (...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6144 | 6144 |
| 6145 TestDelegate d; | 6145 TestDelegate d; |
| 6146 { | 6146 { |
| 6147 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); | 6147 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6148 | 6148 |
| 6149 r.Start(); | 6149 r.Start(); |
| 6150 base::RunLoop().Run(); | 6150 base::RunLoop().Run(); |
| 6151 | 6151 |
| 6152 EXPECT_EQ(2U, r.url_chain().size()); | 6152 EXPECT_EQ(2U, r.url_chain().size()); |
| 6153 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); | 6153 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6154 EXPECT_EQ(net::OK, r.status().error()); | 6154 EXPECT_EQ(OK, r.status().error()); |
| 6155 EXPECT_EQ(original_url, r.original_url()); | 6155 EXPECT_EQ(original_url, r.original_url()); |
| 6156 EXPECT_EQ(expected_url, r.url()); | 6156 EXPECT_EQ(expected_url, r.url()); |
| 6157 } | 6157 } |
| 6158 } | 6158 } |
| 6159 | 6159 |
| 6160 TEST_F(URLRequestTestHTTP, RedirectPreserveFirstPartyURL) { |
| 6161 ASSERT_TRUE(test_server_.Start()); |
| 6162 |
| 6163 GURL url(test_server_.GetURL("files/redirect302-to-echo")); |
| 6164 GURL first_party_url("http://example.com"); |
| 6165 |
| 6166 TestDelegate d; |
| 6167 { |
| 6168 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6169 r.set_first_party_for_cookies(first_party_url); |
| 6170 |
| 6171 r.Start(); |
| 6172 base::RunLoop().Run(); |
| 6173 |
| 6174 EXPECT_EQ(2U, r.url_chain().size()); |
| 6175 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6176 EXPECT_EQ(OK, r.status().error()); |
| 6177 EXPECT_EQ(first_party_url, r.first_party_for_cookies()); |
| 6178 } |
| 6179 } |
| 6180 |
| 6181 TEST_F(URLRequestTestHTTP, RedirectUpdateFirstPartyURL) { |
| 6182 ASSERT_TRUE(test_server_.Start()); |
| 6183 |
| 6184 GURL url(test_server_.GetURL("files/redirect302-to-echo")); |
| 6185 GURL original_first_party_url("http://example.com"); |
| 6186 GURL expected_first_party_url(test_server_.GetURL("echo")); |
| 6187 |
| 6188 TestDelegate d; |
| 6189 { |
| 6190 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_); |
| 6191 r.set_first_party_for_cookies(original_first_party_url); |
| 6192 r.set_first_party_url_policy( |
| 6193 URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); |
| 6194 |
| 6195 r.Start(); |
| 6196 base::RunLoop().Run(); |
| 6197 |
| 6198 EXPECT_EQ(2U, r.url_chain().size()); |
| 6199 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); |
| 6200 EXPECT_EQ(OK, r.status().error()); |
| 6201 EXPECT_EQ(expected_first_party_url, r.first_party_for_cookies()); |
| 6202 } |
| 6203 } |
| 6204 |
| 6160 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { | 6205 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { |
| 6161 ASSERT_TRUE(test_server_.Start()); | 6206 ASSERT_TRUE(test_server_.Start()); |
| 6162 | 6207 |
| 6163 const char kData[] = "hello world"; | 6208 const char kData[] = "hello world"; |
| 6164 | 6209 |
| 6165 TestDelegate d; | 6210 TestDelegate d; |
| 6166 URLRequest req(test_server_.GetURL("empty.html"), | 6211 URLRequest req(test_server_.GetURL("empty.html"), |
| 6167 DEFAULT_PRIORITY, | 6212 DEFAULT_PRIORITY, |
| 6168 &d, | 6213 &d, |
| 6169 &default_context_); | 6214 &default_context_); |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6963 params.cert_verifier = default_context_.cert_verifier(); | 7008 params.cert_verifier = default_context_.cert_verifier(); |
| 6964 params.transport_security_state = default_context_.transport_security_state(); | 7009 params.transport_security_state = default_context_.transport_security_state(); |
| 6965 params.proxy_service = default_context_.proxy_service(); | 7010 params.proxy_service = default_context_.proxy_service(); |
| 6966 params.ssl_config_service = default_context_.ssl_config_service(); | 7011 params.ssl_config_service = default_context_.ssl_config_service(); |
| 6967 params.http_auth_handler_factory = | 7012 params.http_auth_handler_factory = |
| 6968 default_context_.http_auth_handler_factory(); | 7013 default_context_.http_auth_handler_factory(); |
| 6969 params.network_delegate = &default_network_delegate_; | 7014 params.network_delegate = &default_network_delegate_; |
| 6970 params.http_server_properties = default_context_.http_server_properties(); | 7015 params.http_server_properties = default_context_.http_server_properties(); |
| 6971 params.ssl_session_cache_shard = "alternate"; | 7016 params.ssl_session_cache_shard = "alternate"; |
| 6972 | 7017 |
| 6973 scoped_ptr<net::HttpCache> cache(new net::HttpCache( | 7018 scoped_ptr<HttpCache> cache(new HttpCache( |
| 6974 new net::HttpNetworkSession(params), | 7019 new HttpNetworkSession(params), |
| 6975 net::HttpCache::DefaultBackend::InMemory(0))); | 7020 HttpCache::DefaultBackend::InMemory(0))); |
| 6976 | 7021 |
| 6977 default_context_.set_http_transaction_factory(cache.get()); | 7022 default_context_.set_http_transaction_factory(cache.get()); |
| 6978 | 7023 |
| 6979 { | 7024 { |
| 6980 TestDelegate d; | 7025 TestDelegate d; |
| 6981 URLRequest r(test_server.GetURL("ssl-session-cache"), | 7026 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 6982 DEFAULT_PRIORITY, | 7027 DEFAULT_PRIORITY, |
| 6983 &d, | 7028 &d, |
| 6984 &default_context_); | 7029 &default_context_); |
| 6985 | 7030 |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7171 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; | 7216 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; |
| 7172 | 7217 |
| 7173 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); | 7218 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); |
| 7174 ExpectFailure(ERR_CONNECTION_RESET); | 7219 ExpectFailure(ERR_CONNECTION_RESET); |
| 7175 } | 7220 } |
| 7176 #endif // !OS_ANDROID | 7221 #endif // !OS_ANDROID |
| 7177 | 7222 |
| 7178 class HTTPSSessionTest : public testing::Test { | 7223 class HTTPSSessionTest : public testing::Test { |
| 7179 public: | 7224 public: |
| 7180 HTTPSSessionTest() : default_context_(true) { | 7225 HTTPSSessionTest() : default_context_(true) { |
| 7181 cert_verifier_.set_default_result(net::OK); | 7226 cert_verifier_.set_default_result(OK); |
| 7182 | 7227 |
| 7183 default_context_.set_network_delegate(&default_network_delegate_); | 7228 default_context_.set_network_delegate(&default_network_delegate_); |
| 7184 default_context_.set_cert_verifier(&cert_verifier_); | 7229 default_context_.set_cert_verifier(&cert_verifier_); |
| 7185 default_context_.Init(); | 7230 default_context_.Init(); |
| 7186 } | 7231 } |
| 7187 virtual ~HTTPSSessionTest() {} | 7232 virtual ~HTTPSSessionTest() {} |
| 7188 | 7233 |
| 7189 protected: | 7234 protected: |
| 7190 MockCertVerifier cert_verifier_; | 7235 MockCertVerifier cert_verifier_; |
| 7191 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. | 7236 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. |
| 7192 TestURLRequestContext default_context_; | 7237 TestURLRequestContext default_context_; |
| 7193 }; | 7238 }; |
| 7194 | 7239 |
| 7195 // Tests that session resumption is not attempted if an invalid certificate | 7240 // Tests that session resumption is not attempted if an invalid certificate |
| 7196 // is presented. | 7241 // is presented. |
| 7197 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) { | 7242 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) { |
| 7198 SpawnedTestServer::SSLOptions ssl_options; | 7243 SpawnedTestServer::SSLOptions ssl_options; |
| 7199 ssl_options.record_resume = true; | 7244 ssl_options.record_resume = true; |
| 7200 SpawnedTestServer test_server( | 7245 SpawnedTestServer test_server( |
| 7201 SpawnedTestServer::TYPE_HTTPS, | 7246 SpawnedTestServer::TYPE_HTTPS, |
| 7202 ssl_options, | 7247 ssl_options, |
| 7203 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); | 7248 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); |
| 7204 ASSERT_TRUE(test_server.Start()); | 7249 ASSERT_TRUE(test_server.Start()); |
| 7205 | 7250 |
| 7206 SSLClientSocket::ClearSessionCache(); | 7251 SSLClientSocket::ClearSessionCache(); |
| 7207 | 7252 |
| 7208 // Simulate the certificate being expired and attempt a connection. | 7253 // Simulate the certificate being expired and attempt a connection. |
| 7209 cert_verifier_.set_default_result(net::ERR_CERT_DATE_INVALID); | 7254 cert_verifier_.set_default_result(ERR_CERT_DATE_INVALID); |
| 7210 { | 7255 { |
| 7211 TestDelegate d; | 7256 TestDelegate d; |
| 7212 URLRequest r(test_server.GetURL("ssl-session-cache"), | 7257 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 7213 DEFAULT_PRIORITY, | 7258 DEFAULT_PRIORITY, |
| 7214 &d, | 7259 &d, |
| 7215 &default_context_); | 7260 &default_context_); |
| 7216 | 7261 |
| 7217 r.Start(); | 7262 r.Start(); |
| 7218 EXPECT_TRUE(r.is_pending()); | 7263 EXPECT_TRUE(r.is_pending()); |
| 7219 | 7264 |
| 7220 base::RunLoop().Run(); | 7265 base::RunLoop().Run(); |
| 7221 | 7266 |
| 7222 EXPECT_EQ(1, d.response_started_count()); | 7267 EXPECT_EQ(1, d.response_started_count()); |
| 7223 } | 7268 } |
| 7224 | 7269 |
| 7225 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())-> | 7270 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())-> |
| 7226 CloseAllConnections(); | 7271 CloseAllConnections(); |
| 7227 | 7272 |
| 7228 // Now change the certificate to be acceptable (so that the response is | 7273 // Now change the certificate to be acceptable (so that the response is |
| 7229 // loaded), and ensure that no session id is presented to the peer. | 7274 // loaded), and ensure that no session id is presented to the peer. |
| 7230 cert_verifier_.set_default_result(net::OK); | 7275 cert_verifier_.set_default_result(OK); |
| 7231 { | 7276 { |
| 7232 TestDelegate d; | 7277 TestDelegate d; |
| 7233 URLRequest r(test_server.GetURL("ssl-session-cache"), | 7278 URLRequest r(test_server.GetURL("ssl-session-cache"), |
| 7234 DEFAULT_PRIORITY, | 7279 DEFAULT_PRIORITY, |
| 7235 &d, | 7280 &d, |
| 7236 &default_context_); | 7281 &default_context_); |
| 7237 | 7282 |
| 7238 r.Start(); | 7283 r.Start(); |
| 7239 EXPECT_TRUE(r.is_pending()); | 7284 EXPECT_TRUE(r.is_pending()); |
| 7240 | 7285 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7327 ev_test_policy_( | 7372 ev_test_policy_( |
| 7328 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(), | 7373 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(), |
| 7329 kOCSPTestCertFingerprint, | 7374 kOCSPTestCertFingerprint, |
| 7330 kOCSPTestCertPolicy)) { | 7375 kOCSPTestCertPolicy)) { |
| 7331 } | 7376 } |
| 7332 | 7377 |
| 7333 virtual void SetUp() OVERRIDE { | 7378 virtual void SetUp() OVERRIDE { |
| 7334 SetupContext(&context_); | 7379 SetupContext(&context_); |
| 7335 context_.Init(); | 7380 context_.Init(); |
| 7336 | 7381 |
| 7337 scoped_refptr<net::X509Certificate> root_cert = | 7382 scoped_refptr<X509Certificate> root_cert = |
| 7338 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem"); | 7383 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem"); |
| 7339 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert); | 7384 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert); |
| 7340 test_root_.reset(new ScopedTestRoot(root_cert.get())); | 7385 test_root_.reset(new ScopedTestRoot(root_cert.get())); |
| 7341 | 7386 |
| 7342 #if defined(USE_NSS) || defined(OS_IOS) | 7387 #if defined(USE_NSS) || defined(OS_IOS) |
| 7343 SetURLRequestContextForNSSHttpIO(&context_); | 7388 SetURLRequestContextForNSSHttpIO(&context_); |
| 7344 EnsureNSSHttpIOInit(); | 7389 EnsureNSSHttpIOInit(); |
| 7345 #endif | 7390 #endif |
| 7346 } | 7391 } |
| 7347 | 7392 |
| (...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8144 | 8189 |
| 8145 EXPECT_FALSE(r.is_pending()); | 8190 EXPECT_FALSE(r.is_pending()); |
| 8146 EXPECT_EQ(1, d->response_started_count()); | 8191 EXPECT_EQ(1, d->response_started_count()); |
| 8147 EXPECT_FALSE(d->received_data_before_response()); | 8192 EXPECT_FALSE(d->received_data_before_response()); |
| 8148 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); | 8193 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); |
| 8149 } | 8194 } |
| 8150 } | 8195 } |
| 8151 #endif // !defined(DISABLE_FTP_SUPPORT) | 8196 #endif // !defined(DISABLE_FTP_SUPPORT) |
| 8152 | 8197 |
| 8153 } // namespace net | 8198 } // namespace net |
| OLD | NEW |