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

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: darin comments Created 6 years, 4 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
« no previous file with comments | « net/url_request/url_request_test_util.cc ('k') | net/websockets/websocket_stream.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/url_request/url_request_test_util.cc ('k') | net/websockets/websocket_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698