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 |