Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: net/url_request/url_request_unittest.cc

Issue 398903002: Plumb redirect info out of net, through content, and into child processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unnecessary include Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
2424 } 2424 }
2425 2425
2426 // FixedDateNetworkDelegate swaps out the server's HTTP Date response header 2426 // FixedDateNetworkDelegate swaps out the server's HTTP Date response header
2427 // value for the |fixed_date| argument given to the constructor. 2427 // value for the |fixed_date| argument given to the constructor.
2428 class FixedDateNetworkDelegate : public TestNetworkDelegate { 2428 class FixedDateNetworkDelegate : public TestNetworkDelegate {
2429 public: 2429 public:
2430 explicit FixedDateNetworkDelegate(const std::string& fixed_date) 2430 explicit FixedDateNetworkDelegate(const std::string& fixed_date)
2431 : fixed_date_(fixed_date) {} 2431 : fixed_date_(fixed_date) {}
2432 virtual ~FixedDateNetworkDelegate() {} 2432 virtual ~FixedDateNetworkDelegate() {}
2433 2433
2434 // net::NetworkDelegate implementation 2434 // NetworkDelegate implementation
2435 virtual int OnHeadersReceived( 2435 virtual int OnHeadersReceived(
2436 net::URLRequest* request, 2436 URLRequest* request,
2437 const net::CompletionCallback& callback, 2437 const CompletionCallback& callback,
2438 const net::HttpResponseHeaders* original_response_headers, 2438 const HttpResponseHeaders* original_response_headers,
2439 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, 2439 scoped_refptr<HttpResponseHeaders>* override_response_headers,
2440 GURL* allowed_unsafe_redirect_url) OVERRIDE; 2440 GURL* allowed_unsafe_redirect_url) OVERRIDE;
2441 2441
2442 private: 2442 private:
2443 std::string fixed_date_; 2443 std::string fixed_date_;
2444 2444
2445 DISALLOW_COPY_AND_ASSIGN(FixedDateNetworkDelegate); 2445 DISALLOW_COPY_AND_ASSIGN(FixedDateNetworkDelegate);
2446 }; 2446 };
2447 2447
2448 int FixedDateNetworkDelegate::OnHeadersReceived( 2448 int FixedDateNetworkDelegate::OnHeadersReceived(
2449 net::URLRequest* request, 2449 URLRequest* request,
2450 const net::CompletionCallback& callback, 2450 const CompletionCallback& callback,
2451 const net::HttpResponseHeaders* original_response_headers, 2451 const HttpResponseHeaders* original_response_headers,
2452 scoped_refptr<net::HttpResponseHeaders>* override_response_headers, 2452 scoped_refptr<HttpResponseHeaders>* override_response_headers,
2453 GURL* allowed_unsafe_redirect_url) { 2453 GURL* allowed_unsafe_redirect_url) {
2454 net::HttpResponseHeaders* new_response_headers = 2454 HttpResponseHeaders* new_response_headers =
2455 new net::HttpResponseHeaders(original_response_headers->raw_headers()); 2455 new HttpResponseHeaders(original_response_headers->raw_headers());
2456 2456
2457 new_response_headers->RemoveHeader("Date"); 2457 new_response_headers->RemoveHeader("Date");
2458 new_response_headers->AddHeader("Date: " + fixed_date_); 2458 new_response_headers->AddHeader("Date: " + fixed_date_);
2459 2459
2460 *override_response_headers = new_response_headers; 2460 *override_response_headers = new_response_headers;
2461 return TestNetworkDelegate::OnHeadersReceived(request, 2461 return TestNetworkDelegate::OnHeadersReceived(request,
2462 callback, 2462 callback,
2463 original_response_headers, 2463 original_response_headers,
2464 override_response_headers, 2464 override_response_headers,
2465 allowed_unsafe_redirect_url); 2465 allowed_unsafe_redirect_url);
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 r.Start(); 3072 r.Start();
3073 base::RunLoop().Run(); 3073 base::RunLoop().Run();
3074 3074
3075 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 3075 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
3076 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair())); 3076 EXPECT_TRUE(r.proxy_server().Equals(test_server_.host_port_pair()));
3077 EXPECT_EQ( 3077 EXPECT_EQ(
3078 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); 3078 2, network_delegate.observed_before_proxy_headers_sent_callbacks());
3079 EXPECT_TRUE( 3079 EXPECT_TRUE(
3080 network_delegate.last_observed_proxy().Equals( 3080 network_delegate.last_observed_proxy().Equals(
3081 test_server_.host_port_pair())); 3081 test_server_.host_port_pair()));
3082 EXPECT_EQ(net::OK, r.status().error()); 3082 EXPECT_EQ(OK, r.status().error());
3083 EXPECT_EQ(redirect_url, r.url()); 3083 EXPECT_EQ(redirect_url, r.url());
3084 EXPECT_EQ(original_url, r.original_url()); 3084 EXPECT_EQ(original_url, r.original_url());
3085 EXPECT_EQ(2U, r.url_chain().size()); 3085 EXPECT_EQ(2U, r.url_chain().size());
3086 EXPECT_EQ(2, network_delegate.created_requests()); 3086 EXPECT_EQ(2, network_delegate.created_requests());
3087 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3087 EXPECT_EQ(0, network_delegate.destroyed_requests());
3088 } 3088 }
3089 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3089 EXPECT_EQ(1, network_delegate.destroyed_requests());
3090 } 3090 }
3091 3091
3092 // Tests that the network delegate can synchronously complete OnAuthRequired 3092 // Tests that the network delegate can synchronously complete OnAuthRequired
(...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after
4071 set_cancel_in_received_redirect(true); 4071 set_cancel_in_received_redirect(true);
4072 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED) 4072 else if (cancel_stage == CANCEL_ON_RESPONSE_STARTED)
4073 set_cancel_in_response_started(true); 4073 set_cancel_in_response_started(true);
4074 else if (cancel_stage == CANCEL_ON_READ_COMPLETED) 4074 else if (cancel_stage == CANCEL_ON_READ_COMPLETED)
4075 set_cancel_in_received_data(true); 4075 set_cancel_in_received_data(true);
4076 } 4076 }
4077 virtual ~AsyncLoggingUrlRequestDelegate() {} 4077 virtual ~AsyncLoggingUrlRequestDelegate() {}
4078 4078
4079 // URLRequest::Delegate implementation: 4079 // URLRequest::Delegate implementation:
4080 void virtual OnReceivedRedirect(URLRequest* request, 4080 void virtual OnReceivedRedirect(URLRequest* request,
4081 const GURL& new_url, 4081 const RedirectInfo& redirect_info,
4082 bool* defer_redirect) OVERRIDE { 4082 bool* defer_redirect) OVERRIDE {
4083 *defer_redirect = true; 4083 *defer_redirect = true;
4084 AsyncDelegateLogger::Run( 4084 AsyncDelegateLogger::Run(
4085 request, 4085 request,
4086 LOAD_STATE_WAITING_FOR_DELEGATE, 4086 LOAD_STATE_WAITING_FOR_DELEGATE,
4087 LOAD_STATE_WAITING_FOR_DELEGATE, 4087 LOAD_STATE_WAITING_FOR_DELEGATE,
4088 LOAD_STATE_WAITING_FOR_DELEGATE, 4088 LOAD_STATE_WAITING_FOR_DELEGATE,
4089 base::Bind( 4089 base::Bind(
4090 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete, 4090 &AsyncLoggingUrlRequestDelegate::OnReceivedRedirectLoggingComplete,
4091 base::Unretained(this), request, new_url)); 4091 base::Unretained(this), request, redirect_info));
4092 } 4092 }
4093 4093
4094 virtual void OnResponseStarted(URLRequest* request) OVERRIDE { 4094 virtual void OnResponseStarted(URLRequest* request) OVERRIDE {
4095 AsyncDelegateLogger::Run( 4095 AsyncDelegateLogger::Run(
4096 request, 4096 request,
4097 LOAD_STATE_WAITING_FOR_DELEGATE, 4097 LOAD_STATE_WAITING_FOR_DELEGATE,
4098 LOAD_STATE_WAITING_FOR_DELEGATE, 4098 LOAD_STATE_WAITING_FOR_DELEGATE,
4099 LOAD_STATE_WAITING_FOR_DELEGATE, 4099 LOAD_STATE_WAITING_FOR_DELEGATE,
4100 base::Bind( 4100 base::Bind(
4101 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete, 4101 &AsyncLoggingUrlRequestDelegate::OnResponseStartedLoggingComplete,
4102 base::Unretained(this), request)); 4102 base::Unretained(this), request));
4103 } 4103 }
4104 4104
4105 virtual void OnReadCompleted(URLRequest* request, 4105 virtual void OnReadCompleted(URLRequest* request,
4106 int bytes_read) OVERRIDE { 4106 int bytes_read) OVERRIDE {
4107 AsyncDelegateLogger::Run( 4107 AsyncDelegateLogger::Run(
4108 request, 4108 request,
4109 LOAD_STATE_IDLE, 4109 LOAD_STATE_IDLE,
4110 LOAD_STATE_IDLE, 4110 LOAD_STATE_IDLE,
4111 LOAD_STATE_IDLE, 4111 LOAD_STATE_IDLE,
4112 base::Bind( 4112 base::Bind(
4113 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete, 4113 &AsyncLoggingUrlRequestDelegate::AfterReadCompletedLoggingComplete,
4114 base::Unretained(this), request, bytes_read)); 4114 base::Unretained(this), request, bytes_read));
4115 } 4115 }
4116 4116
4117 private: 4117 private:
4118 void OnReceivedRedirectLoggingComplete(URLRequest* request, 4118 void OnReceivedRedirectLoggingComplete(URLRequest* request,
4119 const GURL& new_url) { 4119 const RedirectInfo& redirect_info) {
4120 bool defer_redirect = false; 4120 bool defer_redirect = false;
4121 TestDelegate::OnReceivedRedirect(request, new_url, &defer_redirect); 4121 TestDelegate::OnReceivedRedirect(request, redirect_info, &defer_redirect);
4122 // FollowDeferredRedirect should not be called after cancellation. 4122 // FollowDeferredRedirect should not be called after cancellation.
4123 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT) 4123 if (cancel_stage_ == CANCEL_ON_RECEIVED_REDIRECT)
4124 return; 4124 return;
4125 if (!defer_redirect) 4125 if (!defer_redirect)
4126 request->FollowDeferredRedirect(); 4126 request->FollowDeferredRedirect();
4127 } 4127 }
4128 4128
4129 void OnResponseStartedLoggingComplete(URLRequest* request) { 4129 void OnResponseStartedLoggingComplete(URLRequest* request) {
4130 // The parent class continues the request. 4130 // The parent class continues the request.
4131 TestDelegate::OnResponseStarted(request); 4131 TestDelegate::OnResponseStarted(request);
(...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after
4569 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); 4569 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE));
4570 } 4570 }
4571 } 4571 }
4572 4572
4573 namespace { 4573 namespace {
4574 4574
4575 const char kExtraHeader[] = "Allow-Snafu"; 4575 const char kExtraHeader[] = "Allow-Snafu";
4576 const char kExtraValue[] = "fubar"; 4576 const char kExtraValue[] = "fubar";
4577 4577
4578 class RedirectWithAdditionalHeadersDelegate : public TestDelegate { 4578 class RedirectWithAdditionalHeadersDelegate : public TestDelegate {
4579 virtual void OnReceivedRedirect(net::URLRequest* request, 4579 virtual void OnReceivedRedirect(URLRequest* request,
4580 const GURL& new_url, 4580 const RedirectInfo& redirect_info,
4581 bool* defer_redirect) OVERRIDE { 4581 bool* defer_redirect) OVERRIDE {
4582 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); 4582 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect);
4583 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); 4583 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false);
4584 } 4584 }
4585 }; 4585 };
4586 4586
4587 } // namespace 4587 } // namespace
4588 4588
4589 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { 4589 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) {
4590 ASSERT_TRUE(test_server_.Start()); 4590 ASSERT_TRUE(test_server_.Start());
4591 4591
4592 GURL destination_url = test_server_.GetURL( 4592 GURL destination_url = test_server_.GetURL(
(...skipping 12 matching lines...) Expand all
4605 EXPECT_FALSE(req.is_pending()); 4605 EXPECT_FALSE(req.is_pending());
4606 EXPECT_FALSE(req.is_redirecting()); 4606 EXPECT_FALSE(req.is_redirecting());
4607 EXPECT_EQ(kExtraValue, d.data_received()); 4607 EXPECT_EQ(kExtraValue, d.data_received());
4608 } 4608 }
4609 4609
4610 namespace { 4610 namespace {
4611 4611
4612 const char kExtraHeaderToRemove[] = "To-Be-Removed"; 4612 const char kExtraHeaderToRemove[] = "To-Be-Removed";
4613 4613
4614 class RedirectWithHeaderRemovalDelegate : public TestDelegate { 4614 class RedirectWithHeaderRemovalDelegate : public TestDelegate {
4615 virtual void OnReceivedRedirect(net::URLRequest* request, 4615 virtual void OnReceivedRedirect(URLRequest* request,
4616 const GURL& new_url, 4616 const RedirectInfo& redirect_info,
4617 bool* defer_redirect) OVERRIDE { 4617 bool* defer_redirect) OVERRIDE {
4618 TestDelegate::OnReceivedRedirect(request, new_url, defer_redirect); 4618 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect);
4619 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); 4619 request->RemoveRequestHeaderByName(kExtraHeaderToRemove);
4620 } 4620 }
4621 }; 4621 };
4622 4622
4623 } // namespace 4623 } // namespace
4624 4624
4625 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { 4625 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) {
4626 ASSERT_TRUE(test_server_.Start()); 4626 ASSERT_TRUE(test_server_.Start());
4627 4627
4628 GURL destination_url = test_server_.GetURL( 4628 GURL destination_url = test_server_.GetURL(
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
5336 DEFAULT_PRIORITY, 5336 DEFAULT_PRIORITY,
5337 &d, 5337 &d,
5338 &default_context_); 5338 &default_context_);
5339 5339
5340 r.Start(); 5340 r.Start();
5341 base::RunLoop().Run(); 5341 base::RunLoop().Run();
5342 5342
5343 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5343 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5344 5344
5345 EXPECT_EQ(2U, r.url_chain().size()); 5345 EXPECT_EQ(2U, r.url_chain().size());
5346 EXPECT_EQ(net::OK, r.status().error()); 5346 EXPECT_EQ(OK, r.status().error());
5347 EXPECT_EQ(unsafe_url, r.url()); 5347 EXPECT_EQ(unsafe_url, r.url());
5348 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); 5348 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received());
5349 } 5349 }
5350 } 5350 }
5351 5351
5352 // Tests that a redirect to a different unsafe URL is blocked, even after adding 5352 // Tests that a redirect to a different unsafe URL is blocked, even after adding
5353 // some other URL to the whitelist. 5353 // some other URL to the whitelist.
5354 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { 5354 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) {
5355 ASSERT_TRUE(test_server_.Start()); 5355 ASSERT_TRUE(test_server_.Start());
5356 5356
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
5389 5389
5390 TestDelegate d; 5390 TestDelegate d;
5391 { 5391 {
5392 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5392 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5393 5393
5394 r.Start(); 5394 r.Start();
5395 base::RunLoop().Run(); 5395 base::RunLoop().Run();
5396 5396
5397 EXPECT_EQ(2U, r.url_chain().size()); 5397 EXPECT_EQ(2U, r.url_chain().size());
5398 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5398 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5399 EXPECT_EQ(net::OK, r.status().error()); 5399 EXPECT_EQ(OK, r.status().error());
5400 EXPECT_EQ(original_url, r.original_url()); 5400 EXPECT_EQ(original_url, r.original_url());
5401 EXPECT_EQ(expected_url, r.url()); 5401 EXPECT_EQ(expected_url, r.url());
5402 } 5402 }
5403 } 5403 }
5404 5404
5405 // When a delegate has specified a safe redirect URL, but it does not match the 5405 // When a delegate has specified a safe redirect URL, but it does not match the
5406 // redirect target, then do not prevent the reference fragment from being added. 5406 // redirect target, then do not prevent the reference fragment from being added.
5407 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { 5407 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) {
5408 ASSERT_TRUE(test_server_.Start()); 5408 ASSERT_TRUE(test_server_.Start());
5409 5409
5410 GURL original_url(test_server_.GetURL("original#expected-fragment")); 5410 GURL original_url(test_server_.GetURL("original#expected-fragment"));
5411 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); 5411 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url");
5412 GURL redirect_url(test_server_.GetURL("target")); 5412 GURL redirect_url(test_server_.GetURL("target"));
5413 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); 5413 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment"));
5414 5414
5415 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 5415 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
5416 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 5416 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
5417 5417
5418 TestDelegate d; 5418 TestDelegate d;
5419 { 5419 {
5420 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5420 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5421 5421
5422 r.Start(); 5422 r.Start();
5423 base::RunLoop().Run(); 5423 base::RunLoop().Run();
5424 5424
5425 EXPECT_EQ(2U, r.url_chain().size()); 5425 EXPECT_EQ(2U, r.url_chain().size());
5426 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5426 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5427 EXPECT_EQ(net::OK, r.status().error()); 5427 EXPECT_EQ(OK, r.status().error());
5428 EXPECT_EQ(original_url, r.original_url()); 5428 EXPECT_EQ(original_url, r.original_url());
5429 EXPECT_EQ(expected_redirect_url, r.url()); 5429 EXPECT_EQ(expected_redirect_url, r.url());
5430 } 5430 }
5431 } 5431 }
5432 5432
5433 // When a delegate has specified a safe redirect URL, assume that the redirect 5433 // When a delegate has specified a safe redirect URL, assume that the redirect
5434 // URL should not be changed. In particular, the reference fragment should not 5434 // URL should not be changed. In particular, the reference fragment should not
5435 // be modified. 5435 // be modified.
5436 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { 5436 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) {
5437 ASSERT_TRUE(test_server_.Start()); 5437 ASSERT_TRUE(test_server_.Start());
5438 5438
5439 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); 5439 GURL original_url(test_server_.GetURL("original#should-not-be-appended"));
5440 GURL redirect_url("data:text/html,expect-no-reference-fragment"); 5440 GURL redirect_url("data:text/html,expect-no-reference-fragment");
5441 5441
5442 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 5442 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
5443 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); 5443 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url);
5444 5444
5445 TestDelegate d; 5445 TestDelegate d;
5446 { 5446 {
5447 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5447 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5448 5448
5449 r.Start(); 5449 r.Start();
5450 base::RunLoop().Run(); 5450 base::RunLoop().Run();
5451 5451
5452 EXPECT_EQ(2U, r.url_chain().size()); 5452 EXPECT_EQ(2U, r.url_chain().size());
5453 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5453 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5454 EXPECT_EQ(net::OK, r.status().error()); 5454 EXPECT_EQ(OK, r.status().error());
5455 EXPECT_EQ(original_url, r.original_url()); 5455 EXPECT_EQ(original_url, r.original_url());
5456 EXPECT_EQ(redirect_url, r.url()); 5456 EXPECT_EQ(redirect_url, r.url());
5457 } 5457 }
5458 } 5458 }
5459 5459
5460 // When a URLRequestRedirectJob is created, the redirection must be followed and 5460 // When a URLRequestRedirectJob is created, the redirection must be followed and
5461 // the reference fragment of the target URL must not be modified. 5461 // the reference fragment of the target URL must not be modified.
5462 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { 5462 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) {
5463 ASSERT_TRUE(test_server_.Start()); 5463 ASSERT_TRUE(test_server_.Start());
5464 5464
5465 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); 5465 GURL original_url(test_server_.GetURL("original#should-not-be-appended"));
5466 GURL redirect_url(test_server_.GetURL("echo")); 5466 GURL redirect_url(test_server_.GetURL("echo"));
5467 5467
5468 TestDelegate d; 5468 TestDelegate d;
5469 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 5469 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
5470 5470
5471 URLRequestRedirectJob* job = new URLRequestRedirectJob( 5471 URLRequestRedirectJob* job = new URLRequestRedirectJob(
5472 &r, &default_network_delegate_, redirect_url, 5472 &r, &default_network_delegate_, redirect_url,
5473 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); 5473 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
5474 AddTestInterceptor()->set_main_intercept_job(job); 5474 AddTestInterceptor()->set_main_intercept_job(job);
5475 5475
5476 r.Start(); 5476 r.Start();
5477 base::RunLoop().Run(); 5477 base::RunLoop().Run();
5478 5478
5479 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 5479 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
5480 EXPECT_EQ(net::OK, r.status().error()); 5480 EXPECT_EQ(OK, r.status().error());
5481 EXPECT_EQ(original_url, r.original_url()); 5481 EXPECT_EQ(original_url, r.original_url());
5482 EXPECT_EQ(redirect_url, r.url()); 5482 EXPECT_EQ(redirect_url, r.url());
5483 } 5483 }
5484 5484
5485 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { 5485 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) {
5486 ASSERT_TRUE(test_server_.Start()); 5486 ASSERT_TRUE(test_server_.Start());
5487 5487
5488 TestDelegate d; 5488 TestDelegate d;
5489 URLRequest req(test_server_.GetURL("echoheader?Referer"), 5489 URLRequest req(test_server_.GetURL("echoheader?Referer"),
5490 DEFAULT_PRIORITY, 5490 DEFAULT_PRIORITY,
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
6099 6099
6100 TestDelegate d; 6100 TestDelegate d;
6101 { 6101 {
6102 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_); 6102 URLRequest r(original_url, DEFAULT_PRIORITY, &d, &default_context_);
6103 6103
6104 r.Start(); 6104 r.Start();
6105 base::RunLoop().Run(); 6105 base::RunLoop().Run();
6106 6106
6107 EXPECT_EQ(2U, r.url_chain().size()); 6107 EXPECT_EQ(2U, r.url_chain().size());
6108 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status()); 6108 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
6109 EXPECT_EQ(net::OK, r.status().error()); 6109 EXPECT_EQ(OK, r.status().error());
6110 EXPECT_EQ(original_url, r.original_url()); 6110 EXPECT_EQ(original_url, r.original_url());
6111 EXPECT_EQ(expected_url, r.url()); 6111 EXPECT_EQ(expected_url, r.url());
6112 } 6112 }
6113 } 6113 }
6114 6114
6115 TEST_F(URLRequestTestHTTP, RedirectPreserveFirstPartyURL) {
6116 ASSERT_TRUE(test_server_.Start());
6117
6118 GURL url(test_server_.GetURL("files/redirect302-to-echo"));
6119 GURL first_party_url("http://example.com");
6120
6121 TestDelegate d;
6122 {
6123 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_);
6124 r.set_first_party_for_cookies(first_party_url);
6125
6126 r.Start();
6127 base::RunLoop().Run();
6128
6129 EXPECT_EQ(2U, r.url_chain().size());
6130 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
6131 EXPECT_EQ(OK, r.status().error());
6132 EXPECT_EQ(first_party_url, r.first_party_for_cookies());
6133 }
6134 }
6135
6136 TEST_F(URLRequestTestHTTP, RedirectUpdateFirstPartyURL) {
6137 ASSERT_TRUE(test_server_.Start());
6138
6139 GURL url(test_server_.GetURL("files/redirect302-to-echo"));
6140 GURL original_first_party_url("http://example.com");
6141 GURL expected_first_party_url(test_server_.GetURL("echo"));
6142
6143 TestDelegate d;
6144 {
6145 URLRequest r(url, DEFAULT_PRIORITY, &d, &default_context_);
6146 r.set_first_party_for_cookies(original_first_party_url);
6147 r.set_first_party_url_policy(
6148 URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT);
6149
6150 r.Start();
6151 base::RunLoop().Run();
6152
6153 EXPECT_EQ(2U, r.url_chain().size());
6154 EXPECT_EQ(URLRequestStatus::SUCCESS, r.status().status());
6155 EXPECT_EQ(OK, r.status().error());
6156 EXPECT_EQ(expected_first_party_url, r.first_party_for_cookies());
6157 }
6158 }
6159
6115 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { 6160 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) {
6116 ASSERT_TRUE(test_server_.Start()); 6161 ASSERT_TRUE(test_server_.Start());
6117 6162
6118 const char kData[] = "hello world"; 6163 const char kData[] = "hello world";
6119 6164
6120 TestDelegate d; 6165 TestDelegate d;
6121 URLRequest req(test_server_.GetURL("empty.html"), 6166 URLRequest req(test_server_.GetURL("empty.html"),
6122 DEFAULT_PRIORITY, 6167 DEFAULT_PRIORITY,
6123 &d, 6168 &d,
6124 &default_context_); 6169 &default_context_);
(...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after
6918 params.cert_verifier = default_context_.cert_verifier(); 6963 params.cert_verifier = default_context_.cert_verifier();
6919 params.transport_security_state = default_context_.transport_security_state(); 6964 params.transport_security_state = default_context_.transport_security_state();
6920 params.proxy_service = default_context_.proxy_service(); 6965 params.proxy_service = default_context_.proxy_service();
6921 params.ssl_config_service = default_context_.ssl_config_service(); 6966 params.ssl_config_service = default_context_.ssl_config_service();
6922 params.http_auth_handler_factory = 6967 params.http_auth_handler_factory =
6923 default_context_.http_auth_handler_factory(); 6968 default_context_.http_auth_handler_factory();
6924 params.network_delegate = &default_network_delegate_; 6969 params.network_delegate = &default_network_delegate_;
6925 params.http_server_properties = default_context_.http_server_properties(); 6970 params.http_server_properties = default_context_.http_server_properties();
6926 params.ssl_session_cache_shard = "alternate"; 6971 params.ssl_session_cache_shard = "alternate";
6927 6972
6928 scoped_ptr<net::HttpCache> cache(new net::HttpCache( 6973 scoped_ptr<HttpCache> cache(new HttpCache(
6929 new net::HttpNetworkSession(params), 6974 new HttpNetworkSession(params),
6930 net::HttpCache::DefaultBackend::InMemory(0))); 6975 HttpCache::DefaultBackend::InMemory(0)));
6931 6976
6932 default_context_.set_http_transaction_factory(cache.get()); 6977 default_context_.set_http_transaction_factory(cache.get());
6933 6978
6934 { 6979 {
6935 TestDelegate d; 6980 TestDelegate d;
6936 URLRequest r(test_server.GetURL("ssl-session-cache"), 6981 URLRequest r(test_server.GetURL("ssl-session-cache"),
6937 DEFAULT_PRIORITY, 6982 DEFAULT_PRIORITY,
6938 &d, 6983 &d,
6939 &default_context_); 6984 &default_context_);
6940 6985
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
7134 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET; 7179 SpawnedTestServer::SSLOptions::TLS_INTOLERANCE_RESET;
7135 7180
7136 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options)); 7181 ASSERT_NO_FATAL_FAILURE(DoFallbackTest(ssl_options));
7137 ExpectFailure(ERR_CONNECTION_RESET); 7182 ExpectFailure(ERR_CONNECTION_RESET);
7138 } 7183 }
7139 #endif // !OS_ANDROID 7184 #endif // !OS_ANDROID
7140 7185
7141 class HTTPSSessionTest : public testing::Test { 7186 class HTTPSSessionTest : public testing::Test {
7142 public: 7187 public:
7143 HTTPSSessionTest() : default_context_(true) { 7188 HTTPSSessionTest() : default_context_(true) {
7144 cert_verifier_.set_default_result(net::OK); 7189 cert_verifier_.set_default_result(OK);
7145 7190
7146 default_context_.set_network_delegate(&default_network_delegate_); 7191 default_context_.set_network_delegate(&default_network_delegate_);
7147 default_context_.set_cert_verifier(&cert_verifier_); 7192 default_context_.set_cert_verifier(&cert_verifier_);
7148 default_context_.Init(); 7193 default_context_.Init();
7149 } 7194 }
7150 virtual ~HTTPSSessionTest() {} 7195 virtual ~HTTPSSessionTest() {}
7151 7196
7152 protected: 7197 protected:
7153 MockCertVerifier cert_verifier_; 7198 MockCertVerifier cert_verifier_;
7154 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. 7199 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest.
7155 TestURLRequestContext default_context_; 7200 TestURLRequestContext default_context_;
7156 }; 7201 };
7157 7202
7158 // Tests that session resumption is not attempted if an invalid certificate 7203 // Tests that session resumption is not attempted if an invalid certificate
7159 // is presented. 7204 // is presented.
7160 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) { 7205 TEST_F(HTTPSSessionTest, DontResumeSessionsForInvalidCertificates) {
7161 SpawnedTestServer::SSLOptions ssl_options; 7206 SpawnedTestServer::SSLOptions ssl_options;
7162 ssl_options.record_resume = true; 7207 ssl_options.record_resume = true;
7163 SpawnedTestServer test_server( 7208 SpawnedTestServer test_server(
7164 SpawnedTestServer::TYPE_HTTPS, 7209 SpawnedTestServer::TYPE_HTTPS,
7165 ssl_options, 7210 ssl_options,
7166 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 7211 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7167 ASSERT_TRUE(test_server.Start()); 7212 ASSERT_TRUE(test_server.Start());
7168 7213
7169 SSLClientSocket::ClearSessionCache(); 7214 SSLClientSocket::ClearSessionCache();
7170 7215
7171 // Simulate the certificate being expired and attempt a connection. 7216 // Simulate the certificate being expired and attempt a connection.
7172 cert_verifier_.set_default_result(net::ERR_CERT_DATE_INVALID); 7217 cert_verifier_.set_default_result(ERR_CERT_DATE_INVALID);
7173 { 7218 {
7174 TestDelegate d; 7219 TestDelegate d;
7175 URLRequest r(test_server.GetURL("ssl-session-cache"), 7220 URLRequest r(test_server.GetURL("ssl-session-cache"),
7176 DEFAULT_PRIORITY, 7221 DEFAULT_PRIORITY,
7177 &d, 7222 &d,
7178 &default_context_); 7223 &default_context_);
7179 7224
7180 r.Start(); 7225 r.Start();
7181 EXPECT_TRUE(r.is_pending()); 7226 EXPECT_TRUE(r.is_pending());
7182 7227
7183 base::RunLoop().Run(); 7228 base::RunLoop().Run();
7184 7229
7185 EXPECT_EQ(1, d.response_started_count()); 7230 EXPECT_EQ(1, d.response_started_count());
7186 } 7231 }
7187 7232
7188 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())-> 7233 reinterpret_cast<HttpCache*>(default_context_.http_transaction_factory())->
7189 CloseAllConnections(); 7234 CloseAllConnections();
7190 7235
7191 // Now change the certificate to be acceptable (so that the response is 7236 // Now change the certificate to be acceptable (so that the response is
7192 // loaded), and ensure that no session id is presented to the peer. 7237 // loaded), and ensure that no session id is presented to the peer.
7193 cert_verifier_.set_default_result(net::OK); 7238 cert_verifier_.set_default_result(OK);
7194 { 7239 {
7195 TestDelegate d; 7240 TestDelegate d;
7196 URLRequest r(test_server.GetURL("ssl-session-cache"), 7241 URLRequest r(test_server.GetURL("ssl-session-cache"),
7197 DEFAULT_PRIORITY, 7242 DEFAULT_PRIORITY,
7198 &d, 7243 &d,
7199 &default_context_); 7244 &default_context_);
7200 7245
7201 r.Start(); 7246 r.Start();
7202 EXPECT_TRUE(r.is_pending()); 7247 EXPECT_TRUE(r.is_pending());
7203 7248
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
7290 ev_test_policy_( 7335 ev_test_policy_(
7291 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(), 7336 new ScopedTestEVPolicy(EVRootCAMetadata::GetInstance(),
7292 kOCSPTestCertFingerprint, 7337 kOCSPTestCertFingerprint,
7293 kOCSPTestCertPolicy)) { 7338 kOCSPTestCertPolicy)) {
7294 } 7339 }
7295 7340
7296 virtual void SetUp() OVERRIDE { 7341 virtual void SetUp() OVERRIDE {
7297 SetupContext(&context_); 7342 SetupContext(&context_);
7298 context_.Init(); 7343 context_.Init();
7299 7344
7300 scoped_refptr<net::X509Certificate> root_cert = 7345 scoped_refptr<X509Certificate> root_cert =
7301 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem"); 7346 ImportCertFromFile(GetTestCertsDirectory(), "ocsp-test-root.pem");
7302 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert); 7347 CHECK_NE(static_cast<X509Certificate*>(NULL), root_cert);
7303 test_root_.reset(new ScopedTestRoot(root_cert.get())); 7348 test_root_.reset(new ScopedTestRoot(root_cert.get()));
7304 7349
7305 #if defined(USE_NSS) || defined(OS_IOS) 7350 #if defined(USE_NSS) || defined(OS_IOS)
7306 SetURLRequestContextForNSSHttpIO(&context_); 7351 SetURLRequestContextForNSSHttpIO(&context_);
7307 EnsureNSSHttpIOInit(); 7352 EnsureNSSHttpIOInit();
7308 #endif 7353 #endif
7309 } 7354 }
7310 7355
(...skipping 796 matching lines...) Expand 10 before | Expand all | Expand 10 after
8107 8152
8108 EXPECT_FALSE(r.is_pending()); 8153 EXPECT_FALSE(r.is_pending());
8109 EXPECT_EQ(1, d->response_started_count()); 8154 EXPECT_EQ(1, d->response_started_count());
8110 EXPECT_FALSE(d->received_data_before_response()); 8155 EXPECT_FALSE(d->received_data_before_response());
8111 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size)); 8156 EXPECT_EQ(d->bytes_received(), static_cast<int>(file_size));
8112 } 8157 }
8113 } 8158 }
8114 #endif // !defined(DISABLE_FTP_SUPPORT) 8159 #endif // !defined(DISABLE_FTP_SUPPORT)
8115 8160
8116 } // namespace net 8161 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698