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

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

Issue 1378123003: Adding SSL ETS Tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ets
Patch Set: Rebase. Created 5 years, 1 month 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
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 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 #include "net/http/http_response_headers.h" 70 #include "net/http/http_response_headers.h"
71 #include "net/http/http_util.h" 71 #include "net/http/http_util.h"
72 #include "net/log/net_log.h" 72 #include "net/log/net_log.h"
73 #include "net/log/test_net_log.h" 73 #include "net/log/test_net_log.h"
74 #include "net/log/test_net_log_entry.h" 74 #include "net/log/test_net_log_entry.h"
75 #include "net/log/test_net_log_util.h" 75 #include "net/log/test_net_log_util.h"
76 #include "net/proxy/proxy_service.h" 76 #include "net/proxy/proxy_service.h"
77 #include "net/socket/ssl_client_socket.h" 77 #include "net/socket/ssl_client_socket.h"
78 #include "net/ssl/ssl_cipher_suite_names.h" 78 #include "net/ssl/ssl_cipher_suite_names.h"
79 #include "net/ssl/ssl_connection_status_flags.h" 79 #include "net/ssl/ssl_connection_status_flags.h"
80 #include "net/ssl/ssl_server_config.h"
80 #include "net/test/cert_test_util.h" 81 #include "net/test/cert_test_util.h"
81 #include "net/test/embedded_test_server/embedded_test_server.h" 82 #include "net/test/embedded_test_server/embedded_test_server.h"
82 #include "net/test/embedded_test_server/http_request.h" 83 #include "net/test/embedded_test_server/http_request.h"
83 #include "net/test/embedded_test_server/http_response.h" 84 #include "net/test/embedded_test_server/http_response.h"
84 #include "net/test/spawned_test_server/spawned_test_server.h" 85 #include "net/test/spawned_test_server/spawned_test_server.h"
85 #include "net/test/url_request/url_request_failed_job.h" 86 #include "net/test/url_request/url_request_failed_job.h"
86 #include "net/url_request/data_protocol_handler.h" 87 #include "net/url_request/data_protocol_handler.h"
87 #include "net/url_request/static_http_user_agent_settings.h" 88 #include "net/url_request/static_http_user_agent_settings.h"
88 #include "net/url_request/url_request.h" 89 #include "net/url_request/url_request.h"
89 #include "net/url_request/url_request_filter.h" 90 #include "net/url_request/url_request_filter.h"
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 219 }
219 220
220 for (size_t i = 0; i < len; i++) { 221 for (size_t i = 0; i < len; i++) {
221 buffer[i] = static_cast<char>(rand()); 222 buffer[i] = static_cast<char>(rand());
222 if (!buffer[i]) 223 if (!buffer[i])
223 buffer[i] = 'g'; 224 buffer[i] = 'g';
224 } 225 }
225 } 226 }
226 #endif 227 #endif
227 228
228 #if !defined(OS_IOS)
229 void TestLoadTimingCacheHitNoNetwork( 229 void TestLoadTimingCacheHitNoNetwork(
230 const LoadTimingInfo& load_timing_info) { 230 const LoadTimingInfo& load_timing_info) {
231 EXPECT_FALSE(load_timing_info.socket_reused); 231 EXPECT_FALSE(load_timing_info.socket_reused);
232 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id); 232 EXPECT_EQ(NetLog::Source::kInvalidId, load_timing_info.socket_log_id);
233 233
234 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); 234 EXPECT_FALSE(load_timing_info.request_start_time.is_null());
235 EXPECT_FALSE(load_timing_info.request_start.is_null()); 235 EXPECT_FALSE(load_timing_info.request_start.is_null());
236 236
237 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing); 237 ExpectConnectTimingHasNoTimes(load_timing_info.connect_timing);
238 EXPECT_LE(load_timing_info.request_start, load_timing_info.send_start); 238 EXPECT_LE(load_timing_info.request_start, load_timing_info.send_start);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 const GURL& host_url) { 311 const GURL& host_url) {
312 std::string sent_value; 312 std::string sent_value;
313 313
314 EXPECT_TRUE(headers.GetHeader("Host", &sent_value)); 314 EXPECT_TRUE(headers.GetHeader("Host", &sent_value));
315 EXPECT_EQ(GetHostAndOptionalPort(host_url), sent_value); 315 EXPECT_EQ(GetHostAndOptionalPort(host_url), sent_value);
316 316
317 EXPECT_TRUE(headers.GetHeader("Connection", &sent_value)); 317 EXPECT_TRUE(headers.GetHeader("Connection", &sent_value));
318 EXPECT_EQ("keep-alive", sent_value); 318 EXPECT_EQ("keep-alive", sent_value);
319 } 319 }
320 320
321 #if !defined(OS_IOS)
321 bool FingerprintsEqual(const HashValueVector& a, const HashValueVector& b) { 322 bool FingerprintsEqual(const HashValueVector& a, const HashValueVector& b) {
322 size_t size = a.size(); 323 size_t size = a.size();
323 324
324 if (size != b.size()) 325 if (size != b.size())
325 return false; 326 return false;
326 327
327 for (size_t i = 0; i < size; ++i) { 328 for (size_t i = 0; i < size; ++i) {
328 if (!a[i].Equals(b[i])) 329 if (!a[i].Equals(b[i]))
329 return false; 330 return false;
330 } 331 }
(...skipping 1855 matching lines...) Expand 10 before | Expand all | Expand 10 after
2186 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority()); 2187 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority());
2187 2188
2188 req->SetPriority(MAXIMUM_PRIORITY); 2189 req->SetPriority(MAXIMUM_PRIORITY);
2189 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority()); 2190 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority());
2190 2191
2191 req->Start(); 2192 req->Start();
2192 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority()); 2193 EXPECT_EQ(MAXIMUM_PRIORITY, req->priority());
2193 EXPECT_EQ(MAXIMUM_PRIORITY, job->priority()); 2194 EXPECT_EQ(MAXIMUM_PRIORITY, job->priority());
2194 } 2195 }
2195 2196
2196 // TODO(droger): Support SpawnedTestServer on iOS (see http://crbug.com/148666).
2197 #if !defined(OS_IOS)
2198 namespace { 2197 namespace {
2199 2198
2200 // Less verbose way of running a simple testserver for the tests below. 2199 // Less verbose way of running a simple testserver for the tests below.
2201 class LocalHttpTestServer : public SpawnedTestServer { 2200 class LocalHttpTestServer : public EmbeddedTestServer {
2202 public: 2201 public:
2203 explicit LocalHttpTestServer(const base::FilePath& document_root) 2202 explicit LocalHttpTestServer(const base::FilePath& document_root) {
2204 : SpawnedTestServer(SpawnedTestServer::TYPE_HTTP, 2203 AddDefaultHandlers(document_root);
2205 SpawnedTestServer::kLocalhost, 2204 }
2206 document_root) {} 2205
2207 LocalHttpTestServer() 2206 LocalHttpTestServer() { AddDefaultHandlers(base::FilePath()); }
2208 : SpawnedTestServer(SpawnedTestServer::TYPE_HTTP,
2209 SpawnedTestServer::kLocalhost,
2210 base::FilePath()) {}
2211 }; 2207 };
2212 2208
2213 scoped_ptr<net::test_server::HttpResponse> HandleSetCookieRequest(
2214 const test_server::HttpRequest& request) {
2215 scoped_ptr<test_server::BasicHttpResponse> http_response(
2216 new test_server::BasicHttpResponse());
2217 if (request.relative_url.find("/set-cookie?") != 0) {
2218 http_response->set_code(net::HTTP_NOT_FOUND);
2219 http_response->set_content("hello");
2220 return http_response.Pass();
2221 }
2222 http_response->set_code(net::HTTP_OK);
2223 http_response->set_content("hello");
2224 http_response->set_content_type("text/plain");
2225 http_response->AddCustomHeader(
2226 "Set-Cookie",
2227 request.relative_url.substr(request.relative_url.find("?") + 1));
2228 return http_response.Pass();
2229 }
2230
2231 } // namespace 2209 } // namespace
2232 2210
2233 TEST_F(URLRequestTest, DelayedCookieCallback) { 2211 TEST_F(URLRequestTest, DelayedCookieCallback) {
2234 LocalHttpTestServer test_server; 2212 LocalHttpTestServer test_server;
2235 ASSERT_TRUE(test_server.Start()); 2213 ASSERT_TRUE(test_server.Start());
2236 2214
2237 TestURLRequestContext context; 2215 TestURLRequestContext context;
2238 scoped_refptr<DelayedCookieMonster> delayed_cm = 2216 scoped_refptr<DelayedCookieMonster> delayed_cm =
2239 new DelayedCookieMonster(); 2217 new DelayedCookieMonster();
2240 scoped_refptr<CookieStore> cookie_store = delayed_cm; 2218 scoped_refptr<CookieStore> cookie_store = delayed_cm;
2241 context.set_cookie_store(delayed_cm.get()); 2219 context.set_cookie_store(delayed_cm.get());
2242 2220
2243 // Set up a cookie. 2221 // Set up a cookie.
2244 { 2222 {
2245 TestNetworkDelegate network_delegate; 2223 TestNetworkDelegate network_delegate;
2246 context.set_network_delegate(&network_delegate); 2224 context.set_network_delegate(&network_delegate);
2247 TestDelegate d; 2225 TestDelegate d;
2248 scoped_ptr<URLRequest> req(context.CreateRequest( 2226 scoped_ptr<URLRequest> req(context.CreateRequest(
2249 test_server.GetURL("set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY, 2227 test_server.GetURL("/set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY,
2250 &d)); 2228 &d));
2251 req->Start(); 2229 req->Start();
2252 base::RunLoop().Run(); 2230 base::RunLoop().Run();
2253 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2231 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2254 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2232 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2255 EXPECT_EQ(1, network_delegate.set_cookie_count()); 2233 EXPECT_EQ(1, network_delegate.set_cookie_count());
2256 } 2234 }
2257 2235
2258 // Verify that the cookie is set. 2236 // Verify that the cookie is set.
2259 { 2237 {
2260 TestNetworkDelegate network_delegate; 2238 TestNetworkDelegate network_delegate;
2261 context.set_network_delegate(&network_delegate); 2239 context.set_network_delegate(&network_delegate);
2262 TestDelegate d; 2240 TestDelegate d;
2263 scoped_ptr<URLRequest> req(context.CreateRequest( 2241 scoped_ptr<URLRequest> req(context.CreateRequest(
2264 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2242 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2265 req->Start(); 2243 req->Start();
2266 base::RunLoop().Run(); 2244 base::RunLoop().Run();
2267 2245
2268 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1") 2246 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1")
2269 != std::string::npos); 2247 != std::string::npos);
2270 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2248 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2271 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2249 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2272 } 2250 }
2273 } 2251 }
2274 2252
2275 TEST_F(URLRequestTest, DoNotSendCookies) { 2253 TEST_F(URLRequestTest, DoNotSendCookies) {
2276 LocalHttpTestServer test_server; 2254 LocalHttpTestServer test_server;
2277 ASSERT_TRUE(test_server.Start()); 2255 ASSERT_TRUE(test_server.Start());
2278 2256
2279 // Set up a cookie. 2257 // Set up a cookie.
2280 { 2258 {
2281 TestNetworkDelegate network_delegate; 2259 TestNetworkDelegate network_delegate;
2282 default_context_.set_network_delegate(&network_delegate); 2260 default_context_.set_network_delegate(&network_delegate);
2283 TestDelegate d; 2261 TestDelegate d;
2284 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2262 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2285 test_server.GetURL("set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY, 2263 test_server.GetURL("/set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY,
2286 &d)); 2264 &d));
2287 req->Start(); 2265 req->Start();
2288 base::RunLoop().Run(); 2266 base::RunLoop().Run();
2289 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2267 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2290 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2268 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2291 } 2269 }
2292 2270
2293 // Verify that the cookie is set. 2271 // Verify that the cookie is set.
2294 { 2272 {
2295 TestNetworkDelegate network_delegate; 2273 TestNetworkDelegate network_delegate;
2296 default_context_.set_network_delegate(&network_delegate); 2274 default_context_.set_network_delegate(&network_delegate);
2297 TestDelegate d; 2275 TestDelegate d;
2298 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2276 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2299 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2277 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2300 req->Start(); 2278 req->Start();
2301 base::RunLoop().Run(); 2279 base::RunLoop().Run();
2302 2280
2303 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1") 2281 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1")
2304 != std::string::npos); 2282 != std::string::npos);
2305 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2283 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2306 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2284 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2307 } 2285 }
2308 2286
2309 // Verify that the cookie isn't sent when LOAD_DO_NOT_SEND_COOKIES is set. 2287 // Verify that the cookie isn't sent when LOAD_DO_NOT_SEND_COOKIES is set.
2310 { 2288 {
2311 TestNetworkDelegate network_delegate; 2289 TestNetworkDelegate network_delegate;
2312 default_context_.set_network_delegate(&network_delegate); 2290 default_context_.set_network_delegate(&network_delegate);
2313 TestDelegate d; 2291 TestDelegate d;
2314 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2292 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2315 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2293 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2316 req->SetLoadFlags(LOAD_DO_NOT_SEND_COOKIES); 2294 req->SetLoadFlags(LOAD_DO_NOT_SEND_COOKIES);
2317 req->Start(); 2295 req->Start();
2318 base::RunLoop().Run(); 2296 base::RunLoop().Run();
2319 2297
2320 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1") 2298 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1")
2321 == std::string::npos); 2299 == std::string::npos);
2322 2300
2323 // LOAD_DO_NOT_SEND_COOKIES does not trigger OnGetCookies. 2301 // LOAD_DO_NOT_SEND_COOKIES does not trigger OnGetCookies.
2324 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2302 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2325 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2303 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2326 } 2304 }
2327 } 2305 }
2328 2306
2329 TEST_F(URLRequestTest, DoNotSaveCookies) { 2307 TEST_F(URLRequestTest, DoNotSaveCookies) {
2330 LocalHttpTestServer test_server; 2308 LocalHttpTestServer test_server;
2331 ASSERT_TRUE(test_server.Start()); 2309 ASSERT_TRUE(test_server.Start());
2332 2310
2333 // Set up a cookie. 2311 // Set up a cookie.
2334 { 2312 {
2335 TestNetworkDelegate network_delegate; 2313 TestNetworkDelegate network_delegate;
2336 default_context_.set_network_delegate(&network_delegate); 2314 default_context_.set_network_delegate(&network_delegate);
2337 TestDelegate d; 2315 TestDelegate d;
2338 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2316 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2339 test_server.GetURL("set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY, 2317 test_server.GetURL("/set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY,
2340 &d)); 2318 &d));
2341 req->Start(); 2319 req->Start();
2342 base::RunLoop().Run(); 2320 base::RunLoop().Run();
2343 2321
2344 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2322 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2345 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2323 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2346 EXPECT_EQ(1, network_delegate.set_cookie_count()); 2324 EXPECT_EQ(1, network_delegate.set_cookie_count());
2347 } 2325 }
2348 2326
2349 // Try to set-up another cookie and update the previous cookie. 2327 // Try to set-up another cookie and update the previous cookie.
2350 { 2328 {
2351 TestNetworkDelegate network_delegate; 2329 TestNetworkDelegate network_delegate;
2352 default_context_.set_network_delegate(&network_delegate); 2330 default_context_.set_network_delegate(&network_delegate);
2353 TestDelegate d; 2331 TestDelegate d;
2354 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2332 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2355 test_server.GetURL("set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), 2333 test_server.GetURL("/set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"),
2356 DEFAULT_PRIORITY, &d)); 2334 DEFAULT_PRIORITY, &d));
2357 req->SetLoadFlags(LOAD_DO_NOT_SAVE_COOKIES); 2335 req->SetLoadFlags(LOAD_DO_NOT_SAVE_COOKIES);
2358 req->Start(); 2336 req->Start();
2359 2337
2360 base::RunLoop().Run(); 2338 base::RunLoop().Run();
2361 2339
2362 // LOAD_DO_NOT_SAVE_COOKIES does not trigger OnSetCookie. 2340 // LOAD_DO_NOT_SAVE_COOKIES does not trigger OnSetCookie.
2363 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2341 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2364 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2342 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2365 EXPECT_EQ(0, network_delegate.set_cookie_count()); 2343 EXPECT_EQ(0, network_delegate.set_cookie_count());
2366 } 2344 }
2367 2345
2368 // Verify the cookies weren't saved or updated. 2346 // Verify the cookies weren't saved or updated.
2369 { 2347 {
2370 TestNetworkDelegate network_delegate; 2348 TestNetworkDelegate network_delegate;
2371 default_context_.set_network_delegate(&network_delegate); 2349 default_context_.set_network_delegate(&network_delegate);
2372 TestDelegate d; 2350 TestDelegate d;
2373 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2351 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2374 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2352 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2375 req->Start(); 2353 req->Start();
2376 base::RunLoop().Run(); 2354 base::RunLoop().Run();
2377 2355
2378 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1") 2356 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1")
2379 == std::string::npos); 2357 == std::string::npos);
2380 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2") 2358 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2")
2381 != std::string::npos); 2359 != std::string::npos);
2382 2360
2383 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2361 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2384 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2362 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2385 EXPECT_EQ(0, network_delegate.set_cookie_count()); 2363 EXPECT_EQ(0, network_delegate.set_cookie_count());
2386 } 2364 }
2387 } 2365 }
2388 2366
2389 TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy) { 2367 TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy) {
2390 LocalHttpTestServer test_server; 2368 LocalHttpTestServer test_server;
2391 ASSERT_TRUE(test_server.Start()); 2369 ASSERT_TRUE(test_server.Start());
2392 2370
2393 // Set up a cookie. 2371 // Set up a cookie.
2394 { 2372 {
2395 TestNetworkDelegate network_delegate; 2373 TestNetworkDelegate network_delegate;
2396 default_context_.set_network_delegate(&network_delegate); 2374 default_context_.set_network_delegate(&network_delegate);
2397 TestDelegate d; 2375 TestDelegate d;
2398 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2376 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2399 test_server.GetURL("set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY, 2377 test_server.GetURL("/set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY,
2400 &d)); 2378 &d));
2401 req->Start(); 2379 req->Start();
2402 base::RunLoop().Run(); 2380 base::RunLoop().Run();
2403 2381
2404 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2382 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2405 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2383 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2406 } 2384 }
2407 2385
2408 // Verify that the cookie is set. 2386 // Verify that the cookie is set.
2409 { 2387 {
2410 TestNetworkDelegate network_delegate; 2388 TestNetworkDelegate network_delegate;
2411 default_context_.set_network_delegate(&network_delegate); 2389 default_context_.set_network_delegate(&network_delegate);
2412 TestDelegate d; 2390 TestDelegate d;
2413 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2391 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2414 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2392 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2415 req->Start(); 2393 req->Start();
2416 base::RunLoop().Run(); 2394 base::RunLoop().Run();
2417 2395
2418 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1") 2396 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1")
2419 != std::string::npos); 2397 != std::string::npos);
2420 2398
2421 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2399 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2422 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2400 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2423 } 2401 }
2424 2402
2425 // Verify that the cookie isn't sent. 2403 // Verify that the cookie isn't sent.
2426 { 2404 {
2427 TestNetworkDelegate network_delegate; 2405 TestNetworkDelegate network_delegate;
2428 default_context_.set_network_delegate(&network_delegate); 2406 default_context_.set_network_delegate(&network_delegate);
2429 TestDelegate d; 2407 TestDelegate d;
2430 network_delegate.set_cookie_options(TestNetworkDelegate::NO_GET_COOKIES); 2408 network_delegate.set_cookie_options(TestNetworkDelegate::NO_GET_COOKIES);
2431 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2409 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2432 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2410 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2433 req->Start(); 2411 req->Start();
2434 base::RunLoop().Run(); 2412 base::RunLoop().Run();
2435 2413
2436 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1") 2414 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1")
2437 == std::string::npos); 2415 == std::string::npos);
2438 2416
2439 EXPECT_EQ(1, network_delegate.blocked_get_cookies_count()); 2417 EXPECT_EQ(1, network_delegate.blocked_get_cookies_count());
2440 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2418 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2441 } 2419 }
2442 } 2420 }
2443 2421
2444 TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy) { 2422 TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy) {
2445 LocalHttpTestServer test_server; 2423 LocalHttpTestServer test_server;
2446 ASSERT_TRUE(test_server.Start()); 2424 ASSERT_TRUE(test_server.Start());
2447 2425
2448 // Set up a cookie. 2426 // Set up a cookie.
2449 { 2427 {
2450 TestNetworkDelegate network_delegate; 2428 TestNetworkDelegate network_delegate;
2451 default_context_.set_network_delegate(&network_delegate); 2429 default_context_.set_network_delegate(&network_delegate);
2452 TestDelegate d; 2430 TestDelegate d;
2453 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2431 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2454 test_server.GetURL("set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY, 2432 test_server.GetURL("/set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY,
2455 &d)); 2433 &d));
2456 req->Start(); 2434 req->Start();
2457 base::RunLoop().Run(); 2435 base::RunLoop().Run();
2458 2436
2459 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2437 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2460 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2438 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2461 } 2439 }
2462 2440
2463 // Try to set-up another cookie and update the previous cookie. 2441 // Try to set-up another cookie and update the previous cookie.
2464 { 2442 {
2465 TestNetworkDelegate network_delegate; 2443 TestNetworkDelegate network_delegate;
2466 default_context_.set_network_delegate(&network_delegate); 2444 default_context_.set_network_delegate(&network_delegate);
2467 TestDelegate d; 2445 TestDelegate d;
2468 network_delegate.set_cookie_options(TestNetworkDelegate::NO_SET_COOKIE); 2446 network_delegate.set_cookie_options(TestNetworkDelegate::NO_SET_COOKIE);
2469 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2447 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2470 test_server.GetURL("set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), 2448 test_server.GetURL("/set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"),
2471 DEFAULT_PRIORITY, &d)); 2449 DEFAULT_PRIORITY, &d));
2472 req->Start(); 2450 req->Start();
2473 2451
2474 base::RunLoop().Run(); 2452 base::RunLoop().Run();
2475 2453
2476 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2454 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2477 EXPECT_EQ(2, network_delegate.blocked_set_cookie_count()); 2455 EXPECT_EQ(2, network_delegate.blocked_set_cookie_count());
2478 } 2456 }
2479 2457
2480 // Verify the cookies weren't saved or updated. 2458 // Verify the cookies weren't saved or updated.
2481 { 2459 {
2482 TestNetworkDelegate network_delegate; 2460 TestNetworkDelegate network_delegate;
2483 default_context_.set_network_delegate(&network_delegate); 2461 default_context_.set_network_delegate(&network_delegate);
2484 TestDelegate d; 2462 TestDelegate d;
2485 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2463 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2486 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2464 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2487 req->Start(); 2465 req->Start();
2488 base::RunLoop().Run(); 2466 base::RunLoop().Run();
2489 2467
2490 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1") 2468 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1")
2491 == std::string::npos); 2469 == std::string::npos);
2492 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2") 2470 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2")
2493 != std::string::npos); 2471 != std::string::npos);
2494 2472
2495 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2473 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2496 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2474 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2497 } 2475 }
2498 } 2476 }
2499 2477
2500 TEST_F(URLRequestTest, DoNotSaveEmptyCookies) { 2478 TEST_F(URLRequestTest, DoNotSaveEmptyCookies) {
2501 LocalHttpTestServer test_server; 2479 LocalHttpTestServer test_server;
2502 ASSERT_TRUE(test_server.Start()); 2480 ASSERT_TRUE(test_server.Start());
2503 2481
2504 // Set up an empty cookie. 2482 // Set up an empty cookie.
2505 { 2483 {
2506 TestNetworkDelegate network_delegate; 2484 TestNetworkDelegate network_delegate;
2507 default_context_.set_network_delegate(&network_delegate); 2485 default_context_.set_network_delegate(&network_delegate);
2508 TestDelegate d; 2486 TestDelegate d;
2509 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2487 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2510 test_server.GetURL("set-cookie"), DEFAULT_PRIORITY, &d)); 2488 test_server.GetURL("/set-cookie"), DEFAULT_PRIORITY, &d));
2511 req->Start(); 2489 req->Start();
2512 base::RunLoop().Run(); 2490 base::RunLoop().Run();
2513 2491
2514 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2492 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2515 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2493 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2516 EXPECT_EQ(0, network_delegate.set_cookie_count()); 2494 EXPECT_EQ(0, network_delegate.set_cookie_count());
2517 } 2495 }
2518 } 2496 }
2519 2497
2520 TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy_Async) { 2498 TEST_F(URLRequestTest, DoNotSendCookies_ViaPolicy_Async) {
2521 LocalHttpTestServer test_server; 2499 LocalHttpTestServer test_server;
2522 ASSERT_TRUE(test_server.Start()); 2500 ASSERT_TRUE(test_server.Start());
2523 2501
2524 // Set up a cookie. 2502 // Set up a cookie.
2525 { 2503 {
2526 TestNetworkDelegate network_delegate; 2504 TestNetworkDelegate network_delegate;
2527 default_context_.set_network_delegate(&network_delegate); 2505 default_context_.set_network_delegate(&network_delegate);
2528 TestDelegate d; 2506 TestDelegate d;
2529 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2507 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2530 test_server.GetURL("set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY, 2508 test_server.GetURL("/set-cookie?CookieToNotSend=1"), DEFAULT_PRIORITY,
2531 &d)); 2509 &d));
2532 req->Start(); 2510 req->Start();
2533 base::RunLoop().Run(); 2511 base::RunLoop().Run();
2534 2512
2535 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2513 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2536 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2514 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2537 } 2515 }
2538 2516
2539 // Verify that the cookie is set. 2517 // Verify that the cookie is set.
2540 { 2518 {
2541 TestNetworkDelegate network_delegate; 2519 TestNetworkDelegate network_delegate;
2542 default_context_.set_network_delegate(&network_delegate); 2520 default_context_.set_network_delegate(&network_delegate);
2543 TestDelegate d; 2521 TestDelegate d;
2544 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2522 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2545 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2523 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2546 req->Start(); 2524 req->Start();
2547 base::RunLoop().Run(); 2525 base::RunLoop().Run();
2548 2526
2549 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1") 2527 EXPECT_TRUE(d.data_received().find("CookieToNotSend=1")
2550 != std::string::npos); 2528 != std::string::npos);
2551 2529
2552 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2530 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2553 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2531 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2554 } 2532 }
2555 2533
2556 // Verify that the cookie isn't sent. 2534 // Verify that the cookie isn't sent.
2557 { 2535 {
2558 TestNetworkDelegate network_delegate; 2536 TestNetworkDelegate network_delegate;
2559 default_context_.set_network_delegate(&network_delegate); 2537 default_context_.set_network_delegate(&network_delegate);
2560 TestDelegate d; 2538 TestDelegate d;
2561 network_delegate.set_cookie_options(TestNetworkDelegate::NO_GET_COOKIES); 2539 network_delegate.set_cookie_options(TestNetworkDelegate::NO_GET_COOKIES);
2562 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2540 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2563 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2541 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2564 req->Start(); 2542 req->Start();
2565 base::RunLoop().Run(); 2543 base::RunLoop().Run();
2566 2544
2567 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1") 2545 EXPECT_TRUE(d.data_received().find("Cookie: CookieToNotSend=1")
2568 == std::string::npos); 2546 == std::string::npos);
2569 2547
2570 EXPECT_EQ(1, network_delegate.blocked_get_cookies_count()); 2548 EXPECT_EQ(1, network_delegate.blocked_get_cookies_count());
2571 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2549 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2572 } 2550 }
2573 } 2551 }
2574 2552
2575 TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy_Async) { 2553 TEST_F(URLRequestTest, DoNotSaveCookies_ViaPolicy_Async) {
2576 LocalHttpTestServer test_server; 2554 LocalHttpTestServer test_server;
2577 ASSERT_TRUE(test_server.Start()); 2555 ASSERT_TRUE(test_server.Start());
2578 2556
2579 // Set up a cookie. 2557 // Set up a cookie.
2580 { 2558 {
2581 TestNetworkDelegate network_delegate; 2559 TestNetworkDelegate network_delegate;
2582 default_context_.set_network_delegate(&network_delegate); 2560 default_context_.set_network_delegate(&network_delegate);
2583 TestDelegate d; 2561 TestDelegate d;
2584 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2562 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2585 test_server.GetURL("set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY, 2563 test_server.GetURL("/set-cookie?CookieToNotUpdate=2"), DEFAULT_PRIORITY,
2586 &d)); 2564 &d));
2587 req->Start(); 2565 req->Start();
2588 base::RunLoop().Run(); 2566 base::RunLoop().Run();
2589 2567
2590 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2568 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2591 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2569 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2592 } 2570 }
2593 2571
2594 // Try to set-up another cookie and update the previous cookie. 2572 // Try to set-up another cookie and update the previous cookie.
2595 { 2573 {
2596 TestNetworkDelegate network_delegate; 2574 TestNetworkDelegate network_delegate;
2597 default_context_.set_network_delegate(&network_delegate); 2575 default_context_.set_network_delegate(&network_delegate);
2598 TestDelegate d; 2576 TestDelegate d;
2599 network_delegate.set_cookie_options(TestNetworkDelegate::NO_SET_COOKIE); 2577 network_delegate.set_cookie_options(TestNetworkDelegate::NO_SET_COOKIE);
2600 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2578 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2601 test_server.GetURL("set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"), 2579 test_server.GetURL("/set-cookie?CookieToNotSave=1&CookieToNotUpdate=1"),
2602 DEFAULT_PRIORITY, &d)); 2580 DEFAULT_PRIORITY, &d));
2603 req->Start(); 2581 req->Start();
2604 2582
2605 base::RunLoop().Run(); 2583 base::RunLoop().Run();
2606 2584
2607 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2585 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2608 EXPECT_EQ(2, network_delegate.blocked_set_cookie_count()); 2586 EXPECT_EQ(2, network_delegate.blocked_set_cookie_count());
2609 } 2587 }
2610 2588
2611 // Verify the cookies weren't saved or updated. 2589 // Verify the cookies weren't saved or updated.
2612 { 2590 {
2613 TestNetworkDelegate network_delegate; 2591 TestNetworkDelegate network_delegate;
2614 default_context_.set_network_delegate(&network_delegate); 2592 default_context_.set_network_delegate(&network_delegate);
2615 TestDelegate d; 2593 TestDelegate d;
2616 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2594 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2617 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2595 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2618 req->Start(); 2596 req->Start();
2619 base::RunLoop().Run(); 2597 base::RunLoop().Run();
2620 2598
2621 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1") 2599 EXPECT_TRUE(d.data_received().find("CookieToNotSave=1")
2622 == std::string::npos); 2600 == std::string::npos);
2623 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2") 2601 EXPECT_TRUE(d.data_received().find("CookieToNotUpdate=2")
2624 != std::string::npos); 2602 != std::string::npos);
2625 2603
2626 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2604 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2627 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2605 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2628 } 2606 }
2629 } 2607 }
2630 2608
2631 TEST_F(URLRequestTest, FirstPartyOnlyCookiesEnabled) { 2609 TEST_F(URLRequestTest, FirstPartyOnlyCookiesEnabled) {
2632 LocalHttpTestServer test_server; 2610 LocalHttpTestServer test_server;
2633 ASSERT_TRUE(test_server.Start()); 2611 ASSERT_TRUE(test_server.Start());
2634 2612
2635 // Set up a 'First-Party-Only' cookie (on '127.0.0.1', as that's where 2613 // Set up a 'First-Party-Only' cookie (on '127.0.0.1', as that's where
2636 // LocalHttpTestServer points). 2614 // LocalHttpTestServer points).
2637 { 2615 {
2638 TestNetworkDelegate network_delegate; 2616 TestNetworkDelegate network_delegate;
2639 network_delegate.set_experimental_cookie_features_enabled(true); 2617 network_delegate.set_experimental_cookie_features_enabled(true);
2640 default_context_.set_network_delegate(&network_delegate); 2618 default_context_.set_network_delegate(&network_delegate);
2641 2619
2642 TestDelegate d; 2620 TestDelegate d;
2643 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2621 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2644 test_server.GetURL( 2622 test_server.GetURL(
2645 "set-cookie?FirstPartyCookieToSet=1;First-Party-Only"), 2623 "/set-cookie?FirstPartyCookieToSet=1;First-Party-Only"),
2646 DEFAULT_PRIORITY, &d)); 2624 DEFAULT_PRIORITY, &d));
2647 req->Start(); 2625 req->Start();
2648 base::RunLoop().Run(); 2626 base::RunLoop().Run();
2649 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2627 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2650 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2628 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2651 EXPECT_EQ(1, network_delegate.set_cookie_count()); 2629 EXPECT_EQ(1, network_delegate.set_cookie_count());
2652 } 2630 }
2653 2631
2654 // Verify that the cookie is sent for first-party requests. 2632 // Verify that the cookie is sent for first-party requests.
2655 { 2633 {
2656 TestNetworkDelegate network_delegate; 2634 TestNetworkDelegate network_delegate;
2657 network_delegate.set_experimental_cookie_features_enabled(true); 2635 network_delegate.set_experimental_cookie_features_enabled(true);
2658 default_context_.set_network_delegate(&network_delegate); 2636 default_context_.set_network_delegate(&network_delegate);
2659 TestDelegate d; 2637 TestDelegate d;
2660 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2638 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2661 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2639 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2662 req->set_first_party_for_cookies(test_server.GetURL("")); 2640 req->set_first_party_for_cookies(test_server.GetURL("/"));
2663 req->Start(); 2641 req->Start();
2664 base::RunLoop().Run(); 2642 base::RunLoop().Run();
2665 2643
2666 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") != 2644 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") !=
2667 std::string::npos); 2645 std::string::npos);
2668 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2646 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2669 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2647 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2670 } 2648 }
2671 2649
2672 // Verify that the cookie is not-sent for non-first-party requests. 2650 // Verify that the cookie is not-sent for non-first-party requests.
2673 { 2651 {
2674 TestNetworkDelegate network_delegate; 2652 TestNetworkDelegate network_delegate;
2675 network_delegate.set_experimental_cookie_features_enabled(true); 2653 network_delegate.set_experimental_cookie_features_enabled(true);
2676 default_context_.set_network_delegate(&network_delegate); 2654 default_context_.set_network_delegate(&network_delegate);
2677 TestDelegate d; 2655 TestDelegate d;
2678 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2656 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2679 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2657 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2680 req->set_first_party_for_cookies(GURL("http://third-party.test/")); 2658 req->set_first_party_for_cookies(GURL("http://third-party.test/"));
2681 req->Start(); 2659 req->Start();
2682 base::RunLoop().Run(); 2660 base::RunLoop().Run();
2683 2661
2684 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") == 2662 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") ==
2685 std::string::npos); 2663 std::string::npos);
2686 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2664 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2687 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2665 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2688 } 2666 }
2689 } 2667 }
2690 2668
2691 TEST_F(URLRequestTest, FirstPartyOnlyCookiesDisabled) { 2669 TEST_F(URLRequestTest, FirstPartyOnlyCookiesDisabled) {
2692 LocalHttpTestServer test_server; 2670 LocalHttpTestServer test_server;
2693 ASSERT_TRUE(test_server.Start()); 2671 ASSERT_TRUE(test_server.Start());
2694 2672
2695 // Set up a 'First-Party-Only' cookie (on '127.0.0.1', as that's where 2673 // Set up a 'First-Party-Only' cookie (on '127.0.0.1', as that's where
2696 // LocalHttpTestServer points). 2674 // LocalHttpTestServer points).
2697 { 2675 {
2698 TestNetworkDelegate network_delegate; 2676 TestNetworkDelegate network_delegate;
2699 network_delegate.set_experimental_cookie_features_enabled(false); 2677 network_delegate.set_experimental_cookie_features_enabled(false);
2700 default_context_.set_network_delegate(&network_delegate); 2678 default_context_.set_network_delegate(&network_delegate);
2701 2679
2702 TestDelegate d; 2680 TestDelegate d;
2703 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2681 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2704 test_server.GetURL( 2682 test_server.GetURL(
2705 "set-cookie?FirstPartyCookieToSet=1;First-Party-Only"), 2683 "/set-cookie?FirstPartyCookieToSet=1;First-Party-Only"),
2706 DEFAULT_PRIORITY, &d)); 2684 DEFAULT_PRIORITY, &d));
2707 req->Start(); 2685 req->Start();
2708 base::RunLoop().Run(); 2686 base::RunLoop().Run();
2709 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2687 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2710 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2688 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2711 EXPECT_EQ(1, network_delegate.set_cookie_count()); 2689 EXPECT_EQ(1, network_delegate.set_cookie_count());
2712 } 2690 }
2713 2691
2714 // Verify that the cookie is sent for first-party requests. 2692 // Verify that the cookie is sent for first-party requests.
2715 { 2693 {
2716 TestNetworkDelegate network_delegate; 2694 TestNetworkDelegate network_delegate;
2717 network_delegate.set_experimental_cookie_features_enabled(false); 2695 network_delegate.set_experimental_cookie_features_enabled(false);
2718 default_context_.set_network_delegate(&network_delegate); 2696 default_context_.set_network_delegate(&network_delegate);
2719 TestDelegate d; 2697 TestDelegate d;
2720 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2698 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2721 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2699 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2722 req->set_first_party_for_cookies(test_server.GetURL("")); 2700 req->set_first_party_for_cookies(test_server.GetURL("/"));
2723 req->Start(); 2701 req->Start();
2724 base::RunLoop().Run(); 2702 base::RunLoop().Run();
2725 2703
2726 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") != 2704 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") !=
2727 std::string::npos); 2705 std::string::npos);
2728 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2706 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2729 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2707 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2730 } 2708 }
2731 2709
2732 // Verify that the cookie is also sent for non-first-party requests. 2710 // Verify that the cookie is also sent for non-first-party requests.
2733 { 2711 {
2734 TestNetworkDelegate network_delegate; 2712 TestNetworkDelegate network_delegate;
2735 network_delegate.set_experimental_cookie_features_enabled(false); 2713 network_delegate.set_experimental_cookie_features_enabled(false);
2736 default_context_.set_network_delegate(&network_delegate); 2714 default_context_.set_network_delegate(&network_delegate);
2737 TestDelegate d; 2715 TestDelegate d;
2738 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2716 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
2739 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2717 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2740 req->set_first_party_for_cookies(GURL("http://third-party.test/")); 2718 req->set_first_party_for_cookies(GURL("http://third-party.test/"));
2741 req->Start(); 2719 req->Start();
2742 base::RunLoop().Run(); 2720 base::RunLoop().Run();
2743 2721
2744 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") != 2722 EXPECT_TRUE(d.data_received().find("FirstPartyCookieToSet=1") !=
2745 std::string::npos); 2723 std::string::npos);
2746 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2724 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2747 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2725 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2748 } 2726 }
2749 } 2727 }
2750 2728
2751 // Tests that $Secure- cookies can't be set on non-secure origins. 2729 // Tests that $Secure- cookies can't be set on non-secure origins.
2752 TEST_F(URLRequestTest, SecureCookiePrefixOnNonsecureOrigin) { 2730 TEST_F(URLRequestTest, SecureCookiePrefixOnNonsecureOrigin) {
2753 test_server::EmbeddedTestServer test_server; 2731 EmbeddedTestServer http_server;
2754 test_server.RegisterRequestHandler(base::Bind(&HandleSetCookieRequest)); 2732 http_server.AddDefaultHandlers(
2755 ASSERT_TRUE(test_server.InitializeAndWaitUntilReady());
2756 SpawnedTestServer test_server_https(
2757 SpawnedTestServer::TYPE_HTTPS, SpawnedTestServer::kLocalhost,
2758 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 2733 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
2759 ASSERT_TRUE(test_server_https.Start()); 2734 EmbeddedTestServer https_server(EmbeddedTestServer::TYPE_HTTPS);
2735 https_server.AddDefaultHandlers(
2736 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
2737 ASSERT_TRUE(http_server.Start());
2738 ASSERT_TRUE(https_server.Start());
2760 2739
2761 TestExperimentalFeaturesNetworkDelegate network_delegate; 2740 TestExperimentalFeaturesNetworkDelegate network_delegate;
2762 TestURLRequestContext context(true); 2741 TestURLRequestContext context(true);
2763 context.set_network_delegate(&network_delegate); 2742 context.set_network_delegate(&network_delegate);
2764 context.Init(); 2743 context.Init();
2765 2744
2766 // Try to set a Secure $Secure- cookie, with experimental features 2745 // Try to set a Secure $Secure- cookie, with experimental features
2767 // enabled. 2746 // enabled.
2768 { 2747 {
2769 TestDelegate d; 2748 TestDelegate d;
2770 scoped_ptr<URLRequest> req(context.CreateRequest( 2749 scoped_ptr<URLRequest> req(context.CreateRequest(
2771 test_server.GetURL("/set-cookie?$Secure-nonsecure-origin=1;Secure"), 2750 http_server.GetURL("/set-cookie?$Secure-nonsecure-origin=1;Secure"),
2772 DEFAULT_PRIORITY, &d)); 2751 DEFAULT_PRIORITY, &d));
2773 req->Start(); 2752 req->Start();
2774 base::RunLoop().Run(); 2753 base::RunLoop().Run();
2775 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2754 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2776 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2755 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2777 } 2756 }
2778 2757
2779 // Verify that the cookie is not set. 2758 // Verify that the cookie is not set.
2780 { 2759 {
2781 TestDelegate d; 2760 TestDelegate d;
2782 scoped_ptr<URLRequest> req(context.CreateRequest( 2761 scoped_ptr<URLRequest> req(context.CreateRequest(
2783 test_server_https.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2762 https_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2784 req->Start(); 2763 req->Start();
2785 base::RunLoop().Run(); 2764 base::RunLoop().Run();
2786 2765
2787 EXPECT_TRUE(d.data_received().find("$Secure-nonsecure-origin=1") == 2766 EXPECT_TRUE(d.data_received().find("$Secure-nonsecure-origin=1") ==
2788 std::string::npos); 2767 std::string::npos);
2789 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2768 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2790 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2769 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2791 } 2770 }
2792 } 2771 }
2793 2772
2794 TEST_F(URLRequestTest, SecureCookiePrefixNonexperimental) { 2773 TEST_F(URLRequestTest, SecureCookiePrefixNonexperimental) {
2795 SpawnedTestServer test_server( 2774 EmbeddedTestServer https_server(EmbeddedTestServer::TYPE_HTTPS);
2796 SpawnedTestServer::TYPE_HTTPS, SpawnedTestServer::kLocalhost, 2775 https_server.AddDefaultHandlers(
2797 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 2776 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
2798 ASSERT_TRUE(test_server.Start()); 2777 ASSERT_TRUE(https_server.Start());
2799 2778
2800 TestNetworkDelegate network_delegate; 2779 TestNetworkDelegate network_delegate;
2801 TestURLRequestContext context(true); 2780 TestURLRequestContext context(true);
2802 context.set_network_delegate(&network_delegate); 2781 context.set_network_delegate(&network_delegate);
2803 context.Init(); 2782 context.Init();
2804 2783
2805 // Without experimental features, there should be no restrictions on 2784 // Without experimental features, there should be no restrictions on
2806 // $Secure- cookies. 2785 // $Secure- cookies.
2807 2786
2808 // Set a non-Secure cookie with the $Secure- prefix. 2787 // Set a non-Secure cookie with the $Secure- prefix.
2809 { 2788 {
2810 TestDelegate d; 2789 TestDelegate d;
2811 scoped_ptr<URLRequest> req(context.CreateRequest( 2790 scoped_ptr<URLRequest> req(context.CreateRequest(
2812 test_server.GetURL("set-cookie?$Secure-nonsecure-not-experimental=1"), 2791 https_server.GetURL("/set-cookie?$Secure-nonsecure-not-experimental=1"),
2813 DEFAULT_PRIORITY, &d)); 2792 DEFAULT_PRIORITY, &d));
2814 req->Start(); 2793 req->Start();
2815 base::RunLoop().Run(); 2794 base::RunLoop().Run();
2816 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2795 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2817 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2796 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2818 } 2797 }
2819 2798
2820 // Set a Secure cookie with the $Secure- prefix. 2799 // Set a Secure cookie with the $Secure- prefix.
2821 { 2800 {
2822 TestDelegate d; 2801 TestDelegate d;
2823 scoped_ptr<URLRequest> req(context.CreateRequest( 2802 scoped_ptr<URLRequest> req(context.CreateRequest(
2824 test_server.GetURL( 2803 https_server.GetURL(
2825 "set-cookie?$Secure-secure-not-experimental=1;Secure"), 2804 "/set-cookie?$Secure-secure-not-experimental=1;Secure"),
2826 DEFAULT_PRIORITY, &d)); 2805 DEFAULT_PRIORITY, &d));
2827 req->Start(); 2806 req->Start();
2828 base::RunLoop().Run(); 2807 base::RunLoop().Run();
2829 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2808 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2830 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2809 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2831 } 2810 }
2832 2811
2833 // Verify that the cookies are set. Neither should have any 2812 // Verify that the cookies are set. Neither should have any
2834 // restrictions because the experimental flag is off. 2813 // restrictions because the experimental flag is off.
2835 { 2814 {
2836 TestDelegate d; 2815 TestDelegate d;
2837 scoped_ptr<URLRequest> req(context.CreateRequest( 2816 scoped_ptr<URLRequest> req(context.CreateRequest(
2838 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2817 https_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2839 req->Start(); 2818 req->Start();
2840 base::RunLoop().Run(); 2819 base::RunLoop().Run();
2841 2820
2842 EXPECT_TRUE(d.data_received().find("$Secure-secure-not-experimental=1") != 2821 EXPECT_TRUE(d.data_received().find("$Secure-secure-not-experimental=1") !=
2843 std::string::npos); 2822 std::string::npos);
2844 EXPECT_TRUE( 2823 EXPECT_TRUE(
2845 d.data_received().find("$Secure-nonsecure-not-experimental=1") != 2824 d.data_received().find("$Secure-nonsecure-not-experimental=1") !=
2846 std::string::npos); 2825 std::string::npos);
2847 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2826 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2848 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2827 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2849 } 2828 }
2850 } 2829 }
2851 2830
2852 TEST_F(URLRequestTest, SecureCookiePrefixExperimentalNonsecure) { 2831 TEST_F(URLRequestTest, SecureCookiePrefixExperimentalNonsecure) {
2853 SpawnedTestServer test_server( 2832 EmbeddedTestServer https_server(EmbeddedTestServer::TYPE_HTTPS);
2854 SpawnedTestServer::TYPE_HTTPS, SpawnedTestServer::kLocalhost, 2833 https_server.AddDefaultHandlers(
2855 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 2834 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
2856 ASSERT_TRUE(test_server.Start()); 2835 ASSERT_TRUE(https_server.Start());
2857 2836
2858 TestExperimentalFeaturesNetworkDelegate network_delegate; 2837 TestExperimentalFeaturesNetworkDelegate network_delegate;
2859 TestURLRequestContext context(true); 2838 TestURLRequestContext context(true);
2860 context.set_network_delegate(&network_delegate); 2839 context.set_network_delegate(&network_delegate);
2861 context.Init(); 2840 context.Init();
2862 2841
2863 // Try to set a non-Secure $Secure- cookie, with experimental features 2842 // Try to set a non-Secure $Secure- cookie, with experimental features
2864 // enabled. 2843 // enabled.
2865 { 2844 {
2866 TestDelegate d; 2845 TestDelegate d;
2867 scoped_ptr<URLRequest> req(context.CreateRequest( 2846 scoped_ptr<URLRequest> req(
2868 test_server.GetURL("set-cookie?$Secure-foo=1"), DEFAULT_PRIORITY, &d)); 2847 context.CreateRequest(https_server.GetURL("/set-cookie?$Secure-foo=1"),
2848 DEFAULT_PRIORITY, &d));
2869 req->Start(); 2849 req->Start();
2870 base::RunLoop().Run(); 2850 base::RunLoop().Run();
2871 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2851 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2872 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2852 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2873 } 2853 }
2874 2854
2875 // Verify that the cookie is not set. 2855 // Verify that the cookie is not set.
2876 { 2856 {
2877 TestDelegate d; 2857 TestDelegate d;
2878 scoped_ptr<URLRequest> req(context.CreateRequest( 2858 scoped_ptr<URLRequest> req(context.CreateRequest(
2879 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2859 https_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2880 req->Start(); 2860 req->Start();
2881 base::RunLoop().Run(); 2861 base::RunLoop().Run();
2882 2862
2883 EXPECT_TRUE(d.data_received().find("$Secure-foo=1") == std::string::npos); 2863 EXPECT_TRUE(d.data_received().find("$Secure-foo=1") == std::string::npos);
2884 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2864 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2885 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2865 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2886 } 2866 }
2887 } 2867 }
2888 2868
2889 TEST_F(URLRequestTest, SecureCookiePrefixExperimentalSecure) { 2869 TEST_F(URLRequestTest, SecureCookiePrefixExperimentalSecure) {
2890 SpawnedTestServer test_server( 2870 EmbeddedTestServer https_server(EmbeddedTestServer::TYPE_HTTPS);
2891 SpawnedTestServer::TYPE_HTTPS, SpawnedTestServer::kLocalhost, 2871 https_server.AddDefaultHandlers(
2892 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 2872 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
2893 ASSERT_TRUE(test_server.Start()); 2873 ASSERT_TRUE(https_server.Start());
2894 2874
2895 TestExperimentalFeaturesNetworkDelegate network_delegate; 2875 TestExperimentalFeaturesNetworkDelegate network_delegate;
2896 TestURLRequestContext context(true); 2876 TestURLRequestContext context(true);
2897 context.set_network_delegate(&network_delegate); 2877 context.set_network_delegate(&network_delegate);
2898 context.Init(); 2878 context.Init();
2899 2879
2900 // Try to set a Secure $Secure- cookie, with experimental features 2880 // Try to set a Secure $Secure- cookie, with experimental features
2901 // enabled. 2881 // enabled.
2902 { 2882 {
2903 TestDelegate d; 2883 TestDelegate d;
2904 scoped_ptr<URLRequest> req(context.CreateRequest( 2884 scoped_ptr<URLRequest> req(context.CreateRequest(
2905 test_server.GetURL("set-cookie?$Secure-bar=1;Secure"), DEFAULT_PRIORITY, 2885 https_server.GetURL("/set-cookie?$Secure-bar=1;Secure"),
2906 &d)); 2886 DEFAULT_PRIORITY, &d));
2907 req->Start(); 2887 req->Start();
2908 base::RunLoop().Run(); 2888 base::RunLoop().Run();
2909 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2889 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2910 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2890 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2911 } 2891 }
2912 2892
2913 // Verify that the cookie is set. 2893 // Verify that the cookie is set.
2914 { 2894 {
2915 TestDelegate d; 2895 TestDelegate d;
2916 scoped_ptr<URLRequest> req(context.CreateRequest( 2896 scoped_ptr<URLRequest> req(context.CreateRequest(
2917 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 2897 https_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
2918 req->Start(); 2898 req->Start();
2919 base::RunLoop().Run(); 2899 base::RunLoop().Run();
2920 2900
2921 EXPECT_TRUE(d.data_received().find("$Secure-bar=1") != std::string::npos); 2901 EXPECT_TRUE(d.data_received().find("$Secure-bar=1") != std::string::npos);
2922 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count()); 2902 EXPECT_EQ(0, network_delegate.blocked_get_cookies_count());
2923 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count()); 2903 EXPECT_EQ(0, network_delegate.blocked_set_cookie_count());
2924 } 2904 }
2925 } 2905 }
2926 2906
2927 // Tests that a request is cancelled while entering suspend mode. Uses mocks 2907 // Tests that a request is cancelled while entering suspend mode. Uses mocks
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
3002 LocalHttpTestServer test_server; 2982 LocalHttpTestServer test_server;
3003 ASSERT_TRUE(test_server.Start()); 2983 ASSERT_TRUE(test_server.Start());
3004 2984
3005 // Set up an expired cookie. 2985 // Set up an expired cookie.
3006 { 2986 {
3007 TestNetworkDelegate network_delegate; 2987 TestNetworkDelegate network_delegate;
3008 default_context_.set_network_delegate(&network_delegate); 2988 default_context_.set_network_delegate(&network_delegate);
3009 TestDelegate d; 2989 TestDelegate d;
3010 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 2990 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3011 test_server.GetURL( 2991 test_server.GetURL(
3012 "set-cookie?StillGood=1;expires=Mon,18-Apr-1977,22:50:13,GMT"), 2992 "/set-cookie?StillGood=1;expires=Mon,18-Apr-1977,22:50:13,GMT"),
3013 DEFAULT_PRIORITY, &d)); 2993 DEFAULT_PRIORITY, &d));
3014 req->Start(); 2994 req->Start();
3015 base::RunLoop().Run(); 2995 base::RunLoop().Run();
3016 } 2996 }
3017 // Verify that the cookie is not set. 2997 // Verify that the cookie is not set.
3018 { 2998 {
3019 TestNetworkDelegate network_delegate; 2999 TestNetworkDelegate network_delegate;
3020 default_context_.set_network_delegate(&network_delegate); 3000 default_context_.set_network_delegate(&network_delegate);
3021 TestDelegate d; 3001 TestDelegate d;
3022 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 3002 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3023 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 3003 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
3024 req->Start(); 3004 req->Start();
3025 base::RunLoop().Run(); 3005 base::RunLoop().Run();
3026 3006
3027 EXPECT_TRUE(d.data_received().find("StillGood=1") == std::string::npos); 3007 EXPECT_TRUE(d.data_received().find("StillGood=1") == std::string::npos);
3028 } 3008 }
3029 // Set up a cookie with clock skew and "UTC" HTTP Date timezone specifier. 3009 // Set up a cookie with clock skew and "UTC" HTTP Date timezone specifier.
3030 { 3010 {
3031 FixedDateNetworkDelegate network_delegate("18-Apr-1977 22:49:13 UTC"); 3011 FixedDateNetworkDelegate network_delegate("18-Apr-1977 22:49:13 UTC");
3032 default_context_.set_network_delegate(&network_delegate); 3012 default_context_.set_network_delegate(&network_delegate);
3033 TestDelegate d; 3013 TestDelegate d;
3034 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 3014 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3035 test_server.GetURL( 3015 test_server.GetURL(
3036 "set-cookie?StillGood=1;expires=Mon,18-Apr-1977,22:50:13,GMT"), 3016 "/set-cookie?StillGood=1;expires=Mon,18-Apr-1977,22:50:13,GMT"),
3037 DEFAULT_PRIORITY, &d)); 3017 DEFAULT_PRIORITY, &d));
3038 req->Start(); 3018 req->Start();
3039 base::RunLoop().Run(); 3019 base::RunLoop().Run();
3040 } 3020 }
3041 // Verify that the cookie is set. 3021 // Verify that the cookie is set.
3042 { 3022 {
3043 TestNetworkDelegate network_delegate; 3023 TestNetworkDelegate network_delegate;
3044 default_context_.set_network_delegate(&network_delegate); 3024 default_context_.set_network_delegate(&network_delegate);
3045 TestDelegate d; 3025 TestDelegate d;
3046 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 3026 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3047 test_server.GetURL("echoheader?Cookie"), DEFAULT_PRIORITY, &d)); 3027 test_server.GetURL("/echoheader?Cookie"), DEFAULT_PRIORITY, &d));
3048 req->Start(); 3028 req->Start();
3049 base::RunLoop().Run(); 3029 base::RunLoop().Run();
3050 3030
3051 EXPECT_TRUE(d.data_received().find("StillGood=1") != std::string::npos); 3031 EXPECT_TRUE(d.data_received().find("StillGood=1") != std::string::npos);
3052 } 3032 }
3053 } 3033 }
3054 3034
3055 3035
3056 // Check that it is impossible to change the referrer in the extra headers of 3036 // Check that it is impossible to change the referrer in the extra headers of
3057 // an URLRequest. 3037 // an URLRequest.
3058 TEST_F(URLRequestTest, DoNotOverrideReferrer) { 3038 TEST_F(URLRequestTest, DoNotOverrideReferrer) {
3059 LocalHttpTestServer test_server; 3039 LocalHttpTestServer test_server;
3060 ASSERT_TRUE(test_server.Start()); 3040 ASSERT_TRUE(test_server.Start());
3061 3041
3062 // If extra headers contain referer and the request contains a referer, 3042 // If extra headers contain referer and the request contains a referer,
3063 // only the latter shall be respected. 3043 // only the latter shall be respected.
3064 { 3044 {
3065 TestDelegate d; 3045 TestDelegate d;
3066 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 3046 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3067 test_server.GetURL("echoheader?Referer"), DEFAULT_PRIORITY, &d)); 3047 test_server.GetURL("/echoheader?Referer"), DEFAULT_PRIORITY, &d));
3068 req->SetReferrer("http://foo.com/"); 3048 req->SetReferrer("http://foo.com/");
3069 3049
3070 HttpRequestHeaders headers; 3050 HttpRequestHeaders headers;
3071 headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/"); 3051 headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/");
3072 req->SetExtraRequestHeaders(headers); 3052 req->SetExtraRequestHeaders(headers);
3073 3053
3074 req->Start(); 3054 req->Start();
3075 base::RunLoop().Run(); 3055 base::RunLoop().Run();
3076 3056
3077 EXPECT_EQ("http://foo.com/", d.data_received()); 3057 EXPECT_EQ("http://foo.com/", d.data_received());
3078 } 3058 }
3079 3059
3080 // If extra headers contain a referer but the request does not, no referer 3060 // If extra headers contain a referer but the request does not, no referer
3081 // shall be sent in the header. 3061 // shall be sent in the header.
3082 { 3062 {
3083 TestDelegate d; 3063 TestDelegate d;
3084 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 3064 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
3085 test_server.GetURL("echoheader?Referer"), DEFAULT_PRIORITY, &d)); 3065 test_server.GetURL("/echoheader?Referer"), DEFAULT_PRIORITY, &d));
3086 3066
3087 HttpRequestHeaders headers; 3067 HttpRequestHeaders headers;
3088 headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/"); 3068 headers.SetHeader(HttpRequestHeaders::kReferer, "http://bar.com/");
3089 req->SetExtraRequestHeaders(headers); 3069 req->SetExtraRequestHeaders(headers);
3090 req->SetLoadFlags(LOAD_VALIDATE_CACHE); 3070 req->SetLoadFlags(LOAD_VALIDATE_CACHE);
3091 3071
3092 req->Start(); 3072 req->Start();
3093 base::RunLoop().Run(); 3073 base::RunLoop().Run();
3094 3074
3095 EXPECT_EQ("None", d.data_received()); 3075 EXPECT_EQ("None", d.data_received());
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
3201 *ptr++ = marker; 3181 *ptr++ = marker;
3202 if (++marker > 'z') 3182 if (++marker > 'z')
3203 marker = 'a'; 3183 marker = 'a';
3204 } 3184 }
3205 } 3185 }
3206 uploadBytes[kMsgSize] = '\0'; 3186 uploadBytes[kMsgSize] = '\0';
3207 3187
3208 for (int i = 0; i < kIterations; ++i) { 3188 for (int i = 0; i < kIterations; ++i) {
3209 TestDelegate d; 3189 TestDelegate d;
3210 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 3190 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
3211 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 3191 test_server_.GetURL("/echo"), DEFAULT_PRIORITY, &d));
3212 r->set_method(method.c_str()); 3192 r->set_method(method.c_str());
3213 3193
3214 r->set_upload(CreateSimpleUploadData(uploadBytes)); 3194 r->set_upload(CreateSimpleUploadData(uploadBytes));
3215 3195
3216 r->Start(); 3196 r->Start();
3217 EXPECT_TRUE(r->is_pending()); 3197 EXPECT_TRUE(r->is_pending());
3218 3198
3219 base::RunLoop().Run(); 3199 base::RunLoop().Run();
3220 3200
3221 ASSERT_EQ(1, d.response_started_count()) 3201 ASSERT_EQ(1, d.response_started_count())
(...skipping 26 matching lines...) Expand all
3248 3228
3249 EXPECT_FALSE(d->received_data_before_response()); 3229 EXPECT_FALSE(d->received_data_before_response());
3250 3230
3251 EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received())); 3231 EXPECT_EQ(expected_data.size(), static_cast<size_t>(d->bytes_received()));
3252 EXPECT_EQ(expected_data, d->data_received()); 3232 EXPECT_EQ(expected_data, d->data_received());
3253 } 3233 }
3254 3234
3255 bool DoManyCookiesRequest(int num_cookies) { 3235 bool DoManyCookiesRequest(int num_cookies) {
3256 TestDelegate d; 3236 TestDelegate d;
3257 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 3237 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
3258 test_server_.GetURL("set-many-cookies?" + 3238 test_server_.GetURL("/set-many-cookies?" +
3259 base::IntToString(num_cookies)), 3239 base::IntToString(num_cookies)),
3260 DEFAULT_PRIORITY, &d)); 3240 DEFAULT_PRIORITY, &d));
3261 3241
3262 r->Start(); 3242 r->Start();
3263 EXPECT_TRUE(r->is_pending()); 3243 EXPECT_TRUE(r->is_pending());
3264 3244
3265 base::RunLoop().Run(); 3245 base::RunLoop().Run();
3266 3246
3267 bool is_success = r->status().is_success(); 3247 bool is_success = r->status().is_success();
3268 3248
3269 if (!is_success) { 3249 if (!is_success)
3270 EXPECT_TRUE(r->status().error() == ERR_RESPONSE_HEADERS_TOO_BIG); 3250 EXPECT_TRUE(r->status().error() == ERR_RESPONSE_HEADERS_TOO_BIG);
3271 // The test server appears to be unable to handle subsequent requests
3272 // after this error is triggered. Force it to restart.
3273 EXPECT_TRUE(test_server_.Stop());
3274 EXPECT_TRUE(test_server_.Start());
3275 }
3276 3251
3277 return is_success; 3252 return is_success;
3278 } 3253 }
3279 3254
3280 LocalHttpTestServer* test_server() { 3255 LocalHttpTestServer* http_test_server() { return &test_server_; }
3281 return &test_server_;
3282 }
3283 3256
3284 protected: 3257 private:
3285 LocalHttpTestServer test_server_; 3258 LocalHttpTestServer test_server_;
3286 }; 3259 };
3287 3260
3288 // In this unit test, we're using the HTTPTestServer as a proxy server and 3261 namespace {
3262
3263 scoped_ptr<test_server::HttpResponse> HandleRedirectConnect(
3264 const test_server::HttpRequest& request) {
3265 if (request.headers.find("Host") == request.headers.end() ||
3266 request.headers.at("Host") != "www.redirect.com" ||
3267 request.method != test_server::METHOD_CONNECT) {
3268 return nullptr;
3269 }
3270
3271 scoped_ptr<test_server::BasicHttpResponse> http_response(
3272 new test_server::BasicHttpResponse);
3273 http_response->set_code(HTTP_FOUND);
3274 http_response->AddCustomHeader("Location",
3275 "http://www.destination.com/foo.js");
3276 return http_response.Pass();
3277 }
3278
3279 } // namespace
3280
3281 // In this unit test, we're using the EmbeddedTestServer as a proxy server and
3289 // issuing a CONNECT request with the magic host name "www.redirect.com". 3282 // issuing a CONNECT request with the magic host name "www.redirect.com".
3290 // The HTTPTestServer will return a 302 response, which we should not 3283 // The EmbeddedTestServer will return a 302 response, which we should not
3291 // follow. 3284 // follow.
3292 TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) { 3285 TEST_F(URLRequestTestHTTP, ProxyTunnelRedirectTest) {
3293 ASSERT_TRUE(test_server_.Start()); 3286 http_test_server()->RegisterRequestHandler(
3287 base::Bind(&HandleRedirectConnect));
3288 ASSERT_TRUE(http_test_server()->Start());
3294 3289
3295 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 3290 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
3296 TestURLRequestContextWithProxy context( 3291 TestURLRequestContextWithProxy context(
3297 test_server_.host_port_pair().ToString(), &network_delegate); 3292 http_test_server()->host_port_pair().ToString(), &network_delegate);
3298 3293
3299 TestDelegate d; 3294 TestDelegate d;
3300 { 3295 {
3301 scoped_ptr<URLRequest> r(context.CreateRequest( 3296 scoped_ptr<URLRequest> r(context.CreateRequest(
3302 GURL("https://www.redirect.com/"), DEFAULT_PRIORITY, &d)); 3297 GURL("https://www.redirect.com/"), DEFAULT_PRIORITY, &d));
3303 r->Start(); 3298 r->Start();
3304 EXPECT_TRUE(r->is_pending()); 3299 EXPECT_TRUE(r->is_pending());
3305 3300
3306 base::RunLoop().Run(); 3301 base::RunLoop().Run();
3307 3302
3308 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 3303 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
3309 // The proxy server is not set before failure. 3304 // The proxy server is not set before failure.
3310 EXPECT_TRUE(r->proxy_server().IsEmpty()); 3305 EXPECT_TRUE(r->proxy_server().IsEmpty());
3311 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, r->status().error()); 3306 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, r->status().error());
3312 EXPECT_EQ(1, d.response_started_count()); 3307 EXPECT_EQ(1, d.response_started_count());
3313 // We should not have followed the redirect. 3308 // We should not have followed the redirect.
3314 EXPECT_EQ(0, d.received_redirect_count()); 3309 EXPECT_EQ(0, d.received_redirect_count());
3315 } 3310 }
3316 } 3311 }
3317 3312
3318 // This is the same as the previous test, but checks that the network delegate 3313 // This is the same as the previous test, but checks that the network delegate
3319 // registers the error. 3314 // registers the error.
3320 TEST_F(URLRequestTestHTTP, NetworkDelegateTunnelConnectionFailed) { 3315 TEST_F(URLRequestTestHTTP, NetworkDelegateTunnelConnectionFailed) {
3321 ASSERT_TRUE(test_server_.Start()); 3316 ASSERT_TRUE(http_test_server()->Start());
3322 3317
3323 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 3318 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
3324 TestURLRequestContextWithProxy context( 3319 TestURLRequestContextWithProxy context(
3325 test_server_.host_port_pair().ToString(), &network_delegate); 3320 http_test_server()->host_port_pair().ToString(), &network_delegate);
3326 3321
3327 TestDelegate d; 3322 TestDelegate d;
3328 { 3323 {
3329 scoped_ptr<URLRequest> r(context.CreateRequest( 3324 scoped_ptr<URLRequest> r(context.CreateRequest(
3330 GURL("https://www.redirect.com/"), DEFAULT_PRIORITY, &d)); 3325 GURL("https://www.redirect.com/"), DEFAULT_PRIORITY, &d));
3331 r->Start(); 3326 r->Start();
3332 EXPECT_TRUE(r->is_pending()); 3327 EXPECT_TRUE(r->is_pending());
3333 3328
3334 base::RunLoop().Run(); 3329 base::RunLoop().Run();
3335 3330
(...skipping 12 matching lines...) Expand all
3348 3343
3349 // Tests that we can block and asynchronously return OK in various stages. 3344 // Tests that we can block and asynchronously return OK in various stages.
3350 TEST_F(URLRequestTestHTTP, NetworkDelegateBlockAsynchronously) { 3345 TEST_F(URLRequestTestHTTP, NetworkDelegateBlockAsynchronously) {
3351 static const BlockingNetworkDelegate::Stage blocking_stages[] = { 3346 static const BlockingNetworkDelegate::Stage blocking_stages[] = {
3352 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST, 3347 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST,
3353 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS, 3348 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS,
3354 BlockingNetworkDelegate::ON_HEADERS_RECEIVED 3349 BlockingNetworkDelegate::ON_HEADERS_RECEIVED
3355 }; 3350 };
3356 static const size_t blocking_stages_length = arraysize(blocking_stages); 3351 static const size_t blocking_stages_length = arraysize(blocking_stages);
3357 3352
3358 ASSERT_TRUE(test_server_.Start()); 3353 ASSERT_TRUE(http_test_server()->Start());
3359 3354
3360 TestDelegate d; 3355 TestDelegate d;
3361 BlockingNetworkDelegate network_delegate( 3356 BlockingNetworkDelegate network_delegate(
3362 BlockingNetworkDelegate::USER_CALLBACK); 3357 BlockingNetworkDelegate::USER_CALLBACK);
3363 network_delegate.set_block_on( 3358 network_delegate.set_block_on(
3364 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST | 3359 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST |
3365 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS | 3360 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS |
3366 BlockingNetworkDelegate::ON_HEADERS_RECEIVED); 3361 BlockingNetworkDelegate::ON_HEADERS_RECEIVED);
3367 3362
3368 TestURLRequestContext context(true); 3363 TestURLRequestContext context(true);
3369 context.set_network_delegate(&network_delegate); 3364 context.set_network_delegate(&network_delegate);
3370 context.Init(); 3365 context.Init();
3371 3366
3372 { 3367 {
3373 scoped_ptr<URLRequest> r(context.CreateRequest( 3368 scoped_ptr<URLRequest> r(context.CreateRequest(
3374 test_server_.GetURL("empty.html"), DEFAULT_PRIORITY, &d)); 3369 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
3375 3370
3376 r->Start(); 3371 r->Start();
3377 for (size_t i = 0; i < blocking_stages_length; ++i) { 3372 for (size_t i = 0; i < blocking_stages_length; ++i) {
3378 base::RunLoop().Run(); 3373 base::RunLoop().Run();
3379 EXPECT_EQ(blocking_stages[i], 3374 EXPECT_EQ(blocking_stages[i],
3380 network_delegate.stage_blocked_for_callback()); 3375 network_delegate.stage_blocked_for_callback());
3381 network_delegate.DoCallback(OK); 3376 network_delegate.DoCallback(OK);
3382 } 3377 }
3383 base::RunLoop().Run(); 3378 base::RunLoop().Run();
3384 EXPECT_EQ(200, r->GetResponseCode()); 3379 EXPECT_EQ(200, r->GetResponseCode());
3385 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3380 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3386 EXPECT_EQ(1, network_delegate.created_requests()); 3381 EXPECT_EQ(1, network_delegate.created_requests());
3387 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3382 EXPECT_EQ(0, network_delegate.destroyed_requests());
3388 } 3383 }
3389 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3384 EXPECT_EQ(1, network_delegate.destroyed_requests());
3390 } 3385 }
3391 3386
3392 // Tests that the network delegate can block and cancel a request. 3387 // Tests that the network delegate can block and cancel a request.
3393 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequest) { 3388 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequest) {
3394 ASSERT_TRUE(test_server_.Start()); 3389 ASSERT_TRUE(http_test_server()->Start());
3395 3390
3396 TestDelegate d; 3391 TestDelegate d;
3397 BlockingNetworkDelegate network_delegate( 3392 BlockingNetworkDelegate network_delegate(
3398 BlockingNetworkDelegate::AUTO_CALLBACK); 3393 BlockingNetworkDelegate::AUTO_CALLBACK);
3399 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST); 3394 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST);
3400 network_delegate.set_retval(ERR_EMPTY_RESPONSE); 3395 network_delegate.set_retval(ERR_EMPTY_RESPONSE);
3401 3396
3402 TestURLRequestContextWithProxy context( 3397 TestURLRequestContextWithProxy context(
3403 test_server_.host_port_pair().ToString(), &network_delegate); 3398 http_test_server()->host_port_pair().ToString(), &network_delegate);
3404 3399
3405 { 3400 {
3406 scoped_ptr<URLRequest> r(context.CreateRequest( 3401 scoped_ptr<URLRequest> r(context.CreateRequest(
3407 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 3402 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
3408 3403
3409 r->Start(); 3404 r->Start();
3410 base::RunLoop().Run(); 3405 base::RunLoop().Run();
3411 3406
3412 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 3407 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
3413 // The proxy server is not set before cancellation. 3408 // The proxy server is not set before cancellation.
3414 EXPECT_TRUE(r->proxy_server().IsEmpty()); 3409 EXPECT_TRUE(r->proxy_server().IsEmpty());
3415 EXPECT_EQ(ERR_EMPTY_RESPONSE, r->status().error()); 3410 EXPECT_EQ(ERR_EMPTY_RESPONSE, r->status().error());
3416 EXPECT_EQ(1, network_delegate.created_requests()); 3411 EXPECT_EQ(1, network_delegate.created_requests());
3417 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3412 EXPECT_EQ(0, network_delegate.destroyed_requests());
(...skipping 29 matching lines...) Expand all
3447 EXPECT_EQ(ERR_BLOCKED_BY_CLIENT, r->status().error()); 3442 EXPECT_EQ(ERR_BLOCKED_BY_CLIENT, r->status().error());
3448 EXPECT_EQ(1, network_delegate.created_requests()); 3443 EXPECT_EQ(1, network_delegate.created_requests());
3449 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3444 EXPECT_EQ(0, network_delegate.destroyed_requests());
3450 } 3445 }
3451 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3446 EXPECT_EQ(1, network_delegate.destroyed_requests());
3452 } 3447 }
3453 3448
3454 // The following 3 tests check that the network delegate can cancel a request 3449 // The following 3 tests check that the network delegate can cancel a request
3455 // synchronously in various stages of the request. 3450 // synchronously in various stages of the request.
3456 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously1) { 3451 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously1) {
3457 ASSERT_TRUE(test_server_.Start()); 3452 ASSERT_TRUE(http_test_server()->Start());
3458 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS, 3453 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS,
3459 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST, 3454 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST,
3460 test_server_.GetURL(std::string())); 3455 http_test_server()->GetURL("/"));
3461 } 3456 }
3462 3457
3463 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously2) { 3458 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously2) {
3464 ASSERT_TRUE(test_server_.Start()); 3459 ASSERT_TRUE(http_test_server()->Start());
3465 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS, 3460 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS,
3466 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS, 3461 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS,
3467 test_server_.GetURL(std::string())); 3462 http_test_server()->GetURL("/"));
3468 } 3463 }
3469 3464
3470 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously3) { 3465 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestSynchronously3) {
3471 ASSERT_TRUE(test_server_.Start()); 3466 ASSERT_TRUE(http_test_server()->Start());
3472 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS, 3467 NetworkDelegateCancelRequest(BlockingNetworkDelegate::SYNCHRONOUS,
3473 BlockingNetworkDelegate::ON_HEADERS_RECEIVED, 3468 BlockingNetworkDelegate::ON_HEADERS_RECEIVED,
3474 test_server_.GetURL(std::string())); 3469 http_test_server()->GetURL("/"));
3475 } 3470 }
3476 3471
3477 // The following 3 tests check that the network delegate can cancel a request 3472 // The following 3 tests check that the network delegate can cancel a request
3478 // asynchronously in various stages of the request. 3473 // asynchronously in various stages of the request.
3479 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously1) { 3474 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously1) {
3480 ASSERT_TRUE(test_server_.Start()); 3475 ASSERT_TRUE(http_test_server()->Start());
3481 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK, 3476 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK,
3482 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST, 3477 BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST,
3483 test_server_.GetURL(std::string())); 3478 http_test_server()->GetURL("/"));
3484 } 3479 }
3485 3480
3486 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously2) { 3481 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously2) {
3487 ASSERT_TRUE(test_server_.Start()); 3482 ASSERT_TRUE(http_test_server()->Start());
3488 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK, 3483 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK,
3489 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS, 3484 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS,
3490 test_server_.GetURL(std::string())); 3485 http_test_server()->GetURL("/"));
3491 } 3486 }
3492 3487
3493 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously3) { 3488 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelRequestAsynchronously3) {
3494 ASSERT_TRUE(test_server_.Start()); 3489 ASSERT_TRUE(http_test_server()->Start());
3495 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK, 3490 NetworkDelegateCancelRequest(BlockingNetworkDelegate::AUTO_CALLBACK,
3496 BlockingNetworkDelegate::ON_HEADERS_RECEIVED, 3491 BlockingNetworkDelegate::ON_HEADERS_RECEIVED,
3497 test_server_.GetURL(std::string())); 3492 http_test_server()->GetURL("/"));
3498 } 3493 }
3499 3494
3500 // Tests that the network delegate can block and redirect a request to a new 3495 // Tests that the network delegate can block and redirect a request to a new
3501 // URL. 3496 // URL.
3502 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequest) { 3497 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequest) {
3503 ASSERT_TRUE(test_server_.Start()); 3498 ASSERT_TRUE(http_test_server()->Start());
3504 3499
3505 TestDelegate d; 3500 TestDelegate d;
3506 BlockingNetworkDelegate network_delegate( 3501 BlockingNetworkDelegate network_delegate(
3507 BlockingNetworkDelegate::AUTO_CALLBACK); 3502 BlockingNetworkDelegate::AUTO_CALLBACK);
3508 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST); 3503 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST);
3509 GURL redirect_url(test_server_.GetURL("simple.html")); 3504 GURL redirect_url(http_test_server()->GetURL("/simple.html"));
3510 network_delegate.set_redirect_url(redirect_url); 3505 network_delegate.set_redirect_url(redirect_url);
3511 3506
3512 TestURLRequestContextWithProxy context( 3507 TestURLRequestContextWithProxy context(
3513 test_server_.host_port_pair().ToString(), &network_delegate); 3508 http_test_server()->host_port_pair().ToString(), &network_delegate);
3514 3509
3515 { 3510 {
3516 GURL original_url(test_server_.GetURL("empty.html")); 3511 GURL original_url(http_test_server()->GetURL("/defaultresponse"));
3517 scoped_ptr<URLRequest> r( 3512 scoped_ptr<URLRequest> r(
3518 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 3513 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
3519 3514
3520 // Quit after hitting the redirect, so can check the headers. 3515 // Quit after hitting the redirect, so can check the headers.
3521 d.set_quit_on_redirect(true); 3516 d.set_quit_on_redirect(true);
3522 r->Start(); 3517 r->Start();
3523 base::RunLoop().Run(); 3518 base::RunLoop().Run();
3524 3519
3525 // Check headers from URLRequestJob. 3520 // Check headers from URLRequestJob.
3526 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3521 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3527 EXPECT_EQ(307, r->GetResponseCode()); 3522 EXPECT_EQ(307, r->GetResponseCode());
3528 EXPECT_EQ(307, r->response_headers()->response_code()); 3523 EXPECT_EQ(307, r->response_headers()->response_code());
3529 std::string location; 3524 std::string location;
3530 ASSERT_TRUE(r->response_headers()->EnumerateHeader(NULL, "Location", 3525 ASSERT_TRUE(r->response_headers()->EnumerateHeader(NULL, "Location",
3531 &location)); 3526 &location));
3532 EXPECT_EQ(redirect_url, GURL(location)); 3527 EXPECT_EQ(redirect_url, GURL(location));
3533 3528
3534 // Let the request finish. 3529 // Let the request finish.
3535 r->FollowDeferredRedirect(); 3530 r->FollowDeferredRedirect();
3536 base::RunLoop().Run(); 3531 base::RunLoop().Run();
3537 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3532 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3538 EXPECT_TRUE(r->proxy_server().Equals(test_server_.host_port_pair())); 3533 EXPECT_TRUE(r->proxy_server().Equals(http_test_server()->host_port_pair()));
3539 EXPECT_EQ( 3534 EXPECT_EQ(
3540 1, network_delegate.observed_before_proxy_headers_sent_callbacks()); 3535 1, network_delegate.observed_before_proxy_headers_sent_callbacks());
3541 EXPECT_TRUE( 3536 EXPECT_TRUE(network_delegate.last_observed_proxy().Equals(
3542 network_delegate.last_observed_proxy().Equals( 3537 http_test_server()->host_port_pair()));
3543 test_server_.host_port_pair()));
3544 3538
3545 EXPECT_EQ(0, r->status().error()); 3539 EXPECT_EQ(0, r->status().error());
3546 EXPECT_EQ(redirect_url, r->url()); 3540 EXPECT_EQ(redirect_url, r->url());
3547 EXPECT_EQ(original_url, r->original_url()); 3541 EXPECT_EQ(original_url, r->original_url());
3548 EXPECT_EQ(2U, r->url_chain().size()); 3542 EXPECT_EQ(2U, r->url_chain().size());
3549 EXPECT_EQ(1, network_delegate.created_requests()); 3543 EXPECT_EQ(1, network_delegate.created_requests());
3550 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3544 EXPECT_EQ(0, network_delegate.destroyed_requests());
3551 } 3545 }
3552 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3546 EXPECT_EQ(1, network_delegate.destroyed_requests());
3553 } 3547 }
3554 3548
3555 // Tests that the network delegate can block and redirect a request to a new 3549 // Tests that the network delegate can block and redirect a request to a new
3556 // URL by setting a redirect_url and returning in OnBeforeURLRequest directly. 3550 // URL by setting a redirect_url and returning in OnBeforeURLRequest directly.
3557 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestSynchronously) { 3551 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestSynchronously) {
3558 ASSERT_TRUE(test_server_.Start()); 3552 ASSERT_TRUE(http_test_server()->Start());
3559 3553
3560 TestDelegate d; 3554 TestDelegate d;
3561 BlockingNetworkDelegate network_delegate( 3555 BlockingNetworkDelegate network_delegate(
3562 BlockingNetworkDelegate::SYNCHRONOUS); 3556 BlockingNetworkDelegate::SYNCHRONOUS);
3563 GURL redirect_url(test_server_.GetURL("simple.html")); 3557 GURL redirect_url(http_test_server()->GetURL("/simple.html"));
3564 network_delegate.set_redirect_url(redirect_url); 3558 network_delegate.set_redirect_url(redirect_url);
3565 3559
3566 TestURLRequestContextWithProxy context( 3560 TestURLRequestContextWithProxy context(
3567 test_server_.host_port_pair().ToString(), &network_delegate); 3561 http_test_server()->host_port_pair().ToString(), &network_delegate);
3568 3562
3569 { 3563 {
3570 GURL original_url(test_server_.GetURL("empty.html")); 3564 GURL original_url(http_test_server()->GetURL("/defaultresponse"));
3571 scoped_ptr<URLRequest> r( 3565 scoped_ptr<URLRequest> r(
3572 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 3566 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
3573 3567
3574 // Quit after hitting the redirect, so can check the headers. 3568 // Quit after hitting the redirect, so can check the headers.
3575 d.set_quit_on_redirect(true); 3569 d.set_quit_on_redirect(true);
3576 r->Start(); 3570 r->Start();
3577 base::RunLoop().Run(); 3571 base::RunLoop().Run();
3578 3572
3579 // Check headers from URLRequestJob. 3573 // Check headers from URLRequestJob.
3580 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3574 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3581 EXPECT_EQ(307, r->GetResponseCode()); 3575 EXPECT_EQ(307, r->GetResponseCode());
3582 EXPECT_EQ(307, r->response_headers()->response_code()); 3576 EXPECT_EQ(307, r->response_headers()->response_code());
3583 std::string location; 3577 std::string location;
3584 ASSERT_TRUE(r->response_headers()->EnumerateHeader(NULL, "Location", 3578 ASSERT_TRUE(r->response_headers()->EnumerateHeader(NULL, "Location",
3585 &location)); 3579 &location));
3586 EXPECT_EQ(redirect_url, GURL(location)); 3580 EXPECT_EQ(redirect_url, GURL(location));
3587 3581
3588 // Let the request finish. 3582 // Let the request finish.
3589 r->FollowDeferredRedirect(); 3583 r->FollowDeferredRedirect();
3590 base::RunLoop().Run(); 3584 base::RunLoop().Run();
3591 3585
3592 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3586 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3593 EXPECT_TRUE(r->proxy_server().Equals(test_server_.host_port_pair())); 3587 EXPECT_TRUE(r->proxy_server().Equals(http_test_server()->host_port_pair()));
3594 EXPECT_EQ( 3588 EXPECT_EQ(
3595 1, network_delegate.observed_before_proxy_headers_sent_callbacks()); 3589 1, network_delegate.observed_before_proxy_headers_sent_callbacks());
3596 EXPECT_TRUE( 3590 EXPECT_TRUE(network_delegate.last_observed_proxy().Equals(
3597 network_delegate.last_observed_proxy().Equals( 3591 http_test_server()->host_port_pair()));
3598 test_server_.host_port_pair()));
3599 EXPECT_EQ(0, r->status().error()); 3592 EXPECT_EQ(0, r->status().error());
3600 EXPECT_EQ(redirect_url, r->url()); 3593 EXPECT_EQ(redirect_url, r->url());
3601 EXPECT_EQ(original_url, r->original_url()); 3594 EXPECT_EQ(original_url, r->original_url());
3602 EXPECT_EQ(2U, r->url_chain().size()); 3595 EXPECT_EQ(2U, r->url_chain().size());
3603 EXPECT_EQ(1, network_delegate.created_requests()); 3596 EXPECT_EQ(1, network_delegate.created_requests());
3604 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3597 EXPECT_EQ(0, network_delegate.destroyed_requests());
3605 } 3598 }
3606 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3599 EXPECT_EQ(1, network_delegate.destroyed_requests());
3607 } 3600 }
3608 3601
3609 // Tests that redirects caused by the network delegate preserve POST data. 3602 // Tests that redirects caused by the network delegate preserve POST data.
3610 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestPost) { 3603 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestPost) {
3611 ASSERT_TRUE(test_server_.Start()); 3604 ASSERT_TRUE(http_test_server()->Start());
3612 3605
3613 const char kData[] = "hello world"; 3606 const char kData[] = "hello world";
3614 3607
3615 TestDelegate d; 3608 TestDelegate d;
3616 BlockingNetworkDelegate network_delegate( 3609 BlockingNetworkDelegate network_delegate(
3617 BlockingNetworkDelegate::AUTO_CALLBACK); 3610 BlockingNetworkDelegate::AUTO_CALLBACK);
3618 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST); 3611 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST);
3619 GURL redirect_url(test_server_.GetURL("echo")); 3612 GURL redirect_url(http_test_server()->GetURL("/echo"));
3620 network_delegate.set_redirect_url(redirect_url); 3613 network_delegate.set_redirect_url(redirect_url);
3621 3614
3622 TestURLRequestContext context(true); 3615 TestURLRequestContext context(true);
3623 context.set_network_delegate(&network_delegate); 3616 context.set_network_delegate(&network_delegate);
3624 context.Init(); 3617 context.Init();
3625 3618
3626 { 3619 {
3627 GURL original_url(test_server_.GetURL("empty.html")); 3620 GURL original_url(http_test_server()->GetURL("/defaultresponse"));
3628 scoped_ptr<URLRequest> r( 3621 scoped_ptr<URLRequest> r(
3629 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 3622 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
3630 r->set_method("POST"); 3623 r->set_method("POST");
3631 r->set_upload(CreateSimpleUploadData(kData)); 3624 r->set_upload(CreateSimpleUploadData(kData));
3632 HttpRequestHeaders headers; 3625 HttpRequestHeaders headers;
3633 headers.SetHeader(HttpRequestHeaders::kContentLength, 3626 headers.SetHeader(HttpRequestHeaders::kContentLength,
3634 base::SizeTToString(arraysize(kData) - 1)); 3627 base::SizeTToString(arraysize(kData) - 1));
3635 r->SetExtraRequestHeaders(headers); 3628 r->SetExtraRequestHeaders(headers);
3636 3629
3637 // Quit after hitting the redirect, so can check the headers. 3630 // Quit after hitting the redirect, so can check the headers.
(...skipping 23 matching lines...) Expand all
3661 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3654 EXPECT_EQ(0, network_delegate.destroyed_requests());
3662 EXPECT_EQ("POST", r->method()); 3655 EXPECT_EQ("POST", r->method());
3663 EXPECT_EQ(kData, d.data_received()); 3656 EXPECT_EQ(kData, d.data_received());
3664 } 3657 }
3665 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3658 EXPECT_EQ(1, network_delegate.destroyed_requests());
3666 } 3659 }
3667 3660
3668 // Tests that the network delegate can block and redirect a request to a new 3661 // Tests that the network delegate can block and redirect a request to a new
3669 // URL during OnHeadersReceived. 3662 // URL during OnHeadersReceived.
3670 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestOnHeadersReceived) { 3663 TEST_F(URLRequestTestHTTP, NetworkDelegateRedirectRequestOnHeadersReceived) {
3671 ASSERT_TRUE(test_server_.Start()); 3664 ASSERT_TRUE(http_test_server()->Start());
3672 3665
3673 TestDelegate d; 3666 TestDelegate d;
3674 BlockingNetworkDelegate network_delegate( 3667 BlockingNetworkDelegate network_delegate(
3675 BlockingNetworkDelegate::AUTO_CALLBACK); 3668 BlockingNetworkDelegate::AUTO_CALLBACK);
3676 network_delegate.set_block_on(BlockingNetworkDelegate::ON_HEADERS_RECEIVED); 3669 network_delegate.set_block_on(BlockingNetworkDelegate::ON_HEADERS_RECEIVED);
3677 GURL redirect_url(test_server_.GetURL("simple.html")); 3670 GURL redirect_url(http_test_server()->GetURL("/simple.html"));
3678 network_delegate.set_redirect_on_headers_received_url(redirect_url); 3671 network_delegate.set_redirect_on_headers_received_url(redirect_url);
3679 3672
3680 TestURLRequestContextWithProxy context( 3673 TestURLRequestContextWithProxy context(
3681 test_server_.host_port_pair().ToString(), &network_delegate); 3674 http_test_server()->host_port_pair().ToString(), &network_delegate);
3682 3675
3683 { 3676 {
3684 GURL original_url(test_server_.GetURL("empty.html")); 3677 GURL original_url(http_test_server()->GetURL("/defaultresponse"));
3685 scoped_ptr<URLRequest> r( 3678 scoped_ptr<URLRequest> r(
3686 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 3679 context.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
3687 3680
3688 r->Start(); 3681 r->Start();
3689 base::RunLoop().Run(); 3682 base::RunLoop().Run();
3690 3683
3691 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3684 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3692 EXPECT_TRUE(r->proxy_server().Equals(test_server_.host_port_pair())); 3685 EXPECT_TRUE(r->proxy_server().Equals(http_test_server()->host_port_pair()));
3693 EXPECT_EQ( 3686 EXPECT_EQ(
3694 2, network_delegate.observed_before_proxy_headers_sent_callbacks()); 3687 2, network_delegate.observed_before_proxy_headers_sent_callbacks());
3695 EXPECT_TRUE( 3688 EXPECT_TRUE(network_delegate.last_observed_proxy().Equals(
3696 network_delegate.last_observed_proxy().Equals( 3689 http_test_server()->host_port_pair()));
3697 test_server_.host_port_pair()));
3698 3690
3699 EXPECT_EQ(OK, r->status().error()); 3691 EXPECT_EQ(OK, r->status().error());
3700 EXPECT_EQ(redirect_url, r->url()); 3692 EXPECT_EQ(redirect_url, r->url());
3701 EXPECT_EQ(original_url, r->original_url()); 3693 EXPECT_EQ(original_url, r->original_url());
3702 EXPECT_EQ(2U, r->url_chain().size()); 3694 EXPECT_EQ(2U, r->url_chain().size());
3703 EXPECT_EQ(2, network_delegate.created_requests()); 3695 EXPECT_EQ(2, network_delegate.created_requests());
3704 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3696 EXPECT_EQ(0, network_delegate.destroyed_requests());
3705 } 3697 }
3706 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3698 EXPECT_EQ(1, network_delegate.destroyed_requests());
3707 } 3699 }
3708 3700
3709 // Tests that the network delegate can synchronously complete OnAuthRequired 3701 // Tests that the network delegate can synchronously complete OnAuthRequired
3710 // by taking no action. This indicates that the NetworkDelegate does not want to 3702 // by taking no action. This indicates that the NetworkDelegate does not want to
3711 // handle the challenge, and is passing the buck along to the 3703 // handle the challenge, and is passing the buck along to the
3712 // URLRequest::Delegate. 3704 // URLRequest::Delegate.
3713 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncNoAction) { 3705 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncNoAction) {
3714 ASSERT_TRUE(test_server_.Start()); 3706 ASSERT_TRUE(http_test_server()->Start());
3715 3707
3716 TestDelegate d; 3708 TestDelegate d;
3717 BlockingNetworkDelegate network_delegate( 3709 BlockingNetworkDelegate network_delegate(
3718 BlockingNetworkDelegate::SYNCHRONOUS); 3710 BlockingNetworkDelegate::SYNCHRONOUS);
3719 3711
3720 TestURLRequestContext context(true); 3712 TestURLRequestContext context(true);
3721 context.set_network_delegate(&network_delegate); 3713 context.set_network_delegate(&network_delegate);
3722 context.Init(); 3714 context.Init();
3723 3715
3724 d.set_credentials(AuthCredentials(kUser, kSecret)); 3716 d.set_credentials(AuthCredentials(kUser, kSecret));
3725 3717
3726 { 3718 {
3727 GURL url(test_server_.GetURL("auth-basic")); 3719 GURL url(http_test_server()->GetURL("/auth-basic"));
3728 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3720 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3729 r->Start(); 3721 r->Start();
3730 3722
3731 base::RunLoop().Run(); 3723 base::RunLoop().Run();
3732 3724
3733 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3725 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3734 EXPECT_EQ(0, r->status().error()); 3726 EXPECT_EQ(0, r->status().error());
3735 EXPECT_EQ(200, r->GetResponseCode()); 3727 EXPECT_EQ(200, r->GetResponseCode());
3736 EXPECT_TRUE(d.auth_required_called()); 3728 EXPECT_TRUE(d.auth_required_called());
3737 EXPECT_EQ(1, network_delegate.created_requests()); 3729 EXPECT_EQ(1, network_delegate.created_requests());
3738 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3730 EXPECT_EQ(0, network_delegate.destroyed_requests());
3739 } 3731 }
3740 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3732 EXPECT_EQ(1, network_delegate.destroyed_requests());
3741 } 3733 }
3742 3734
3743 TEST_F(URLRequestTestHTTP, 3735 TEST_F(URLRequestTestHTTP,
3744 NetworkDelegateOnAuthRequiredSyncNoAction_GetFullRequestHeaders) { 3736 NetworkDelegateOnAuthRequiredSyncNoAction_GetFullRequestHeaders) {
3745 ASSERT_TRUE(test_server_.Start()); 3737 ASSERT_TRUE(http_test_server()->Start());
3746 3738
3747 TestDelegate d; 3739 TestDelegate d;
3748 BlockingNetworkDelegate network_delegate( 3740 BlockingNetworkDelegate network_delegate(
3749 BlockingNetworkDelegate::SYNCHRONOUS); 3741 BlockingNetworkDelegate::SYNCHRONOUS);
3750 3742
3751 TestURLRequestContext context(true); 3743 TestURLRequestContext context(true);
3752 context.set_network_delegate(&network_delegate); 3744 context.set_network_delegate(&network_delegate);
3753 context.Init(); 3745 context.Init();
3754 3746
3755 d.set_credentials(AuthCredentials(kUser, kSecret)); 3747 d.set_credentials(AuthCredentials(kUser, kSecret));
3756 3748
3757 { 3749 {
3758 GURL url(test_server_.GetURL("auth-basic")); 3750 GURL url(http_test_server()->GetURL("/auth-basic"));
3759 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3751 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3760 r->Start(); 3752 r->Start();
3761 3753
3762 { 3754 {
3763 HttpRequestHeaders headers; 3755 HttpRequestHeaders headers;
3764 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); 3756 EXPECT_TRUE(r->GetFullRequestHeaders(&headers));
3765 EXPECT_FALSE(headers.HasHeader("Authorization")); 3757 EXPECT_FALSE(headers.HasHeader("Authorization"));
3766 } 3758 }
3767 3759
3768 base::RunLoop().Run(); 3760 base::RunLoop().Run();
3769 3761
3770 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3762 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3771 EXPECT_EQ(0, r->status().error()); 3763 EXPECT_EQ(0, r->status().error());
3772 EXPECT_EQ(200, r->GetResponseCode()); 3764 EXPECT_EQ(200, r->GetResponseCode());
3773 EXPECT_TRUE(d.auth_required_called()); 3765 EXPECT_TRUE(d.auth_required_called());
3774 EXPECT_EQ(1, network_delegate.created_requests()); 3766 EXPECT_EQ(1, network_delegate.created_requests());
3775 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3767 EXPECT_EQ(0, network_delegate.destroyed_requests());
3776 } 3768 }
3777 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3769 EXPECT_EQ(1, network_delegate.destroyed_requests());
3778 } 3770 }
3779 3771
3780 // Tests that the network delegate can synchronously complete OnAuthRequired 3772 // Tests that the network delegate can synchronously complete OnAuthRequired
3781 // by setting credentials. 3773 // by setting credentials.
3782 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncSetAuth) { 3774 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncSetAuth) {
3783 ASSERT_TRUE(test_server_.Start()); 3775 ASSERT_TRUE(http_test_server()->Start());
3784 3776
3785 TestDelegate d; 3777 TestDelegate d;
3786 BlockingNetworkDelegate network_delegate( 3778 BlockingNetworkDelegate network_delegate(
3787 BlockingNetworkDelegate::SYNCHRONOUS); 3779 BlockingNetworkDelegate::SYNCHRONOUS);
3788 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3780 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3789 network_delegate.set_auth_retval( 3781 network_delegate.set_auth_retval(
3790 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH); 3782 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH);
3791 3783
3792 network_delegate.set_auth_credentials(AuthCredentials(kUser, kSecret)); 3784 network_delegate.set_auth_credentials(AuthCredentials(kUser, kSecret));
3793 3785
3794 TestURLRequestContext context(true); 3786 TestURLRequestContext context(true);
3795 context.set_network_delegate(&network_delegate); 3787 context.set_network_delegate(&network_delegate);
3796 context.Init(); 3788 context.Init();
3797 3789
3798 { 3790 {
3799 GURL url(test_server_.GetURL("auth-basic")); 3791 GURL url(http_test_server()->GetURL("/auth-basic"));
3800 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3792 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3801 r->Start(); 3793 r->Start();
3802 base::RunLoop().Run(); 3794 base::RunLoop().Run();
3803 3795
3804 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3796 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3805 EXPECT_EQ(0, r->status().error()); 3797 EXPECT_EQ(0, r->status().error());
3806 EXPECT_EQ(200, r->GetResponseCode()); 3798 EXPECT_EQ(200, r->GetResponseCode());
3807 EXPECT_FALSE(d.auth_required_called()); 3799 EXPECT_FALSE(d.auth_required_called());
3808 EXPECT_EQ(1, network_delegate.created_requests()); 3800 EXPECT_EQ(1, network_delegate.created_requests());
3809 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3801 EXPECT_EQ(0, network_delegate.destroyed_requests());
3810 } 3802 }
3811 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3803 EXPECT_EQ(1, network_delegate.destroyed_requests());
3812 } 3804 }
3813 3805
3814 // Same as above, but also tests that GetFullRequestHeaders returns the proper 3806 // Same as above, but also tests that GetFullRequestHeaders returns the proper
3815 // headers (for the first or second request) when called at the proper times. 3807 // headers (for the first or second request) when called at the proper times.
3816 TEST_F(URLRequestTestHTTP, 3808 TEST_F(URLRequestTestHTTP,
3817 NetworkDelegateOnAuthRequiredSyncSetAuth_GetFullRequestHeaders) { 3809 NetworkDelegateOnAuthRequiredSyncSetAuth_GetFullRequestHeaders) {
3818 ASSERT_TRUE(test_server_.Start()); 3810 ASSERT_TRUE(http_test_server()->Start());
3819 3811
3820 TestDelegate d; 3812 TestDelegate d;
3821 BlockingNetworkDelegate network_delegate( 3813 BlockingNetworkDelegate network_delegate(
3822 BlockingNetworkDelegate::SYNCHRONOUS); 3814 BlockingNetworkDelegate::SYNCHRONOUS);
3823 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3815 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3824 network_delegate.set_auth_retval( 3816 network_delegate.set_auth_retval(
3825 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH); 3817 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH);
3826 3818
3827 network_delegate.set_auth_credentials(AuthCredentials(kUser, kSecret)); 3819 network_delegate.set_auth_credentials(AuthCredentials(kUser, kSecret));
3828 3820
3829 TestURLRequestContext context(true); 3821 TestURLRequestContext context(true);
3830 context.set_network_delegate(&network_delegate); 3822 context.set_network_delegate(&network_delegate);
3831 context.Init(); 3823 context.Init();
3832 3824
3833 { 3825 {
3834 GURL url(test_server_.GetURL("auth-basic")); 3826 GURL url(http_test_server()->GetURL("/auth-basic"));
3835 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3827 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3836 r->Start(); 3828 r->Start();
3837 base::RunLoop().Run(); 3829 base::RunLoop().Run();
3838 3830
3839 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3831 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3840 EXPECT_EQ(0, r->status().error()); 3832 EXPECT_EQ(0, r->status().error());
3841 EXPECT_EQ(200, r->GetResponseCode()); 3833 EXPECT_EQ(200, r->GetResponseCode());
3842 EXPECT_FALSE(d.auth_required_called()); 3834 EXPECT_FALSE(d.auth_required_called());
3843 EXPECT_EQ(1, network_delegate.created_requests()); 3835 EXPECT_EQ(1, network_delegate.created_requests());
3844 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3836 EXPECT_EQ(0, network_delegate.destroyed_requests());
3845 3837
3846 { 3838 {
3847 HttpRequestHeaders headers; 3839 HttpRequestHeaders headers;
3848 EXPECT_TRUE(r->GetFullRequestHeaders(&headers)); 3840 EXPECT_TRUE(r->GetFullRequestHeaders(&headers));
3849 EXPECT_TRUE(headers.HasHeader("Authorization")); 3841 EXPECT_TRUE(headers.HasHeader("Authorization"));
3850 } 3842 }
3851 } 3843 }
3852 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3844 EXPECT_EQ(1, network_delegate.destroyed_requests());
3853 } 3845 }
3854 3846
3855 // Tests that the network delegate can synchronously complete OnAuthRequired 3847 // Tests that the network delegate can synchronously complete OnAuthRequired
3856 // by cancelling authentication. 3848 // by cancelling authentication.
3857 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncCancel) { 3849 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredSyncCancel) {
3858 ASSERT_TRUE(test_server_.Start()); 3850 ASSERT_TRUE(http_test_server()->Start());
3859 3851
3860 TestDelegate d; 3852 TestDelegate d;
3861 BlockingNetworkDelegate network_delegate( 3853 BlockingNetworkDelegate network_delegate(
3862 BlockingNetworkDelegate::SYNCHRONOUS); 3854 BlockingNetworkDelegate::SYNCHRONOUS);
3863 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3855 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3864 network_delegate.set_auth_retval( 3856 network_delegate.set_auth_retval(
3865 NetworkDelegate::AUTH_REQUIRED_RESPONSE_CANCEL_AUTH); 3857 NetworkDelegate::AUTH_REQUIRED_RESPONSE_CANCEL_AUTH);
3866 3858
3867 TestURLRequestContext context(true); 3859 TestURLRequestContext context(true);
3868 context.set_network_delegate(&network_delegate); 3860 context.set_network_delegate(&network_delegate);
3869 context.Init(); 3861 context.Init();
3870 3862
3871 { 3863 {
3872 GURL url(test_server_.GetURL("auth-basic")); 3864 GURL url(http_test_server()->GetURL("/auth-basic"));
3873 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3865 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3874 r->Start(); 3866 r->Start();
3875 base::RunLoop().Run(); 3867 base::RunLoop().Run();
3876 3868
3877 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3869 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3878 EXPECT_EQ(OK, r->status().error()); 3870 EXPECT_EQ(OK, r->status().error());
3879 EXPECT_EQ(401, r->GetResponseCode()); 3871 EXPECT_EQ(401, r->GetResponseCode());
3880 EXPECT_FALSE(d.auth_required_called()); 3872 EXPECT_FALSE(d.auth_required_called());
3881 EXPECT_EQ(1, network_delegate.created_requests()); 3873 EXPECT_EQ(1, network_delegate.created_requests());
3882 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3874 EXPECT_EQ(0, network_delegate.destroyed_requests());
3883 } 3875 }
3884 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3876 EXPECT_EQ(1, network_delegate.destroyed_requests());
3885 } 3877 }
3886 3878
3887 // Tests that the network delegate can asynchronously complete OnAuthRequired 3879 // Tests that the network delegate can asynchronously complete OnAuthRequired
3888 // by taking no action. This indicates that the NetworkDelegate does not want 3880 // by taking no action. This indicates that the NetworkDelegate does not want
3889 // to handle the challenge, and is passing the buck along to the 3881 // to handle the challenge, and is passing the buck along to the
3890 // URLRequest::Delegate. 3882 // URLRequest::Delegate.
3891 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncNoAction) { 3883 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncNoAction) {
3892 ASSERT_TRUE(test_server_.Start()); 3884 ASSERT_TRUE(http_test_server()->Start());
3893 3885
3894 TestDelegate d; 3886 TestDelegate d;
3895 BlockingNetworkDelegate network_delegate( 3887 BlockingNetworkDelegate network_delegate(
3896 BlockingNetworkDelegate::AUTO_CALLBACK); 3888 BlockingNetworkDelegate::AUTO_CALLBACK);
3897 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3889 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3898 3890
3899 TestURLRequestContext context(true); 3891 TestURLRequestContext context(true);
3900 context.set_network_delegate(&network_delegate); 3892 context.set_network_delegate(&network_delegate);
3901 context.Init(); 3893 context.Init();
3902 3894
3903 d.set_credentials(AuthCredentials(kUser, kSecret)); 3895 d.set_credentials(AuthCredentials(kUser, kSecret));
3904 3896
3905 { 3897 {
3906 GURL url(test_server_.GetURL("auth-basic")); 3898 GURL url(http_test_server()->GetURL("/auth-basic"));
3907 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3899 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3908 r->Start(); 3900 r->Start();
3909 base::RunLoop().Run(); 3901 base::RunLoop().Run();
3910 3902
3911 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3903 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3912 EXPECT_EQ(0, r->status().error()); 3904 EXPECT_EQ(0, r->status().error());
3913 EXPECT_EQ(200, r->GetResponseCode()); 3905 EXPECT_EQ(200, r->GetResponseCode());
3914 EXPECT_TRUE(d.auth_required_called()); 3906 EXPECT_TRUE(d.auth_required_called());
3915 EXPECT_EQ(1, network_delegate.created_requests()); 3907 EXPECT_EQ(1, network_delegate.created_requests());
3916 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3908 EXPECT_EQ(0, network_delegate.destroyed_requests());
3917 } 3909 }
3918 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3910 EXPECT_EQ(1, network_delegate.destroyed_requests());
3919 } 3911 }
3920 3912
3921 // Tests that the network delegate can asynchronously complete OnAuthRequired 3913 // Tests that the network delegate can asynchronously complete OnAuthRequired
3922 // by setting credentials. 3914 // by setting credentials.
3923 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncSetAuth) { 3915 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncSetAuth) {
3924 ASSERT_TRUE(test_server_.Start()); 3916 ASSERT_TRUE(http_test_server()->Start());
3925 3917
3926 TestDelegate d; 3918 TestDelegate d;
3927 BlockingNetworkDelegate network_delegate( 3919 BlockingNetworkDelegate network_delegate(
3928 BlockingNetworkDelegate::AUTO_CALLBACK); 3920 BlockingNetworkDelegate::AUTO_CALLBACK);
3929 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3921 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3930 network_delegate.set_auth_retval( 3922 network_delegate.set_auth_retval(
3931 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH); 3923 NetworkDelegate::AUTH_REQUIRED_RESPONSE_SET_AUTH);
3932 3924
3933 AuthCredentials auth_credentials(kUser, kSecret); 3925 AuthCredentials auth_credentials(kUser, kSecret);
3934 network_delegate.set_auth_credentials(auth_credentials); 3926 network_delegate.set_auth_credentials(auth_credentials);
3935 3927
3936 TestURLRequestContext context(true); 3928 TestURLRequestContext context(true);
3937 context.set_network_delegate(&network_delegate); 3929 context.set_network_delegate(&network_delegate);
3938 context.Init(); 3930 context.Init();
3939 3931
3940 { 3932 {
3941 GURL url(test_server_.GetURL("auth-basic")); 3933 GURL url(http_test_server()->GetURL("/auth-basic"));
3942 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3934 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3943 r->Start(); 3935 r->Start();
3944 base::RunLoop().Run(); 3936 base::RunLoop().Run();
3945 3937
3946 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3938 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3947 EXPECT_EQ(0, r->status().error()); 3939 EXPECT_EQ(0, r->status().error());
3948 3940
3949 EXPECT_EQ(200, r->GetResponseCode()); 3941 EXPECT_EQ(200, r->GetResponseCode());
3950 EXPECT_FALSE(d.auth_required_called()); 3942 EXPECT_FALSE(d.auth_required_called());
3951 EXPECT_EQ(1, network_delegate.created_requests()); 3943 EXPECT_EQ(1, network_delegate.created_requests());
3952 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3944 EXPECT_EQ(0, network_delegate.destroyed_requests());
3953 } 3945 }
3954 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3946 EXPECT_EQ(1, network_delegate.destroyed_requests());
3955 } 3947 }
3956 3948
3957 // Tests that the network delegate can asynchronously complete OnAuthRequired 3949 // Tests that the network delegate can asynchronously complete OnAuthRequired
3958 // by cancelling authentication. 3950 // by cancelling authentication.
3959 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncCancel) { 3951 TEST_F(URLRequestTestHTTP, NetworkDelegateOnAuthRequiredAsyncCancel) {
3960 ASSERT_TRUE(test_server_.Start()); 3952 ASSERT_TRUE(http_test_server()->Start());
3961 3953
3962 TestDelegate d; 3954 TestDelegate d;
3963 BlockingNetworkDelegate network_delegate( 3955 BlockingNetworkDelegate network_delegate(
3964 BlockingNetworkDelegate::AUTO_CALLBACK); 3956 BlockingNetworkDelegate::AUTO_CALLBACK);
3965 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 3957 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
3966 network_delegate.set_auth_retval( 3958 network_delegate.set_auth_retval(
3967 NetworkDelegate::AUTH_REQUIRED_RESPONSE_CANCEL_AUTH); 3959 NetworkDelegate::AUTH_REQUIRED_RESPONSE_CANCEL_AUTH);
3968 3960
3969 TestURLRequestContext context(true); 3961 TestURLRequestContext context(true);
3970 context.set_network_delegate(&network_delegate); 3962 context.set_network_delegate(&network_delegate);
3971 context.Init(); 3963 context.Init();
3972 3964
3973 { 3965 {
3974 GURL url(test_server_.GetURL("auth-basic")); 3966 GURL url(http_test_server()->GetURL("/auth-basic"));
3975 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d)); 3967 scoped_ptr<URLRequest> r(context.CreateRequest(url, DEFAULT_PRIORITY, &d));
3976 r->Start(); 3968 r->Start();
3977 base::RunLoop().Run(); 3969 base::RunLoop().Run();
3978 3970
3979 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 3971 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
3980 EXPECT_EQ(OK, r->status().error()); 3972 EXPECT_EQ(OK, r->status().error());
3981 EXPECT_EQ(401, r->GetResponseCode()); 3973 EXPECT_EQ(401, r->GetResponseCode());
3982 EXPECT_FALSE(d.auth_required_called()); 3974 EXPECT_FALSE(d.auth_required_called());
3983 EXPECT_EQ(1, network_delegate.created_requests()); 3975 EXPECT_EQ(1, network_delegate.created_requests());
3984 EXPECT_EQ(0, network_delegate.destroyed_requests()); 3976 EXPECT_EQ(0, network_delegate.destroyed_requests());
3985 } 3977 }
3986 EXPECT_EQ(1, network_delegate.destroyed_requests()); 3978 EXPECT_EQ(1, network_delegate.destroyed_requests());
3987 } 3979 }
3988 3980
3989 // Tests that we can handle when a network request was canceled while we were 3981 // Tests that we can handle when a network request was canceled while we were
3990 // waiting for the network delegate. 3982 // waiting for the network delegate.
3991 // Part 1: Request is cancelled while waiting for OnBeforeURLRequest callback. 3983 // Part 1: Request is cancelled while waiting for OnBeforeURLRequest callback.
3992 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting1) { 3984 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting1) {
3993 ASSERT_TRUE(test_server_.Start()); 3985 ASSERT_TRUE(http_test_server()->Start());
3994 3986
3995 TestDelegate d; 3987 TestDelegate d;
3996 BlockingNetworkDelegate network_delegate( 3988 BlockingNetworkDelegate network_delegate(
3997 BlockingNetworkDelegate::USER_CALLBACK); 3989 BlockingNetworkDelegate::USER_CALLBACK);
3998 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST); 3990 network_delegate.set_block_on(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST);
3999 3991
4000 TestURLRequestContext context(true); 3992 TestURLRequestContext context(true);
4001 context.set_network_delegate(&network_delegate); 3993 context.set_network_delegate(&network_delegate);
4002 context.Init(); 3994 context.Init();
4003 3995
4004 { 3996 {
4005 scoped_ptr<URLRequest> r(context.CreateRequest( 3997 scoped_ptr<URLRequest> r(context.CreateRequest(
4006 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 3998 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
4007 3999
4008 r->Start(); 4000 r->Start();
4009 base::RunLoop().Run(); 4001 base::RunLoop().Run();
4010 EXPECT_EQ(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST, 4002 EXPECT_EQ(BlockingNetworkDelegate::ON_BEFORE_URL_REQUEST,
4011 network_delegate.stage_blocked_for_callback()); 4003 network_delegate.stage_blocked_for_callback());
4012 EXPECT_EQ(0, network_delegate.completed_requests()); 4004 EXPECT_EQ(0, network_delegate.completed_requests());
4013 // Cancel before callback. 4005 // Cancel before callback.
4014 r->Cancel(); 4006 r->Cancel();
4015 // Ensure that network delegate is notified. 4007 // Ensure that network delegate is notified.
4016 EXPECT_EQ(1, network_delegate.completed_requests()); 4008 EXPECT_EQ(1, network_delegate.completed_requests());
4017 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 4009 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
4018 EXPECT_EQ(ERR_ABORTED, r->status().error()); 4010 EXPECT_EQ(ERR_ABORTED, r->status().error());
4019 EXPECT_EQ(1, network_delegate.created_requests()); 4011 EXPECT_EQ(1, network_delegate.created_requests());
4020 EXPECT_EQ(0, network_delegate.destroyed_requests()); 4012 EXPECT_EQ(0, network_delegate.destroyed_requests());
4021 } 4013 }
4022 EXPECT_EQ(1, network_delegate.destroyed_requests()); 4014 EXPECT_EQ(1, network_delegate.destroyed_requests());
4023 } 4015 }
4024 4016
4025 // Tests that we can handle when a network request was canceled while we were 4017 // Tests that we can handle when a network request was canceled while we were
4026 // waiting for the network delegate. 4018 // waiting for the network delegate.
4027 // Part 2: Request is cancelled while waiting for OnBeforeSendHeaders callback. 4019 // Part 2: Request is cancelled while waiting for OnBeforeSendHeaders callback.
4028 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting2) { 4020 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting2) {
4029 ASSERT_TRUE(test_server_.Start()); 4021 ASSERT_TRUE(http_test_server()->Start());
4030 4022
4031 TestDelegate d; 4023 TestDelegate d;
4032 BlockingNetworkDelegate network_delegate( 4024 BlockingNetworkDelegate network_delegate(
4033 BlockingNetworkDelegate::USER_CALLBACK); 4025 BlockingNetworkDelegate::USER_CALLBACK);
4034 network_delegate.set_block_on( 4026 network_delegate.set_block_on(
4035 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS); 4027 BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS);
4036 4028
4037 TestURLRequestContext context(true); 4029 TestURLRequestContext context(true);
4038 context.set_network_delegate(&network_delegate); 4030 context.set_network_delegate(&network_delegate);
4039 context.Init(); 4031 context.Init();
4040 4032
4041 { 4033 {
4042 scoped_ptr<URLRequest> r(context.CreateRequest( 4034 scoped_ptr<URLRequest> r(context.CreateRequest(
4043 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 4035 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
4044 4036
4045 r->Start(); 4037 r->Start();
4046 base::RunLoop().Run(); 4038 base::RunLoop().Run();
4047 EXPECT_EQ(BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS, 4039 EXPECT_EQ(BlockingNetworkDelegate::ON_BEFORE_SEND_HEADERS,
4048 network_delegate.stage_blocked_for_callback()); 4040 network_delegate.stage_blocked_for_callback());
4049 EXPECT_EQ(0, network_delegate.completed_requests()); 4041 EXPECT_EQ(0, network_delegate.completed_requests());
4050 // Cancel before callback. 4042 // Cancel before callback.
4051 r->Cancel(); 4043 r->Cancel();
4052 // Ensure that network delegate is notified. 4044 // Ensure that network delegate is notified.
4053 EXPECT_EQ(1, network_delegate.completed_requests()); 4045 EXPECT_EQ(1, network_delegate.completed_requests());
4054 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 4046 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
4055 EXPECT_EQ(ERR_ABORTED, r->status().error()); 4047 EXPECT_EQ(ERR_ABORTED, r->status().error());
4056 EXPECT_EQ(1, network_delegate.created_requests()); 4048 EXPECT_EQ(1, network_delegate.created_requests());
4057 EXPECT_EQ(0, network_delegate.destroyed_requests()); 4049 EXPECT_EQ(0, network_delegate.destroyed_requests());
4058 } 4050 }
4059 EXPECT_EQ(1, network_delegate.destroyed_requests()); 4051 EXPECT_EQ(1, network_delegate.destroyed_requests());
4060 } 4052 }
4061 4053
4062 // Tests that we can handle when a network request was canceled while we were 4054 // Tests that we can handle when a network request was canceled while we were
4063 // waiting for the network delegate. 4055 // waiting for the network delegate.
4064 // Part 3: Request is cancelled while waiting for OnHeadersReceived callback. 4056 // Part 3: Request is cancelled while waiting for OnHeadersReceived callback.
4065 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting3) { 4057 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting3) {
4066 ASSERT_TRUE(test_server_.Start()); 4058 ASSERT_TRUE(http_test_server()->Start());
4067 4059
4068 TestDelegate d; 4060 TestDelegate d;
4069 BlockingNetworkDelegate network_delegate( 4061 BlockingNetworkDelegate network_delegate(
4070 BlockingNetworkDelegate::USER_CALLBACK); 4062 BlockingNetworkDelegate::USER_CALLBACK);
4071 network_delegate.set_block_on(BlockingNetworkDelegate::ON_HEADERS_RECEIVED); 4063 network_delegate.set_block_on(BlockingNetworkDelegate::ON_HEADERS_RECEIVED);
4072 4064
4073 TestURLRequestContext context(true); 4065 TestURLRequestContext context(true);
4074 context.set_network_delegate(&network_delegate); 4066 context.set_network_delegate(&network_delegate);
4075 context.Init(); 4067 context.Init();
4076 4068
4077 { 4069 {
4078 scoped_ptr<URLRequest> r(context.CreateRequest( 4070 scoped_ptr<URLRequest> r(context.CreateRequest(
4079 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 4071 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
4080 4072
4081 r->Start(); 4073 r->Start();
4082 base::RunLoop().Run(); 4074 base::RunLoop().Run();
4083 EXPECT_EQ(BlockingNetworkDelegate::ON_HEADERS_RECEIVED, 4075 EXPECT_EQ(BlockingNetworkDelegate::ON_HEADERS_RECEIVED,
4084 network_delegate.stage_blocked_for_callback()); 4076 network_delegate.stage_blocked_for_callback());
4085 EXPECT_EQ(0, network_delegate.completed_requests()); 4077 EXPECT_EQ(0, network_delegate.completed_requests());
4086 // Cancel before callback. 4078 // Cancel before callback.
4087 r->Cancel(); 4079 r->Cancel();
4088 // Ensure that network delegate is notified. 4080 // Ensure that network delegate is notified.
4089 EXPECT_EQ(1, network_delegate.completed_requests()); 4081 EXPECT_EQ(1, network_delegate.completed_requests());
4090 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 4082 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
4091 EXPECT_EQ(ERR_ABORTED, r->status().error()); 4083 EXPECT_EQ(ERR_ABORTED, r->status().error());
4092 EXPECT_EQ(1, network_delegate.created_requests()); 4084 EXPECT_EQ(1, network_delegate.created_requests());
4093 EXPECT_EQ(0, network_delegate.destroyed_requests()); 4085 EXPECT_EQ(0, network_delegate.destroyed_requests());
4094 } 4086 }
4095 EXPECT_EQ(1, network_delegate.destroyed_requests()); 4087 EXPECT_EQ(1, network_delegate.destroyed_requests());
4096 } 4088 }
4097 4089
4098 // Tests that we can handle when a network request was canceled while we were 4090 // Tests that we can handle when a network request was canceled while we were
4099 // waiting for the network delegate. 4091 // waiting for the network delegate.
4100 // Part 4: Request is cancelled while waiting for OnAuthRequired callback. 4092 // Part 4: Request is cancelled while waiting for OnAuthRequired callback.
4101 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting4) { 4093 TEST_F(URLRequestTestHTTP, NetworkDelegateCancelWhileWaiting4) {
4102 ASSERT_TRUE(test_server_.Start()); 4094 ASSERT_TRUE(http_test_server()->Start());
4103 4095
4104 TestDelegate d; 4096 TestDelegate d;
4105 BlockingNetworkDelegate network_delegate( 4097 BlockingNetworkDelegate network_delegate(
4106 BlockingNetworkDelegate::USER_CALLBACK); 4098 BlockingNetworkDelegate::USER_CALLBACK);
4107 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED); 4099 network_delegate.set_block_on(BlockingNetworkDelegate::ON_AUTH_REQUIRED);
4108 4100
4109 TestURLRequestContext context(true); 4101 TestURLRequestContext context(true);
4110 context.set_network_delegate(&network_delegate); 4102 context.set_network_delegate(&network_delegate);
4111 context.Init(); 4103 context.Init();
4112 4104
4113 { 4105 {
4114 scoped_ptr<URLRequest> r(context.CreateRequest( 4106 scoped_ptr<URLRequest> r(context.CreateRequest(
4115 test_server_.GetURL("auth-basic"), DEFAULT_PRIORITY, &d)); 4107 http_test_server()->GetURL("/auth-basic"), DEFAULT_PRIORITY, &d));
4116 4108
4117 r->Start(); 4109 r->Start();
4118 base::RunLoop().Run(); 4110 base::RunLoop().Run();
4119 EXPECT_EQ(BlockingNetworkDelegate::ON_AUTH_REQUIRED, 4111 EXPECT_EQ(BlockingNetworkDelegate::ON_AUTH_REQUIRED,
4120 network_delegate.stage_blocked_for_callback()); 4112 network_delegate.stage_blocked_for_callback());
4121 EXPECT_EQ(0, network_delegate.completed_requests()); 4113 EXPECT_EQ(0, network_delegate.completed_requests());
4122 // Cancel before callback. 4114 // Cancel before callback.
4123 r->Cancel(); 4115 r->Cancel();
4124 // Ensure that network delegate is notified. 4116 // Ensure that network delegate is notified.
4125 EXPECT_EQ(1, network_delegate.completed_requests()); 4117 EXPECT_EQ(1, network_delegate.completed_requests());
4126 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 4118 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
4127 EXPECT_EQ(ERR_ABORTED, r->status().error()); 4119 EXPECT_EQ(ERR_ABORTED, r->status().error());
4128 EXPECT_EQ(1, network_delegate.created_requests()); 4120 EXPECT_EQ(1, network_delegate.created_requests());
4129 EXPECT_EQ(0, network_delegate.destroyed_requests()); 4121 EXPECT_EQ(0, network_delegate.destroyed_requests());
4130 } 4122 }
4131 EXPECT_EQ(1, network_delegate.destroyed_requests()); 4123 EXPECT_EQ(1, network_delegate.destroyed_requests());
4132 } 4124 }
4133 4125
4134 // In this unit test, we're using the HTTPTestServer as a proxy server and 4126 namespace {
4127
4128 scoped_ptr<test_server::HttpResponse> HandleServerAuthConnect(
4129 const test_server::HttpRequest& request) {
4130 if (request.headers.find("Host") == request.headers.end() ||
4131 request.headers.at("Host") != "www.server-auth.com" ||
4132 request.method != test_server::METHOD_CONNECT) {
4133 return nullptr;
4134 }
4135
4136 scoped_ptr<test_server::BasicHttpResponse> http_response(
4137 new test_server::BasicHttpResponse);
4138 http_response->set_code(HTTP_UNAUTHORIZED);
4139 http_response->AddCustomHeader("WWW-Authenticate",
4140 "Basic realm=\"WallyWorld\"");
4141 return http_response.Pass();
4142 }
4143
4144 } // namespace
4145
4146 // In this unit test, we're using the EmbeddedTestServer as a proxy server and
4135 // issuing a CONNECT request with the magic host name "www.server-auth.com". 4147 // issuing a CONNECT request with the magic host name "www.server-auth.com".
4136 // The HTTPTestServer will return a 401 response, which we should balk at. 4148 // The EmbeddedTestServer will return a 401 response, which we should balk at.
4137 TEST_F(URLRequestTestHTTP, UnexpectedServerAuthTest) { 4149 TEST_F(URLRequestTestHTTP, UnexpectedServerAuthTest) {
4138 ASSERT_TRUE(test_server_.Start()); 4150 http_test_server()->RegisterRequestHandler(
4151 base::Bind(&HandleServerAuthConnect));
4152 ASSERT_TRUE(http_test_server()->Start());
4139 4153
4140 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 4154 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
4141 TestURLRequestContextWithProxy context( 4155 TestURLRequestContextWithProxy context(
4142 test_server_.host_port_pair().ToString(), &network_delegate); 4156 http_test_server()->host_port_pair().ToString(), &network_delegate);
4143 4157
4144 TestDelegate d; 4158 TestDelegate d;
4145 { 4159 {
4146 scoped_ptr<URLRequest> r(context.CreateRequest( 4160 scoped_ptr<URLRequest> r(context.CreateRequest(
4147 GURL("https://www.server-auth.com/"), DEFAULT_PRIORITY, &d)); 4161 GURL("https://www.server-auth.com/"), DEFAULT_PRIORITY, &d));
4148 4162
4149 r->Start(); 4163 r->Start();
4150 EXPECT_TRUE(r->is_pending()); 4164 EXPECT_TRUE(r->is_pending());
4151 4165
4152 base::RunLoop().Run(); 4166 base::RunLoop().Run();
4153 4167
4154 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 4168 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
4155 // The proxy server is not set before failure. 4169 // The proxy server is not set before failure.
4156 EXPECT_TRUE(r->proxy_server().IsEmpty()); 4170 EXPECT_TRUE(r->proxy_server().IsEmpty());
4157 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, r->status().error()); 4171 EXPECT_EQ(ERR_TUNNEL_CONNECTION_FAILED, r->status().error());
4158 } 4172 }
4159 } 4173 }
4160 4174
4161 TEST_F(URLRequestTestHTTP, GetTest_NoCache) { 4175 TEST_F(URLRequestTestHTTP, GetTest_NoCache) {
4162 ASSERT_TRUE(test_server_.Start()); 4176 ASSERT_TRUE(http_test_server()->Start());
4163 4177
4164 TestDelegate d; 4178 TestDelegate d;
4165 { 4179 {
4166 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 4180 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
4167 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 4181 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
4168 4182
4169 r->Start(); 4183 r->Start();
4170 EXPECT_TRUE(r->is_pending()); 4184 EXPECT_TRUE(r->is_pending());
4171 4185
4172 base::RunLoop().Run(); 4186 base::RunLoop().Run();
4173 4187
4174 EXPECT_EQ(1, d.response_started_count()); 4188 EXPECT_EQ(1, d.response_started_count());
4175 EXPECT_FALSE(d.received_data_before_response()); 4189 EXPECT_FALSE(d.received_data_before_response());
4176 EXPECT_NE(0, d.bytes_received()); 4190 EXPECT_NE(0, d.bytes_received());
4177 EXPECT_EQ(test_server_.host_port_pair().host(), 4191 EXPECT_EQ(http_test_server()->host_port_pair().host(),
4178 r->GetSocketAddress().host()); 4192 r->GetSocketAddress().host());
4179 EXPECT_EQ(test_server_.host_port_pair().port(), 4193 EXPECT_EQ(http_test_server()->host_port_pair().port(),
4180 r->GetSocketAddress().port()); 4194 r->GetSocketAddress().port());
4181 4195
4182 // TODO(eroman): Add back the NetLog tests... 4196 // TODO(eroman): Add back the NetLog tests...
4183 } 4197 }
4184 } 4198 }
4185 4199
4186 // This test has the server send a large number of cookies to the client. 4200 // This test has the server send a large number of cookies to the client.
4187 // To ensure that no number of cookies causes a crash, a galloping binary 4201 // To ensure that no number of cookies causes a crash, a galloping binary
4188 // search is used to estimate that maximum number of cookies that are accepted 4202 // search is used to estimate that maximum number of cookies that are accepted
4189 // by the browser. Beyond the maximum number, the request will fail with 4203 // by the browser. Beyond the maximum number, the request will fail with
4190 // ERR_RESPONSE_HEADERS_TOO_BIG. 4204 // ERR_RESPONSE_HEADERS_TOO_BIG.
4191 #if defined(OS_WIN) 4205 #if defined(OS_WIN)
4192 // http://crbug.com/177916 4206 // http://crbug.com/177916
4193 #define MAYBE_GetTest_ManyCookies DISABLED_GetTest_ManyCookies 4207 #define MAYBE_GetTest_ManyCookies DISABLED_GetTest_ManyCookies
4194 #else 4208 #else
4195 #define MAYBE_GetTest_ManyCookies GetTest_ManyCookies 4209 #define MAYBE_GetTest_ManyCookies GetTest_ManyCookies
4196 #endif // defined(OS_WIN) 4210 #endif // defined(OS_WIN)
4197 TEST_F(URLRequestTestHTTP, MAYBE_GetTest_ManyCookies) { 4211 TEST_F(URLRequestTestHTTP, MAYBE_GetTest_ManyCookies) {
4198 ASSERT_TRUE(test_server_.Start()); 4212 ASSERT_TRUE(http_test_server()->Start());
4199 4213
4200 int lower_bound = 0; 4214 int lower_bound = 0;
4201 int upper_bound = 1; 4215 int upper_bound = 1;
4202 4216
4203 // Double the number of cookies until the response header limits are 4217 // Double the number of cookies until the response header limits are
4204 // exceeded. 4218 // exceeded.
4205 while (DoManyCookiesRequest(upper_bound)) { 4219 while (DoManyCookiesRequest(upper_bound)) {
4206 lower_bound = upper_bound; 4220 lower_bound = upper_bound;
4207 upper_bound *= 2; 4221 upper_bound *= 2;
4208 ASSERT_LT(upper_bound, 1000000); 4222 ASSERT_LT(upper_bound, 1000000);
(...skipping 10 matching lines...) Expand all
4219 4233
4220 if (DoManyCookiesRequest(num_cookies)) 4234 if (DoManyCookiesRequest(num_cookies))
4221 lower_bound = num_cookies; 4235 lower_bound = num_cookies;
4222 else 4236 else
4223 upper_bound = num_cookies; 4237 upper_bound = num_cookies;
4224 } 4238 }
4225 // Success: the test did not crash. 4239 // Success: the test did not crash.
4226 } 4240 }
4227 4241
4228 TEST_F(URLRequestTestHTTP, GetTest) { 4242 TEST_F(URLRequestTestHTTP, GetTest) {
4229 ASSERT_TRUE(test_server_.Start()); 4243 ASSERT_TRUE(http_test_server()->Start());
4230 4244
4231 TestDelegate d; 4245 TestDelegate d;
4232 { 4246 {
4233 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 4247 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
4234 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 4248 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
4235 4249
4236 r->Start(); 4250 r->Start();
4237 EXPECT_TRUE(r->is_pending()); 4251 EXPECT_TRUE(r->is_pending());
4238 4252
4239 base::RunLoop().Run(); 4253 base::RunLoop().Run();
4240 4254
4241 EXPECT_EQ(1, d.response_started_count()); 4255 EXPECT_EQ(1, d.response_started_count());
4242 EXPECT_FALSE(d.received_data_before_response()); 4256 EXPECT_FALSE(d.received_data_before_response());
4243 EXPECT_NE(0, d.bytes_received()); 4257 EXPECT_NE(0, d.bytes_received());
4244 EXPECT_EQ(test_server_.host_port_pair().host(), 4258 EXPECT_EQ(http_test_server()->host_port_pair().host(),
4245 r->GetSocketAddress().host()); 4259 r->GetSocketAddress().host());
4246 EXPECT_EQ(test_server_.host_port_pair().port(), 4260 EXPECT_EQ(http_test_server()->host_port_pair().port(),
4247 r->GetSocketAddress().port()); 4261 r->GetSocketAddress().port());
4248 } 4262 }
4249 } 4263 }
4250 4264
4251 TEST_F(URLRequestTestHTTP, GetTest_GetFullRequestHeaders) { 4265 TEST_F(URLRequestTestHTTP, GetTest_GetFullRequestHeaders) {
4252 ASSERT_TRUE(test_server_.Start()); 4266 ASSERT_TRUE(http_test_server()->Start());
4253 4267
4254 TestDelegate d; 4268 TestDelegate d;
4255 { 4269 {
4256 GURL test_url(test_server_.GetURL(std::string())); 4270 GURL test_url(http_test_server()->GetURL("/defaultresponse"));
4257 scoped_ptr<URLRequest> r( 4271 scoped_ptr<URLRequest> r(
4258 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 4272 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
4259 4273
4260 HttpRequestHeaders headers; 4274 HttpRequestHeaders headers;
4261 EXPECT_FALSE(r->GetFullRequestHeaders(&headers)); 4275 EXPECT_FALSE(r->GetFullRequestHeaders(&headers));
4262 4276
4263 r->Start(); 4277 r->Start();
4264 EXPECT_TRUE(r->is_pending()); 4278 EXPECT_TRUE(r->is_pending());
4265 4279
4266 base::RunLoop().Run(); 4280 base::RunLoop().Run();
4267 4281
4268 EXPECT_EQ(1, d.response_started_count()); 4282 EXPECT_EQ(1, d.response_started_count());
4269 EXPECT_FALSE(d.received_data_before_response()); 4283 EXPECT_FALSE(d.received_data_before_response());
4270 EXPECT_NE(0, d.bytes_received()); 4284 EXPECT_NE(0, d.bytes_received());
4271 EXPECT_EQ(test_server_.host_port_pair().host(), 4285 EXPECT_EQ(http_test_server()->host_port_pair().host(),
4272 r->GetSocketAddress().host()); 4286 r->GetSocketAddress().host());
4273 EXPECT_EQ(test_server_.host_port_pair().port(), 4287 EXPECT_EQ(http_test_server()->host_port_pair().port(),
4274 r->GetSocketAddress().port()); 4288 r->GetSocketAddress().port());
4275 4289
4276 EXPECT_TRUE(d.have_full_request_headers()); 4290 EXPECT_TRUE(d.have_full_request_headers());
4277 CheckFullRequestHeaders(d.full_request_headers(), test_url); 4291 CheckFullRequestHeaders(d.full_request_headers(), test_url);
4278 } 4292 }
4279 } 4293 }
4280 4294
4281 TEST_F(URLRequestTestHTTP, GetTestLoadTiming) { 4295 TEST_F(URLRequestTestHTTP, GetTestLoadTiming) {
4282 ASSERT_TRUE(test_server_.Start()); 4296 ASSERT_TRUE(http_test_server()->Start());
4283 4297
4284 TestDelegate d; 4298 TestDelegate d;
4285 { 4299 {
4286 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 4300 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
4287 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 4301 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
4288 4302
4289 r->Start(); 4303 r->Start();
4290 EXPECT_TRUE(r->is_pending()); 4304 EXPECT_TRUE(r->is_pending());
4291 4305
4292 base::RunLoop().Run(); 4306 base::RunLoop().Run();
4293 4307
4294 LoadTimingInfo load_timing_info; 4308 LoadTimingInfo load_timing_info;
4295 r->GetLoadTimingInfo(&load_timing_info); 4309 r->GetLoadTimingInfo(&load_timing_info);
4296 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); 4310 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES);
4297 4311
4298 EXPECT_EQ(1, d.response_started_count()); 4312 EXPECT_EQ(1, d.response_started_count());
4299 EXPECT_FALSE(d.received_data_before_response()); 4313 EXPECT_FALSE(d.received_data_before_response());
4300 EXPECT_NE(0, d.bytes_received()); 4314 EXPECT_NE(0, d.bytes_received());
4301 EXPECT_EQ(test_server_.host_port_pair().host(), 4315 EXPECT_EQ(http_test_server()->host_port_pair().host(),
4302 r->GetSocketAddress().host()); 4316 r->GetSocketAddress().host());
4303 EXPECT_EQ(test_server_.host_port_pair().port(), 4317 EXPECT_EQ(http_test_server()->host_port_pair().port(),
4304 r->GetSocketAddress().port()); 4318 r->GetSocketAddress().port());
4305 } 4319 }
4306 } 4320 }
4307 4321
4322 // TODO(droger): Support SpawnedTestServer on iOS (see http://crbug.com/148666).
4323 #if !defined(OS_IOS)
4308 TEST_F(URLRequestTestHTTP, GetZippedTest) { 4324 TEST_F(URLRequestTestHTTP, GetZippedTest) {
4309 ASSERT_TRUE(test_server_.Start()); 4325 SpawnedTestServer test_server(SpawnedTestServer::TYPE_HTTP,
4326 SpawnedTestServer::kLocalhost,
4327 base::FilePath(kTestFilePath));
4328
4329 ASSERT_TRUE(test_server.Start());
4310 4330
4311 // Parameter that specifies the Content-Length field in the response: 4331 // Parameter that specifies the Content-Length field in the response:
4312 // C - Compressed length. 4332 // C - Compressed length.
4313 // U - Uncompressed length. 4333 // U - Uncompressed length.
4314 // L - Large length (larger than both C & U). 4334 // L - Large length (larger than both C & U).
4315 // M - Medium length (between C & U). 4335 // M - Medium length (between C & U).
4316 // S - Small length (smaller than both C & U). 4336 // S - Small length (smaller than both C & U).
4317 const char test_parameters[] = "CULMS"; 4337 const char test_parameters[] = "CULMS";
4318 const int num_tests = arraysize(test_parameters)- 1; // Skip NULL. 4338 const int num_tests = arraysize(test_parameters)- 1; // Skip NULL.
4319 // C & U should be OK. 4339 // C & U should be OK.
4320 // L & M are larger than the data sent, and show an error. 4340 // L & M are larger than the data sent, and show an error.
4321 // S has too little data, but we seem to accept it. 4341 // S has too little data, but we seem to accept it.
4322 const bool test_expect_success[num_tests] = 4342 const bool test_expect_success[num_tests] =
4323 { true, true, false, false, true }; 4343 { true, true, false, false, true };
4324 4344
4325 for (int i = 0; i < num_tests ; i++) { 4345 for (int i = 0; i < num_tests ; i++) {
4326 TestDelegate d; 4346 TestDelegate d;
4327 { 4347 {
4328 std::string test_file = 4348 std::string test_file = base::StringPrintf(
4329 base::StringPrintf("compressedfiles/BullRunSpeech.txt?%c", 4349 "compressedfiles/BullRunSpeech.txt?%c", test_parameters[i]);
4330 test_parameters[i]);
4331 4350
4332 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 4351 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
4333 TestURLRequestContext context(true); 4352 TestURLRequestContext context(true);
4334 context.set_network_delegate(&network_delegate); 4353 context.set_network_delegate(&network_delegate);
4335 context.Init(); 4354 context.Init();
4336 4355
4337 scoped_ptr<URLRequest> r(context.CreateRequest( 4356 scoped_ptr<URLRequest> r(context.CreateRequest(
4338 test_server_.GetURL(test_file), DEFAULT_PRIORITY, &d)); 4357 test_server.GetURL(test_file), DEFAULT_PRIORITY, &d));
4339 r->Start(); 4358 r->Start();
4340 EXPECT_TRUE(r->is_pending()); 4359 EXPECT_TRUE(r->is_pending());
4341 4360
4342 base::RunLoop().Run(); 4361 base::RunLoop().Run();
4343 4362
4344 EXPECT_EQ(1, d.response_started_count()); 4363 EXPECT_EQ(1, d.response_started_count());
4345 EXPECT_FALSE(d.received_data_before_response()); 4364 EXPECT_FALSE(d.received_data_before_response());
4346 VLOG(1) << " Received " << d.bytes_received() << " bytes" 4365 VLOG(1) << " Received " << d.bytes_received() << " bytes"
4347 << " status = " << r->status().status() 4366 << " status = " << r->status().status()
4348 << " error = " << r->status().error(); 4367 << " error = " << r->status().error();
4349 if (test_expect_success[i]) { 4368 if (test_expect_success[i]) {
4350 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()) 4369 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status())
4351 << " Parameter = \"" << test_file << "\""; 4370 << " Parameter = \"" << test_file << "\"";
4352 } else { 4371 } else {
4353 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 4372 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
4354 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, r->status().error()) 4373 EXPECT_EQ(ERR_CONTENT_LENGTH_MISMATCH, r->status().error())
4355 << " Parameter = \"" << test_file << "\""; 4374 << " Parameter = \"" << test_file << "\"";
4356 } 4375 }
4357 } 4376 }
4358 } 4377 }
4359 } 4378 }
4379 #endif // !defined(OS_IOS)
4360 4380
4361 TEST_F(URLRequestTestHTTP, NetworkQualityEstimator) { 4381 TEST_F(URLRequestTestHTTP, NetworkQualityEstimator) {
4362 ASSERT_TRUE(test_server_.Start()); 4382 ASSERT_TRUE(http_test_server()->Start());
4363 // Enable requests to local host to be used for network quality estimation. 4383 // Enable requests to local host to be used for network quality estimation.
4364 std::map<std::string, std::string> variation_params; 4384 std::map<std::string, std::string> variation_params;
4365 NetworkQualityEstimator estimator(scoped_ptr<net::ExternalEstimateProvider>(), 4385 NetworkQualityEstimator estimator(scoped_ptr<net::ExternalEstimateProvider>(),
4366 variation_params, true, true); 4386 variation_params, true, true);
4367 4387
4368 TestDelegate d; 4388 TestDelegate d;
4369 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 4389 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
4370 TestURLRequestContext context(true); 4390 TestURLRequestContext context(true);
4371 context.set_network_quality_estimator(&estimator); 4391 context.set_network_quality_estimator(&estimator);
4372 context.set_network_delegate(&network_delegate); 4392 context.set_network_delegate(&network_delegate);
4373 context.Init(); 4393 context.Init();
4374 4394
4375 std::string url = "echo.html"; 4395 std::string url = "/defaultresponse";
4376 4396
4377 scoped_ptr<URLRequest> r( 4397 scoped_ptr<URLRequest> r(context.CreateRequest(
4378 context.CreateRequest(test_server_.GetURL(url), DEFAULT_PRIORITY, &d)); 4398 http_test_server()->GetURL(url), DEFAULT_PRIORITY, &d));
4379 r->Start(); 4399 r->Start();
4380 4400
4381 base::RunLoop().Run(); 4401 base::RunLoop().Run();
4382 4402
4383 base::TimeDelta rtt; 4403 base::TimeDelta rtt;
4384 int32_t kbps; 4404 int32_t kbps;
4385 EXPECT_TRUE(estimator.GetRTTEstimate(&rtt)); 4405 EXPECT_TRUE(estimator.GetRTTEstimate(&rtt));
4386 EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps)); 4406 EXPECT_TRUE(estimator.GetDownlinkThroughputKbpsEstimate(&kbps));
4387 EXPECT_GE(rtt, base::TimeDelta()); 4407 EXPECT_GE(rtt, base::TimeDelta());
4388 EXPECT_LT(rtt, base::TimeDelta::Max()); 4408 EXPECT_LT(rtt, base::TimeDelta::Max());
4389 EXPECT_GT(kbps, 0); 4409 EXPECT_GT(kbps, 0);
4390 4410
4391 // Verify that histograms are not populated. They should populate only when 4411 // Verify that histograms are not populated. They should populate only when
4392 // there is a change in ConnectionType. 4412 // there is a change in ConnectionType.
4393 base::HistogramTester histogram_tester; 4413 base::HistogramTester histogram_tester;
4394 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 0); 4414 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 0);
4395 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 0); 4415 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 0);
4396 4416
4397 NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( 4417 NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests(
4398 NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI); 4418 NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI);
4399 base::MessageLoop::current()->RunUntilIdle(); 4419 base::MessageLoop::current()->RunUntilIdle();
4400 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 1); 4420 histogram_tester.ExpectTotalCount("NQE.PeakKbps.Unknown", 1);
4401 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 1); 4421 histogram_tester.ExpectTotalCount("NQE.FastestRTT.Unknown", 1);
4402 } 4422 }
4403 4423
4404 TEST_F(URLRequestTestHTTP, RedirectLoadTiming) { 4424 TEST_F(URLRequestTestHTTP, RedirectLoadTiming) {
4405 ASSERT_TRUE(test_server_.Start()); 4425 ASSERT_TRUE(http_test_server()->Start());
4406 4426
4407 GURL destination_url = test_server_.GetURL(std::string()); 4427 GURL destination_url = http_test_server()->GetURL("/");
4408 GURL original_url = 4428 GURL original_url =
4409 test_server_.GetURL("server-redirect?" + destination_url.spec()); 4429 http_test_server()->GetURL("/server-redirect?" + destination_url.spec());
4410 TestDelegate d; 4430 TestDelegate d;
4411 scoped_ptr<URLRequest> req( 4431 scoped_ptr<URLRequest> req(
4412 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 4432 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
4413 req->Start(); 4433 req->Start();
4414 base::RunLoop().Run(); 4434 base::RunLoop().Run();
4415 4435
4416 EXPECT_EQ(1, d.response_started_count()); 4436 EXPECT_EQ(1, d.response_started_count());
4417 EXPECT_EQ(1, d.received_redirect_count()); 4437 EXPECT_EQ(1, d.received_redirect_count());
4418 EXPECT_EQ(destination_url, req->url()); 4438 EXPECT_EQ(destination_url, req->url());
4419 EXPECT_EQ(original_url, req->original_url()); 4439 EXPECT_EQ(original_url, req->original_url());
(...skipping 14 matching lines...) Expand all
4434 // Check that a new socket was used on redirect, since the server does not 4454 // Check that a new socket was used on redirect, since the server does not
4435 // supposed keep-alive sockets, and that the times before the redirect are 4455 // supposed keep-alive sockets, and that the times before the redirect are
4436 // before the ones recorded for the second request. 4456 // before the ones recorded for the second request.
4437 EXPECT_NE(load_timing_info_before_redirect.socket_log_id, 4457 EXPECT_NE(load_timing_info_before_redirect.socket_log_id,
4438 load_timing_info.socket_log_id); 4458 load_timing_info.socket_log_id);
4439 EXPECT_LE(load_timing_info_before_redirect.receive_headers_end, 4459 EXPECT_LE(load_timing_info_before_redirect.receive_headers_end,
4440 load_timing_info.connect_timing.connect_start); 4460 load_timing_info.connect_timing.connect_start);
4441 } 4461 }
4442 4462
4443 TEST_F(URLRequestTestHTTP, MultipleRedirectTest) { 4463 TEST_F(URLRequestTestHTTP, MultipleRedirectTest) {
4444 ASSERT_TRUE(test_server_.Start()); 4464 ASSERT_TRUE(http_test_server()->Start());
4445 4465
4446 GURL destination_url = test_server_.GetURL(std::string()); 4466 GURL destination_url = http_test_server()->GetURL("/");
4447 GURL middle_redirect_url = 4467 GURL middle_redirect_url =
4448 test_server_.GetURL("server-redirect?" + destination_url.spec()); 4468 http_test_server()->GetURL("/server-redirect?" + destination_url.spec());
4449 GURL original_url = test_server_.GetURL( 4469 GURL original_url = http_test_server()->GetURL("/server-redirect?" +
4450 "server-redirect?" + middle_redirect_url.spec()); 4470 middle_redirect_url.spec());
4451 TestDelegate d; 4471 TestDelegate d;
4452 scoped_ptr<URLRequest> req( 4472 scoped_ptr<URLRequest> req(
4453 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 4473 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
4454 req->Start(); 4474 req->Start();
4455 base::RunLoop().Run(); 4475 base::RunLoop().Run();
4456 4476
4457 EXPECT_EQ(1, d.response_started_count()); 4477 EXPECT_EQ(1, d.response_started_count());
4458 EXPECT_EQ(2, d.received_redirect_count()); 4478 EXPECT_EQ(2, d.received_redirect_count());
4459 EXPECT_EQ(destination_url, req->url()); 4479 EXPECT_EQ(destination_url, req->url());
4460 EXPECT_EQ(original_url, req->original_url()); 4480 EXPECT_EQ(original_url, req->original_url());
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
4761 TestDelegate::OnReadCompleted(request, bytes_read); 4781 TestDelegate::OnReadCompleted(request, bytes_read);
4762 } 4782 }
4763 4783
4764 const CancelStage cancel_stage_; 4784 const CancelStage cancel_stage_;
4765 4785
4766 DISALLOW_COPY_AND_ASSIGN(AsyncLoggingUrlRequestDelegate); 4786 DISALLOW_COPY_AND_ASSIGN(AsyncLoggingUrlRequestDelegate);
4767 }; 4787 };
4768 4788
4769 // Tests handling of delegate info before a request starts. 4789 // Tests handling of delegate info before a request starts.
4770 TEST_F(URLRequestTestHTTP, DelegateInfoBeforeStart) { 4790 TEST_F(URLRequestTestHTTP, DelegateInfoBeforeStart) {
4771 ASSERT_TRUE(test_server_.Start()); 4791 ASSERT_TRUE(http_test_server()->Start());
4772 4792
4773 TestDelegate request_delegate; 4793 TestDelegate request_delegate;
4774 TestURLRequestContext context(true); 4794 TestURLRequestContext context(true);
4775 context.set_network_delegate(NULL); 4795 context.set_network_delegate(NULL);
4776 context.set_net_log(&net_log_); 4796 context.set_net_log(&net_log_);
4777 context.Init(); 4797 context.Init();
4778 4798
4779 { 4799 {
4780 scoped_ptr<URLRequest> r( 4800 scoped_ptr<URLRequest> r(
4781 context.CreateRequest(test_server_.GetURL("empty.html"), 4801 context.CreateRequest(http_test_server()->GetURL("/defaultresponse"),
4782 DEFAULT_PRIORITY, &request_delegate)); 4802 DEFAULT_PRIORITY, &request_delegate));
4783 LoadStateWithParam load_state = r->GetLoadState(); 4803 LoadStateWithParam load_state = r->GetLoadState();
4784 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state); 4804 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
4785 EXPECT_EQ(base::string16(), load_state.param); 4805 EXPECT_EQ(base::string16(), load_state.param);
4786 4806
4787 AsyncDelegateLogger::Run( 4807 AsyncDelegateLogger::Run(
4788 r.get(), 4808 r.get(),
4789 LOAD_STATE_WAITING_FOR_DELEGATE, 4809 LOAD_STATE_WAITING_FOR_DELEGATE,
4790 LOAD_STATE_WAITING_FOR_DELEGATE, 4810 LOAD_STATE_WAITING_FOR_DELEGATE,
4791 LOAD_STATE_IDLE, 4811 LOAD_STATE_IDLE,
(...skipping 15 matching lines...) Expand all
4807 4827
4808 log_position = AsyncDelegateLogger::CheckDelegateInfo(entries, log_position); 4828 log_position = AsyncDelegateLogger::CheckDelegateInfo(entries, log_position);
4809 4829
4810 // Nothing else should add any delegate info to the request. 4830 // Nothing else should add any delegate info to the request.
4811 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 4831 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
4812 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 4832 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
4813 } 4833 }
4814 4834
4815 // Tests handling of delegate info from a network delegate. 4835 // Tests handling of delegate info from a network delegate.
4816 TEST_F(URLRequestTestHTTP, NetworkDelegateInfo) { 4836 TEST_F(URLRequestTestHTTP, NetworkDelegateInfo) {
4817 ASSERT_TRUE(test_server_.Start()); 4837 ASSERT_TRUE(http_test_server()->Start());
4818 4838
4819 TestDelegate request_delegate; 4839 TestDelegate request_delegate;
4820 AsyncLoggingNetworkDelegate network_delegate; 4840 AsyncLoggingNetworkDelegate network_delegate;
4821 TestURLRequestContext context(true); 4841 TestURLRequestContext context(true);
4822 context.set_network_delegate(&network_delegate); 4842 context.set_network_delegate(&network_delegate);
4823 context.set_net_log(&net_log_); 4843 context.set_net_log(&net_log_);
4824 context.Init(); 4844 context.Init();
4825 4845
4826 { 4846 {
4827 scoped_ptr<URLRequest> r( 4847 scoped_ptr<URLRequest> r(
4828 context.CreateRequest(test_server_.GetURL("simple.html"), 4848 context.CreateRequest(http_test_server()->GetURL("/simple.html"),
4829 DEFAULT_PRIORITY, &request_delegate)); 4849 DEFAULT_PRIORITY, &request_delegate));
4830 LoadStateWithParam load_state = r->GetLoadState(); 4850 LoadStateWithParam load_state = r->GetLoadState();
4831 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state); 4851 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
4832 EXPECT_EQ(base::string16(), load_state.param); 4852 EXPECT_EQ(base::string16(), load_state.param);
4833 4853
4834 r->Start(); 4854 r->Start();
4835 base::RunLoop().Run(); 4855 base::RunLoop().Run();
4836 4856
4837 EXPECT_EQ(200, r->GetResponseCode()); 4857 EXPECT_EQ(200, r->GetResponseCode());
4838 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 4858 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
(...skipping 25 matching lines...) Expand all
4864 } 4884 }
4865 } 4885 }
4866 4886
4867 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 4887 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
4868 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 4888 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
4869 } 4889 }
4870 4890
4871 // Tests handling of delegate info from a network delegate in the case of an 4891 // Tests handling of delegate info from a network delegate in the case of an
4872 // HTTP redirect. 4892 // HTTP redirect.
4873 TEST_F(URLRequestTestHTTP, NetworkDelegateInfoRedirect) { 4893 TEST_F(URLRequestTestHTTP, NetworkDelegateInfoRedirect) {
4874 ASSERT_TRUE(test_server_.Start()); 4894 ASSERT_TRUE(http_test_server()->Start());
4875 4895
4876 TestDelegate request_delegate; 4896 TestDelegate request_delegate;
4877 AsyncLoggingNetworkDelegate network_delegate; 4897 AsyncLoggingNetworkDelegate network_delegate;
4878 TestURLRequestContext context(true); 4898 TestURLRequestContext context(true);
4879 context.set_network_delegate(&network_delegate); 4899 context.set_network_delegate(&network_delegate);
4880 context.set_net_log(&net_log_); 4900 context.set_net_log(&net_log_);
4881 context.Init(); 4901 context.Init();
4882 4902
4883 { 4903 {
4884 scoped_ptr<URLRequest> r(context.CreateRequest( 4904 scoped_ptr<URLRequest> r(context.CreateRequest(
4885 test_server_.GetURL("server-redirect?simple.html"), DEFAULT_PRIORITY, 4905 http_test_server()->GetURL("/server-redirect?simple.html"),
4886 &request_delegate)); 4906 DEFAULT_PRIORITY, &request_delegate));
4887 LoadStateWithParam load_state = r->GetLoadState(); 4907 LoadStateWithParam load_state = r->GetLoadState();
4888 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state); 4908 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
4889 EXPECT_EQ(base::string16(), load_state.param); 4909 EXPECT_EQ(base::string16(), load_state.param);
4890 4910
4891 r->Start(); 4911 r->Start();
4892 base::RunLoop().Run(); 4912 base::RunLoop().Run();
4893 4913
4894 EXPECT_EQ(200, r->GetResponseCode()); 4914 EXPECT_EQ(200, r->GetResponseCode());
4895 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 4915 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
4896 EXPECT_EQ(2, network_delegate.created_requests()); 4916 EXPECT_EQ(2, network_delegate.created_requests());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4946 EXPECT_EQ(NetLog::PHASE_END, entries[log_position].phase); 4966 EXPECT_EQ(NetLog::PHASE_END, entries[log_position].phase);
4947 } 4967 }
4948 4968
4949 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 4969 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
4950 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 4970 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
4951 } 4971 }
4952 4972
4953 // Tests handling of delegate info from a network delegate in the case of HTTP 4973 // Tests handling of delegate info from a network delegate in the case of HTTP
4954 // AUTH. 4974 // AUTH.
4955 TEST_F(URLRequestTestHTTP, NetworkDelegateInfoAuth) { 4975 TEST_F(URLRequestTestHTTP, NetworkDelegateInfoAuth) {
4956 ASSERT_TRUE(test_server_.Start()); 4976 ASSERT_TRUE(http_test_server()->Start());
4957 4977
4958 TestDelegate request_delegate; 4978 TestDelegate request_delegate;
4959 AsyncLoggingNetworkDelegate network_delegate; 4979 AsyncLoggingNetworkDelegate network_delegate;
4960 TestURLRequestContext context(true); 4980 TestURLRequestContext context(true);
4961 context.set_network_delegate(&network_delegate); 4981 context.set_network_delegate(&network_delegate);
4962 context.set_net_log(&net_log_); 4982 context.set_net_log(&net_log_);
4963 context.Init(); 4983 context.Init();
4964 4984
4965 { 4985 {
4966 scoped_ptr<URLRequest> r( 4986 scoped_ptr<URLRequest> r(
4967 context.CreateRequest(test_server_.GetURL("auth-basic"), 4987 context.CreateRequest(http_test_server()->GetURL("/auth-basic"),
4968 DEFAULT_PRIORITY, &request_delegate)); 4988 DEFAULT_PRIORITY, &request_delegate));
4969 LoadStateWithParam load_state = r->GetLoadState(); 4989 LoadStateWithParam load_state = r->GetLoadState();
4970 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state); 4990 EXPECT_EQ(LOAD_STATE_IDLE, load_state.state);
4971 EXPECT_EQ(base::string16(), load_state.param); 4991 EXPECT_EQ(base::string16(), load_state.param);
4972 4992
4973 r->Start(); 4993 r->Start();
4974 base::RunLoop().Run(); 4994 base::RunLoop().Run();
4975 4995
4976 EXPECT_EQ(200, r->GetResponseCode()); 4996 EXPECT_EQ(200, r->GetResponseCode());
4977 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 4997 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
(...skipping 25 matching lines...) Expand all
5003 if (i == 1) { 5023 if (i == 1) {
5004 log_position = AsyncDelegateLogger::ExpectBeforeNetworkEvents( 5024 log_position = AsyncDelegateLogger::ExpectBeforeNetworkEvents(
5005 entries, log_position + 1); 5025 entries, log_position + 1);
5006 } 5026 }
5007 } 5027 }
5008 5028
5009 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 5029 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
5010 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 5030 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
5011 } 5031 }
5012 5032
5033 // TODO(droger): Support SpawnedTestServer on iOS (see http://crbug.com/148666).
5034 #if !defined(OS_IOS)
5013 // Tests handling of delegate info from a URLRequest::Delegate. 5035 // Tests handling of delegate info from a URLRequest::Delegate.
5014 TEST_F(URLRequestTestHTTP, URLRequestDelegateInfo) { 5036 TEST_F(URLRequestTestHTTP, URLRequestDelegateInfo) {
5015 ASSERT_TRUE(test_server_.Start()); 5037 SpawnedTestServer test_server(SpawnedTestServer::TYPE_HTTP,
5038 SpawnedTestServer::kLocalhost,
5039 base::FilePath(kTestFilePath));
5040
5041 ASSERT_TRUE(test_server.Start());
5016 5042
5017 AsyncLoggingUrlRequestDelegate request_delegate( 5043 AsyncLoggingUrlRequestDelegate request_delegate(
5018 AsyncLoggingUrlRequestDelegate::NO_CANCEL); 5044 AsyncLoggingUrlRequestDelegate::NO_CANCEL);
5019 TestURLRequestContext context(true); 5045 TestURLRequestContext context(true);
5020 context.set_network_delegate(NULL); 5046 context.set_network_delegate(NULL);
5021 context.set_net_log(&net_log_); 5047 context.set_net_log(&net_log_);
5022 context.Init(); 5048 context.Init();
5023 5049
5024 { 5050 {
5025 // A chunked response with delays between chunks is used to make sure that 5051 // A chunked response with delays between chunks is used to make sure that
5026 // attempts by the URLRequest delegate to log information while reading the 5052 // attempts by the URLRequest delegate to log information while reading the
5027 // body are ignored. Since they are ignored, this test is robust against 5053 // body are ignored. Since they are ignored, this test is robust against
5028 // the possibility of multiple reads being combined in the unlikely event 5054 // the possibility of multiple reads being combined in the unlikely event
5029 // that it occurs. 5055 // that it occurs.
5030 scoped_ptr<URLRequest> r(context.CreateRequest( 5056 scoped_ptr<URLRequest> r(context.CreateRequest(
5031 test_server_.GetURL("chunked?waitBetweenChunks=20"), DEFAULT_PRIORITY, 5057 test_server.GetURL("/chunked?waitBetweenChunks=20"), DEFAULT_PRIORITY,
5032 &request_delegate)); 5058 &request_delegate));
5033 LoadStateWithParam load_state = r->GetLoadState(); 5059 LoadStateWithParam load_state = r->GetLoadState();
5034 r->Start(); 5060 r->Start();
5035 base::RunLoop().Run(); 5061 base::RunLoop().Run();
5036 5062
5037 EXPECT_EQ(200, r->GetResponseCode()); 5063 EXPECT_EQ(200, r->GetResponseCode());
5038 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 5064 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
5039 } 5065 }
5040 5066
5041 TestNetLogEntry::List entries; 5067 TestNetLogEntry::List entries;
(...skipping 17 matching lines...) Expand all
5059 5085
5060 ASSERT_LT(log_position, entries.size()); 5086 ASSERT_LT(log_position, entries.size());
5061 EXPECT_EQ(NetLog::TYPE_URL_REQUEST_DELEGATE, entries[log_position].type); 5087 EXPECT_EQ(NetLog::TYPE_URL_REQUEST_DELEGATE, entries[log_position].type);
5062 EXPECT_EQ(NetLog::PHASE_END, entries[log_position].phase); 5088 EXPECT_EQ(NetLog::PHASE_END, entries[log_position].phase);
5063 5089
5064 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 5090 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
5065 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 5091 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
5066 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 5092 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
5067 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); 5093 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE));
5068 } 5094 }
5095 #endif // !defined(OS_IOS)
5069 5096
5070 // Tests handling of delegate info from a URLRequest::Delegate in the case of 5097 // Tests handling of delegate info from a URLRequest::Delegate in the case of
5071 // an HTTP redirect. 5098 // an HTTP redirect.
5072 TEST_F(URLRequestTestHTTP, URLRequestDelegateInfoOnRedirect) { 5099 TEST_F(URLRequestTestHTTP, URLRequestDelegateInfoOnRedirect) {
5073 ASSERT_TRUE(test_server_.Start()); 5100 ASSERT_TRUE(http_test_server()->Start());
5074 5101
5075 AsyncLoggingUrlRequestDelegate request_delegate( 5102 AsyncLoggingUrlRequestDelegate request_delegate(
5076 AsyncLoggingUrlRequestDelegate::NO_CANCEL); 5103 AsyncLoggingUrlRequestDelegate::NO_CANCEL);
5077 TestURLRequestContext context(true); 5104 TestURLRequestContext context(true);
5078 context.set_network_delegate(NULL); 5105 context.set_network_delegate(NULL);
5079 context.set_net_log(&net_log_); 5106 context.set_net_log(&net_log_);
5080 context.Init(); 5107 context.Init();
5081 5108
5082 { 5109 {
5083 scoped_ptr<URLRequest> r(context.CreateRequest( 5110 scoped_ptr<URLRequest> r(context.CreateRequest(
5084 test_server_.GetURL("server-redirect?simple.html"), DEFAULT_PRIORITY, 5111 http_test_server()->GetURL("/server-redirect?simple.html"),
5085 &request_delegate)); 5112 DEFAULT_PRIORITY, &request_delegate));
5086 LoadStateWithParam load_state = r->GetLoadState(); 5113 LoadStateWithParam load_state = r->GetLoadState();
5087 r->Start(); 5114 r->Start();
5088 base::RunLoop().Run(); 5115 base::RunLoop().Run();
5089 5116
5090 EXPECT_EQ(200, r->GetResponseCode()); 5117 EXPECT_EQ(200, r->GetResponseCode());
5091 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 5118 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
5092 } 5119 }
5093 5120
5094 TestNetLogEntry::List entries; 5121 TestNetLogEntry::List entries;
5095 net_log_.GetEntries(&entries); 5122 net_log_.GetEntries(&entries);
(...skipping 23 matching lines...) Expand all
5119 5146
5120 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 5147 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
5121 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO)); 5148 entries, log_position + 1, NetLog::TYPE_DELEGATE_INFO));
5122 EXPECT_FALSE(LogContainsEntryWithTypeAfter( 5149 EXPECT_FALSE(LogContainsEntryWithTypeAfter(
5123 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE)); 5150 entries, log_position + 1, NetLog::TYPE_URL_REQUEST_DELEGATE));
5124 } 5151 }
5125 5152
5126 // Tests handling of delegate info from a URLRequest::Delegate in the case of 5153 // Tests handling of delegate info from a URLRequest::Delegate in the case of
5127 // an HTTP redirect, with cancellation at various points. 5154 // an HTTP redirect, with cancellation at various points.
5128 TEST_F(URLRequestTestHTTP, URLRequestDelegateOnRedirectCancelled) { 5155 TEST_F(URLRequestTestHTTP, URLRequestDelegateOnRedirectCancelled) {
5129 ASSERT_TRUE(test_server_.Start()); 5156 ASSERT_TRUE(http_test_server()->Start());
5130 5157
5131 const AsyncLoggingUrlRequestDelegate::CancelStage kCancelStages[] = { 5158 const AsyncLoggingUrlRequestDelegate::CancelStage kCancelStages[] = {
5132 AsyncLoggingUrlRequestDelegate::CANCEL_ON_RECEIVED_REDIRECT, 5159 AsyncLoggingUrlRequestDelegate::CANCEL_ON_RECEIVED_REDIRECT,
5133 AsyncLoggingUrlRequestDelegate::CANCEL_ON_RESPONSE_STARTED, 5160 AsyncLoggingUrlRequestDelegate::CANCEL_ON_RESPONSE_STARTED,
5134 AsyncLoggingUrlRequestDelegate::CANCEL_ON_READ_COMPLETED, 5161 AsyncLoggingUrlRequestDelegate::CANCEL_ON_READ_COMPLETED,
5135 }; 5162 };
5136 5163
5137 for (size_t test_case = 0; test_case < arraysize(kCancelStages); 5164 for (size_t test_case = 0; test_case < arraysize(kCancelStages);
5138 ++test_case) { 5165 ++test_case) {
5139 AsyncLoggingUrlRequestDelegate request_delegate(kCancelStages[test_case]); 5166 AsyncLoggingUrlRequestDelegate request_delegate(kCancelStages[test_case]);
5140 TestURLRequestContext context(true); 5167 TestURLRequestContext context(true);
5141 TestNetLog net_log; 5168 TestNetLog net_log;
5142 context.set_network_delegate(NULL); 5169 context.set_network_delegate(NULL);
5143 context.set_net_log(&net_log); 5170 context.set_net_log(&net_log);
5144 context.Init(); 5171 context.Init();
5145 5172
5146 { 5173 {
5147 scoped_ptr<URLRequest> r(context.CreateRequest( 5174 scoped_ptr<URLRequest> r(context.CreateRequest(
5148 test_server_.GetURL("server-redirect?simple.html"), DEFAULT_PRIORITY, 5175 http_test_server()->GetURL("/server-redirect?simple.html"),
5149 &request_delegate)); 5176 DEFAULT_PRIORITY, &request_delegate));
5150 LoadStateWithParam load_state = r->GetLoadState(); 5177 LoadStateWithParam load_state = r->GetLoadState();
5151 r->Start(); 5178 r->Start();
5152 base::RunLoop().Run(); 5179 base::RunLoop().Run();
5153 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 5180 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
5154 } 5181 }
5155 5182
5156 TestNetLogEntry::List entries; 5183 TestNetLogEntry::List entries;
5157 net_log.GetEntries(&entries); 5184 net_log.GetEntries(&entries);
5158 5185
5159 // Delegate info is always logged in both OnReceivedRedirect and 5186 // Delegate info is always logged in both OnReceivedRedirect and
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
5198 const RedirectInfo& redirect_info, 5225 const RedirectInfo& redirect_info,
5199 bool* defer_redirect) override { 5226 bool* defer_redirect) override {
5200 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); 5227 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect);
5201 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false); 5228 request->SetExtraRequestHeaderByName(kExtraHeader, kExtraValue, false);
5202 } 5229 }
5203 }; 5230 };
5204 5231
5205 } // namespace 5232 } // namespace
5206 5233
5207 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) { 5234 TEST_F(URLRequestTestHTTP, RedirectWithAdditionalHeadersTest) {
5208 ASSERT_TRUE(test_server_.Start()); 5235 ASSERT_TRUE(http_test_server()->Start());
5209 5236
5210 GURL destination_url = test_server_.GetURL( 5237 GURL destination_url =
5211 "echoheader?" + std::string(kExtraHeader)); 5238 http_test_server()->GetURL("/echoheader?" + std::string(kExtraHeader));
5212 GURL original_url = test_server_.GetURL( 5239 GURL original_url =
5213 "server-redirect?" + destination_url.spec()); 5240 http_test_server()->GetURL("/server-redirect?" + destination_url.spec());
5214 RedirectWithAdditionalHeadersDelegate d; 5241 RedirectWithAdditionalHeadersDelegate d;
5215 scoped_ptr<URLRequest> req( 5242 scoped_ptr<URLRequest> req(
5216 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 5243 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
5217 req->Start(); 5244 req->Start();
5218 base::RunLoop().Run(); 5245 base::RunLoop().Run();
5219 5246
5220 std::string value; 5247 std::string value;
5221 const HttpRequestHeaders& headers = req->extra_request_headers(); 5248 const HttpRequestHeaders& headers = req->extra_request_headers();
5222 EXPECT_TRUE(headers.GetHeader(kExtraHeader, &value)); 5249 EXPECT_TRUE(headers.GetHeader(kExtraHeader, &value));
5223 EXPECT_EQ(kExtraValue, value); 5250 EXPECT_EQ(kExtraValue, value);
(...skipping 11 matching lines...) Expand all
5235 const RedirectInfo& redirect_info, 5262 const RedirectInfo& redirect_info,
5236 bool* defer_redirect) override { 5263 bool* defer_redirect) override {
5237 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect); 5264 TestDelegate::OnReceivedRedirect(request, redirect_info, defer_redirect);
5238 request->RemoveRequestHeaderByName(kExtraHeaderToRemove); 5265 request->RemoveRequestHeaderByName(kExtraHeaderToRemove);
5239 } 5266 }
5240 }; 5267 };
5241 5268
5242 } // namespace 5269 } // namespace
5243 5270
5244 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) { 5271 TEST_F(URLRequestTestHTTP, RedirectWithHeaderRemovalTest) {
5245 ASSERT_TRUE(test_server_.Start()); 5272 ASSERT_TRUE(http_test_server()->Start());
5246 5273
5247 GURL destination_url = test_server_.GetURL( 5274 GURL destination_url = http_test_server()->GetURL(
5248 "echoheader?" + std::string(kExtraHeaderToRemove)); 5275 "/echoheader?" + std::string(kExtraHeaderToRemove));
5249 GURL original_url = test_server_.GetURL( 5276 GURL original_url =
5250 "server-redirect?" + destination_url.spec()); 5277 http_test_server()->GetURL("/server-redirect?" + destination_url.spec());
5251 RedirectWithHeaderRemovalDelegate d; 5278 RedirectWithHeaderRemovalDelegate d;
5252 scoped_ptr<URLRequest> req( 5279 scoped_ptr<URLRequest> req(
5253 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 5280 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
5254 req->SetExtraRequestHeaderByName(kExtraHeaderToRemove, "dummy", false); 5281 req->SetExtraRequestHeaderByName(kExtraHeaderToRemove, "dummy", false);
5255 req->Start(); 5282 req->Start();
5256 base::RunLoop().Run(); 5283 base::RunLoop().Run();
5257 5284
5258 std::string value; 5285 std::string value;
5259 const HttpRequestHeaders& headers = req->extra_request_headers(); 5286 const HttpRequestHeaders& headers = req->extra_request_headers();
5260 EXPECT_FALSE(headers.GetHeader(kExtraHeaderToRemove, &value)); 5287 EXPECT_FALSE(headers.GetHeader(kExtraHeaderToRemove, &value));
(...skipping 17 matching lines...) Expand all
5278 5305
5279 // We expect to receive OnResponseStarted even though the request has been 5306 // We expect to receive OnResponseStarted even though the request has been
5280 // cancelled. 5307 // cancelled.
5281 EXPECT_EQ(1, d.response_started_count()); 5308 EXPECT_EQ(1, d.response_started_count());
5282 EXPECT_EQ(0, d.bytes_received()); 5309 EXPECT_EQ(0, d.bytes_received());
5283 EXPECT_FALSE(d.received_data_before_response()); 5310 EXPECT_FALSE(d.received_data_before_response());
5284 } 5311 }
5285 } 5312 }
5286 5313
5287 TEST_F(URLRequestTestHTTP, CancelTest2) { 5314 TEST_F(URLRequestTestHTTP, CancelTest2) {
5288 ASSERT_TRUE(test_server_.Start()); 5315 ASSERT_TRUE(http_test_server()->Start());
5289 5316
5290 TestDelegate d; 5317 TestDelegate d;
5291 { 5318 {
5292 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5319 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5293 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 5320 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
5294 5321
5295 d.set_cancel_in_response_started(true); 5322 d.set_cancel_in_response_started(true);
5296 5323
5297 r->Start(); 5324 r->Start();
5298 EXPECT_TRUE(r->is_pending()); 5325 EXPECT_TRUE(r->is_pending());
5299 5326
5300 base::RunLoop().Run(); 5327 base::RunLoop().Run();
5301 5328
5302 EXPECT_EQ(1, d.response_started_count()); 5329 EXPECT_EQ(1, d.response_started_count());
5303 EXPECT_EQ(0, d.bytes_received()); 5330 EXPECT_EQ(0, d.bytes_received());
5304 EXPECT_FALSE(d.received_data_before_response()); 5331 EXPECT_FALSE(d.received_data_before_response());
5305 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 5332 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
5306 } 5333 }
5307 } 5334 }
5308 5335
5309 TEST_F(URLRequestTestHTTP, CancelTest3) { 5336 TEST_F(URLRequestTestHTTP, CancelTest3) {
5310 ASSERT_TRUE(test_server_.Start()); 5337 ASSERT_TRUE(http_test_server()->Start());
5311 5338
5312 TestDelegate d; 5339 TestDelegate d;
5313 { 5340 {
5314 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5341 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5315 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 5342 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
5316 5343
5317 d.set_cancel_in_received_data(true); 5344 d.set_cancel_in_received_data(true);
5318 5345
5319 r->Start(); 5346 r->Start();
5320 EXPECT_TRUE(r->is_pending()); 5347 EXPECT_TRUE(r->is_pending());
5321 5348
5322 base::RunLoop().Run(); 5349 base::RunLoop().Run();
5323 5350
5324 EXPECT_EQ(1, d.response_started_count()); 5351 EXPECT_EQ(1, d.response_started_count());
5325 // There is no guarantee about how much data was received 5352 // There is no guarantee about how much data was received
5326 // before the cancel was issued. It could have been 0 bytes, 5353 // before the cancel was issued. It could have been 0 bytes,
5327 // or it could have been all the bytes. 5354 // or it could have been all the bytes.
5328 // EXPECT_EQ(0, d.bytes_received()); 5355 // EXPECT_EQ(0, d.bytes_received());
5329 EXPECT_FALSE(d.received_data_before_response()); 5356 EXPECT_FALSE(d.received_data_before_response());
5330 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 5357 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
5331 } 5358 }
5332 } 5359 }
5333 5360
5334 TEST_F(URLRequestTestHTTP, CancelTest4) { 5361 TEST_F(URLRequestTestHTTP, CancelTest4) {
5335 ASSERT_TRUE(test_server_.Start()); 5362 ASSERT_TRUE(http_test_server()->Start());
5336 5363
5337 TestDelegate d; 5364 TestDelegate d;
5338 { 5365 {
5339 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5366 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5340 test_server_.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 5367 http_test_server()->GetURL("/"), DEFAULT_PRIORITY, &d));
5341 5368
5342 r->Start(); 5369 r->Start();
5343 EXPECT_TRUE(r->is_pending()); 5370 EXPECT_TRUE(r->is_pending());
5344 5371
5345 // The request will be implicitly canceled when it is destroyed. The 5372 // The request will be implicitly canceled when it is destroyed. The
5346 // test delegate must not post a quit message when this happens because 5373 // test delegate must not post a quit message when this happens because
5347 // this test doesn't actually have a message loop. The quit message would 5374 // this test doesn't actually have a message loop. The quit message would
5348 // get put on this thread's message queue and the next test would exit 5375 // get put on this thread's message queue and the next test would exit
5349 // early, causing problems. 5376 // early, causing problems.
5350 d.set_quit_on_complete(false); 5377 d.set_quit_on_complete(false);
5351 } 5378 }
5352 // expect things to just cleanup properly. 5379 // expect things to just cleanup properly.
5353 5380
5354 // we won't actually get a received reponse here because we've never run the 5381 // we won't actually get a received reponse here because we've never run the
5355 // message loop 5382 // message loop
5356 EXPECT_FALSE(d.received_data_before_response()); 5383 EXPECT_FALSE(d.received_data_before_response());
5357 EXPECT_EQ(0, d.bytes_received()); 5384 EXPECT_EQ(0, d.bytes_received());
5358 } 5385 }
5359 5386
5360 TEST_F(URLRequestTestHTTP, CancelTest5) { 5387 TEST_F(URLRequestTestHTTP, CancelTest5) {
5361 ASSERT_TRUE(test_server_.Start()); 5388 ASSERT_TRUE(http_test_server()->Start());
5362 5389
5363 // populate cache 5390 // populate cache
5364 { 5391 {
5365 TestDelegate d; 5392 TestDelegate d;
5366 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5393 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5367 test_server_.GetURL("cachetime"), DEFAULT_PRIORITY, &d)); 5394 http_test_server()->GetURL("/cachetime"), DEFAULT_PRIORITY, &d));
5368 r->Start(); 5395 r->Start();
5369 base::RunLoop().Run(); 5396 base::RunLoop().Run();
5370 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 5397 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
5371 } 5398 }
5372 5399
5373 // cancel read from cache (see bug 990242) 5400 // cancel read from cache (see bug 990242)
5374 { 5401 {
5375 TestDelegate d; 5402 TestDelegate d;
5376 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5403 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5377 test_server_.GetURL("cachetime"), DEFAULT_PRIORITY, &d)); 5404 http_test_server()->GetURL("/cachetime"), DEFAULT_PRIORITY, &d));
5378 r->Start(); 5405 r->Start();
5379 r->Cancel(); 5406 r->Cancel();
5380 base::RunLoop().Run(); 5407 base::RunLoop().Run();
5381 5408
5382 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status()); 5409 EXPECT_EQ(URLRequestStatus::CANCELED, r->status().status());
5383 EXPECT_EQ(1, d.response_started_count()); 5410 EXPECT_EQ(1, d.response_started_count());
5384 EXPECT_EQ(0, d.bytes_received()); 5411 EXPECT_EQ(0, d.bytes_received());
5385 EXPECT_FALSE(d.received_data_before_response()); 5412 EXPECT_FALSE(d.received_data_before_response());
5386 } 5413 }
5387 } 5414 }
5388 5415
5389 TEST_F(URLRequestTestHTTP, PostTest) { 5416 TEST_F(URLRequestTestHTTP, PostTest) {
5390 ASSERT_TRUE(test_server_.Start()); 5417 ASSERT_TRUE(http_test_server()->Start());
5391 HTTPUploadDataOperationTest("POST"); 5418 HTTPUploadDataOperationTest("POST");
5392 } 5419 }
5393 5420
5394 TEST_F(URLRequestTestHTTP, PutTest) { 5421 TEST_F(URLRequestTestHTTP, PutTest) {
5395 ASSERT_TRUE(test_server_.Start()); 5422 ASSERT_TRUE(http_test_server()->Start());
5396 HTTPUploadDataOperationTest("PUT"); 5423 HTTPUploadDataOperationTest("PUT");
5397 } 5424 }
5398 5425
5399 TEST_F(URLRequestTestHTTP, PostEmptyTest) { 5426 TEST_F(URLRequestTestHTTP, PostEmptyTest) {
5400 ASSERT_TRUE(test_server_.Start()); 5427 ASSERT_TRUE(http_test_server()->Start());
5401 5428
5402 TestDelegate d; 5429 TestDelegate d;
5403 { 5430 {
5404 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5431 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5405 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5432 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5406 r->set_method("POST"); 5433 r->set_method("POST");
5407 5434
5408 r->Start(); 5435 r->Start();
5409 EXPECT_TRUE(r->is_pending()); 5436 EXPECT_TRUE(r->is_pending());
5410 5437
5411 base::RunLoop().Run(); 5438 base::RunLoop().Run();
5412 5439
5413 ASSERT_EQ(1, d.response_started_count()) 5440 ASSERT_EQ(1, d.response_started_count())
5414 << "request failed: " << r->status().status() 5441 << "request failed: " << r->status().status()
5415 << ", error: " << r->status().error(); 5442 << ", error: " << r->status().error();
5416 5443
5417 EXPECT_FALSE(d.received_data_before_response()); 5444 EXPECT_FALSE(d.received_data_before_response());
5418 EXPECT_TRUE(d.data_received().empty()); 5445 EXPECT_TRUE(d.data_received().empty());
5419 } 5446 }
5420 } 5447 }
5421 5448
5422 TEST_F(URLRequestTestHTTP, PostFileTest) { 5449 TEST_F(URLRequestTestHTTP, PostFileTest) {
5423 ASSERT_TRUE(test_server_.Start()); 5450 ASSERT_TRUE(http_test_server()->Start());
5424 5451
5425 TestDelegate d; 5452 TestDelegate d;
5426 { 5453 {
5427 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5454 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5428 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5455 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5429 r->set_method("POST"); 5456 r->set_method("POST");
5430 5457
5431 base::FilePath dir; 5458 base::FilePath dir;
5432 PathService::Get(base::DIR_EXE, &dir); 5459 PathService::Get(base::DIR_EXE, &dir);
5433 base::SetCurrentDirectory(dir); 5460 base::SetCurrentDirectory(dir);
5434 5461
5435 ScopedVector<UploadElementReader> element_readers; 5462 ScopedVector<UploadElementReader> element_readers;
5436 5463
5437 base::FilePath path; 5464 base::FilePath path;
5438 PathService::Get(base::DIR_SOURCE_ROOT, &path); 5465 PathService::Get(base::DIR_SOURCE_ROOT, &path);
(...skipping 23 matching lines...) Expand all
5462 << ", error: " << r->status().error(); 5489 << ", error: " << r->status().error();
5463 5490
5464 EXPECT_FALSE(d.received_data_before_response()); 5491 EXPECT_FALSE(d.received_data_before_response());
5465 5492
5466 EXPECT_EQ(size, d.bytes_received()); 5493 EXPECT_EQ(size, d.bytes_received());
5467 EXPECT_EQ(std::string(&buf[0], size), d.data_received()); 5494 EXPECT_EQ(std::string(&buf[0], size), d.data_received());
5468 } 5495 }
5469 } 5496 }
5470 5497
5471 TEST_F(URLRequestTestHTTP, PostUnreadableFileTest) { 5498 TEST_F(URLRequestTestHTTP, PostUnreadableFileTest) {
5472 ASSERT_TRUE(test_server_.Start()); 5499 ASSERT_TRUE(http_test_server()->Start());
5473 5500
5474 TestDelegate d; 5501 TestDelegate d;
5475 { 5502 {
5476 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5503 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5477 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5504 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5478 r->set_method("POST"); 5505 r->set_method("POST");
5479 5506
5480 ScopedVector<UploadElementReader> element_readers; 5507 ScopedVector<UploadElementReader> element_readers;
5481 5508
5482 element_readers.push_back(new UploadFileElementReader( 5509 element_readers.push_back(new UploadFileElementReader(
5483 base::ThreadTaskRunnerHandle::Get().get(), 5510 base::ThreadTaskRunnerHandle::Get().get(),
5484 base::FilePath(FILE_PATH_LITERAL( 5511 base::FilePath(FILE_PATH_LITERAL(
5485 "c:\\path\\to\\non\\existant\\file.randomness.12345")), 5512 "c:\\path\\to\\non\\existant\\file.randomness.12345")),
5486 0, kuint64max, base::Time())); 5513 0, kuint64max, base::Time()));
5487 r->set_upload(make_scoped_ptr<UploadDataStream>( 5514 r->set_upload(make_scoped_ptr<UploadDataStream>(
5488 new ElementsUploadDataStream(element_readers.Pass(), 0))); 5515 new ElementsUploadDataStream(element_readers.Pass(), 0)));
5489 5516
5490 r->Start(); 5517 r->Start();
5491 EXPECT_TRUE(r->is_pending()); 5518 EXPECT_TRUE(r->is_pending());
5492 5519
5493 base::RunLoop().Run(); 5520 base::RunLoop().Run();
5494 5521
5495 EXPECT_TRUE(d.request_failed()); 5522 EXPECT_TRUE(d.request_failed());
5496 EXPECT_FALSE(d.received_data_before_response()); 5523 EXPECT_FALSE(d.received_data_before_response());
5497 EXPECT_EQ(0, d.bytes_received()); 5524 EXPECT_EQ(0, d.bytes_received());
5498 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 5525 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
5499 EXPECT_EQ(ERR_FILE_NOT_FOUND, r->status().error()); 5526 EXPECT_EQ(ERR_FILE_NOT_FOUND, r->status().error());
5500 } 5527 }
5501 } 5528 }
5502 5529
5503 TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) { 5530 TEST_F(URLRequestTestHTTP, TestPostChunkedDataBeforeStart) {
5504 ASSERT_TRUE(test_server_.Start()); 5531 ASSERT_TRUE(http_test_server()->Start());
5505 5532
5506 TestDelegate d; 5533 TestDelegate d;
5507 { 5534 {
5508 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5535 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5509 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5536 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5510 r->EnableChunkedUpload(); 5537 r->EnableChunkedUpload();
5511 r->set_method("POST"); 5538 r->set_method("POST");
5512 AddChunksToUpload(r.get()); 5539 AddChunksToUpload(r.get());
5513 r->Start(); 5540 r->Start();
5514 EXPECT_TRUE(r->is_pending()); 5541 EXPECT_TRUE(r->is_pending());
5515 5542
5516 base::RunLoop().Run(); 5543 base::RunLoop().Run();
5517 5544
5518 VerifyReceivedDataMatchesChunks(r.get(), &d); 5545 VerifyReceivedDataMatchesChunks(r.get(), &d);
5519 } 5546 }
5520 } 5547 }
5521 5548
5522 TEST_F(URLRequestTestHTTP, TestPostChunkedDataJustAfterStart) { 5549 TEST_F(URLRequestTestHTTP, TestPostChunkedDataJustAfterStart) {
5523 ASSERT_TRUE(test_server_.Start()); 5550 ASSERT_TRUE(http_test_server()->Start());
5524 5551
5525 TestDelegate d; 5552 TestDelegate d;
5526 { 5553 {
5527 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5554 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5528 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5555 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5529 r->EnableChunkedUpload(); 5556 r->EnableChunkedUpload();
5530 r->set_method("POST"); 5557 r->set_method("POST");
5531 r->Start(); 5558 r->Start();
5532 EXPECT_TRUE(r->is_pending()); 5559 EXPECT_TRUE(r->is_pending());
5533 AddChunksToUpload(r.get()); 5560 AddChunksToUpload(r.get());
5534 base::RunLoop().Run(); 5561 base::RunLoop().Run();
5535 5562
5536 VerifyReceivedDataMatchesChunks(r.get(), &d); 5563 VerifyReceivedDataMatchesChunks(r.get(), &d);
5537 } 5564 }
5538 } 5565 }
5539 5566
5540 TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) { 5567 TEST_F(URLRequestTestHTTP, TestPostChunkedDataAfterStart) {
5541 ASSERT_TRUE(test_server_.Start()); 5568 ASSERT_TRUE(http_test_server()->Start());
5542 5569
5543 TestDelegate d; 5570 TestDelegate d;
5544 { 5571 {
5545 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 5572 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
5546 test_server_.GetURL("echo"), DEFAULT_PRIORITY, &d)); 5573 http_test_server()->GetURL("/echo"), DEFAULT_PRIORITY, &d));
5547 r->EnableChunkedUpload(); 5574 r->EnableChunkedUpload();
5548 r->set_method("POST"); 5575 r->set_method("POST");
5549 r->Start(); 5576 r->Start();
5550 EXPECT_TRUE(r->is_pending()); 5577 EXPECT_TRUE(r->is_pending());
5551 5578
5552 base::RunLoop().RunUntilIdle(); 5579 base::RunLoop().RunUntilIdle();
5553 AddChunksToUpload(r.get()); 5580 AddChunksToUpload(r.get());
5554 base::RunLoop().Run(); 5581 base::RunLoop().Run();
5555 5582
5556 VerifyReceivedDataMatchesChunks(r.get(), &d); 5583 VerifyReceivedDataMatchesChunks(r.get(), &d);
5557 } 5584 }
5558 } 5585 }
5559 5586
5560 TEST_F(URLRequestTestHTTP, ResponseHeadersTest) { 5587 TEST_F(URLRequestTestHTTP, ResponseHeadersTest) {
5561 ASSERT_TRUE(test_server_.Start()); 5588 ASSERT_TRUE(http_test_server()->Start());
5562 5589
5563 TestDelegate d; 5590 TestDelegate d;
5564 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 5591 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
5565 test_server_.GetURL("files/with-headers.html"), DEFAULT_PRIORITY, &d)); 5592 http_test_server()->GetURL("/with-headers.html"), DEFAULT_PRIORITY, &d));
5566 req->Start(); 5593 req->Start();
5567 base::RunLoop().Run(); 5594 base::RunLoop().Run();
5568 5595
5569 const HttpResponseHeaders* headers = req->response_headers(); 5596 const HttpResponseHeaders* headers = req->response_headers();
5570 5597
5571 // Simple sanity check that response_info() accesses the same data. 5598 // Simple sanity check that response_info() accesses the same data.
5572 EXPECT_EQ(headers, req->response_info().headers.get()); 5599 EXPECT_EQ(headers, req->response_info().headers.get());
5573 5600
5574 std::string header; 5601 std::string header;
5575 EXPECT_TRUE(headers->GetNormalizedHeader("cache-control", &header)); 5602 EXPECT_TRUE(headers->GetNormalizedHeader("cache-control", &header));
5576 EXPECT_EQ("private", header); 5603 EXPECT_EQ("private", header);
5577 5604
5578 header.clear(); 5605 header.clear();
5579 EXPECT_TRUE(headers->GetNormalizedHeader("content-type", &header)); 5606 EXPECT_TRUE(headers->GetNormalizedHeader("content-type", &header));
5580 EXPECT_EQ("text/html; charset=ISO-8859-1", header); 5607 EXPECT_EQ("text/html; charset=ISO-8859-1", header);
5581 5608
5582 // The response has two "X-Multiple-Entries" headers. 5609 // The response has two "X-Multiple-Entries" headers.
5583 // This verfies our output has them concatenated together. 5610 // This verfies our output has them concatenated together.
5584 header.clear(); 5611 header.clear();
5585 EXPECT_TRUE(headers->GetNormalizedHeader("x-multiple-entries", &header)); 5612 EXPECT_TRUE(headers->GetNormalizedHeader("x-multiple-entries", &header));
5586 EXPECT_EQ("a, b", header); 5613 EXPECT_EQ("a, b", header);
5587 } 5614 }
5588 5615
5616 // TODO(svaldez): iOS tests are flaky with EmbeddedTestServer and transport
5617 // security state.
5618 #if !defined(OS_IOS)
5619
5589 TEST_F(URLRequestTestHTTP, ProcessSTS) { 5620 TEST_F(URLRequestTestHTTP, ProcessSTS) {
5590 SpawnedTestServer::SSLOptions ssl_options( 5621 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5591 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5622 https_test_server.SetSSLConfig(
5592 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5623 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5593 ssl_options, 5624 https_test_server.ServeFilesFromSourceDirectory(
5594 base::FilePath(kTestFilePath)); 5625 base::FilePath(kTestFilePath));
5595 ASSERT_TRUE(https_test_server.Start()); 5626 ASSERT_TRUE(https_test_server.Start());
5596 5627
5597 std::string test_server_hostname = https_test_server.GetURL("").host(); 5628 std::string test_server_hostname = https_test_server.GetURL("/").host();
5598
5599 TestDelegate d; 5629 TestDelegate d;
5600 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5630 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5601 https_test_server.GetURL("files/hsts-headers.html"), DEFAULT_PRIORITY, 5631 https_test_server.GetURL("/hsts-headers.html"), DEFAULT_PRIORITY, &d));
5602 &d));
5603 request->Start(); 5632 request->Start();
5604 base::RunLoop().Run(); 5633 base::RunLoop().Run();
5605 5634
5606 TransportSecurityState* security_state = 5635 TransportSecurityState* security_state =
5607 default_context_.transport_security_state(); 5636 default_context_.transport_security_state();
5608 TransportSecurityState::STSState sts_state; 5637 TransportSecurityState::STSState sts_state;
5609 TransportSecurityState::PKPState pkp_state; 5638 TransportSecurityState::PKPState pkp_state;
5610 EXPECT_TRUE( 5639 EXPECT_TRUE(
5611 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 5640 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
5612 EXPECT_FALSE( 5641 EXPECT_FALSE(
5613 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state)); 5642 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state));
5614 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS, 5643 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
5615 sts_state.upgrade_mode); 5644 sts_state.upgrade_mode);
5616 EXPECT_TRUE(sts_state.include_subdomains); 5645 EXPECT_TRUE(sts_state.include_subdomains);
5617 EXPECT_FALSE(pkp_state.include_subdomains); 5646 EXPECT_FALSE(pkp_state.include_subdomains);
5618 #if defined(OS_ANDROID) 5647 #if defined(OS_ANDROID)
5619 // Android's CertVerifyProc does not (yet) handle pins. 5648 // Android's CertVerifyProc does not (yet) handle pins.
5620 #else 5649 #else
5621 EXPECT_FALSE(pkp_state.HasPublicKeyPins()); 5650 EXPECT_FALSE(pkp_state.HasPublicKeyPins());
5622 #endif 5651 #endif
5623 } 5652 }
5624 5653
5625 TEST_F(URLRequestTestHTTP, STSNotProcessedOnIP) { 5654 TEST_F(URLRequestTestHTTP, STSNotProcessedOnIP) {
5626 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5655 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5627 SpawnedTestServer::SSLOptions(), 5656 https_test_server.ServeFilesFromSourceDirectory(
5628 base::FilePath(kTestFilePath)); 5657 base::FilePath(kTestFilePath));
5629 ASSERT_TRUE(https_test_server.Start()); 5658 ASSERT_TRUE(https_test_server.Start());
5630 // Make sure this test fails if the test server is changed to not 5659 // Make sure this test fails if the test server is changed to not
5631 // listen on an IP by default. 5660 // listen on an IP by default.
5632 ASSERT_TRUE(https_test_server.GetURL("").HostIsIPAddress()); 5661 ASSERT_TRUE(https_test_server.GetURL("/").HostIsIPAddress());
5633 std::string test_server_hostname = https_test_server.GetURL("").host(); 5662 std::string test_server_hostname = https_test_server.GetURL("/").host();
5634 5663
5635 TestDelegate d; 5664 TestDelegate d;
5636 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5665 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5637 https_test_server.GetURL("files/hsts-headers.html"), DEFAULT_PRIORITY, 5666 https_test_server.GetURL("/hsts-headers.html"), DEFAULT_PRIORITY, &d));
5638 &d));
5639 request->Start(); 5667 request->Start();
5640 base::RunLoop().Run(); 5668 base::RunLoop().Run();
5641
5642 TransportSecurityState* security_state = 5669 TransportSecurityState* security_state =
5643 default_context_.transport_security_state(); 5670 default_context_.transport_security_state();
5644 TransportSecurityState::STSState sts_state; 5671 TransportSecurityState::STSState sts_state;
5645 EXPECT_FALSE( 5672 EXPECT_FALSE(
5646 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 5673 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
5647 } 5674 }
5648 5675
5649 // Android's CertVerifyProc does not (yet) handle pins. Therefore, it will 5676 // Android's CertVerifyProc does not (yet) handle pins. Therefore, it will
5650 // reject HPKP headers, and a test setting only HPKP headers will fail (no 5677 // reject HPKP headers, and a test setting only HPKP headers will fail (no
5651 // PKPState present because header rejected). 5678 // PKPState present because header rejected).
(...skipping 12 matching lines...) Expand all
5664 #endif 5691 #endif
5665 5692
5666 namespace { 5693 namespace {
5667 const char kHPKPReportUri[] = "https://hpkp-report.test"; 5694 const char kHPKPReportUri[] = "https://hpkp-report.test";
5668 } // namespace 5695 } // namespace
5669 5696
5670 // Tests that enabling HPKP on a domain does not affect the HSTS 5697 // Tests that enabling HPKP on a domain does not affect the HSTS
5671 // validity/expiration. 5698 // validity/expiration.
5672 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKP) { 5699 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKP) {
5673 GURL report_uri(kHPKPReportUri); 5700 GURL report_uri(kHPKPReportUri);
5674 SpawnedTestServer::SSLOptions ssl_options( 5701 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5675 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5702 https_test_server.SetSSLConfig(
5676 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5703 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5677 ssl_options, 5704 https_test_server.ServeFilesFromSourceDirectory(
5678 base::FilePath(kTestFilePath)); 5705 base::FilePath(kTestFilePath));
5679 ASSERT_TRUE(https_test_server.Start()); 5706 ASSERT_TRUE(https_test_server.Start());
5680 5707
5681 std::string test_server_hostname = https_test_server.GetURL("").host(); 5708 std::string test_server_hostname = https_test_server.GetURL("/").host();
5682 5709
5683 TestDelegate d; 5710 TestDelegate d;
5684 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5711 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5685 https_test_server.GetURL("files/hpkp-headers.html"), DEFAULT_PRIORITY, 5712 https_test_server.GetURL("/hpkp-headers.html"), DEFAULT_PRIORITY, &d));
5686 &d));
5687 request->Start(); 5713 request->Start();
5688 base::RunLoop().Run(); 5714 base::RunLoop().Run();
5689
5690 TransportSecurityState* security_state = 5715 TransportSecurityState* security_state =
5691 default_context_.transport_security_state(); 5716 default_context_.transport_security_state();
5692 TransportSecurityState::STSState sts_state; 5717 TransportSecurityState::STSState sts_state;
5693 TransportSecurityState::PKPState pkp_state; 5718 TransportSecurityState::PKPState pkp_state;
5694 EXPECT_FALSE( 5719 EXPECT_FALSE(
5695 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 5720 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
5696 EXPECT_TRUE( 5721 EXPECT_TRUE(
5697 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state)); 5722 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state));
5698 EXPECT_EQ(TransportSecurityState::STSState::MODE_DEFAULT, 5723 EXPECT_EQ(TransportSecurityState::STSState::MODE_DEFAULT,
5699 sts_state.upgrade_mode); 5724 sts_state.upgrade_mode);
5700 EXPECT_FALSE(sts_state.include_subdomains); 5725 EXPECT_FALSE(sts_state.include_subdomains);
5701 EXPECT_FALSE(pkp_state.include_subdomains); 5726 EXPECT_FALSE(pkp_state.include_subdomains);
5702 EXPECT_TRUE(pkp_state.HasPublicKeyPins()); 5727 EXPECT_TRUE(pkp_state.HasPublicKeyPins());
5703 EXPECT_EQ(report_uri, pkp_state.report_uri); 5728 EXPECT_EQ(report_uri, pkp_state.report_uri);
5704 EXPECT_NE(sts_state.expiry, pkp_state.expiry); 5729 EXPECT_NE(sts_state.expiry, pkp_state.expiry);
5705 } 5730 }
5706 5731
5707 // Tests that reports get sent on HPKP violations when a report-uri is set. 5732 // Tests that reports get sent on HPKP violations when a report-uri is set.
5708 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPAndSendReport) { 5733 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPAndSendReport) {
5709 GURL report_uri(kHPKPReportUri); 5734 GURL report_uri(kHPKPReportUri);
5710 SpawnedTestServer::SSLOptions ssl_options( 5735 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5711 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5736 https_test_server.SetSSLConfig(
5712 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5737 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5713 ssl_options, 5738 https_test_server.ServeFilesFromSourceDirectory(
5714 base::FilePath(kTestFilePath)); 5739 base::FilePath(kTestFilePath));
5715
5716 ASSERT_TRUE(https_test_server.Start()); 5740 ASSERT_TRUE(https_test_server.Start());
5717 5741
5718 std::string test_server_hostname = https_test_server.GetURL("").host(); 5742 std::string test_server_hostname = https_test_server.GetURL("/").host();
5719 5743
5720 // Set up a pin for |test_server_hostname|. 5744 // Set up a pin for |test_server_hostname|.
5721 TransportSecurityState security_state; 5745 TransportSecurityState security_state;
5722 const base::Time current_time(base::Time::Now()); 5746 const base::Time current_time(base::Time::Now());
5723 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000); 5747 const base::Time expiry = current_time + base::TimeDelta::FromSeconds(1000);
5724 HashValueVector hashes; 5748 HashValueVector hashes;
5725 HashValue hash1; 5749 HashValue hash1;
5726 HashValue hash2; 5750 HashValue hash2;
5727 // The values here don't matter, as long as they are different from 5751 // The values here don't matter, as long as they are different from
5728 // the mocked CertVerifyResult below. 5752 // the mocked CertVerifyResult below.
(...skipping 28 matching lines...) Expand all
5757 TestNetworkDelegate network_delegate; 5781 TestNetworkDelegate network_delegate;
5758 TestURLRequestContext context(true); 5782 TestURLRequestContext context(true);
5759 context.set_transport_security_state(&security_state); 5783 context.set_transport_security_state(&security_state);
5760 context.set_network_delegate(&network_delegate); 5784 context.set_network_delegate(&network_delegate);
5761 context.set_cert_verifier(&cert_verifier); 5785 context.set_cert_verifier(&cert_verifier);
5762 context.Init(); 5786 context.Init();
5763 5787
5764 // Now send a request to trigger the violation. 5788 // Now send a request to trigger the violation.
5765 TestDelegate d; 5789 TestDelegate d;
5766 scoped_ptr<URLRequest> violating_request(context.CreateRequest( 5790 scoped_ptr<URLRequest> violating_request(context.CreateRequest(
5767 https_test_server.GetURL("files/simple.html"), DEFAULT_PRIORITY, &d)); 5791 https_test_server.GetURL("/simple.html"), DEFAULT_PRIORITY, &d));
5768 violating_request->Start(); 5792 violating_request->Start();
5769 base::RunLoop().Run(); 5793 base::RunLoop().Run();
5770 5794
5771 // Check that a report was sent. 5795 // Check that a report was sent.
5772 EXPECT_EQ(report_uri, mock_report_sender.latest_report_uri()); 5796 EXPECT_EQ(report_uri, mock_report_sender.latest_report_uri());
5773 ASSERT_FALSE(mock_report_sender.latest_report().empty()); 5797 ASSERT_FALSE(mock_report_sender.latest_report().empty());
5774 scoped_ptr<base::Value> value( 5798 scoped_ptr<base::Value> value(
5775 base::JSONReader::Read(mock_report_sender.latest_report())); 5799 base::JSONReader::Read(mock_report_sender.latest_report()));
5776 ASSERT_TRUE(value); 5800 ASSERT_TRUE(value);
5777 ASSERT_TRUE(value->IsType(base::Value::TYPE_DICTIONARY)); 5801 ASSERT_TRUE(value->IsType(base::Value::TYPE_DICTIONARY));
5778 base::DictionaryValue* report_dict; 5802 base::DictionaryValue* report_dict;
5779 ASSERT_TRUE(value->GetAsDictionary(&report_dict)); 5803 ASSERT_TRUE(value->GetAsDictionary(&report_dict));
5780 std::string report_hostname; 5804 std::string report_hostname;
5781 EXPECT_TRUE(report_dict->GetString("hostname", &report_hostname)); 5805 EXPECT_TRUE(report_dict->GetString("hostname", &report_hostname));
5782 EXPECT_EQ(test_server_hostname, report_hostname); 5806 EXPECT_EQ(test_server_hostname, report_hostname);
5783 } 5807 }
5784 5808
5785 // Tests that reports get sent on requests with 5809 // Tests that reports get sent on requests with
5786 // Public-Key-Pins-Report-Only headers. 5810 // Public-Key-Pins-Report-Only headers.
5787 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPReportOnly) { 5811 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPReportOnly) {
5788 GURL report_uri(kHPKPReportUri); 5812 GURL report_uri(kHPKPReportUri);
5789 SpawnedTestServer::SSLOptions ssl_options( 5813 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5790 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5814 https_test_server.SetSSLConfig(
5791 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5815 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5792 ssl_options, 5816 https_test_server.ServeFilesFromSourceDirectory(
5793 base::FilePath(kTestFilePath)); 5817 base::FilePath(kTestFilePath));
5794
5795 ASSERT_TRUE(https_test_server.Start()); 5818 ASSERT_TRUE(https_test_server.Start());
5796 5819
5797 std::string test_server_hostname = https_test_server.GetURL("").host(); 5820 std::string test_server_hostname = https_test_server.GetURL("/").host();
5798 5821
5799 TransportSecurityState security_state; 5822 TransportSecurityState security_state;
5800 MockCertificateReportSender mock_report_sender; 5823 MockCertificateReportSender mock_report_sender;
5801 security_state.SetReportSender(&mock_report_sender); 5824 security_state.SetReportSender(&mock_report_sender);
5802 5825
5803 // Set up a MockCertVerifier to violate the pin in the Report-Only 5826 // Set up a MockCertVerifier to violate the pin in the Report-Only
5804 // header. 5827 // header.
5805 scoped_refptr<X509Certificate> cert = https_test_server.GetCertificate(); 5828 scoped_refptr<X509Certificate> cert = https_test_server.GetCertificate();
5806 ASSERT_TRUE(cert); 5829 ASSERT_TRUE(cert);
5807 5830
(...skipping 12 matching lines...) Expand all
5820 TestNetworkDelegate network_delegate; 5843 TestNetworkDelegate network_delegate;
5821 TestURLRequestContext context(true); 5844 TestURLRequestContext context(true);
5822 context.set_transport_security_state(&security_state); 5845 context.set_transport_security_state(&security_state);
5823 context.set_network_delegate(&network_delegate); 5846 context.set_network_delegate(&network_delegate);
5824 context.set_cert_verifier(&cert_verifier); 5847 context.set_cert_verifier(&cert_verifier);
5825 context.Init(); 5848 context.Init();
5826 5849
5827 // Now send a request to trigger the violation. 5850 // Now send a request to trigger the violation.
5828 TestDelegate d; 5851 TestDelegate d;
5829 scoped_ptr<URLRequest> violating_request(context.CreateRequest( 5852 scoped_ptr<URLRequest> violating_request(context.CreateRequest(
5830 https_test_server.GetURL("files/hpkp-headers-report-only.html"), 5853 https_test_server.GetURL("/hpkp-headers-report-only.html"),
5831 DEFAULT_PRIORITY, &d)); 5854 DEFAULT_PRIORITY, &d));
5832 violating_request->Start(); 5855 violating_request->Start();
5833 base::RunLoop().Run(); 5856 base::RunLoop().Run();
5834 5857
5835 // Check that a report was sent. 5858 // Check that a report was sent.
5836 EXPECT_EQ(report_uri, mock_report_sender.latest_report_uri()); 5859 EXPECT_EQ(report_uri, mock_report_sender.latest_report_uri());
5837 ASSERT_FALSE(mock_report_sender.latest_report().empty()); 5860 ASSERT_FALSE(mock_report_sender.latest_report().empty());
5838 scoped_ptr<base::Value> value( 5861 scoped_ptr<base::Value> value(
5839 base::JSONReader::Read(mock_report_sender.latest_report())); 5862 base::JSONReader::Read(mock_report_sender.latest_report()));
5840 ASSERT_TRUE(value); 5863 ASSERT_TRUE(value);
5841 ASSERT_TRUE(value->IsType(base::Value::TYPE_DICTIONARY)); 5864 ASSERT_TRUE(value->IsType(base::Value::TYPE_DICTIONARY));
5842 base::DictionaryValue* report_dict; 5865 base::DictionaryValue* report_dict;
5843 ASSERT_TRUE(value->GetAsDictionary(&report_dict)); 5866 ASSERT_TRUE(value->GetAsDictionary(&report_dict));
5844 std::string report_hostname; 5867 std::string report_hostname;
5845 EXPECT_TRUE(report_dict->GetString("hostname", &report_hostname)); 5868 EXPECT_TRUE(report_dict->GetString("hostname", &report_hostname));
5846 EXPECT_EQ(test_server_hostname, report_hostname); 5869 EXPECT_EQ(test_server_hostname, report_hostname);
5847 } 5870 }
5848 5871
5849 // Tests that reports do not get sent on requests with 5872 // Tests that reports do not get sent on requests with
5850 // Public-Key-Pins-Report-Only headers that don't have pin violations. 5873 // Public-Key-Pins-Report-Only headers that don't have pin violations.
5851 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPReportOnlyWithNoViolation) { 5874 TEST_F(URLRequestTestHTTP, MAYBE_ProcessPKPReportOnlyWithNoViolation) {
5852 GURL report_uri(kHPKPReportUri); 5875 GURL report_uri(kHPKPReportUri);
5853 SpawnedTestServer::SSLOptions ssl_options( 5876 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5854 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5877 https_test_server.SetSSLConfig(
5855 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5878 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5856 ssl_options, 5879 https_test_server.ServeFilesFromSourceDirectory(
5857 base::FilePath(kTestFilePath)); 5880 base::FilePath(kTestFilePath));
5858
5859 ASSERT_TRUE(https_test_server.Start()); 5881 ASSERT_TRUE(https_test_server.Start());
5860 5882
5861 std::string test_server_hostname = https_test_server.GetURL("").host(); 5883 std::string test_server_hostname = https_test_server.GetURL("/").host();
5862 5884
5863 TransportSecurityState security_state; 5885 TransportSecurityState security_state;
5864 MockCertificateReportSender mock_report_sender; 5886 MockCertificateReportSender mock_report_sender;
5865 security_state.SetReportSender(&mock_report_sender); 5887 security_state.SetReportSender(&mock_report_sender);
5866 5888
5867 TestNetworkDelegate network_delegate; 5889 TestNetworkDelegate network_delegate;
5868 MockCertVerifier mock_cert_verifier; 5890 MockCertVerifier mock_cert_verifier;
5869 TestURLRequestContext context(true); 5891 TestURLRequestContext context(true);
5870 context.set_transport_security_state(&security_state); 5892 context.set_transport_security_state(&security_state);
5871 context.set_network_delegate(&network_delegate); 5893 context.set_network_delegate(&network_delegate);
5872 context.set_cert_verifier(&mock_cert_verifier); 5894 context.set_cert_verifier(&mock_cert_verifier);
5873 mock_cert_verifier.set_default_result(OK); 5895 mock_cert_verifier.set_default_result(OK);
5874 context.Init(); 5896 context.Init();
5875 5897
5876 // Now send a request that does not trigger the violation. 5898 // Now send a request that does not trigger the violation.
5877 TestDelegate d; 5899 TestDelegate d;
5878 scoped_ptr<URLRequest> request(context.CreateRequest( 5900 scoped_ptr<URLRequest> request(context.CreateRequest(
5879 https_test_server.GetURL("files/hpkp-headers-report-only.html"), 5901 https_test_server.GetURL("/hpkp-headers-report-only.html"),
5880 DEFAULT_PRIORITY, &d)); 5902 DEFAULT_PRIORITY, &d));
5881 request->Start(); 5903 request->Start();
5882 base::RunLoop().Run(); 5904 base::RunLoop().Run();
5883 5905
5884 // Check that a report was not sent. 5906 // Check that a report was not sent.
5885 EXPECT_EQ(GURL(), mock_report_sender.latest_report_uri()); 5907 EXPECT_EQ(GURL(), mock_report_sender.latest_report_uri());
5886 EXPECT_EQ(std::string(), mock_report_sender.latest_report()); 5908 EXPECT_EQ(std::string(), mock_report_sender.latest_report());
5887 } 5909 }
5888 5910
5889 TEST_F(URLRequestTestHTTP, PKPNotProcessedOnIP) { 5911 TEST_F(URLRequestTestHTTP, PKPNotProcessedOnIP) {
5890 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5912 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5891 SpawnedTestServer::SSLOptions(), 5913 https_test_server.ServeFilesFromSourceDirectory(
5892 base::FilePath(kTestFilePath)); 5914 base::FilePath(kTestFilePath));
5893 ASSERT_TRUE(https_test_server.Start()); 5915 ASSERT_TRUE(https_test_server.Start());
5894 // Make sure this test fails if the test server is changed to not 5916 // Make sure this test fails if the test server is changed to not
5895 // listen on an IP by default. 5917 // listen on an IP by default.
5896 ASSERT_TRUE(https_test_server.GetURL("").HostIsIPAddress()); 5918 ASSERT_TRUE(https_test_server.GetURL("/").HostIsIPAddress());
5897 std::string test_server_hostname = https_test_server.GetURL("").host(); 5919 std::string test_server_hostname = https_test_server.GetURL("/").host();
5898 5920
5899 TestDelegate d; 5921 TestDelegate d;
5900 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5922 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5901 https_test_server.GetURL("files/hpkp-headers.html"), DEFAULT_PRIORITY, 5923 https_test_server.GetURL("/hpkp-headers.html"), DEFAULT_PRIORITY, &d));
5902 &d));
5903 request->Start(); 5924 request->Start();
5904 base::RunLoop().Run(); 5925 base::RunLoop().Run();
5905 5926
5906 TransportSecurityState* security_state = 5927 TransportSecurityState* security_state =
5907 default_context_.transport_security_state(); 5928 default_context_.transport_security_state();
5908 TransportSecurityState::PKPState pkp_state; 5929 TransportSecurityState::PKPState pkp_state;
5909 EXPECT_FALSE( 5930 EXPECT_FALSE(
5910 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state)); 5931 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state));
5911 } 5932 }
5912 5933
5913 TEST_F(URLRequestTestHTTP, ProcessSTSOnce) { 5934 TEST_F(URLRequestTestHTTP, ProcessSTSOnce) {
5914 SpawnedTestServer::SSLOptions ssl_options( 5935 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5915 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5936 https_test_server.SetSSLConfig(
5916 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5937 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5917 ssl_options, 5938 https_test_server.ServeFilesFromSourceDirectory(
5918 base::FilePath(kTestFilePath)); 5939 base::FilePath(kTestFilePath));
5919 ASSERT_TRUE(https_test_server.Start()); 5940 ASSERT_TRUE(https_test_server.Start());
5920 5941
5921 std::string test_server_hostname = https_test_server.GetURL("").host(); 5942 std::string test_server_hostname = https_test_server.GetURL("/").host();
5922 5943
5923 TestDelegate d; 5944 TestDelegate d;
5924 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5945 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5925 https_test_server.GetURL("files/hsts-multiple-headers.html"), 5946 https_test_server.GetURL("/hsts-multiple-headers.html"), DEFAULT_PRIORITY,
5926 DEFAULT_PRIORITY, &d)); 5947 &d));
5927 request->Start(); 5948 request->Start();
5928 base::RunLoop().Run(); 5949 base::RunLoop().Run();
5929 5950
5930 // We should have set parameters from the first header, not the second. 5951 // We should have set parameters from the first header, not the second.
5931 TransportSecurityState* security_state = 5952 TransportSecurityState* security_state =
5932 default_context_.transport_security_state(); 5953 default_context_.transport_security_state();
5933 TransportSecurityState::STSState sts_state; 5954 TransportSecurityState::STSState sts_state;
5934 EXPECT_TRUE( 5955 EXPECT_TRUE(
5935 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 5956 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
5936 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS, 5957 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
5937 sts_state.upgrade_mode); 5958 sts_state.upgrade_mode);
5938 EXPECT_FALSE(sts_state.include_subdomains); 5959 EXPECT_FALSE(sts_state.include_subdomains);
5939 EXPECT_FALSE(sts_state.include_subdomains); 5960 EXPECT_FALSE(sts_state.include_subdomains);
5940 } 5961 }
5941 5962
5942 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP) { 5963 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP) {
5943 SpawnedTestServer::SSLOptions ssl_options( 5964 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5944 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 5965 https_test_server.SetSSLConfig(
5945 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 5966 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5946 ssl_options, 5967 https_test_server.ServeFilesFromSourceDirectory(
5947 base::FilePath(kTestFilePath)); 5968 base::FilePath(kTestFilePath));
5948 ASSERT_TRUE(https_test_server.Start()); 5969 ASSERT_TRUE(https_test_server.Start());
5949 5970
5950 std::string test_server_hostname = https_test_server.GetURL("").host(); 5971 std::string test_server_hostname = https_test_server.GetURL("/").host();
5951 5972
5952 TestDelegate d; 5973 TestDelegate d;
5953 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 5974 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5954 https_test_server.GetURL("files/hsts-and-hpkp-headers.html"), 5975 https_test_server.GetURL("/hsts-and-hpkp-headers.html"), DEFAULT_PRIORITY,
5955 DEFAULT_PRIORITY, &d)); 5976 &d));
5956 request->Start(); 5977 request->Start();
5957 base::RunLoop().Run(); 5978 base::RunLoop().Run();
5958 5979
5959 // We should have set parameters from the first header, not the second. 5980 // We should have set parameters from the first header, not the second.
5960 TransportSecurityState* security_state = 5981 TransportSecurityState* security_state =
5961 default_context_.transport_security_state(); 5982 default_context_.transport_security_state();
5962 TransportSecurityState::STSState sts_state; 5983 TransportSecurityState::STSState sts_state;
5963 TransportSecurityState::PKPState pkp_state; 5984 TransportSecurityState::PKPState pkp_state;
5964 EXPECT_TRUE( 5985 EXPECT_TRUE(
5965 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 5986 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
(...skipping 11 matching lines...) Expand all
5977 // Even though there is an HSTS header asserting includeSubdomains, it is 5998 // Even though there is an HSTS header asserting includeSubdomains, it is
5978 // the *second* such header, and we MUST process only the first. 5999 // the *second* such header, and we MUST process only the first.
5979 EXPECT_FALSE(sts_state.include_subdomains); 6000 EXPECT_FALSE(sts_state.include_subdomains);
5980 // includeSubdomains does not occur in the test HPKP header. 6001 // includeSubdomains does not occur in the test HPKP header.
5981 EXPECT_FALSE(pkp_state.include_subdomains); 6002 EXPECT_FALSE(pkp_state.include_subdomains);
5982 } 6003 }
5983 6004
5984 // Tests that when multiple HPKP headers are present, asserting different 6005 // Tests that when multiple HPKP headers are present, asserting different
5985 // policies, that only the first such policy is processed. 6006 // policies, that only the first such policy is processed.
5986 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP2) { 6007 TEST_F(URLRequestTestHTTP, ProcessSTSAndPKP2) {
5987 SpawnedTestServer::SSLOptions ssl_options( 6008 EmbeddedTestServer https_test_server(net::EmbeddedTestServer::TYPE_HTTPS);
5988 SpawnedTestServer::SSLOptions::CERT_COMMON_NAME_IS_DOMAIN); 6009 https_test_server.SetSSLConfig(
5989 SpawnedTestServer https_test_server(SpawnedTestServer::TYPE_HTTPS, 6010 net::EmbeddedTestServer::CERT_COMMON_NAME_IS_DOMAIN);
5990 ssl_options, 6011 https_test_server.ServeFilesFromSourceDirectory(
5991 base::FilePath(kTestFilePath)); 6012 base::FilePath(kTestFilePath));
5992 ASSERT_TRUE(https_test_server.Start()); 6013 ASSERT_TRUE(https_test_server.Start());
5993 6014
5994 std::string test_server_hostname = https_test_server.GetURL("").host(); 6015 std::string test_server_hostname = https_test_server.GetURL("/").host();
5995 6016
5996 TestDelegate d; 6017 TestDelegate d;
5997 scoped_ptr<URLRequest> request(default_context_.CreateRequest( 6018 scoped_ptr<URLRequest> request(default_context_.CreateRequest(
5998 https_test_server.GetURL("files/hsts-and-hpkp-headers2.html"), 6019 https_test_server.GetURL("/hsts-and-hpkp-headers2.html"),
5999 DEFAULT_PRIORITY, &d)); 6020 DEFAULT_PRIORITY, &d));
6000 request->Start(); 6021 request->Start();
6001 base::RunLoop().Run(); 6022 base::RunLoop().Run();
6002 6023
6003 TransportSecurityState* security_state = 6024 TransportSecurityState* security_state =
6004 default_context_.transport_security_state(); 6025 default_context_.transport_security_state();
6005 TransportSecurityState::STSState sts_state; 6026 TransportSecurityState::STSState sts_state;
6006 TransportSecurityState::PKPState pkp_state; 6027 TransportSecurityState::PKPState pkp_state;
6007 EXPECT_TRUE( 6028 EXPECT_TRUE(
6008 security_state->GetDynamicSTSState(test_server_hostname, &sts_state)); 6029 security_state->GetDynamicSTSState(test_server_hostname, &sts_state));
6009 EXPECT_TRUE( 6030 EXPECT_TRUE(
6010 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state)); 6031 security_state->GetDynamicPKPState(test_server_hostname, &pkp_state));
6011 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS, 6032 EXPECT_EQ(TransportSecurityState::STSState::MODE_FORCE_HTTPS,
6012 sts_state.upgrade_mode); 6033 sts_state.upgrade_mode);
6013 #if defined(OS_ANDROID) 6034 #if defined(OS_ANDROID)
6014 // Android's CertVerifyProc does not (yet) handle pins. 6035 // Android's CertVerifyProc does not (yet) handle pins.
6015 #else 6036 #else
6016 EXPECT_TRUE(pkp_state.HasPublicKeyPins()); 6037 EXPECT_TRUE(pkp_state.HasPublicKeyPins());
6017 #endif 6038 #endif
6018 EXPECT_NE(sts_state.expiry, pkp_state.expiry); 6039 EXPECT_NE(sts_state.expiry, pkp_state.expiry);
6019 6040
6020 EXPECT_TRUE(sts_state.include_subdomains); 6041 EXPECT_TRUE(sts_state.include_subdomains);
6021 EXPECT_FALSE(pkp_state.include_subdomains); 6042 EXPECT_FALSE(pkp_state.include_subdomains);
6022 } 6043 }
6023 6044
6045 #endif // !defined(OS_IOS)
6046
6024 TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) { 6047 TEST_F(URLRequestTestHTTP, ContentTypeNormalizationTest) {
6025 ASSERT_TRUE(test_server_.Start()); 6048 ASSERT_TRUE(http_test_server()->Start());
6026 6049
6027 TestDelegate d; 6050 TestDelegate d;
6028 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6051 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6029 test_server_.GetURL("files/content-type-normalization.html"), 6052 http_test_server()->GetURL("/content-type-normalization.html"),
6030 DEFAULT_PRIORITY, &d)); 6053 DEFAULT_PRIORITY, &d));
6031 req->Start(); 6054 req->Start();
6032 base::RunLoop().Run(); 6055 base::RunLoop().Run();
6033 6056
6034 std::string mime_type; 6057 std::string mime_type;
6035 req->GetMimeType(&mime_type); 6058 req->GetMimeType(&mime_type);
6036 EXPECT_EQ("text/html", mime_type); 6059 EXPECT_EQ("text/html", mime_type);
6037 6060
6038 std::string charset; 6061 std::string charset;
6039 req->GetCharset(&charset); 6062 req->GetCharset(&charset);
(...skipping 17 matching lines...) Expand all
6057 GURL file_url("file:///foo.txt"); 6080 GURL file_url("file:///foo.txt");
6058 FileProtocolHandler file_protocol_handler( 6081 FileProtocolHandler file_protocol_handler(
6059 base::ThreadTaskRunnerHandle::Get()); 6082 base::ThreadTaskRunnerHandle::Get());
6060 EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url)); 6083 EXPECT_FALSE(file_protocol_handler.IsSafeRedirectTarget(file_url));
6061 6084
6062 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget(). 6085 // Test URLRequestJobFactoryImpl::IsSafeRedirectTarget().
6063 EXPECT_FALSE(job_factory_->IsSafeRedirectTarget(file_url)); 6086 EXPECT_FALSE(job_factory_->IsSafeRedirectTarget(file_url));
6064 } 6087 }
6065 6088
6066 TEST_F(URLRequestTestHTTP, RestrictFileRedirects) { 6089 TEST_F(URLRequestTestHTTP, RestrictFileRedirects) {
6067 ASSERT_TRUE(test_server_.Start()); 6090 ASSERT_TRUE(http_test_server()->Start());
6068 6091
6069 TestDelegate d; 6092 TestDelegate d;
6070 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6093 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6071 test_server_.GetURL("files/redirect-to-file.html"), DEFAULT_PRIORITY, 6094 http_test_server()->GetURL("/redirect-to-file.html"), DEFAULT_PRIORITY,
6072 &d)); 6095 &d));
6073 req->Start(); 6096 req->Start();
6074 base::RunLoop().Run(); 6097 base::RunLoop().Run();
6075 6098
6076 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); 6099 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status());
6077 EXPECT_EQ(ERR_UNSAFE_REDIRECT, req->status().error()); 6100 EXPECT_EQ(ERR_UNSAFE_REDIRECT, req->status().error());
6078 } 6101 }
6079 #endif // !defined(DISABLE_FILE_SUPPORT) 6102 #endif // !defined(DISABLE_FILE_SUPPORT)
6080 6103
6081 TEST_F(URLRequestTestHTTP, RestrictDataRedirects) { 6104 TEST_F(URLRequestTestHTTP, RestrictDataRedirects) {
6082 ASSERT_TRUE(test_server_.Start()); 6105 ASSERT_TRUE(http_test_server()->Start());
6083 6106
6084 TestDelegate d; 6107 TestDelegate d;
6085 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6108 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6086 test_server_.GetURL("files/redirect-to-data.html"), DEFAULT_PRIORITY, 6109 http_test_server()->GetURL("/redirect-to-data.html"), DEFAULT_PRIORITY,
6087 &d)); 6110 &d));
6088 req->Start(); 6111 req->Start();
6089 base::MessageLoop::current()->Run(); 6112 base::MessageLoop::current()->Run();
6090 6113
6091 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); 6114 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status());
6092 EXPECT_EQ(ERR_UNSAFE_REDIRECT, req->status().error()); 6115 EXPECT_EQ(ERR_UNSAFE_REDIRECT, req->status().error());
6093 } 6116 }
6094 6117
6095 TEST_F(URLRequestTestHTTP, RedirectToInvalidURL) { 6118 TEST_F(URLRequestTestHTTP, RedirectToInvalidURL) {
6096 ASSERT_TRUE(test_server_.Start()); 6119 ASSERT_TRUE(http_test_server()->Start());
6097 6120
6098 TestDelegate d; 6121 TestDelegate d;
6099 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6122 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6100 test_server_.GetURL("files/redirect-to-invalid-url.html"), 6123 http_test_server()->GetURL("/redirect-to-invalid-url.html"),
6101 DEFAULT_PRIORITY, &d)); 6124 DEFAULT_PRIORITY, &d));
6102 req->Start(); 6125 req->Start();
6103 base::RunLoop().Run(); 6126 base::RunLoop().Run();
6104 6127
6105 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); 6128 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status());
6106 EXPECT_EQ(ERR_INVALID_URL, req->status().error()); 6129 EXPECT_EQ(ERR_INVALID_URL, req->status().error());
6107 } 6130 }
6108 6131
6109 // Make sure redirects are cached, despite not reading their bodies. 6132 // Make sure redirects are cached, despite not reading their bodies.
6110 TEST_F(URLRequestTestHTTP, CacheRedirect) { 6133 TEST_F(URLRequestTestHTTP, CacheRedirect) {
6111 ASSERT_TRUE(test_server_.Start()); 6134 ASSERT_TRUE(http_test_server()->Start());
6112 GURL redirect_url = 6135 GURL redirect_url =
6113 test_server_.GetURL("files/redirect302-to-echo-cacheable"); 6136 http_test_server()->GetURL("/redirect302-to-echo-cacheable");
6114 6137
6115 { 6138 {
6116 TestDelegate d; 6139 TestDelegate d;
6117 scoped_ptr<URLRequest> req( 6140 scoped_ptr<URLRequest> req(
6118 default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d)); 6141 default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d));
6119 req->Start(); 6142 req->Start();
6120 base::RunLoop().Run(); 6143 base::RunLoop().Run();
6121 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6144 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6122 EXPECT_EQ(1, d.received_redirect_count()); 6145 EXPECT_EQ(1, d.received_redirect_count());
6123 EXPECT_EQ(test_server_.GetURL("echo"), req->url()); 6146 EXPECT_EQ(http_test_server()->GetURL("/echo"), req->url());
6124 } 6147 }
6125 6148
6126 { 6149 {
6127 TestDelegate d; 6150 TestDelegate d;
6128 d.set_quit_on_redirect(true); 6151 d.set_quit_on_redirect(true);
6129 scoped_ptr<URLRequest> req( 6152 scoped_ptr<URLRequest> req(
6130 default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d)); 6153 default_context_.CreateRequest(redirect_url, DEFAULT_PRIORITY, &d));
6131 req->Start(); 6154 req->Start();
6132 base::RunLoop().Run(); 6155 base::RunLoop().Run();
6133 6156
6134 EXPECT_EQ(1, d.received_redirect_count()); 6157 EXPECT_EQ(1, d.received_redirect_count());
6135 EXPECT_EQ(0, d.response_started_count()); 6158 EXPECT_EQ(0, d.response_started_count());
6136 EXPECT_TRUE(req->was_cached()); 6159 EXPECT_TRUE(req->was_cached());
6137 6160
6138 req->FollowDeferredRedirect(); 6161 req->FollowDeferredRedirect();
6139 base::RunLoop().Run(); 6162 base::RunLoop().Run();
6140 EXPECT_EQ(1, d.received_redirect_count()); 6163 EXPECT_EQ(1, d.received_redirect_count());
6141 EXPECT_EQ(1, d.response_started_count()); 6164 EXPECT_EQ(1, d.response_started_count());
6142 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6165 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6143 EXPECT_EQ(test_server_.GetURL("echo"), req->url()); 6166 EXPECT_EQ(http_test_server()->GetURL("/echo"), req->url());
6144 } 6167 }
6145 } 6168 }
6146 6169
6147 // Make sure a request isn't cached when a NetworkDelegate forces a redirect 6170 // Make sure a request isn't cached when a NetworkDelegate forces a redirect
6148 // when the headers are read, since the body won't have been read. 6171 // when the headers are read, since the body won't have been read.
6149 TEST_F(URLRequestTestHTTP, NoCacheOnNetworkDelegateRedirect) { 6172 TEST_F(URLRequestTestHTTP, NoCacheOnNetworkDelegateRedirect) {
6150 ASSERT_TRUE(test_server_.Start()); 6173 ASSERT_TRUE(http_test_server()->Start());
6151 // URL that is normally cached. 6174 // URL that is normally cached.
6152 GURL initial_url = test_server_.GetURL("cachetime"); 6175 GURL initial_url = http_test_server()->GetURL("/cachetime");
6153 6176
6154 { 6177 {
6155 // Set up the TestNetworkDelegate tp force a redirect. 6178 // Set up the TestNetworkDelegate tp force a redirect.
6156 GURL redirect_to_url = test_server_.GetURL("echo"); 6179 GURL redirect_to_url = http_test_server()->GetURL("/echo");
6157 default_network_delegate_.set_redirect_on_headers_received_url( 6180 default_network_delegate_.set_redirect_on_headers_received_url(
6158 redirect_to_url); 6181 redirect_to_url);
6159 6182
6160 TestDelegate d; 6183 TestDelegate d;
6161 scoped_ptr<URLRequest> req( 6184 scoped_ptr<URLRequest> req(
6162 default_context_.CreateRequest(initial_url, DEFAULT_PRIORITY, &d)); 6185 default_context_.CreateRequest(initial_url, DEFAULT_PRIORITY, &d));
6163 req->Start(); 6186 req->Start();
6164 base::RunLoop().Run(); 6187 base::RunLoop().Run();
6165 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6188 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6166 EXPECT_EQ(1, d.received_redirect_count()); 6189 EXPECT_EQ(1, d.received_redirect_count());
(...skipping 10 matching lines...) Expand all
6177 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6200 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6178 EXPECT_FALSE(req->was_cached()); 6201 EXPECT_FALSE(req->was_cached());
6179 EXPECT_EQ(0, d.received_redirect_count()); 6202 EXPECT_EQ(0, d.received_redirect_count());
6180 EXPECT_EQ(initial_url, req->url()); 6203 EXPECT_EQ(initial_url, req->url());
6181 } 6204 }
6182 } 6205 }
6183 6206
6184 // Tests that redirection to an unsafe URL is allowed when it has been marked as 6207 // Tests that redirection to an unsafe URL is allowed when it has been marked as
6185 // safe. 6208 // safe.
6186 TEST_F(URLRequestTestHTTP, UnsafeRedirectToWhitelistedUnsafeURL) { 6209 TEST_F(URLRequestTestHTTP, UnsafeRedirectToWhitelistedUnsafeURL) {
6187 ASSERT_TRUE(test_server_.Start()); 6210 ASSERT_TRUE(http_test_server()->Start());
6188 6211
6189 GURL unsafe_url("data:text/html,this-is-considered-an-unsafe-url"); 6212 GURL unsafe_url("data:text/html,this-is-considered-an-unsafe-url");
6190 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 6213 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
6191 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 6214 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
6192 6215
6193 TestDelegate d; 6216 TestDelegate d;
6194 { 6217 {
6195 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6218 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6196 test_server_.GetURL("whatever"), DEFAULT_PRIORITY, &d)); 6219 http_test_server()->GetURL("/whatever"), DEFAULT_PRIORITY, &d));
6197 6220
6198 r->Start(); 6221 r->Start();
6199 base::RunLoop().Run(); 6222 base::RunLoop().Run();
6200 6223
6201 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 6224 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6202 6225
6203 EXPECT_EQ(2U, r->url_chain().size()); 6226 EXPECT_EQ(2U, r->url_chain().size());
6204 EXPECT_EQ(OK, r->status().error()); 6227 EXPECT_EQ(OK, r->status().error());
6205 EXPECT_EQ(unsafe_url, r->url()); 6228 EXPECT_EQ(unsafe_url, r->url());
6206 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received()); 6229 EXPECT_EQ("this-is-considered-an-unsafe-url", d.data_received());
6207 } 6230 }
6208 } 6231 }
6209 6232
6210 // Tests that a redirect to a different unsafe URL is blocked, even after adding 6233 // Tests that a redirect to a different unsafe URL is blocked, even after adding
6211 // some other URL to the whitelist. 6234 // some other URL to the whitelist.
6212 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) { 6235 TEST_F(URLRequestTestHTTP, UnsafeRedirectToDifferentUnsafeURL) {
6213 ASSERT_TRUE(test_server_.Start()); 6236 ASSERT_TRUE(http_test_server()->Start());
6214 6237
6215 GURL unsafe_url("data:text/html,something"); 6238 GURL unsafe_url("data:text/html,something");
6216 GURL different_unsafe_url("data:text/html,something-else"); 6239 GURL different_unsafe_url("data:text/html,something-else");
6217 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 6240 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
6218 default_network_delegate_.set_allowed_unsafe_redirect_url( 6241 default_network_delegate_.set_allowed_unsafe_redirect_url(
6219 different_unsafe_url); 6242 different_unsafe_url);
6220 6243
6221 TestDelegate d; 6244 TestDelegate d;
6222 { 6245 {
6223 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6246 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6224 test_server_.GetURL("whatever"), DEFAULT_PRIORITY, &d)); 6247 http_test_server()->GetURL("/whatever"), DEFAULT_PRIORITY, &d));
6225 6248
6226 r->Start(); 6249 r->Start();
6227 base::RunLoop().Run(); 6250 base::RunLoop().Run();
6228 6251
6229 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 6252 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
6230 EXPECT_EQ(ERR_UNSAFE_REDIRECT, r->status().error()); 6253 EXPECT_EQ(ERR_UNSAFE_REDIRECT, r->status().error());
6231 } 6254 }
6232 } 6255 }
6233 6256
6234 // Redirects from an URL with fragment to an unsafe URL with fragment should 6257 // Redirects from an URL with fragment to an unsafe URL with fragment should
6235 // be allowed, and the reference fragment of the target URL should be preserved. 6258 // be allowed, and the reference fragment of the target URL should be preserved.
6236 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) { 6259 TEST_F(URLRequestTestHTTP, UnsafeRedirectWithDifferentReferenceFragment) {
6237 ASSERT_TRUE(test_server_.Start()); 6260 ASSERT_TRUE(http_test_server()->Start());
6238 6261
6239 GURL original_url(test_server_.GetURL("original#fragment1")); 6262 GURL original_url(http_test_server()->GetURL("/original#fragment1"));
6240 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 6263 GURL unsafe_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
6241 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2"); 6264 GURL expected_url("data:,url-marked-safe-and-used-in-redirect#fragment2");
6242 6265
6243 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url); 6266 default_network_delegate_.set_redirect_on_headers_received_url(unsafe_url);
6244 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 6267 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
6245 6268
6246 TestDelegate d; 6269 TestDelegate d;
6247 { 6270 {
6248 scoped_ptr<URLRequest> r( 6271 scoped_ptr<URLRequest> r(
6249 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 6272 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
6250 6273
6251 r->Start(); 6274 r->Start();
6252 base::RunLoop().Run(); 6275 base::RunLoop().Run();
6253 6276
6254 EXPECT_EQ(2U, r->url_chain().size()); 6277 EXPECT_EQ(2U, r->url_chain().size());
6255 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 6278 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6256 EXPECT_EQ(OK, r->status().error()); 6279 EXPECT_EQ(OK, r->status().error());
6257 EXPECT_EQ(original_url, r->original_url()); 6280 EXPECT_EQ(original_url, r->original_url());
6258 EXPECT_EQ(expected_url, r->url()); 6281 EXPECT_EQ(expected_url, r->url());
6259 } 6282 }
6260 } 6283 }
6261 6284
6262 // When a delegate has specified a safe redirect URL, but it does not match the 6285 // When a delegate has specified a safe redirect URL, but it does not match the
6263 // redirect target, then do not prevent the reference fragment from being added. 6286 // redirect target, then do not prevent the reference fragment from being added.
6264 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) { 6287 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragmentAndUnrelatedUnsafeUrl) {
6265 ASSERT_TRUE(test_server_.Start()); 6288 ASSERT_TRUE(http_test_server()->Start());
6266 6289
6267 GURL original_url(test_server_.GetURL("original#expected-fragment")); 6290 GURL original_url(http_test_server()->GetURL("/original#expected-fragment"));
6268 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url"); 6291 GURL unsafe_url("data:text/html,this-url-does-not-match-redirect-url");
6269 GURL redirect_url(test_server_.GetURL("target")); 6292 GURL redirect_url(http_test_server()->GetURL("/target"));
6270 GURL expected_redirect_url(test_server_.GetURL("target#expected-fragment")); 6293 GURL expected_redirect_url(
6294 http_test_server()->GetURL("/target#expected-fragment"));
6271 6295
6272 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 6296 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
6273 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url); 6297 default_network_delegate_.set_allowed_unsafe_redirect_url(unsafe_url);
6274 6298
6275 TestDelegate d; 6299 TestDelegate d;
6276 { 6300 {
6277 scoped_ptr<URLRequest> r( 6301 scoped_ptr<URLRequest> r(
6278 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 6302 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
6279 6303
6280 r->Start(); 6304 r->Start();
6281 base::RunLoop().Run(); 6305 base::RunLoop().Run();
6282 6306
6283 EXPECT_EQ(2U, r->url_chain().size()); 6307 EXPECT_EQ(2U, r->url_chain().size());
6284 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 6308 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6285 EXPECT_EQ(OK, r->status().error()); 6309 EXPECT_EQ(OK, r->status().error());
6286 EXPECT_EQ(original_url, r->original_url()); 6310 EXPECT_EQ(original_url, r->original_url());
6287 EXPECT_EQ(expected_redirect_url, r->url()); 6311 EXPECT_EQ(expected_redirect_url, r->url());
6288 } 6312 }
6289 } 6313 }
6290 6314
6291 // When a delegate has specified a safe redirect URL, assume that the redirect 6315 // When a delegate has specified a safe redirect URL, assume that the redirect
6292 // URL should not be changed. In particular, the reference fragment should not 6316 // URL should not be changed. In particular, the reference fragment should not
6293 // be modified. 6317 // be modified.
6294 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) { 6318 TEST_F(URLRequestTestHTTP, RedirectWithReferenceFragment) {
6295 ASSERT_TRUE(test_server_.Start()); 6319 ASSERT_TRUE(http_test_server()->Start());
6296 6320
6297 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); 6321 GURL original_url(
6322 http_test_server()->GetURL("/original#should-not-be-appended"));
6298 GURL redirect_url("data:text/html,expect-no-reference-fragment"); 6323 GURL redirect_url("data:text/html,expect-no-reference-fragment");
6299 6324
6300 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url); 6325 default_network_delegate_.set_redirect_on_headers_received_url(redirect_url);
6301 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url); 6326 default_network_delegate_.set_allowed_unsafe_redirect_url(redirect_url);
6302 6327
6303 TestDelegate d; 6328 TestDelegate d;
6304 { 6329 {
6305 scoped_ptr<URLRequest> r( 6330 scoped_ptr<URLRequest> r(
6306 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 6331 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
6307 6332
6308 r->Start(); 6333 r->Start();
6309 base::RunLoop().Run(); 6334 base::RunLoop().Run();
6310 6335
6311 EXPECT_EQ(2U, r->url_chain().size()); 6336 EXPECT_EQ(2U, r->url_chain().size());
6312 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 6337 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6313 EXPECT_EQ(OK, r->status().error()); 6338 EXPECT_EQ(OK, r->status().error());
6314 EXPECT_EQ(original_url, r->original_url()); 6339 EXPECT_EQ(original_url, r->original_url());
6315 EXPECT_EQ(redirect_url, r->url()); 6340 EXPECT_EQ(redirect_url, r->url());
6316 } 6341 }
6317 } 6342 }
6318 6343
6319 // When a URLRequestRedirectJob is created, the redirection must be followed and 6344 // When a URLRequestRedirectJob is created, the redirection must be followed and
6320 // the reference fragment of the target URL must not be modified. 6345 // the reference fragment of the target URL must not be modified.
6321 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) { 6346 TEST_F(URLRequestTestHTTP, RedirectJobWithReferenceFragment) {
6322 ASSERT_TRUE(test_server_.Start()); 6347 ASSERT_TRUE(http_test_server()->Start());
6323 6348
6324 GURL original_url(test_server_.GetURL("original#should-not-be-appended")); 6349 GURL original_url(
6325 GURL redirect_url(test_server_.GetURL("echo")); 6350 http_test_server()->GetURL("/original#should-not-be-appended"));
6351 GURL redirect_url(http_test_server()->GetURL("/echo"));
6326 6352
6327 TestDelegate d; 6353 TestDelegate d;
6328 scoped_ptr<URLRequest> r( 6354 scoped_ptr<URLRequest> r(
6329 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 6355 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
6330 6356
6331 URLRequestRedirectJob* job = new URLRequestRedirectJob( 6357 URLRequestRedirectJob* job = new URLRequestRedirectJob(
6332 r.get(), &default_network_delegate_, redirect_url, 6358 r.get(), &default_network_delegate_, redirect_url,
6333 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); 6359 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
6334 AddTestInterceptor()->set_main_intercept_job(job); 6360 AddTestInterceptor()->set_main_intercept_job(job);
6335 6361
6336 r->Start(); 6362 r->Start();
6337 base::RunLoop().Run(); 6363 base::RunLoop().Run();
6338 6364
6339 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 6365 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6340 EXPECT_EQ(OK, r->status().error()); 6366 EXPECT_EQ(OK, r->status().error());
6341 EXPECT_EQ(original_url, r->original_url()); 6367 EXPECT_EQ(original_url, r->original_url());
6342 EXPECT_EQ(redirect_url, r->url()); 6368 EXPECT_EQ(redirect_url, r->url());
6343 } 6369 }
6344 6370
6345 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) { 6371 TEST_F(URLRequestTestHTTP, NoUserPassInReferrer) {
6346 ASSERT_TRUE(test_server_.Start()); 6372 ASSERT_TRUE(http_test_server()->Start());
6347 6373
6348 TestDelegate d; 6374 TestDelegate d;
6349 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6375 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6350 test_server_.GetURL("echoheader?Referer"), DEFAULT_PRIORITY, &d)); 6376 http_test_server()->GetURL("/echoheader?Referer"), DEFAULT_PRIORITY, &d));
6351 req->SetReferrer("http://user:pass@foo.com/"); 6377 req->SetReferrer("http://user:pass@foo.com/");
6352 req->Start(); 6378 req->Start();
6353 base::RunLoop().Run(); 6379 base::RunLoop().Run();
6354 6380
6355 EXPECT_EQ(std::string("http://foo.com/"), d.data_received()); 6381 EXPECT_EQ(std::string("http://foo.com/"), d.data_received());
6356 } 6382 }
6357 6383
6358 TEST_F(URLRequestTestHTTP, NoFragmentInReferrer) { 6384 TEST_F(URLRequestTestHTTP, NoFragmentInReferrer) {
6359 ASSERT_TRUE(test_server_.Start()); 6385 ASSERT_TRUE(http_test_server()->Start());
6360 6386
6361 TestDelegate d; 6387 TestDelegate d;
6362 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6388 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6363 test_server_.GetURL("echoheader?Referer"), DEFAULT_PRIORITY, &d)); 6389 http_test_server()->GetURL("/echoheader?Referer"), DEFAULT_PRIORITY, &d));
6364 req->SetReferrer("http://foo.com/test#fragment"); 6390 req->SetReferrer("http://foo.com/test#fragment");
6365 req->Start(); 6391 req->Start();
6366 base::RunLoop().Run(); 6392 base::RunLoop().Run();
6367 6393
6368 EXPECT_EQ(std::string("http://foo.com/test"), d.data_received()); 6394 EXPECT_EQ(std::string("http://foo.com/test"), d.data_received());
6369 } 6395 }
6370 6396
6371 TEST_F(URLRequestTestHTTP, EmptyReferrerAfterValidReferrer) { 6397 TEST_F(URLRequestTestHTTP, EmptyReferrerAfterValidReferrer) {
6372 ASSERT_TRUE(test_server_.Start()); 6398 ASSERT_TRUE(http_test_server()->Start());
6373 6399
6374 TestDelegate d; 6400 TestDelegate d;
6375 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6401 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6376 test_server_.GetURL("echoheader?Referer"), DEFAULT_PRIORITY, &d)); 6402 http_test_server()->GetURL("/echoheader?Referer"), DEFAULT_PRIORITY, &d));
6377 req->SetReferrer("http://foo.com/test#fragment"); 6403 req->SetReferrer("http://foo.com/test#fragment");
6378 req->SetReferrer(""); 6404 req->SetReferrer("");
6379 req->Start(); 6405 req->Start();
6380 base::RunLoop().Run(); 6406 base::RunLoop().Run();
6381 6407
6382 EXPECT_EQ(std::string("None"), d.data_received()); 6408 EXPECT_EQ(std::string("None"), d.data_received());
6383 } 6409 }
6384 6410
6385 // Defer network start and then resume, checking that the request was a success 6411 // Defer network start and then resume, checking that the request was a success
6386 // and bytes were received. 6412 // and bytes were received.
6387 TEST_F(URLRequestTestHTTP, DeferredBeforeNetworkStart) { 6413 TEST_F(URLRequestTestHTTP, DeferredBeforeNetworkStart) {
6388 ASSERT_TRUE(test_server_.Start()); 6414 ASSERT_TRUE(http_test_server()->Start());
6389 6415
6390 TestDelegate d; 6416 TestDelegate d;
6391 { 6417 {
6392 d.set_quit_on_network_start(true); 6418 d.set_quit_on_network_start(true);
6393 GURL test_url(test_server_.GetURL("echo")); 6419 GURL test_url(http_test_server()->GetURL("/echo"));
6394 scoped_ptr<URLRequest> req( 6420 scoped_ptr<URLRequest> req(
6395 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 6421 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
6396 6422
6397 req->Start(); 6423 req->Start();
6398 base::RunLoop().Run(); 6424 base::RunLoop().Run();
6399 6425
6400 EXPECT_EQ(1, d.received_before_network_start_count()); 6426 EXPECT_EQ(1, d.received_before_network_start_count());
6401 EXPECT_EQ(0, d.response_started_count()); 6427 EXPECT_EQ(0, d.response_started_count());
6402 6428
6403 req->ResumeNetworkStart(); 6429 req->ResumeNetworkStart();
6404 base::RunLoop().Run(); 6430 base::RunLoop().Run();
6405 6431
6406 EXPECT_EQ(1, d.response_started_count()); 6432 EXPECT_EQ(1, d.response_started_count());
6407 EXPECT_NE(0, d.bytes_received()); 6433 EXPECT_NE(0, d.bytes_received());
6408 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6434 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6409 } 6435 }
6410 } 6436 }
6411 6437
6412 // Check that OnBeforeNetworkStart is only called once even if there is a 6438 // Check that OnBeforeNetworkStart is only called once even if there is a
6413 // redirect. 6439 // redirect.
6414 TEST_F(URLRequestTestHTTP, BeforeNetworkStartCalledOnce) { 6440 TEST_F(URLRequestTestHTTP, BeforeNetworkStartCalledOnce) {
6415 ASSERT_TRUE(test_server_.Start()); 6441 ASSERT_TRUE(http_test_server()->Start());
6416 6442
6417 TestDelegate d; 6443 TestDelegate d;
6418 { 6444 {
6419 d.set_quit_on_redirect(true); 6445 d.set_quit_on_redirect(true);
6420 d.set_quit_on_network_start(true); 6446 d.set_quit_on_network_start(true);
6421 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6447 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6422 test_server_.GetURL("server-redirect?echo"), DEFAULT_PRIORITY, &d)); 6448 http_test_server()->GetURL("/server-redirect?echo"), DEFAULT_PRIORITY,
6449 &d));
6423 6450
6424 req->Start(); 6451 req->Start();
6425 base::RunLoop().Run(); 6452 base::RunLoop().Run();
6426 6453
6427 EXPECT_EQ(1, d.received_before_network_start_count()); 6454 EXPECT_EQ(1, d.received_before_network_start_count());
6428 EXPECT_EQ(0, d.response_started_count()); 6455 EXPECT_EQ(0, d.response_started_count());
6429 EXPECT_EQ(0, d.received_redirect_count()); 6456 EXPECT_EQ(0, d.received_redirect_count());
6430 6457
6431 req->ResumeNetworkStart(); 6458 req->ResumeNetworkStart();
6432 base::RunLoop().Run(); 6459 base::RunLoop().Run();
6433 6460
6434 EXPECT_EQ(1, d.received_redirect_count()); 6461 EXPECT_EQ(1, d.received_redirect_count());
6435 req->FollowDeferredRedirect(); 6462 req->FollowDeferredRedirect();
6436 base::RunLoop().Run(); 6463 base::RunLoop().Run();
6437 6464
6438 // Check that the redirect's new network transaction does not get propagated 6465 // Check that the redirect's new network transaction does not get propagated
6439 // to a second OnBeforeNetworkStart() notification. 6466 // to a second OnBeforeNetworkStart() notification.
6440 EXPECT_EQ(1, d.received_before_network_start_count()); 6467 EXPECT_EQ(1, d.received_before_network_start_count());
6441 6468
6442 EXPECT_EQ(1, d.response_started_count()); 6469 EXPECT_EQ(1, d.response_started_count());
6443 EXPECT_NE(0, d.bytes_received()); 6470 EXPECT_NE(0, d.bytes_received());
6444 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6471 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6445 } 6472 }
6446 } 6473 }
6447 6474
6448 // Cancel the request after learning that the request would use the network. 6475 // Cancel the request after learning that the request would use the network.
6449 TEST_F(URLRequestTestHTTP, CancelOnBeforeNetworkStart) { 6476 TEST_F(URLRequestTestHTTP, CancelOnBeforeNetworkStart) {
6450 ASSERT_TRUE(test_server_.Start()); 6477 ASSERT_TRUE(http_test_server()->Start());
6451 6478
6452 TestDelegate d; 6479 TestDelegate d;
6453 { 6480 {
6454 d.set_quit_on_network_start(true); 6481 d.set_quit_on_network_start(true);
6455 GURL test_url(test_server_.GetURL("echo")); 6482 GURL test_url(http_test_server()->GetURL("/echo"));
6456 scoped_ptr<URLRequest> req( 6483 scoped_ptr<URLRequest> req(
6457 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 6484 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
6458 6485
6459 req->Start(); 6486 req->Start();
6460 base::RunLoop().Run(); 6487 base::RunLoop().Run();
6461 6488
6462 EXPECT_EQ(1, d.received_before_network_start_count()); 6489 EXPECT_EQ(1, d.received_before_network_start_count());
6463 EXPECT_EQ(0, d.response_started_count()); 6490 EXPECT_EQ(0, d.response_started_count());
6464 6491
6465 req->Cancel(); 6492 req->Cancel();
6466 base::RunLoop().Run(); 6493 base::RunLoop().Run();
6467 6494
6468 EXPECT_EQ(1, d.response_started_count()); 6495 EXPECT_EQ(1, d.response_started_count());
6469 EXPECT_EQ(0, d.bytes_received()); 6496 EXPECT_EQ(0, d.bytes_received());
6470 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); 6497 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status());
6471 } 6498 }
6472 } 6499 }
6473 6500
6474 TEST_F(URLRequestTestHTTP, CancelRedirect) { 6501 TEST_F(URLRequestTestHTTP, CancelRedirect) {
6475 ASSERT_TRUE(test_server_.Start()); 6502 ASSERT_TRUE(http_test_server()->Start());
6476 6503
6477 TestDelegate d; 6504 TestDelegate d;
6478 { 6505 {
6479 d.set_cancel_in_received_redirect(true); 6506 d.set_cancel_in_received_redirect(true);
6480 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6507 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6481 test_server_.GetURL("files/redirect-test.html"), DEFAULT_PRIORITY, &d)); 6508 http_test_server()->GetURL("/redirect-test.html"), DEFAULT_PRIORITY,
6509 &d));
6482 req->Start(); 6510 req->Start();
6483 base::RunLoop().Run(); 6511 base::RunLoop().Run();
6484 6512
6485 EXPECT_EQ(1, d.response_started_count()); 6513 EXPECT_EQ(1, d.response_started_count());
6486 EXPECT_EQ(0, d.bytes_received()); 6514 EXPECT_EQ(0, d.bytes_received());
6487 EXPECT_FALSE(d.received_data_before_response()); 6515 EXPECT_FALSE(d.received_data_before_response());
6488 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); 6516 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status());
6489 } 6517 }
6490 } 6518 }
6491 6519
6492 TEST_F(URLRequestTestHTTP, DeferredRedirect) { 6520 TEST_F(URLRequestTestHTTP, DeferredRedirect) {
6493 ASSERT_TRUE(test_server_.Start()); 6521 ASSERT_TRUE(http_test_server()->Start());
6494 6522
6495 TestDelegate d; 6523 TestDelegate d;
6496 { 6524 {
6497 d.set_quit_on_redirect(true); 6525 d.set_quit_on_redirect(true);
6498 GURL test_url(test_server_.GetURL("files/redirect-test.html")); 6526 GURL test_url(http_test_server()->GetURL("/redirect-test.html"));
6499 scoped_ptr<URLRequest> req( 6527 scoped_ptr<URLRequest> req(
6500 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 6528 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
6501 6529
6502 req->Start(); 6530 req->Start();
6503 base::RunLoop().Run(); 6531 base::RunLoop().Run();
6504 6532
6505 EXPECT_EQ(1, d.received_redirect_count()); 6533 EXPECT_EQ(1, d.received_redirect_count());
6506 6534
6507 req->FollowDeferredRedirect(); 6535 req->FollowDeferredRedirect();
6508 base::RunLoop().Run(); 6536 base::RunLoop().Run();
6509 6537
6510 EXPECT_EQ(1, d.response_started_count()); 6538 EXPECT_EQ(1, d.response_started_count());
6511 EXPECT_FALSE(d.received_data_before_response()); 6539 EXPECT_FALSE(d.received_data_before_response());
6512 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6540 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6513 6541
6514 base::FilePath path; 6542 base::FilePath path;
6515 PathService::Get(base::DIR_SOURCE_ROOT, &path); 6543 PathService::Get(base::DIR_SOURCE_ROOT, &path);
6516 path = path.Append(kTestFilePath); 6544 path = path.Append(kTestFilePath);
6517 path = path.Append(FILE_PATH_LITERAL("with-headers.html")); 6545 path = path.Append(FILE_PATH_LITERAL("with-headers.html"));
6518 6546
6519 std::string contents; 6547 std::string contents;
6520 EXPECT_TRUE(base::ReadFileToString(path, &contents)); 6548 EXPECT_TRUE(base::ReadFileToString(path, &contents));
6521 EXPECT_EQ(contents, d.data_received()); 6549 EXPECT_EQ(contents, d.data_received());
6522 } 6550 }
6523 } 6551 }
6524 6552
6525 TEST_F(URLRequestTestHTTP, DeferredRedirect_GetFullRequestHeaders) { 6553 TEST_F(URLRequestTestHTTP, DeferredRedirect_GetFullRequestHeaders) {
6526 ASSERT_TRUE(test_server_.Start()); 6554 ASSERT_TRUE(http_test_server()->Start());
6527 6555
6528 TestDelegate d; 6556 TestDelegate d;
6529 { 6557 {
6530 d.set_quit_on_redirect(true); 6558 d.set_quit_on_redirect(true);
6531 GURL test_url(test_server_.GetURL("files/redirect-test.html")); 6559 GURL test_url(http_test_server()->GetURL("/redirect-test.html"));
6532 scoped_ptr<URLRequest> req( 6560 scoped_ptr<URLRequest> req(
6533 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 6561 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
6534 6562
6535 EXPECT_FALSE(d.have_full_request_headers()); 6563 EXPECT_FALSE(d.have_full_request_headers());
6536 6564
6537 req->Start(); 6565 req->Start();
6538 base::RunLoop().Run(); 6566 base::RunLoop().Run();
6539 6567
6540 EXPECT_EQ(1, d.received_redirect_count()); 6568 EXPECT_EQ(1, d.received_redirect_count());
6541 EXPECT_TRUE(d.have_full_request_headers()); 6569 EXPECT_TRUE(d.have_full_request_headers());
6542 CheckFullRequestHeaders(d.full_request_headers(), test_url); 6570 CheckFullRequestHeaders(d.full_request_headers(), test_url);
6543 d.ClearFullRequestHeaders(); 6571 d.ClearFullRequestHeaders();
6544 6572
6545 req->FollowDeferredRedirect(); 6573 req->FollowDeferredRedirect();
6546 base::RunLoop().Run(); 6574 base::RunLoop().Run();
6547 6575
6548 GURL target_url(test_server_.GetURL("files/with-headers.html")); 6576 GURL target_url(http_test_server()->GetURL("/with-headers.html"));
6549 EXPECT_EQ(1, d.response_started_count()); 6577 EXPECT_EQ(1, d.response_started_count());
6550 EXPECT_TRUE(d.have_full_request_headers()); 6578 EXPECT_TRUE(d.have_full_request_headers());
6551 CheckFullRequestHeaders(d.full_request_headers(), target_url); 6579 CheckFullRequestHeaders(d.full_request_headers(), target_url);
6552 EXPECT_FALSE(d.received_data_before_response()); 6580 EXPECT_FALSE(d.received_data_before_response());
6553 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 6581 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
6554 6582
6555 base::FilePath path; 6583 base::FilePath path;
6556 PathService::Get(base::DIR_SOURCE_ROOT, &path); 6584 PathService::Get(base::DIR_SOURCE_ROOT, &path);
6557 path = path.Append(kTestFilePath); 6585 path = path.Append(kTestFilePath);
6558 path = path.Append(FILE_PATH_LITERAL("with-headers.html")); 6586 path = path.Append(FILE_PATH_LITERAL("with-headers.html"));
6559 6587
6560 std::string contents; 6588 std::string contents;
6561 EXPECT_TRUE(base::ReadFileToString(path, &contents)); 6589 EXPECT_TRUE(base::ReadFileToString(path, &contents));
6562 EXPECT_EQ(contents, d.data_received()); 6590 EXPECT_EQ(contents, d.data_received());
6563 } 6591 }
6564 } 6592 }
6565 6593
6566 TEST_F(URLRequestTestHTTP, CancelDeferredRedirect) { 6594 TEST_F(URLRequestTestHTTP, CancelDeferredRedirect) {
6567 ASSERT_TRUE(test_server_.Start()); 6595 ASSERT_TRUE(http_test_server()->Start());
6568 6596
6569 TestDelegate d; 6597 TestDelegate d;
6570 { 6598 {
6571 d.set_quit_on_redirect(true); 6599 d.set_quit_on_redirect(true);
6572 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6600 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6573 test_server_.GetURL("files/redirect-test.html"), DEFAULT_PRIORITY, &d)); 6601 http_test_server()->GetURL("/redirect-test.html"), DEFAULT_PRIORITY,
6602 &d));
6574 req->Start(); 6603 req->Start();
6575 base::RunLoop().Run(); 6604 base::RunLoop().Run();
6576 6605
6577 EXPECT_EQ(1, d.received_redirect_count()); 6606 EXPECT_EQ(1, d.received_redirect_count());
6578 6607
6579 req->Cancel(); 6608 req->Cancel();
6580 base::RunLoop().Run(); 6609 base::RunLoop().Run();
6581 6610
6582 EXPECT_EQ(1, d.response_started_count()); 6611 EXPECT_EQ(1, d.response_started_count());
6583 EXPECT_EQ(0, d.bytes_received()); 6612 EXPECT_EQ(0, d.bytes_received());
6584 EXPECT_FALSE(d.received_data_before_response()); 6613 EXPECT_FALSE(d.received_data_before_response());
6585 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); 6614 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status());
6586 } 6615 }
6587 } 6616 }
6588 6617
6589 TEST_F(URLRequestTestHTTP, VaryHeader) { 6618 TEST_F(URLRequestTestHTTP, VaryHeader) {
6590 ASSERT_TRUE(test_server_.Start()); 6619 ASSERT_TRUE(http_test_server()->Start());
6591 6620
6592 // Populate the cache. 6621 // Populate the cache.
6593 { 6622 {
6594 TestDelegate d; 6623 TestDelegate d;
6595 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6624 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6596 test_server_.GetURL("echoheadercache?foo"), DEFAULT_PRIORITY, &d)); 6625 http_test_server()->GetURL("/echoheadercache?foo"), DEFAULT_PRIORITY,
6626 &d));
6597 HttpRequestHeaders headers; 6627 HttpRequestHeaders headers;
6598 headers.SetHeader("foo", "1"); 6628 headers.SetHeader("foo", "1");
6599 req->SetExtraRequestHeaders(headers); 6629 req->SetExtraRequestHeaders(headers);
6600 req->Start(); 6630 req->Start();
6601 base::RunLoop().Run(); 6631 base::RunLoop().Run();
6602 6632
6603 LoadTimingInfo load_timing_info; 6633 LoadTimingInfo load_timing_info;
6604 req->GetLoadTimingInfo(&load_timing_info); 6634 req->GetLoadTimingInfo(&load_timing_info);
6605 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); 6635 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES);
6606 } 6636 }
6607 6637
6608 // Expect a cache hit. 6638 // Expect a cache hit.
6609 { 6639 {
6610 TestDelegate d; 6640 TestDelegate d;
6611 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6641 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6612 test_server_.GetURL("echoheadercache?foo"), DEFAULT_PRIORITY, &d)); 6642 http_test_server()->GetURL("/echoheadercache?foo"), DEFAULT_PRIORITY,
6643 &d));
6613 HttpRequestHeaders headers; 6644 HttpRequestHeaders headers;
6614 headers.SetHeader("foo", "1"); 6645 headers.SetHeader("foo", "1");
6615 req->SetExtraRequestHeaders(headers); 6646 req->SetExtraRequestHeaders(headers);
6616 req->Start(); 6647 req->Start();
6617 base::RunLoop().Run(); 6648 base::RunLoop().Run();
6618 6649
6619 EXPECT_TRUE(req->was_cached()); 6650 EXPECT_TRUE(req->was_cached());
6620 6651
6621 LoadTimingInfo load_timing_info; 6652 LoadTimingInfo load_timing_info;
6622 req->GetLoadTimingInfo(&load_timing_info); 6653 req->GetLoadTimingInfo(&load_timing_info);
6623 TestLoadTimingCacheHitNoNetwork(load_timing_info); 6654 TestLoadTimingCacheHitNoNetwork(load_timing_info);
6624 } 6655 }
6625 6656
6626 // Expect a cache miss. 6657 // Expect a cache miss.
6627 { 6658 {
6628 TestDelegate d; 6659 TestDelegate d;
6629 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6660 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6630 test_server_.GetURL("echoheadercache?foo"), DEFAULT_PRIORITY, &d)); 6661 http_test_server()->GetURL("/echoheadercache?foo"), DEFAULT_PRIORITY,
6662 &d));
6631 HttpRequestHeaders headers; 6663 HttpRequestHeaders headers;
6632 headers.SetHeader("foo", "2"); 6664 headers.SetHeader("foo", "2");
6633 req->SetExtraRequestHeaders(headers); 6665 req->SetExtraRequestHeaders(headers);
6634 req->Start(); 6666 req->Start();
6635 base::RunLoop().Run(); 6667 base::RunLoop().Run();
6636 6668
6637 EXPECT_FALSE(req->was_cached()); 6669 EXPECT_FALSE(req->was_cached());
6638 6670
6639 LoadTimingInfo load_timing_info; 6671 LoadTimingInfo load_timing_info;
6640 req->GetLoadTimingInfo(&load_timing_info); 6672 req->GetLoadTimingInfo(&load_timing_info);
6641 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); 6673 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES);
6642 } 6674 }
6643 } 6675 }
6644 6676
6645 TEST_F(URLRequestTestHTTP, BasicAuth) { 6677 TEST_F(URLRequestTestHTTP, BasicAuth) {
6646 ASSERT_TRUE(test_server_.Start()); 6678 ASSERT_TRUE(http_test_server()->Start());
6647 6679
6648 // populate the cache 6680 // populate the cache
6649 { 6681 {
6650 TestDelegate d; 6682 TestDelegate d;
6651 d.set_credentials(AuthCredentials(kUser, kSecret)); 6683 d.set_credentials(AuthCredentials(kUser, kSecret));
6652 6684
6653 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6685 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6654 test_server_.GetURL("auth-basic"), DEFAULT_PRIORITY, &d)); 6686 http_test_server()->GetURL("/auth-basic"), DEFAULT_PRIORITY, &d));
6655 r->Start(); 6687 r->Start();
6656 6688
6657 base::RunLoop().Run(); 6689 base::RunLoop().Run();
6658 6690
6659 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); 6691 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos);
6660 } 6692 }
6661 6693
6662 // repeat request with end-to-end validation. since auth-basic results in a 6694 // repeat request with end-to-end validation. since auth-basic results in a
6663 // cachable page, we expect this test to result in a 304. in which case, the 6695 // cachable page, we expect this test to result in a 304. in which case, the
6664 // response should be fetched from the cache. 6696 // response should be fetched from the cache.
6665 { 6697 {
6666 TestDelegate d; 6698 TestDelegate d;
6667 d.set_credentials(AuthCredentials(kUser, kSecret)); 6699 d.set_credentials(AuthCredentials(kUser, kSecret));
6668 6700
6669 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6701 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6670 test_server_.GetURL("auth-basic"), DEFAULT_PRIORITY, &d)); 6702 http_test_server()->GetURL("/auth-basic"), DEFAULT_PRIORITY, &d));
6671 r->SetLoadFlags(LOAD_VALIDATE_CACHE); 6703 r->SetLoadFlags(LOAD_VALIDATE_CACHE);
6672 r->Start(); 6704 r->Start();
6673 6705
6674 base::RunLoop().Run(); 6706 base::RunLoop().Run();
6675 6707
6676 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); 6708 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos);
6677 6709
6678 // Should be the same cached document. 6710 // Should be the same cached document.
6679 EXPECT_TRUE(r->was_cached()); 6711 EXPECT_TRUE(r->was_cached());
6680 } 6712 }
6681 } 6713 }
6682 6714
6683 // Check that Set-Cookie headers in 401 responses are respected. 6715 // Check that Set-Cookie headers in 401 responses are respected.
6684 // http://crbug.com/6450 6716 // http://crbug.com/6450
6685 TEST_F(URLRequestTestHTTP, BasicAuthWithCookies) { 6717 TEST_F(URLRequestTestHTTP, BasicAuthWithCookies) {
6686 ASSERT_TRUE(test_server_.Start()); 6718 ASSERT_TRUE(http_test_server()->Start());
6687 6719
6688 GURL url_requiring_auth = 6720 GURL url_requiring_auth =
6689 test_server_.GetURL("auth-basic?set-cookie-if-challenged"); 6721 http_test_server()->GetURL("/auth-basic?set-cookie-if-challenged");
6690 6722
6691 // Request a page that will give a 401 containing a Set-Cookie header. 6723 // Request a page that will give a 401 containing a Set-Cookie header.
6692 // Verify that when the transaction is restarted, it includes the new cookie. 6724 // Verify that when the transaction is restarted, it includes the new cookie.
6693 { 6725 {
6694 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 6726 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
6695 TestURLRequestContext context(true); 6727 TestURLRequestContext context(true);
6696 context.set_network_delegate(&network_delegate); 6728 context.set_network_delegate(&network_delegate);
6697 context.Init(); 6729 context.Init();
6698 6730
6699 TestDelegate d; 6731 TestDelegate d;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
6736 EXPECT_TRUE(d.data_received().find("user2/secret") != std::string::npos); 6768 EXPECT_TRUE(d.data_received().find("user2/secret") != std::string::npos);
6737 6769
6738 // Make sure we sent the cookie in the restarted transaction. 6770 // Make sure we sent the cookie in the restarted transaction.
6739 EXPECT_TRUE(d.data_received().find("Cookie: got_challenged=true") 6771 EXPECT_TRUE(d.data_received().find("Cookie: got_challenged=true")
6740 != std::string::npos); 6772 != std::string::npos);
6741 } 6773 }
6742 } 6774 }
6743 6775
6744 // Tests that load timing works as expected with auth and the cache. 6776 // Tests that load timing works as expected with auth and the cache.
6745 TEST_F(URLRequestTestHTTP, BasicAuthLoadTiming) { 6777 TEST_F(URLRequestTestHTTP, BasicAuthLoadTiming) {
6746 ASSERT_TRUE(test_server_.Start()); 6778 ASSERT_TRUE(http_test_server()->Start());
6747 6779
6748 // populate the cache 6780 // populate the cache
6749 { 6781 {
6750 TestDelegate d; 6782 TestDelegate d;
6751 d.set_credentials(AuthCredentials(kUser, kSecret)); 6783 d.set_credentials(AuthCredentials(kUser, kSecret));
6752 6784
6753 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6785 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6754 test_server_.GetURL("auth-basic"), DEFAULT_PRIORITY, &d)); 6786 http_test_server()->GetURL("/auth-basic"), DEFAULT_PRIORITY, &d));
6755 r->Start(); 6787 r->Start();
6756 6788
6757 base::RunLoop().Run(); 6789 base::RunLoop().Run();
6758 6790
6759 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); 6791 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos);
6760 6792
6761 LoadTimingInfo load_timing_info_before_auth; 6793 LoadTimingInfo load_timing_info_before_auth;
6762 EXPECT_TRUE(default_network_delegate_.GetLoadTimingInfoBeforeAuth( 6794 EXPECT_TRUE(default_network_delegate_.GetLoadTimingInfoBeforeAuth(
6763 &load_timing_info_before_auth)); 6795 &load_timing_info_before_auth));
6764 TestLoadTimingNotReused(load_timing_info_before_auth, 6796 TestLoadTimingNotReused(load_timing_info_before_auth,
(...skipping 11 matching lines...) Expand all
6776 } 6808 }
6777 6809
6778 // Repeat request with end-to-end validation. Since auth-basic results in a 6810 // Repeat request with end-to-end validation. Since auth-basic results in a
6779 // cachable page, we expect this test to result in a 304. In which case, the 6811 // cachable page, we expect this test to result in a 304. In which case, the
6780 // response should be fetched from the cache. 6812 // response should be fetched from the cache.
6781 { 6813 {
6782 TestDelegate d; 6814 TestDelegate d;
6783 d.set_credentials(AuthCredentials(kUser, kSecret)); 6815 d.set_credentials(AuthCredentials(kUser, kSecret));
6784 6816
6785 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 6817 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
6786 test_server_.GetURL("auth-basic"), DEFAULT_PRIORITY, &d)); 6818 http_test_server()->GetURL("/auth-basic"), DEFAULT_PRIORITY, &d));
6787 r->SetLoadFlags(LOAD_VALIDATE_CACHE); 6819 r->SetLoadFlags(LOAD_VALIDATE_CACHE);
6788 r->Start(); 6820 r->Start();
6789 6821
6790 base::RunLoop().Run(); 6822 base::RunLoop().Run();
6791 6823
6792 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos); 6824 EXPECT_TRUE(d.data_received().find("user/secret") != std::string::npos);
6793 6825
6794 // Should be the same cached document. 6826 // Should be the same cached document.
6795 EXPECT_TRUE(r->was_cached()); 6827 EXPECT_TRUE(r->was_cached());
6796 6828
6797 // Since there was a request that went over the wire, the load timing 6829 // Since there was a request that went over the wire, the load timing
6798 // information should include connection times. 6830 // information should include connection times.
6799 LoadTimingInfo load_timing_info; 6831 LoadTimingInfo load_timing_info;
6800 r->GetLoadTimingInfo(&load_timing_info); 6832 r->GetLoadTimingInfo(&load_timing_info);
6801 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES); 6833 TestLoadTimingNotReused(load_timing_info, CONNECT_TIMING_HAS_DNS_TIMES);
6802 } 6834 }
6803 } 6835 }
6804 6836
6805 // In this test, we do a POST which the server will 302 redirect. 6837 // In this test, we do a POST which the server will 302 redirect.
6806 // The subsequent transaction should use GET, and should not send the 6838 // The subsequent transaction should use GET, and should not send the
6807 // Content-Type header. 6839 // Content-Type header.
6808 // http://code.google.com/p/chromium/issues/detail?id=843 6840 // http://code.google.com/p/chromium/issues/detail?id=843
6809 TEST_F(URLRequestTestHTTP, Post302RedirectGet) { 6841 TEST_F(URLRequestTestHTTP, Post302RedirectGet) {
6810 ASSERT_TRUE(test_server_.Start()); 6842 ASSERT_TRUE(http_test_server()->Start());
6811 6843
6812 const char kData[] = "hello world"; 6844 const char kData[] = "hello world";
6813 6845
6814 TestDelegate d; 6846 TestDelegate d;
6815 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 6847 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
6816 test_server_.GetURL("files/redirect-to-echoall"), DEFAULT_PRIORITY, &d)); 6848 http_test_server()->GetURL("/redirect-to-echoall"), DEFAULT_PRIORITY,
6849 &d));
6817 req->set_method("POST"); 6850 req->set_method("POST");
6818 req->set_upload(CreateSimpleUploadData(kData)); 6851 req->set_upload(CreateSimpleUploadData(kData));
6819 6852
6820 // Set headers (some of which are specific to the POST). 6853 // Set headers (some of which are specific to the POST).
6821 HttpRequestHeaders headers; 6854 HttpRequestHeaders headers;
6822 headers.AddHeadersFromString( 6855 headers.AddHeadersFromString(
6823 "Content-Type: multipart/form-data; " 6856 "Content-Type: multipart/form-data; "
6824 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n" 6857 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n"
6825 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9," 6858 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,"
6826 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n" 6859 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
(...skipping 21 matching lines...) Expand all
6848 EXPECT_TRUE(ContainsString(data, "Accept-Language:")); 6881 EXPECT_TRUE(ContainsString(data, "Accept-Language:"));
6849 EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); 6882 EXPECT_TRUE(ContainsString(data, "Accept-Charset:"));
6850 } 6883 }
6851 6884
6852 // The following tests check that we handle mutating the request for HTTP 6885 // The following tests check that we handle mutating the request for HTTP
6853 // redirects as expected. 6886 // redirects as expected.
6854 // See https://crbug.com/56373, https://crbug.com/102130, and 6887 // See https://crbug.com/56373, https://crbug.com/102130, and
6855 // https://crbug.com/465517. 6888 // https://crbug.com/465517.
6856 6889
6857 TEST_F(URLRequestTestHTTP, Redirect301Tests) { 6890 TEST_F(URLRequestTestHTTP, Redirect301Tests) {
6858 ASSERT_TRUE(test_server_.Start()); 6891 ASSERT_TRUE(http_test_server()->Start());
6859 6892
6860 const GURL url = test_server_.GetURL("files/redirect301-to-echo"); 6893 const GURL url = http_test_server()->GetURL("/redirect301-to-echo");
6861 const GURL https_redirect_url = 6894 const GURL https_redirect_url =
6862 test_server_.GetURL("files/redirect301-to-https"); 6895 http_test_server()->GetURL("/redirect301-to-https");
6863 6896
6864 HTTPRedirectMethodTest(url, "POST", "GET", true); 6897 HTTPRedirectMethodTest(url, "POST", "GET", true);
6865 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 6898 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
6866 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6899 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
6867 6900
6868 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); 6901 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec());
6869 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); 6902 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null");
6870 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); 6903 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string());
6871 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", 6904 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET",
6872 std::string()); 6905 std::string());
6873 } 6906 }
6874 6907
6875 TEST_F(URLRequestTestHTTP, Redirect302Tests) { 6908 TEST_F(URLRequestTestHTTP, Redirect302Tests) {
6876 ASSERT_TRUE(test_server_.Start()); 6909 ASSERT_TRUE(http_test_server()->Start());
6877 6910
6878 const GURL url = test_server_.GetURL("files/redirect302-to-echo"); 6911 const GURL url = http_test_server()->GetURL("/redirect302-to-echo");
6879 const GURL https_redirect_url = 6912 const GURL https_redirect_url =
6880 test_server_.GetURL("files/redirect302-to-https"); 6913 http_test_server()->GetURL("/redirect302-to-https");
6881 6914
6882 HTTPRedirectMethodTest(url, "POST", "GET", true); 6915 HTTPRedirectMethodTest(url, "POST", "GET", true);
6883 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 6916 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
6884 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6917 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
6885 6918
6886 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); 6919 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec());
6887 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); 6920 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null");
6888 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); 6921 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string());
6889 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", 6922 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET",
6890 std::string()); 6923 std::string());
6891 } 6924 }
6892 6925
6893 TEST_F(URLRequestTestHTTP, Redirect303Tests) { 6926 TEST_F(URLRequestTestHTTP, Redirect303Tests) {
6894 ASSERT_TRUE(test_server_.Start()); 6927 ASSERT_TRUE(http_test_server()->Start());
6895 6928
6896 const GURL url = test_server_.GetURL("files/redirect303-to-echo"); 6929 const GURL url = http_test_server()->GetURL("/redirect303-to-echo");
6897 const GURL https_redirect_url = 6930 const GURL https_redirect_url =
6898 test_server_.GetURL("files/redirect303-to-https"); 6931 http_test_server()->GetURL("/redirect303-to-https");
6899 6932
6900 HTTPRedirectMethodTest(url, "POST", "GET", true); 6933 HTTPRedirectMethodTest(url, "POST", "GET", true);
6901 HTTPRedirectMethodTest(url, "PUT", "GET", true); 6934 HTTPRedirectMethodTest(url, "PUT", "GET", true);
6902 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6935 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
6903 6936
6904 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); 6937 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec());
6905 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); 6938 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null");
6906 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string()); 6939 HTTPRedirectOriginHeaderTest(url, "POST", "GET", std::string());
6907 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET", 6940 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "GET",
6908 std::string()); 6941 std::string());
6909 } 6942 }
6910 6943
6911 TEST_F(URLRequestTestHTTP, Redirect307Tests) { 6944 TEST_F(URLRequestTestHTTP, Redirect307Tests) {
6912 ASSERT_TRUE(test_server_.Start()); 6945 ASSERT_TRUE(http_test_server()->Start());
6913 6946
6914 const GURL url = test_server_.GetURL("files/redirect307-to-echo"); 6947 const GURL url = http_test_server()->GetURL("/redirect307-to-echo");
6915 const GURL https_redirect_url = 6948 const GURL https_redirect_url =
6916 test_server_.GetURL("files/redirect307-to-https"); 6949 http_test_server()->GetURL("/redirect307-to-https");
6917 6950
6918 HTTPRedirectMethodTest(url, "POST", "POST", true); 6951 HTTPRedirectMethodTest(url, "POST", "POST", true);
6919 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 6952 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
6920 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6953 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
6921 6954
6922 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); 6955 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec());
6923 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); 6956 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null");
6924 HTTPRedirectOriginHeaderTest(url, "POST", "POST", url.GetOrigin().spec()); 6957 HTTPRedirectOriginHeaderTest(url, "POST", "POST", url.GetOrigin().spec());
6925 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "POST", "null"); 6958 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "POST", "null");
6926 } 6959 }
6927 6960
6928 TEST_F(URLRequestTestHTTP, Redirect308Tests) { 6961 TEST_F(URLRequestTestHTTP, Redirect308Tests) {
6929 ASSERT_TRUE(test_server_.Start()); 6962 ASSERT_TRUE(http_test_server()->Start());
6930 6963
6931 const GURL url = test_server_.GetURL("files/redirect308-to-echo"); 6964 const GURL url = http_test_server()->GetURL("/redirect308-to-echo");
6932 const GURL https_redirect_url = 6965 const GURL https_redirect_url =
6933 test_server_.GetURL("files/redirect308-to-https"); 6966 http_test_server()->GetURL("/redirect308-to-https");
6934 6967
6935 HTTPRedirectMethodTest(url, "POST", "POST", true); 6968 HTTPRedirectMethodTest(url, "POST", "POST", true);
6936 HTTPRedirectMethodTest(url, "PUT", "PUT", true); 6969 HTTPRedirectMethodTest(url, "PUT", "PUT", true);
6937 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false); 6970 HTTPRedirectMethodTest(url, "HEAD", "HEAD", false);
6938 6971
6939 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec()); 6972 HTTPRedirectOriginHeaderTest(url, "GET", "GET", url.GetOrigin().spec());
6940 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null"); 6973 HTTPRedirectOriginHeaderTest(https_redirect_url, "GET", "GET", "null");
6941 HTTPRedirectOriginHeaderTest(url, "POST", "POST", url.GetOrigin().spec()); 6974 HTTPRedirectOriginHeaderTest(url, "POST", "POST", url.GetOrigin().spec());
6942 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "POST", "null"); 6975 HTTPRedirectOriginHeaderTest(https_redirect_url, "POST", "POST", "null");
6943 } 6976 }
6944 6977
6945 // Make sure that 308 responses without bodies are not treated as redirects. 6978 // Make sure that 308 responses without bodies are not treated as redirects.
6946 // Certain legacy apis that pre-date the response code expect this behavior 6979 // Certain legacy apis that pre-date the response code expect this behavior
6947 // (Like Google Drive). 6980 // (Like Google Drive).
6948 TEST_F(URLRequestTestHTTP, NoRedirectOn308WithoutLocationHeader) { 6981 TEST_F(URLRequestTestHTTP, NoRedirectOn308WithoutLocationHeader) {
6949 ASSERT_TRUE(test_server_.Start()); 6982 ASSERT_TRUE(http_test_server()->Start());
6950 6983
6951 TestDelegate d; 6984 TestDelegate d;
6952 const GURL url = test_server_.GetURL("files/308-without-location-header"); 6985 const GURL url = http_test_server()->GetURL("/308-without-location-header");
6953 6986
6954 scoped_ptr<URLRequest> request( 6987 scoped_ptr<URLRequest> request(
6955 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d)); 6988 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d));
6956 6989
6957 request->Start(); 6990 request->Start();
6958 base::RunLoop().Run(); 6991 base::RunLoop().Run();
6959 EXPECT_EQ(URLRequestStatus::SUCCESS, request->status().status()); 6992 EXPECT_EQ(URLRequestStatus::SUCCESS, request->status().status());
6960 EXPECT_EQ(OK, request->status().error()); 6993 EXPECT_EQ(OK, request->status().error());
6961 EXPECT_EQ(0, d.received_redirect_count()); 6994 EXPECT_EQ(0, d.received_redirect_count());
6962 EXPECT_EQ(308, request->response_headers()->response_code()); 6995 EXPECT_EQ(308, request->response_headers()->response_code());
6963 EXPECT_EQ("This is not a redirect.", d.data_received()); 6996 EXPECT_EQ("This is not a redirect.", d.data_received());
6964 } 6997 }
6965 6998
6966 TEST_F(URLRequestTestHTTP, Redirect302PreserveReferenceFragment) { 6999 TEST_F(URLRequestTestHTTP, Redirect302PreserveReferenceFragment) {
6967 ASSERT_TRUE(test_server_.Start()); 7000 ASSERT_TRUE(http_test_server()->Start());
6968 7001
6969 GURL original_url(test_server_.GetURL("files/redirect302-to-echo#fragment")); 7002 GURL original_url(
6970 GURL expected_url(test_server_.GetURL("echo#fragment")); 7003 http_test_server()->GetURL("/redirect302-to-echo#fragment"));
7004 GURL expected_url(http_test_server()->GetURL("/echo#fragment"));
6971 7005
6972 TestDelegate d; 7006 TestDelegate d;
6973 { 7007 {
6974 scoped_ptr<URLRequest> r( 7008 scoped_ptr<URLRequest> r(
6975 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d)); 7009 default_context_.CreateRequest(original_url, DEFAULT_PRIORITY, &d));
6976 7010
6977 r->Start(); 7011 r->Start();
6978 base::RunLoop().Run(); 7012 base::RunLoop().Run();
6979 7013
6980 EXPECT_EQ(2U, r->url_chain().size()); 7014 EXPECT_EQ(2U, r->url_chain().size());
6981 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 7015 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
6982 EXPECT_EQ(OK, r->status().error()); 7016 EXPECT_EQ(OK, r->status().error());
6983 EXPECT_EQ(original_url, r->original_url()); 7017 EXPECT_EQ(original_url, r->original_url());
6984 EXPECT_EQ(expected_url, r->url()); 7018 EXPECT_EQ(expected_url, r->url());
6985 } 7019 }
6986 } 7020 }
6987 7021
6988 TEST_F(URLRequestTestHTTP, RedirectPreserveFirstPartyURL) { 7022 TEST_F(URLRequestTestHTTP, RedirectPreserveFirstPartyURL) {
6989 ASSERT_TRUE(test_server_.Start()); 7023 ASSERT_TRUE(http_test_server()->Start());
6990 7024
6991 GURL url(test_server_.GetURL("files/redirect302-to-echo")); 7025 GURL url(http_test_server()->GetURL("/redirect302-to-echo"));
6992 GURL first_party_url("http://example.com"); 7026 GURL first_party_url("http://example.com");
6993 7027
6994 TestDelegate d; 7028 TestDelegate d;
6995 { 7029 {
6996 scoped_ptr<URLRequest> r( 7030 scoped_ptr<URLRequest> r(
6997 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d)); 7031 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d));
6998 r->set_first_party_for_cookies(first_party_url); 7032 r->set_first_party_for_cookies(first_party_url);
6999 7033
7000 r->Start(); 7034 r->Start();
7001 base::RunLoop().Run(); 7035 base::RunLoop().Run();
7002 7036
7003 EXPECT_EQ(2U, r->url_chain().size()); 7037 EXPECT_EQ(2U, r->url_chain().size());
7004 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 7038 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
7005 EXPECT_EQ(OK, r->status().error()); 7039 EXPECT_EQ(OK, r->status().error());
7006 EXPECT_EQ(first_party_url, r->first_party_for_cookies()); 7040 EXPECT_EQ(first_party_url, r->first_party_for_cookies());
7007 } 7041 }
7008 } 7042 }
7009 7043
7010 TEST_F(URLRequestTestHTTP, RedirectUpdateFirstPartyURL) { 7044 TEST_F(URLRequestTestHTTP, RedirectUpdateFirstPartyURL) {
7011 ASSERT_TRUE(test_server_.Start()); 7045 ASSERT_TRUE(http_test_server()->Start());
7012 7046
7013 GURL url(test_server_.GetURL("files/redirect302-to-echo")); 7047 GURL url(http_test_server()->GetURL("/redirect302-to-echo"));
7014 GURL original_first_party_url("http://example.com"); 7048 GURL original_first_party_url("http://example.com");
7015 GURL expected_first_party_url(test_server_.GetURL("echo")); 7049 GURL expected_first_party_url(http_test_server()->GetURL("/echo"));
7016 7050
7017 TestDelegate d; 7051 TestDelegate d;
7018 { 7052 {
7019 scoped_ptr<URLRequest> r( 7053 scoped_ptr<URLRequest> r(
7020 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d)); 7054 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d));
7021 r->set_first_party_for_cookies(original_first_party_url); 7055 r->set_first_party_for_cookies(original_first_party_url);
7022 r->set_first_party_url_policy( 7056 r->set_first_party_url_policy(
7023 URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT); 7057 URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT);
7024 7058
7025 r->Start(); 7059 r->Start();
7026 base::RunLoop().Run(); 7060 base::RunLoop().Run();
7027 7061
7028 EXPECT_EQ(2U, r->url_chain().size()); 7062 EXPECT_EQ(2U, r->url_chain().size());
7029 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); 7063 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status());
7030 EXPECT_EQ(OK, r->status().error()); 7064 EXPECT_EQ(OK, r->status().error());
7031 EXPECT_EQ(expected_first_party_url, r->first_party_for_cookies()); 7065 EXPECT_EQ(expected_first_party_url, r->first_party_for_cookies());
7032 } 7066 }
7033 } 7067 }
7034 7068
7035 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) { 7069 TEST_F(URLRequestTestHTTP, InterceptPost302RedirectGet) {
7036 ASSERT_TRUE(test_server_.Start()); 7070 ASSERT_TRUE(http_test_server()->Start());
7037 7071
7038 const char kData[] = "hello world"; 7072 const char kData[] = "hello world";
7039 7073
7040 TestDelegate d; 7074 TestDelegate d;
7041 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7075 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7042 test_server_.GetURL("empty.html"), DEFAULT_PRIORITY, &d)); 7076 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7043 req->set_method("POST"); 7077 req->set_method("POST");
7044 req->set_upload(CreateSimpleUploadData(kData)); 7078 req->set_upload(CreateSimpleUploadData(kData));
7045 HttpRequestHeaders headers; 7079 HttpRequestHeaders headers;
7046 headers.SetHeader(HttpRequestHeaders::kContentLength, 7080 headers.SetHeader(HttpRequestHeaders::kContentLength,
7047 base::SizeTToString(arraysize(kData) - 1)); 7081 base::SizeTToString(arraysize(kData) - 1));
7048 req->SetExtraRequestHeaders(headers); 7082 req->SetExtraRequestHeaders(headers);
7049 7083
7050 URLRequestRedirectJob* job = new URLRequestRedirectJob( 7084 URLRequestRedirectJob* job = new URLRequestRedirectJob(
7051 req.get(), &default_network_delegate_, test_server_.GetURL("echo"), 7085 req.get(), &default_network_delegate_,
7086 http_test_server()->GetURL("/echo"),
7052 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); 7087 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
7053 AddTestInterceptor()->set_main_intercept_job(job); 7088 AddTestInterceptor()->set_main_intercept_job(job);
7054 7089
7055 req->Start(); 7090 req->Start();
7056 base::RunLoop().Run(); 7091 base::RunLoop().Run();
7057 EXPECT_EQ("GET", req->method()); 7092 EXPECT_EQ("GET", req->method());
7058 } 7093 }
7059 7094
7060 TEST_F(URLRequestTestHTTP, InterceptPost307RedirectPost) { 7095 TEST_F(URLRequestTestHTTP, InterceptPost307RedirectPost) {
7061 ASSERT_TRUE(test_server_.Start()); 7096 ASSERT_TRUE(http_test_server()->Start());
7062 7097
7063 const char kData[] = "hello world"; 7098 const char kData[] = "hello world";
7064 7099
7065 TestDelegate d; 7100 TestDelegate d;
7066 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7101 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7067 test_server_.GetURL("empty.html"), DEFAULT_PRIORITY, &d)); 7102 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7068 req->set_method("POST"); 7103 req->set_method("POST");
7069 req->set_upload(CreateSimpleUploadData(kData)); 7104 req->set_upload(CreateSimpleUploadData(kData));
7070 HttpRequestHeaders headers; 7105 HttpRequestHeaders headers;
7071 headers.SetHeader(HttpRequestHeaders::kContentLength, 7106 headers.SetHeader(HttpRequestHeaders::kContentLength,
7072 base::SizeTToString(arraysize(kData) - 1)); 7107 base::SizeTToString(arraysize(kData) - 1));
7073 req->SetExtraRequestHeaders(headers); 7108 req->SetExtraRequestHeaders(headers);
7074 7109
7075 URLRequestRedirectJob* job = new URLRequestRedirectJob( 7110 URLRequestRedirectJob* job = new URLRequestRedirectJob(
7076 req.get(), &default_network_delegate_, test_server_.GetURL("echo"), 7111 req.get(), &default_network_delegate_,
7112 http_test_server()->GetURL("/echo"),
7077 URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT, 7113 URLRequestRedirectJob::REDIRECT_307_TEMPORARY_REDIRECT,
7078 "Very Good Reason"); 7114 "Very Good Reason");
7079 AddTestInterceptor()->set_main_intercept_job(job); 7115 AddTestInterceptor()->set_main_intercept_job(job);
7080 7116
7081 req->Start(); 7117 req->Start();
7082 base::RunLoop().Run(); 7118 base::RunLoop().Run();
7083 EXPECT_EQ("POST", req->method()); 7119 EXPECT_EQ("POST", req->method());
7084 EXPECT_EQ(kData, d.data_received()); 7120 EXPECT_EQ(kData, d.data_received());
7085 } 7121 }
7086 7122
7087 // Check that default A-L header is sent. 7123 // Check that default A-L header is sent.
7088 TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) { 7124 TEST_F(URLRequestTestHTTP, DefaultAcceptLanguage) {
7089 ASSERT_TRUE(test_server_.Start()); 7125 ASSERT_TRUE(http_test_server()->Start());
7090 7126
7091 StaticHttpUserAgentSettings settings("en", std::string()); 7127 StaticHttpUserAgentSettings settings("en", std::string());
7092 TestNetworkDelegate network_delegate; // Must outlive URLRequests. 7128 TestNetworkDelegate network_delegate; // Must outlive URLRequests.
7093 TestURLRequestContext context(true); 7129 TestURLRequestContext context(true);
7094 context.set_network_delegate(&network_delegate); 7130 context.set_network_delegate(&network_delegate);
7095 context.set_http_user_agent_settings(&settings); 7131 context.set_http_user_agent_settings(&settings);
7096 context.Init(); 7132 context.Init();
7097 7133
7098 TestDelegate d; 7134 TestDelegate d;
7099 scoped_ptr<URLRequest> req(context.CreateRequest( 7135 scoped_ptr<URLRequest> req(context.CreateRequest(
7100 test_server_.GetURL("echoheader?Accept-Language"), DEFAULT_PRIORITY, &d)); 7136 http_test_server()->GetURL("/echoheader?Accept-Language"),
7137 DEFAULT_PRIORITY, &d));
7101 req->Start(); 7138 req->Start();
7102 base::RunLoop().Run(); 7139 base::RunLoop().Run();
7103 EXPECT_EQ("en", d.data_received()); 7140 EXPECT_EQ("en", d.data_received());
7104 } 7141 }
7105 7142
7106 // Check that an empty A-L header is not sent. http://crbug.com/77365. 7143 // Check that an empty A-L header is not sent. http://crbug.com/77365.
7107 TEST_F(URLRequestTestHTTP, EmptyAcceptLanguage) { 7144 TEST_F(URLRequestTestHTTP, EmptyAcceptLanguage) {
7108 ASSERT_TRUE(test_server_.Start()); 7145 ASSERT_TRUE(http_test_server()->Start());
7109 7146
7110 std::string empty_string; // Avoid most vexing parse on line below. 7147 std::string empty_string; // Avoid most vexing parse on line below.
7111 StaticHttpUserAgentSettings settings(empty_string, empty_string); 7148 StaticHttpUserAgentSettings settings(empty_string, empty_string);
7112 TestNetworkDelegate network_delegate; // Must outlive URLRequests. 7149 TestNetworkDelegate network_delegate; // Must outlive URLRequests.
7113 TestURLRequestContext context(true); 7150 TestURLRequestContext context(true);
7114 context.set_network_delegate(&network_delegate); 7151 context.set_network_delegate(&network_delegate);
7115 context.Init(); 7152 context.Init();
7116 // We override the language after initialization because empty entries 7153 // We override the language after initialization because empty entries
7117 // get overridden by Init(). 7154 // get overridden by Init().
7118 context.set_http_user_agent_settings(&settings); 7155 context.set_http_user_agent_settings(&settings);
7119 7156
7120 TestDelegate d; 7157 TestDelegate d;
7121 scoped_ptr<URLRequest> req(context.CreateRequest( 7158 scoped_ptr<URLRequest> req(context.CreateRequest(
7122 test_server_.GetURL("echoheader?Accept-Language"), DEFAULT_PRIORITY, &d)); 7159 http_test_server()->GetURL("/echoheader?Accept-Language"),
7160 DEFAULT_PRIORITY, &d));
7123 req->Start(); 7161 req->Start();
7124 base::RunLoop().Run(); 7162 base::RunLoop().Run();
7125 EXPECT_EQ("None", d.data_received()); 7163 EXPECT_EQ("None", d.data_received());
7126 } 7164 }
7127 7165
7128 // Check that if request overrides the A-L header, the default is not appended. 7166 // Check that if request overrides the A-L header, the default is not appended.
7129 // See http://crbug.com/20894 7167 // See http://crbug.com/20894
7130 TEST_F(URLRequestTestHTTP, OverrideAcceptLanguage) { 7168 TEST_F(URLRequestTestHTTP, OverrideAcceptLanguage) {
7131 ASSERT_TRUE(test_server_.Start()); 7169 ASSERT_TRUE(http_test_server()->Start());
7132 7170
7133 TestDelegate d; 7171 TestDelegate d;
7134 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7172 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7135 test_server_.GetURL("echoheader?Accept-Language"), DEFAULT_PRIORITY, &d)); 7173 http_test_server()->GetURL("/echoheader?Accept-Language"),
7174 DEFAULT_PRIORITY, &d));
7136 HttpRequestHeaders headers; 7175 HttpRequestHeaders headers;
7137 headers.SetHeader(HttpRequestHeaders::kAcceptLanguage, "ru"); 7176 headers.SetHeader(HttpRequestHeaders::kAcceptLanguage, "ru");
7138 req->SetExtraRequestHeaders(headers); 7177 req->SetExtraRequestHeaders(headers);
7139 req->Start(); 7178 req->Start();
7140 base::RunLoop().Run(); 7179 base::RunLoop().Run();
7141 EXPECT_EQ(std::string("ru"), d.data_received()); 7180 EXPECT_EQ(std::string("ru"), d.data_received());
7142 } 7181 }
7143 7182
7144 // Check that default A-E header is sent. 7183 // Check that default A-E header is sent.
7145 TEST_F(URLRequestTestHTTP, DefaultAcceptEncoding) { 7184 TEST_F(URLRequestTestHTTP, DefaultAcceptEncoding) {
7146 ASSERT_TRUE(test_server_.Start()); 7185 ASSERT_TRUE(http_test_server()->Start());
7147 7186
7148 TestDelegate d; 7187 TestDelegate d;
7149 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7188 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7150 test_server_.GetURL("echoheader?Accept-Encoding"), DEFAULT_PRIORITY, &d)); 7189 http_test_server()->GetURL("/echoheader?Accept-Encoding"),
7190 DEFAULT_PRIORITY, &d));
7151 HttpRequestHeaders headers; 7191 HttpRequestHeaders headers;
7152 req->SetExtraRequestHeaders(headers); 7192 req->SetExtraRequestHeaders(headers);
7153 req->Start(); 7193 req->Start();
7154 base::RunLoop().Run(); 7194 base::RunLoop().Run();
7155 EXPECT_TRUE(ContainsString(d.data_received(), "gzip")); 7195 EXPECT_TRUE(ContainsString(d.data_received(), "gzip"));
7156 } 7196 }
7157 7197
7158 // Check that if request overrides the A-E header, the default is not appended. 7198 // Check that if request overrides the A-E header, the default is not appended.
7159 // See http://crbug.com/47381 7199 // See http://crbug.com/47381
7160 TEST_F(URLRequestTestHTTP, OverrideAcceptEncoding) { 7200 TEST_F(URLRequestTestHTTP, OverrideAcceptEncoding) {
7161 ASSERT_TRUE(test_server_.Start()); 7201 ASSERT_TRUE(http_test_server()->Start());
7162 7202
7163 TestDelegate d; 7203 TestDelegate d;
7164 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7204 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7165 test_server_.GetURL("echoheader?Accept-Encoding"), DEFAULT_PRIORITY, &d)); 7205 http_test_server()->GetURL("/echoheader?Accept-Encoding"),
7206 DEFAULT_PRIORITY, &d));
7166 HttpRequestHeaders headers; 7207 HttpRequestHeaders headers;
7167 headers.SetHeader(HttpRequestHeaders::kAcceptEncoding, "identity"); 7208 headers.SetHeader(HttpRequestHeaders::kAcceptEncoding, "identity");
7168 req->SetExtraRequestHeaders(headers); 7209 req->SetExtraRequestHeaders(headers);
7169 req->Start(); 7210 req->Start();
7170 base::RunLoop().Run(); 7211 base::RunLoop().Run();
7171 EXPECT_FALSE(ContainsString(d.data_received(), "gzip")); 7212 EXPECT_FALSE(ContainsString(d.data_received(), "gzip"));
7172 EXPECT_TRUE(ContainsString(d.data_received(), "identity")); 7213 EXPECT_TRUE(ContainsString(d.data_received(), "identity"));
7173 } 7214 }
7174 7215
7175 // Check that setting the A-C header sends the proper header. 7216 // Check that setting the A-C header sends the proper header.
7176 TEST_F(URLRequestTestHTTP, SetAcceptCharset) { 7217 TEST_F(URLRequestTestHTTP, SetAcceptCharset) {
7177 ASSERT_TRUE(test_server_.Start()); 7218 ASSERT_TRUE(http_test_server()->Start());
7178 7219
7179 TestDelegate d; 7220 TestDelegate d;
7180 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7221 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7181 test_server_.GetURL("echoheader?Accept-Charset"), DEFAULT_PRIORITY, &d)); 7222 http_test_server()->GetURL("/echoheader?Accept-Charset"),
7223 DEFAULT_PRIORITY, &d));
7182 HttpRequestHeaders headers; 7224 HttpRequestHeaders headers;
7183 headers.SetHeader(HttpRequestHeaders::kAcceptCharset, "koi-8r"); 7225 headers.SetHeader(HttpRequestHeaders::kAcceptCharset, "koi-8r");
7184 req->SetExtraRequestHeaders(headers); 7226 req->SetExtraRequestHeaders(headers);
7185 req->Start(); 7227 req->Start();
7186 base::RunLoop().Run(); 7228 base::RunLoop().Run();
7187 EXPECT_EQ(std::string("koi-8r"), d.data_received()); 7229 EXPECT_EQ(std::string("koi-8r"), d.data_received());
7188 } 7230 }
7189 7231
7190 // Check that default User-Agent header is sent. 7232 // Check that default User-Agent header is sent.
7191 TEST_F(URLRequestTestHTTP, DefaultUserAgent) { 7233 TEST_F(URLRequestTestHTTP, DefaultUserAgent) {
7192 ASSERT_TRUE(test_server_.Start()); 7234 ASSERT_TRUE(http_test_server()->Start());
7193 7235
7194 TestDelegate d; 7236 TestDelegate d;
7195 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7237 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7196 test_server_.GetURL("echoheader?User-Agent"), DEFAULT_PRIORITY, &d)); 7238 http_test_server()->GetURL("/echoheader?User-Agent"), DEFAULT_PRIORITY,
7239 &d));
7197 req->Start(); 7240 req->Start();
7198 base::RunLoop().Run(); 7241 base::RunLoop().Run();
7199 EXPECT_EQ(default_context_.http_user_agent_settings()->GetUserAgent(), 7242 EXPECT_EQ(default_context_.http_user_agent_settings()->GetUserAgent(),
7200 d.data_received()); 7243 d.data_received());
7201 } 7244 }
7202 7245
7203 // Check that if request overrides the User-Agent header, 7246 // Check that if request overrides the User-Agent header,
7204 // the default is not appended. 7247 // the default is not appended.
7205 TEST_F(URLRequestTestHTTP, OverrideUserAgent) { 7248 TEST_F(URLRequestTestHTTP, OverrideUserAgent) {
7206 ASSERT_TRUE(test_server_.Start()); 7249 ASSERT_TRUE(http_test_server()->Start());
7207 7250
7208 TestDelegate d; 7251 TestDelegate d;
7209 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7252 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7210 test_server_.GetURL("echoheader?User-Agent"), DEFAULT_PRIORITY, &d)); 7253 http_test_server()->GetURL("/echoheader?User-Agent"), DEFAULT_PRIORITY,
7254 &d));
7211 HttpRequestHeaders headers; 7255 HttpRequestHeaders headers;
7212 headers.SetHeader(HttpRequestHeaders::kUserAgent, "Lynx (textmode)"); 7256 headers.SetHeader(HttpRequestHeaders::kUserAgent, "Lynx (textmode)");
7213 req->SetExtraRequestHeaders(headers); 7257 req->SetExtraRequestHeaders(headers);
7214 req->Start(); 7258 req->Start();
7215 base::RunLoop().Run(); 7259 base::RunLoop().Run();
7216 EXPECT_EQ(std::string("Lynx (textmode)"), d.data_received()); 7260 EXPECT_EQ(std::string("Lynx (textmode)"), d.data_received());
7217 } 7261 }
7218 7262
7219 // Check that a NULL HttpUserAgentSettings causes the corresponding empty 7263 // Check that a NULL HttpUserAgentSettings causes the corresponding empty
7220 // User-Agent header to be sent but does not send the Accept-Language and 7264 // User-Agent header to be sent but does not send the Accept-Language and
7221 // Accept-Charset headers. 7265 // Accept-Charset headers.
7222 TEST_F(URLRequestTestHTTP, EmptyHttpUserAgentSettings) { 7266 TEST_F(URLRequestTestHTTP, EmptyHttpUserAgentSettings) {
7223 ASSERT_TRUE(test_server_.Start()); 7267 ASSERT_TRUE(http_test_server()->Start());
7224 7268
7225 TestNetworkDelegate network_delegate; // Must outlive URLRequests. 7269 TestNetworkDelegate network_delegate; // Must outlive URLRequests.
7226 TestURLRequestContext context(true); 7270 TestURLRequestContext context(true);
7227 context.set_network_delegate(&network_delegate); 7271 context.set_network_delegate(&network_delegate);
7228 context.Init(); 7272 context.Init();
7229 // We override the HttpUserAgentSettings after initialization because empty 7273 // We override the HttpUserAgentSettings after initialization because empty
7230 // entries get overridden by Init(). 7274 // entries get overridden by Init().
7231 context.set_http_user_agent_settings(NULL); 7275 context.set_http_user_agent_settings(NULL);
7232 7276
7233 struct { 7277 struct {
7234 const char* request; 7278 const char* request;
7235 const char* expected_response; 7279 const char* expected_response;
7236 } tests[] = { { "echoheader?Accept-Language", "None" }, 7280 } tests[] = {{"/echoheader?Accept-Language", "None"},
7237 { "echoheader?Accept-Charset", "None" }, 7281 {"/echoheader?Accept-Charset", "None"},
7238 { "echoheader?User-Agent", "" } }; 7282 {"/echoheader?User-Agent", ""}};
7239 7283
7240 for (size_t i = 0; i < arraysize(tests); i++) { 7284 for (size_t i = 0; i < arraysize(tests); i++) {
7241 TestDelegate d; 7285 TestDelegate d;
7242 scoped_ptr<URLRequest> req(context.CreateRequest( 7286 scoped_ptr<URLRequest> req(context.CreateRequest(
7243 test_server_.GetURL(tests[i].request), DEFAULT_PRIORITY, &d)); 7287 http_test_server()->GetURL(tests[i].request), DEFAULT_PRIORITY, &d));
7244 req->Start(); 7288 req->Start();
7245 base::RunLoop().Run(); 7289 base::RunLoop().Run();
7246 EXPECT_EQ(tests[i].expected_response, d.data_received()) 7290 EXPECT_EQ(tests[i].expected_response, d.data_received())
7247 << " Request = \"" << tests[i].request << "\""; 7291 << " Request = \"" << tests[i].request << "\"";
7248 } 7292 }
7249 } 7293 }
7250 7294
7251 // Make sure that URLRequest passes on its priority updates to 7295 // Make sure that URLRequest passes on its priority updates to
7252 // newly-created jobs after the first one. 7296 // newly-created jobs after the first one.
7253 TEST_F(URLRequestTestHTTP, SetSubsequentJobPriority) { 7297 TEST_F(URLRequestTestHTTP, SetSubsequentJobPriority) {
7254 ASSERT_TRUE(test_server_.Start()); 7298 ASSERT_TRUE(http_test_server()->Start());
7255 7299
7256 TestDelegate d; 7300 TestDelegate d;
7257 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7301 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7258 test_server_.GetURL("empty.html"), DEFAULT_PRIORITY, &d)); 7302 http_test_server()->GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7259 EXPECT_EQ(DEFAULT_PRIORITY, req->priority()); 7303 EXPECT_EQ(DEFAULT_PRIORITY, req->priority());
7260 7304
7261 scoped_refptr<URLRequestRedirectJob> redirect_job = 7305 scoped_refptr<URLRequestRedirectJob> redirect_job = new URLRequestRedirectJob(
7262 new URLRequestRedirectJob( 7306 req.get(), &default_network_delegate_,
7263 req.get(), &default_network_delegate_, test_server_.GetURL("echo"), 7307 http_test_server()->GetURL("/echo"),
7264 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason"); 7308 URLRequestRedirectJob::REDIRECT_302_FOUND, "Very Good Reason");
7265 AddTestInterceptor()->set_main_intercept_job(redirect_job.get()); 7309 AddTestInterceptor()->set_main_intercept_job(redirect_job.get());
7266 7310
7267 req->SetPriority(LOW); 7311 req->SetPriority(LOW);
7268 req->Start(); 7312 req->Start();
7269 EXPECT_TRUE(req->is_pending()); 7313 EXPECT_TRUE(req->is_pending());
7270 7314
7271 scoped_refptr<URLRequestTestJob> job = 7315 scoped_refptr<URLRequestTestJob> job =
7272 new URLRequestTestJob(req.get(), &default_network_delegate_); 7316 new URLRequestTestJob(req.get(), &default_network_delegate_);
7273 AddTestInterceptor()->set_main_intercept_job(job.get()); 7317 AddTestInterceptor()->set_main_intercept_job(job.get());
7274 7318
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
7343 context.CreateRequest(GURL("http://127.0.0.1/"), DEFAULT_PRIORITY, &d)); 7387 context.CreateRequest(GURL("http://127.0.0.1/"), DEFAULT_PRIORITY, &d));
7344 req->Start(); 7388 req->Start();
7345 base::RunLoop().Run(); 7389 base::RunLoop().Run();
7346 7390
7347 EXPECT_TRUE(d.request_failed()); 7391 EXPECT_TRUE(d.request_failed());
7348 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status()); 7392 EXPECT_EQ(URLRequestStatus::FAILED, req->status().status());
7349 EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, req->status().error()); 7393 EXPECT_EQ(ERR_NETWORK_IO_SUSPENDED, req->status().error());
7350 } 7394 }
7351 7395
7352 TEST_F(URLRequestTestHTTP, NetworkAccessedSetOnNetworkRequest) { 7396 TEST_F(URLRequestTestHTTP, NetworkAccessedSetOnNetworkRequest) {
7353 ASSERT_TRUE(test_server_.Start()); 7397 ASSERT_TRUE(http_test_server()->Start());
7354 7398
7355 TestDelegate d; 7399 TestDelegate d;
7356 GURL test_url(test_server_.GetURL(std::string())); 7400 GURL test_url(http_test_server()->GetURL("/"));
7357 scoped_ptr<URLRequest> req( 7401 scoped_ptr<URLRequest> req(
7358 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 7402 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
7359 7403
7360 req->Start(); 7404 req->Start();
7361 base::RunLoop().Run(); 7405 base::RunLoop().Run();
7362 7406
7363 EXPECT_TRUE(req->response_info().network_accessed); 7407 EXPECT_TRUE(req->response_info().network_accessed);
7364 } 7408 }
7365 7409
7366 TEST_F(URLRequestTestHTTP, NetworkAccessedClearOnCachedResponse) { 7410 TEST_F(URLRequestTestHTTP, NetworkAccessedClearOnCachedResponse) {
7367 ASSERT_TRUE(test_server_.Start()); 7411 ASSERT_TRUE(http_test_server()->Start());
7368 7412
7369 // Populate the cache. 7413 // Populate the cache.
7370 TestDelegate d; 7414 TestDelegate d;
7371 scoped_ptr<URLRequest> req(default_context_.CreateRequest( 7415 scoped_ptr<URLRequest> req(default_context_.CreateRequest(
7372 test_server_.GetURL("cachetime"), DEFAULT_PRIORITY, &d)); 7416 http_test_server()->GetURL("/cachetime"), DEFAULT_PRIORITY, &d));
7373 req->Start(); 7417 req->Start();
7374 base::RunLoop().Run(); 7418 base::RunLoop().Run();
7375 7419
7376 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 7420 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
7377 EXPECT_TRUE(req->response_info().network_accessed); 7421 EXPECT_TRUE(req->response_info().network_accessed);
7378 EXPECT_FALSE(req->response_info().was_cached); 7422 EXPECT_FALSE(req->response_info().was_cached);
7379 7423
7380 req = default_context_.CreateRequest(test_server_.GetURL("cachetime"), 7424 req = default_context_.CreateRequest(http_test_server()->GetURL("/cachetime"),
7381 DEFAULT_PRIORITY, &d); 7425 DEFAULT_PRIORITY, &d);
7382 req->Start(); 7426 req->Start();
7383 base::RunLoop().Run(); 7427 base::RunLoop().Run();
7384 7428
7385 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status()); 7429 EXPECT_EQ(URLRequestStatus::SUCCESS, req->status().status());
7386 EXPECT_FALSE(req->response_info().network_accessed); 7430 EXPECT_FALSE(req->response_info().network_accessed);
7387 EXPECT_TRUE(req->response_info().was_cached); 7431 EXPECT_TRUE(req->response_info().was_cached);
7388 } 7432 }
7389 7433
7390 TEST_F(URLRequestTestHTTP, NetworkAccessedClearOnLoadOnlyFromCache) { 7434 TEST_F(URLRequestTestHTTP, NetworkAccessedClearOnLoadOnlyFromCache) {
7391 ASSERT_TRUE(test_server_.Start()); 7435 ASSERT_TRUE(http_test_server()->Start());
7392 7436
7393 TestDelegate d; 7437 TestDelegate d;
7394 GURL test_url(test_server_.GetURL(std::string())); 7438 GURL test_url(http_test_server()->GetURL("/"));
7395 scoped_ptr<URLRequest> req( 7439 scoped_ptr<URLRequest> req(
7396 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d)); 7440 default_context_.CreateRequest(test_url, DEFAULT_PRIORITY, &d));
7397 req->SetLoadFlags(LOAD_ONLY_FROM_CACHE); 7441 req->SetLoadFlags(LOAD_ONLY_FROM_CACHE);
7398 7442
7399 req->Start(); 7443 req->Start();
7400 base::RunLoop().Run(); 7444 base::RunLoop().Run();
7401 7445
7402 EXPECT_FALSE(req->response_info().network_accessed); 7446 EXPECT_FALSE(req->response_info().network_accessed);
7403 } 7447 }
7404 7448
(...skipping 18 matching lines...) Expand all
7423 private: 7467 private:
7424 MockURLRequestInterceptor* interceptor_; 7468 MockURLRequestInterceptor* interceptor_;
7425 }; 7469 };
7426 7470
7427 TEST_F(URLRequestInterceptorTestHTTP, 7471 TEST_F(URLRequestInterceptorTestHTTP,
7428 NetworkDelegateNotificationOnRedirectIntercept) { 7472 NetworkDelegateNotificationOnRedirectIntercept) {
7429 interceptor()->set_intercept_redirect(true); 7473 interceptor()->set_intercept_redirect(true);
7430 interceptor()->set_redirect_headers(MockURLRequestInterceptor::ok_headers()); 7474 interceptor()->set_redirect_headers(MockURLRequestInterceptor::ok_headers());
7431 interceptor()->set_redirect_data(MockURLRequestInterceptor::ok_data()); 7475 interceptor()->set_redirect_data(MockURLRequestInterceptor::ok_data());
7432 7476
7433 ASSERT_TRUE(test_server()->Start()); 7477 ASSERT_TRUE(http_test_server()->Start());
7434 7478
7435 TestDelegate d; 7479 TestDelegate d;
7436 scoped_ptr<URLRequest> req(default_context().CreateRequest( 7480 scoped_ptr<URLRequest> req(default_context().CreateRequest(
7437 test_server()->GetURL("files/redirect-test.html"), DEFAULT_PRIORITY, &d)); 7481 http_test_server()->GetURL("/redirect-test.html"), DEFAULT_PRIORITY, &d));
7438 req->Start(); 7482 req->Start();
7439 base::RunLoop().Run(); 7483 base::RunLoop().Run();
7440 7484
7441 EXPECT_TRUE(interceptor()->did_intercept_redirect()); 7485 EXPECT_TRUE(interceptor()->did_intercept_redirect());
7442 // Check we got one good response 7486 // Check we got one good response
7443 EXPECT_TRUE(req->status().is_success()); 7487 EXPECT_TRUE(req->status().is_success());
7444 if (req->status().is_success()) 7488 if (req->status().is_success())
7445 EXPECT_EQ(200, req->response_headers()->response_code()); 7489 EXPECT_EQ(200, req->response_headers()->response_code());
7446 7490
7447 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); 7491 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received());
7448 EXPECT_EQ(1, d.response_started_count()); 7492 EXPECT_EQ(1, d.response_started_count());
7449 EXPECT_EQ(0, d.received_redirect_count()); 7493 EXPECT_EQ(0, d.received_redirect_count());
7450 7494
7451 EXPECT_EQ(1, default_network_delegate()->created_requests()); 7495 EXPECT_EQ(1, default_network_delegate()->created_requests());
7452 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count()); 7496 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count());
7453 EXPECT_EQ(1, default_network_delegate()->headers_received_count()); 7497 EXPECT_EQ(1, default_network_delegate()->headers_received_count());
7454 } 7498 }
7455 7499
7456 TEST_F(URLRequestInterceptorTestHTTP, 7500 TEST_F(URLRequestInterceptorTestHTTP,
7457 NetworkDelegateNotificationOnErrorIntercept) { 7501 NetworkDelegateNotificationOnErrorIntercept) {
7458 // Intercept that error and respond with an OK response. 7502 // Intercept that error and respond with an OK response.
7459 interceptor()->set_intercept_final_response(true); 7503 interceptor()->set_intercept_final_response(true);
7460 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers()); 7504 interceptor()->set_final_headers(MockURLRequestInterceptor::ok_headers());
7461 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data()); 7505 interceptor()->set_final_data(MockURLRequestInterceptor::ok_data());
7462 default_network_delegate()->set_can_be_intercepted_on_error(true); 7506 default_network_delegate()->set_can_be_intercepted_on_error(true);
7463 7507
7464 ASSERT_TRUE(test_server()->Start()); 7508 ASSERT_TRUE(http_test_server()->Start());
7465 7509
7466 TestDelegate d; 7510 TestDelegate d;
7467 scoped_ptr<URLRequest> req(default_context().CreateRequest( 7511 scoped_ptr<URLRequest> req(default_context().CreateRequest(
7468 test_server()->GetURL("files/two-content-lengths.html"), DEFAULT_PRIORITY, 7512 http_test_server()->GetURL("/two-content-lengths.html"), DEFAULT_PRIORITY,
7469 &d)); 7513 &d));
7470 req->set_method("GET"); 7514 req->set_method("GET");
7471 req->Start(); 7515 req->Start();
7472 base::RunLoop().Run(); 7516 base::RunLoop().Run();
7473 7517
7474 EXPECT_TRUE(interceptor()->did_intercept_final()); 7518 EXPECT_TRUE(interceptor()->did_intercept_final());
7475 7519
7476 // Check we received one good response. 7520 // Check we received one good response.
7477 EXPECT_TRUE(req->status().is_success()); 7521 EXPECT_TRUE(req->status().is_success());
7478 if (req->status().is_success()) 7522 if (req->status().is_success())
7479 EXPECT_EQ(200, req->response_headers()->response_code()); 7523 EXPECT_EQ(200, req->response_headers()->response_code());
7480 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received()); 7524 EXPECT_EQ(MockURLRequestInterceptor::ok_data(), d.data_received());
7481 EXPECT_EQ(1, d.response_started_count()); 7525 EXPECT_EQ(1, d.response_started_count());
7482 EXPECT_EQ(0, d.received_redirect_count()); 7526 EXPECT_EQ(0, d.received_redirect_count());
7483 7527
7484 EXPECT_EQ(1, default_network_delegate()->created_requests()); 7528 EXPECT_EQ(1, default_network_delegate()->created_requests());
7485 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count()); 7529 EXPECT_EQ(1, default_network_delegate()->before_send_headers_count());
7486 EXPECT_EQ(0, default_network_delegate()->headers_received_count()); 7530 EXPECT_EQ(0, default_network_delegate()->headers_received_count());
7487 } 7531 }
7488 7532
7489 TEST_F(URLRequestInterceptorTestHTTP, 7533 TEST_F(URLRequestInterceptorTestHTTP,
7490 NetworkDelegateNotificationOnResponseIntercept) { 7534 NetworkDelegateNotificationOnResponseIntercept) {
7491 // Intercept that error and respond with an OK response. 7535 // Intercept that error and respond with an OK response.
7492 interceptor()->set_intercept_final_response(true); 7536 interceptor()->set_intercept_final_response(true);
7493 7537
7494 // Intercept with a real URLRequestHttpJob. 7538 // Intercept with a real URLRequestHttpJob.
7495 interceptor()->set_use_url_request_http_job(true); 7539 interceptor()->set_use_url_request_http_job(true);
7496 7540
7497 ASSERT_TRUE(test_server()->Start()); 7541 ASSERT_TRUE(http_test_server()->Start());
7498 7542
7499 TestDelegate d; 7543 TestDelegate d;
7500 scoped_ptr<URLRequest> req(default_context().CreateRequest( 7544 scoped_ptr<URLRequest> req(default_context().CreateRequest(
7501 test_server()->GetURL("files/simple.html"), DEFAULT_PRIORITY, &d)); 7545 http_test_server()->GetURL("/simple.html"), DEFAULT_PRIORITY, &d));
7502 req->set_method("GET"); 7546 req->set_method("GET");
7503 req->Start(); 7547 req->Start();
7504 base::RunLoop().Run(); 7548 base::RunLoop().Run();
7505 7549
7506 EXPECT_TRUE(interceptor()->did_intercept_final()); 7550 EXPECT_TRUE(interceptor()->did_intercept_final());
7507 7551
7508 // Check we received one good response. 7552 // Check we received one good response.
7509 EXPECT_TRUE(req->status().is_success()); 7553 EXPECT_TRUE(req->status().is_success());
7510 if (req->status().is_success()) 7554 if (req->status().is_success())
7511 EXPECT_EQ(200, req->response_headers()->response_code()); 7555 EXPECT_EQ(200, req->response_headers()->response_code());
7512 EXPECT_EQ("hello", d.data_received()); 7556 EXPECT_EQ("hello", d.data_received());
7513 EXPECT_EQ(1, d.response_started_count()); 7557 EXPECT_EQ(1, d.response_started_count());
7514 EXPECT_EQ(0, d.received_redirect_count()); 7558 EXPECT_EQ(0, d.received_redirect_count());
7515 7559
7516 EXPECT_EQ(1, default_network_delegate()->created_requests()); 7560 EXPECT_EQ(1, default_network_delegate()->created_requests());
7517 EXPECT_EQ(2, default_network_delegate()->before_send_headers_count()); 7561 EXPECT_EQ(2, default_network_delegate()->before_send_headers_count());
7518 EXPECT_EQ(2, default_network_delegate()->headers_received_count()); 7562 EXPECT_EQ(2, default_network_delegate()->headers_received_count());
7519 } 7563 }
7520 7564
7521 class URLRequestTestReferrerPolicy : public URLRequestTest { 7565 class URLRequestTestReferrerPolicy : public URLRequestTest {
7522 public: 7566 public:
7523 URLRequestTestReferrerPolicy() {} 7567 URLRequestTestReferrerPolicy() {}
7524 7568
7525 void InstantiateSameOriginServers(SpawnedTestServer::Type origin_type) { 7569 void InstantiateSameOriginServers(bool is_ssl) {
7526 origin_server_.reset(new SpawnedTestServer( 7570 if (is_ssl)
7527 origin_type, SpawnedTestServer::kLocalhost, 7571 origin_server_.reset(
7528 origin_type == SpawnedTestServer::TYPE_HTTPS 7572 new EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
7529 ? base::FilePath(FILE_PATH_LITERAL("net/data/ssl")) 7573 else
7530 : base::FilePath(kTestFilePath))); 7574 origin_server_.reset(new EmbeddedTestServer);
7575 if (is_ssl)
7576 origin_server_->AddDefaultHandlers(
7577 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7578 else {
7579 origin_server_->AddDefaultHandlers(base::FilePath(kTestFilePath));
7580 }
7531 ASSERT_TRUE(origin_server_->Start()); 7581 ASSERT_TRUE(origin_server_->Start());
7532 } 7582 }
7533 7583
7534 void InstantiateCrossOriginServers(SpawnedTestServer::Type origin_type, 7584 void InstantiateCrossOriginServers(bool origin_is_ssl, bool dest_is_ssl) {
7535 SpawnedTestServer::Type destination_type) { 7585 if (origin_is_ssl) {
7536 origin_server_.reset(new SpawnedTestServer( 7586 origin_server_.reset(
7537 origin_type, SpawnedTestServer::kLocalhost, 7587 new EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
7538 origin_type == SpawnedTestServer::TYPE_HTTPS 7588 origin_server_->AddDefaultHandlers(
7539 ? base::FilePath(FILE_PATH_LITERAL("net/data/ssl")) 7589 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7540 : base::FilePath(kTestFilePath))); 7590 } else {
7591 origin_server_.reset(new EmbeddedTestServer);
7592 origin_server_->AddDefaultHandlers(base::FilePath(kTestFilePath));
7593 }
7541 ASSERT_TRUE(origin_server_->Start()); 7594 ASSERT_TRUE(origin_server_->Start());
7542 7595
7543 destination_server_.reset(new SpawnedTestServer( 7596 if (dest_is_ssl) {
7544 destination_type, SpawnedTestServer::kLocalhost, 7597 destination_server_.reset(
7545 destination_type == SpawnedTestServer::TYPE_HTTPS 7598 new EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
7546 ? base::FilePath(FILE_PATH_LITERAL("net/data/ssl")) 7599 destination_server_->AddDefaultHandlers(
7547 : base::FilePath(kTestFilePath))); 7600 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7601 } else {
7602 destination_server_.reset(new EmbeddedTestServer);
7603 destination_server_->AddDefaultHandlers(base::FilePath(kTestFilePath));
7604 }
7548 ASSERT_TRUE(destination_server_->Start()); 7605 ASSERT_TRUE(destination_server_->Start());
7549 } 7606 }
7550 7607
7551 void VerifyReferrerAfterRedirect(URLRequest::ReferrerPolicy policy, 7608 void VerifyReferrerAfterRedirect(URLRequest::ReferrerPolicy policy,
7552 const GURL& referrer, 7609 const GURL& referrer,
7553 const GURL& expected) { 7610 const GURL& expected) {
7554 // Create and execute the request: we'll only have a |destination_server_| 7611 // Create and execute the request: we'll only have a |destination_server_|
7555 // if the origins are meant to be distinct. Otherwise, we'll use the 7612 // if the origins are meant to be distinct. Otherwise, we'll use the
7556 // |origin_server_| for both endpoints. 7613 // |origin_server_| for both endpoints.
7557 GURL destination_url = 7614 GURL destination_url =
7558 destination_server_ ? destination_server_->GetURL("echoheader?Referer") 7615 destination_server_ ? destination_server_->GetURL("/echoheader?Referer")
7559 : origin_server_->GetURL("echoheader?Referer"); 7616 : origin_server_->GetURL("/echoheader?Referer");
7560 GURL origin_url = 7617 GURL origin_url =
7561 origin_server_->GetURL("server-redirect?" + destination_url.spec()); 7618 origin_server_->GetURL("/server-redirect?" + destination_url.spec());
7562 7619
7563 TestDelegate d; 7620 TestDelegate d;
7564 scoped_ptr<URLRequest> req( 7621 scoped_ptr<URLRequest> req(
7565 default_context_.CreateRequest(origin_url, DEFAULT_PRIORITY, &d)); 7622 default_context_.CreateRequest(origin_url, DEFAULT_PRIORITY, &d));
7566 req->set_referrer_policy(policy); 7623 req->set_referrer_policy(policy);
7567 req->SetReferrer(referrer.spec()); 7624 req->SetReferrer(referrer.spec());
7568 req->Start(); 7625 req->Start();
7569 base::RunLoop().Run(); 7626 base::RunLoop().Run();
7570 7627
7571 EXPECT_EQ(1, d.response_started_count()); 7628 EXPECT_EQ(1, d.response_started_count());
7572 EXPECT_EQ(1, d.received_redirect_count()); 7629 EXPECT_EQ(1, d.received_redirect_count());
7573 EXPECT_EQ(destination_url, req->url()); 7630 EXPECT_EQ(destination_url, req->url());
7574 EXPECT_TRUE(req->status().is_success()); 7631 EXPECT_TRUE(req->status().is_success());
7575 EXPECT_EQ(200, req->response_headers()->response_code()); 7632 EXPECT_EQ(200, req->response_headers()->response_code());
7576 7633
7577 EXPECT_EQ(expected.spec(), req->referrer()); 7634 EXPECT_EQ(expected.spec(), req->referrer());
7578 if (expected.is_empty()) 7635 if (expected.is_empty())
7579 EXPECT_EQ("None", d.data_received()); 7636 EXPECT_EQ("None", d.data_received());
7580 else 7637 else
7581 EXPECT_EQ(expected.spec(), d.data_received()); 7638 EXPECT_EQ(expected.spec(), d.data_received());
7582 } 7639 }
7583 7640
7584 SpawnedTestServer* origin_server() const { return origin_server_.get(); } 7641 EmbeddedTestServer* origin_server() const { return origin_server_.get(); }
7585 7642
7586 private: 7643 private:
7587 scoped_ptr<SpawnedTestServer> origin_server_; 7644 scoped_ptr<EmbeddedTestServer> origin_server_;
7588 scoped_ptr<SpawnedTestServer> destination_server_; 7645 scoped_ptr<EmbeddedTestServer> destination_server_;
7589 }; 7646 };
7590 7647
7591 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) { 7648 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) {
7592 InstantiateSameOriginServers(SpawnedTestServer::TYPE_HTTP); 7649 InstantiateSameOriginServers(false);
7593 7650
7594 VerifyReferrerAfterRedirect( 7651 VerifyReferrerAfterRedirect(
7595 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7652 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7596 origin_server()->GetURL("path/to/file.html"), 7653 origin_server()->GetURL("/path/to/file.html"),
7597 origin_server()->GetURL("path/to/file.html")); 7654 origin_server()->GetURL("/path/to/file.html"));
7598 7655
7599 VerifyReferrerAfterRedirect( 7656 VerifyReferrerAfterRedirect(
7600 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7657 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7601 origin_server()->GetURL("path/to/file.html"), 7658 origin_server()->GetURL("/path/to/file.html"),
7602 origin_server()->GetURL("path/to/file.html")); 7659 origin_server()->GetURL("/path/to/file.html"));
7603 7660
7604 VerifyReferrerAfterRedirect( 7661 VerifyReferrerAfterRedirect(
7605 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7662 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7606 origin_server()->GetURL("path/to/file.html"), 7663 origin_server()->GetURL("/path/to/file.html"),
7607 origin_server()->GetURL("path/to/file.html")); 7664 origin_server()->GetURL("/path/to/file.html"));
7608 7665
7609 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7666 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7610 origin_server()->GetURL("path/to/file.html"), 7667 origin_server()->GetURL("/path/to/file.html"),
7611 origin_server()->GetURL("path/to/file.html")); 7668 origin_server()->GetURL("/path/to/file.html"));
7612 } 7669 }
7613 7670
7614 // Can't spin up more than one SpawnedTestServer on Android. 7671 TEST_F(URLRequestTestReferrerPolicy, HTTPToCrossOriginHTTP) {
7615 #if defined(OS_ANDROID) 7672 InstantiateCrossOriginServers(false, false);
7616 #define MAYBE_HTTPToCrossOriginHTTP DISABLED_HTTPToCrosOriginHTTP
7617 #else
7618 #define MAYBE_HTTPToCrossOriginHTTP HTTPToCrossOriginHTTP
7619 #endif
7620 TEST_F(URLRequestTestReferrerPolicy, MAYBE_HTTPToCrossOriginHTTP) {
7621 InstantiateCrossOriginServers(SpawnedTestServer::TYPE_HTTP,
7622 SpawnedTestServer::TYPE_HTTP);
7623 7673
7624 VerifyReferrerAfterRedirect( 7674 VerifyReferrerAfterRedirect(
7625 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7675 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7626 origin_server()->GetURL("path/to/file.html"), 7676 origin_server()->GetURL("/path/to/file.html"),
7627 origin_server()->GetURL("path/to/file.html")); 7677 origin_server()->GetURL("/path/to/file.html"));
7628 7678
7629 VerifyReferrerAfterRedirect( 7679 VerifyReferrerAfterRedirect(
7630 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7680 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7631 origin_server()->GetURL("path/to/file.html"), 7681 origin_server()->GetURL("/path/to/file.html"),
7632 origin_server()->GetURL(std::string())); 7682 origin_server()->GetURL("/"));
7633 7683
7634 VerifyReferrerAfterRedirect( 7684 VerifyReferrerAfterRedirect(
7635 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7685 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7636 origin_server()->GetURL("path/to/file.html"), 7686 origin_server()->GetURL("/path/to/file.html"),
7637 origin_server()->GetURL(std::string())); 7687 origin_server()->GetURL("/"));
7638 7688
7639 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7689 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7640 origin_server()->GetURL("path/to/file.html"), 7690 origin_server()->GetURL("/path/to/file.html"),
7641 origin_server()->GetURL("path/to/file.html")); 7691 origin_server()->GetURL("/path/to/file.html"));
7642 } 7692 }
7643 7693
7644 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) { 7694 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) {
7645 InstantiateSameOriginServers(SpawnedTestServer::TYPE_HTTPS); 7695 InstantiateSameOriginServers(true);
7646 7696
7647 VerifyReferrerAfterRedirect( 7697 VerifyReferrerAfterRedirect(
7648 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7698 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7649 origin_server()->GetURL("path/to/file.html"), 7699 origin_server()->GetURL("/path/to/file.html"),
7650 origin_server()->GetURL("path/to/file.html")); 7700 origin_server()->GetURL("/path/to/file.html"));
7651 7701
7652 VerifyReferrerAfterRedirect( 7702 VerifyReferrerAfterRedirect(
7653 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7703 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7654 origin_server()->GetURL("path/to/file.html"), 7704 origin_server()->GetURL("/path/to/file.html"),
7655 origin_server()->GetURL("path/to/file.html")); 7705 origin_server()->GetURL("/path/to/file.html"));
7656 7706
7657 VerifyReferrerAfterRedirect( 7707 VerifyReferrerAfterRedirect(
7658 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7708 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7659 origin_server()->GetURL("path/to/file.html"), 7709 origin_server()->GetURL("/path/to/file.html"),
7660 origin_server()->GetURL("path/to/file.html")); 7710 origin_server()->GetURL("/path/to/file.html"));
7661 7711
7662 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7712 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7663 origin_server()->GetURL("path/to/file.html"), 7713 origin_server()->GetURL("/path/to/file.html"),
7664 origin_server()->GetURL("path/to/file.html")); 7714 origin_server()->GetURL("/path/to/file.html"));
7665 } 7715 }
7666 7716
7667 // Can't spin up more than one SpawnedTestServer on Android. 7717 TEST_F(URLRequestTestReferrerPolicy, HTTPSToCrossOriginHTTPS) {
7668 #if defined(OS_ANDROID) 7718 InstantiateCrossOriginServers(true, true);
7669 #define MAYBE_HTTPSToCrossOriginHTTPS DISABLED_HTTPSToCrosOriginHTTPS
7670 #else
7671 #define MAYBE_HTTPSToCrossOriginHTTPS HTTPSToCrossOriginHTTPS
7672 #endif
7673 TEST_F(URLRequestTestReferrerPolicy, MAYBE_HTTPSToCrossOriginHTTPS) {
7674 InstantiateCrossOriginServers(SpawnedTestServer::TYPE_HTTPS,
7675 SpawnedTestServer::TYPE_HTTPS);
7676 7719
7677 VerifyReferrerAfterRedirect( 7720 VerifyReferrerAfterRedirect(
7678 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7721 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7679 origin_server()->GetURL("path/to/file.html"), 7722 origin_server()->GetURL("/path/to/file.html"),
7680 origin_server()->GetURL("path/to/file.html")); 7723 origin_server()->GetURL("/path/to/file.html"));
7681 7724
7682 VerifyReferrerAfterRedirect( 7725 VerifyReferrerAfterRedirect(
7683 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7726 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7684 origin_server()->GetURL("path/to/file.html"), 7727 origin_server()->GetURL("/path/to/file.html"),
7685 origin_server()->GetURL(std::string())); 7728 origin_server()->GetURL("/"));
7686 7729
7687 VerifyReferrerAfterRedirect( 7730 VerifyReferrerAfterRedirect(
7688 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7731 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7689 origin_server()->GetURL("path/to/file.html"), 7732 origin_server()->GetURL("/path/to/file.html"),
7690 origin_server()->GetURL(std::string())); 7733 origin_server()->GetURL("/"));
7691 7734
7692 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7735 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7693 origin_server()->GetURL("path/to/file.html"), 7736 origin_server()->GetURL("/path/to/file.html"),
7694 origin_server()->GetURL("path/to/file.html")); 7737 origin_server()->GetURL("/path/to/file.html"));
7695 } 7738 }
7696 7739
7697 // Can't spin up more than one SpawnedTestServer on Android. 7740 TEST_F(URLRequestTestReferrerPolicy, HTTPToHTTPS) {
7698 #if defined(OS_ANDROID) 7741 InstantiateCrossOriginServers(false, true);
7699 #define MAYBE_HTTPToHTTPS DISABLED_HTTPToHTTPS
7700 #else
7701 #define MAYBE_HTTPToHTTPS HTTPToHTTPS
7702 #endif
7703 TEST_F(URLRequestTestReferrerPolicy, MAYBE_HTTPToHTTPS) {
7704 InstantiateCrossOriginServers(SpawnedTestServer::TYPE_HTTP,
7705 SpawnedTestServer::TYPE_HTTPS);
7706 7742
7707 VerifyReferrerAfterRedirect( 7743 VerifyReferrerAfterRedirect(
7708 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7744 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7709 origin_server()->GetURL("path/to/file.html"), 7745 origin_server()->GetURL("/path/to/file.html"),
7710 origin_server()->GetURL("path/to/file.html")); 7746 origin_server()->GetURL("/path/to/file.html"));
7711 7747
7712 VerifyReferrerAfterRedirect( 7748 VerifyReferrerAfterRedirect(
7713 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7749 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7714 origin_server()->GetURL("path/to/file.html"), 7750 origin_server()->GetURL("/path/to/file.html"),
7715 origin_server()->GetURL(std::string())); 7751 origin_server()->GetURL("/"));
7716 7752
7717 VerifyReferrerAfterRedirect( 7753 VerifyReferrerAfterRedirect(
7718 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7754 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7719 origin_server()->GetURL("path/to/file.html"), 7755 origin_server()->GetURL("/path/to/file.html"),
7720 origin_server()->GetURL(std::string())); 7756 origin_server()->GetURL("/"));
7721 7757
7722 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7758 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7723 origin_server()->GetURL("path/to/file.html"), 7759 origin_server()->GetURL("/path/to/file.html"),
7724 origin_server()->GetURL("path/to/file.html")); 7760 origin_server()->GetURL("/path/to/file.html"));
7725 } 7761 }
7726 7762
7727 // Can't spin up more than one SpawnedTestServer on Android. 7763 TEST_F(URLRequestTestReferrerPolicy, HTTPSToHTTP) {
7728 #if defined(OS_ANDROID) 7764 InstantiateCrossOriginServers(true, false);
7729 #define MAYBE_HTTPSToHTTP DISABLED_HTTPSToHTTP
7730 #else
7731 #define MAYBE_HTTPSToHTTP HTTPSToHTTP
7732 #endif
7733 TEST_F(URLRequestTestReferrerPolicy, MAYBE_HTTPSToHTTP) {
7734 InstantiateCrossOriginServers(SpawnedTestServer::TYPE_HTTPS,
7735 SpawnedTestServer::TYPE_HTTP);
7736 7765
7737 VerifyReferrerAfterRedirect( 7766 VerifyReferrerAfterRedirect(
7738 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, 7767 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
7739 origin_server()->GetURL("path/to/file.html"), GURL()); 7768 origin_server()->GetURL("/path/to/file.html"), GURL());
7740 7769
7741 VerifyReferrerAfterRedirect( 7770 VerifyReferrerAfterRedirect(
7742 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, 7771 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN,
7743 origin_server()->GetURL("path/to/file.html"), GURL()); 7772 origin_server()->GetURL("/path/to/file.html"), GURL());
7744 7773
7745 VerifyReferrerAfterRedirect( 7774 VerifyReferrerAfterRedirect(
7746 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, 7775 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN,
7747 origin_server()->GetURL("path/to/file.html"), 7776 origin_server()->GetURL("/path/to/file.html"),
7748 origin_server()->GetURL(std::string())); 7777 origin_server()->GetURL("/"));
7749 7778
7750 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, 7779 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER,
7751 origin_server()->GetURL("path/to/file.html"), 7780 origin_server()->GetURL("/path/to/file.html"),
7752 origin_server()->GetURL("path/to/file.html")); 7781 origin_server()->GetURL("/path/to/file.html"));
7753 } 7782 }
7754 7783
7755 class HTTPSRequestTest : public testing::Test { 7784 class HTTPSRequestTest : public testing::Test {
7756 public: 7785 public:
7757 HTTPSRequestTest() : default_context_(true) { 7786 HTTPSRequestTest() : default_context_(true) {
7758 default_context_.set_network_delegate(&default_network_delegate_); 7787 default_context_.set_network_delegate(&default_network_delegate_);
7759 default_context_.Init(); 7788 default_context_.Init();
7760 } 7789 }
7761 ~HTTPSRequestTest() override {} 7790 ~HTTPSRequestTest() override {}
7762 7791
7763 protected: 7792 protected:
7764 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest. 7793 TestNetworkDelegate default_network_delegate_; // Must outlive URLRequest.
7765 TestURLRequestContext default_context_; 7794 TestURLRequestContext default_context_;
7766 }; 7795 };
7767 7796
7768 TEST_F(HTTPSRequestTest, HTTPSGetTest) { 7797 TEST_F(HTTPSRequestTest, HTTPSGetTest) {
7769 SpawnedTestServer test_server( 7798 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7770 SpawnedTestServer::TYPE_HTTPS, 7799 test_server.AddDefaultHandlers(
7771 SpawnedTestServer::kLocalhost,
7772 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 7800 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7773 ASSERT_TRUE(test_server.Start()); 7801 ASSERT_TRUE(test_server.Start());
7774 7802
7775 TestDelegate d; 7803 TestDelegate d;
7776 { 7804 {
7777 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 7805 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
7778 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 7806 test_server.GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7779 r->Start(); 7807 r->Start();
7780 EXPECT_TRUE(r->is_pending()); 7808 EXPECT_TRUE(r->is_pending());
7781 7809
7782 base::RunLoop().Run(); 7810 base::RunLoop().Run();
7783 7811
7784 EXPECT_EQ(1, d.response_started_count()); 7812 EXPECT_EQ(1, d.response_started_count());
7785 EXPECT_FALSE(d.received_data_before_response()); 7813 EXPECT_FALSE(d.received_data_before_response());
7786 EXPECT_NE(0, d.bytes_received()); 7814 EXPECT_NE(0, d.bytes_received());
7787 CheckSSLInfo(r->ssl_info()); 7815 CheckSSLInfo(r->ssl_info());
7788 EXPECT_EQ(test_server.host_port_pair().host(), 7816 EXPECT_EQ(test_server.host_port_pair().host(),
7789 r->GetSocketAddress().host()); 7817 r->GetSocketAddress().host());
7790 EXPECT_EQ(test_server.host_port_pair().port(), 7818 EXPECT_EQ(test_server.host_port_pair().port(),
7791 r->GetSocketAddress().port()); 7819 r->GetSocketAddress().port());
7792 } 7820 }
7793 } 7821 }
7794 7822
7795 TEST_F(HTTPSRequestTest, HTTPSMismatchedTest) { 7823 TEST_F(HTTPSRequestTest, HTTPSMismatchedTest) {
7796 SpawnedTestServer::SSLOptions ssl_options( 7824 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7797 SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME); 7825 test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
7798 SpawnedTestServer test_server( 7826 test_server.AddDefaultHandlers(
7799 SpawnedTestServer::TYPE_HTTPS,
7800 ssl_options,
7801 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 7827 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7802 ASSERT_TRUE(test_server.Start()); 7828 ASSERT_TRUE(test_server.Start());
7803 7829
7804 bool err_allowed = true; 7830 bool err_allowed = true;
7805 for (int i = 0; i < 2 ; i++, err_allowed = !err_allowed) { 7831 for (int i = 0; i < 2 ; i++, err_allowed = !err_allowed) {
7806 TestDelegate d; 7832 TestDelegate d;
7807 { 7833 {
7808 d.set_allow_certificate_errors(err_allowed); 7834 d.set_allow_certificate_errors(err_allowed);
7809 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 7835 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
7810 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 7836 test_server.GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7811 7837
7812 r->Start(); 7838 r->Start();
7813 EXPECT_TRUE(r->is_pending()); 7839 EXPECT_TRUE(r->is_pending());
7814 7840
7815 base::RunLoop().Run(); 7841 base::RunLoop().Run();
7816 7842
7817 EXPECT_EQ(1, d.response_started_count()); 7843 EXPECT_EQ(1, d.response_started_count());
7818 EXPECT_FALSE(d.received_data_before_response()); 7844 EXPECT_FALSE(d.received_data_before_response());
7819 EXPECT_TRUE(d.have_certificate_errors()); 7845 EXPECT_TRUE(d.have_certificate_errors());
7820 if (err_allowed) { 7846 if (err_allowed) {
7821 EXPECT_NE(0, d.bytes_received()); 7847 EXPECT_NE(0, d.bytes_received());
7822 CheckSSLInfo(r->ssl_info()); 7848 CheckSSLInfo(r->ssl_info());
7823 } else { 7849 } else {
7824 EXPECT_EQ(0, d.bytes_received()); 7850 EXPECT_EQ(0, d.bytes_received());
7825 } 7851 }
7826 } 7852 }
7827 } 7853 }
7828 } 7854 }
7829 7855
7830 TEST_F(HTTPSRequestTest, HTTPSExpiredTest) { 7856 TEST_F(HTTPSRequestTest, HTTPSExpiredTest) {
7831 SpawnedTestServer::SSLOptions ssl_options( 7857 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7832 SpawnedTestServer::SSLOptions::CERT_EXPIRED); 7858 test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
7833 SpawnedTestServer test_server( 7859 test_server.AddDefaultHandlers(
7834 SpawnedTestServer::TYPE_HTTPS,
7835 ssl_options,
7836 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 7860 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7837 ASSERT_TRUE(test_server.Start()); 7861 ASSERT_TRUE(test_server.Start());
7838 7862
7839 // Iterate from false to true, just so that we do the opposite of the 7863 // Iterate from false to true, just so that we do the opposite of the
7840 // previous test in order to increase test coverage. 7864 // previous test in order to increase test coverage.
7841 bool err_allowed = false; 7865 bool err_allowed = false;
7842 for (int i = 0; i < 2 ; i++, err_allowed = !err_allowed) { 7866 for (int i = 0; i < 2 ; i++, err_allowed = !err_allowed) {
7843 TestDelegate d; 7867 TestDelegate d;
7844 { 7868 {
7845 d.set_allow_certificate_errors(err_allowed); 7869 d.set_allow_certificate_errors(err_allowed);
7846 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 7870 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
7847 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 7871 test_server.GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
7848 7872
7849 r->Start(); 7873 r->Start();
7850 EXPECT_TRUE(r->is_pending()); 7874 EXPECT_TRUE(r->is_pending());
7851 7875
7852 base::RunLoop().Run(); 7876 base::RunLoop().Run();
7853 7877
7854 EXPECT_EQ(1, d.response_started_count()); 7878 EXPECT_EQ(1, d.response_started_count());
7855 EXPECT_FALSE(d.received_data_before_response()); 7879 EXPECT_FALSE(d.received_data_before_response());
7856 EXPECT_TRUE(d.have_certificate_errors()); 7880 EXPECT_TRUE(d.have_certificate_errors());
7857 if (err_allowed) { 7881 if (err_allowed) {
7858 EXPECT_NE(0, d.bytes_received()); 7882 EXPECT_NE(0, d.bytes_received());
7859 CheckSSLInfo(r->ssl_info()); 7883 CheckSSLInfo(r->ssl_info());
7860 } else { 7884 } else {
7861 EXPECT_EQ(0, d.bytes_received()); 7885 EXPECT_EQ(0, d.bytes_received());
7862 } 7886 }
7863 } 7887 }
7864 } 7888 }
7865 } 7889 }
7866 7890
7891 #if !defined(OS_IOS)
7867 // This tests that a load of www.google.com with a certificate error sets 7892 // This tests that a load of www.google.com with a certificate error sets
7868 // the |certificate_errors_are_fatal| flag correctly. This flag will cause 7893 // the |certificate_errors_are_fatal| flag correctly. This flag will cause
7869 // the interstitial to be fatal. 7894 // the interstitial to be fatal.
7870 TEST_F(HTTPSRequestTest, HTTPSPreloadedHSTSTest) { 7895 TEST_F(HTTPSRequestTest, HTTPSPreloadedHSTSTest) {
7871 SpawnedTestServer::SSLOptions ssl_options( 7896 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7872 SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME); 7897 test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
7873 SpawnedTestServer test_server( 7898 test_server.ServeFilesFromSourceDirectory("net/data/ssl");
7874 SpawnedTestServer::TYPE_HTTPS,
7875 ssl_options,
7876 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7877 ASSERT_TRUE(test_server.Start()); 7899 ASSERT_TRUE(test_server.Start());
7878 7900
7879 // We require that the URL be www.google.com in order to pick up the 7901 // We require that the URL be www.google.com in order to pick up the
7880 // preloaded HSTS entries in the TransportSecurityState. This means that we 7902 // preloaded HSTS entries in the TransportSecurityState. This means that we
7881 // have to use a MockHostResolver in order to direct www.google.com to the 7903 // have to use a MockHostResolver in order to direct www.google.com to the
7882 // testserver. By default, MockHostResolver maps all hosts to 127.0.0.1. 7904 // testserver. By default, MockHostResolver maps all hosts to 127.0.0.1.
7883 7905
7884 MockHostResolver host_resolver; 7906 MockHostResolver host_resolver;
7885 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 7907 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
7886 TestURLRequestContext context(true); 7908 TestURLRequestContext context(true);
(...skipping 18 matching lines...) Expand all
7905 EXPECT_FALSE(d.received_data_before_response()); 7927 EXPECT_FALSE(d.received_data_before_response());
7906 EXPECT_TRUE(d.have_certificate_errors()); 7928 EXPECT_TRUE(d.have_certificate_errors());
7907 EXPECT_TRUE(d.certificate_errors_are_fatal()); 7929 EXPECT_TRUE(d.certificate_errors_are_fatal());
7908 } 7930 }
7909 7931
7910 // This tests that cached HTTPS page loads do not cause any updates to the 7932 // This tests that cached HTTPS page loads do not cause any updates to the
7911 // TransportSecurityState. 7933 // TransportSecurityState.
7912 TEST_F(HTTPSRequestTest, HTTPSErrorsNoClobberTSSTest) { 7934 TEST_F(HTTPSRequestTest, HTTPSErrorsNoClobberTSSTest) {
7913 // The actual problem -- CERT_MISMATCHED_NAME in this case -- doesn't 7935 // The actual problem -- CERT_MISMATCHED_NAME in this case -- doesn't
7914 // matter. It just has to be any error. 7936 // matter. It just has to be any error.
7915 SpawnedTestServer::SSLOptions ssl_options( 7937 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7916 SpawnedTestServer::SSLOptions::CERT_MISMATCHED_NAME); 7938 test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME);
7917 SpawnedTestServer test_server( 7939 test_server.ServeFilesFromSourceDirectory("net/data/ssl");
7918 SpawnedTestServer::TYPE_HTTPS,
7919 ssl_options,
7920 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7921 ASSERT_TRUE(test_server.Start()); 7940 ASSERT_TRUE(test_server.Start());
7922 7941
7923 // We require that the URL be www.google.com in order to pick up the static 7942 // We require that the URL be www.google.com in order to pick up the static
7924 // and dynamic STS and PKP entries in the TransportSecurityState. This means 7943 // and dynamic STS and PKP entries in the TransportSecurityState. This means
7925 // that we have to use a MockHostResolver in order to direct www.google.com to 7944 // that we have to use a MockHostResolver in order to direct www.google.com to
7926 // the testserver. By default, MockHostResolver maps all hosts to 127.0.0.1. 7945 // the testserver. By default, MockHostResolver maps all hosts to 127.0.0.1.
7927 7946
7928 MockHostResolver host_resolver; 7947 MockHostResolver host_resolver;
7929 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 7948 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
7930 TestURLRequestContext context(true); 7949 TestURLRequestContext context(true);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
7982 EXPECT_TRUE(FingerprintsEqual(new_static_pkp_state.spki_hashes, 8001 EXPECT_TRUE(FingerprintsEqual(new_static_pkp_state.spki_hashes,
7983 static_pkp_state.spki_hashes)); 8002 static_pkp_state.spki_hashes));
7984 EXPECT_TRUE(FingerprintsEqual(new_static_pkp_state.bad_spki_hashes, 8003 EXPECT_TRUE(FingerprintsEqual(new_static_pkp_state.bad_spki_hashes,
7985 static_pkp_state.bad_spki_hashes)); 8004 static_pkp_state.bad_spki_hashes));
7986 } 8005 }
7987 8006
7988 // Make sure HSTS preserves a POST request's method and body. 8007 // Make sure HSTS preserves a POST request's method and body.
7989 TEST_F(HTTPSRequestTest, HSTSPreservesPosts) { 8008 TEST_F(HTTPSRequestTest, HSTSPreservesPosts) {
7990 static const char kData[] = "hello world"; 8009 static const char kData[] = "hello world";
7991 8010
7992 SpawnedTestServer::SSLOptions ssl_options( 8011 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
7993 SpawnedTestServer::SSLOptions::CERT_OK); 8012 test_server.AddDefaultHandlers(
7994 SpawnedTestServer test_server(
7995 SpawnedTestServer::TYPE_HTTPS,
7996 ssl_options,
7997 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 8013 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
7998 ASSERT_TRUE(test_server.Start()); 8014 ASSERT_TRUE(test_server.Start());
7999 8015
8000 8016
8001 // Per spec, TransportSecurityState expects a domain name, rather than an IP 8017 // Per spec, TransportSecurityState expects a domain name, rather than an IP
8002 // address, so a MockHostResolver is needed to redirect www.somewhere.com to 8018 // address, so a MockHostResolver is needed to redirect www.somewhere.com to
8003 // the SpawnedTestServer. By default, MockHostResolver maps all hosts 8019 // the EmbeddedTestServer. By default, MockHostResolver maps all hosts
8004 // to 127.0.0.1. 8020 // to 127.0.0.1.
8005 MockHostResolver host_resolver; 8021 MockHostResolver host_resolver;
8006 8022
8007 // Force https for www.somewhere.com. 8023 // Force https for www.somewhere.com.
8008 TransportSecurityState transport_security_state; 8024 TransportSecurityState transport_security_state;
8009 base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1000); 8025 base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1000);
8010 bool include_subdomains = false; 8026 bool include_subdomains = false;
8011 transport_security_state.AddHSTS("www.somewhere.com", expiry, 8027 transport_security_state.AddHSTS("www.somewhere.com", expiry,
8012 include_subdomains); 8028 include_subdomains);
8013 8029
(...skipping 27 matching lines...) Expand all
8041 LoadTimingInfo load_timing_info; 8057 LoadTimingInfo load_timing_info;
8042 network_delegate.GetLoadTimingInfoBeforeRedirect(&load_timing_info); 8058 network_delegate.GetLoadTimingInfoBeforeRedirect(&load_timing_info);
8043 // LoadTimingInfo of HSTS redirects is similar to that of network cache hits 8059 // LoadTimingInfo of HSTS redirects is similar to that of network cache hits
8044 TestLoadTimingCacheHitNoNetwork(load_timing_info); 8060 TestLoadTimingCacheHitNoNetwork(load_timing_info);
8045 } 8061 }
8046 8062
8047 // Make sure that the CORS headers are added to cross-origin HSTS redirects. 8063 // Make sure that the CORS headers are added to cross-origin HSTS redirects.
8048 TEST_F(HTTPSRequestTest, HSTSCrossOriginAddHeaders) { 8064 TEST_F(HTTPSRequestTest, HSTSCrossOriginAddHeaders) {
8049 static const char kOriginHeaderValue[] = "http://www.example.com"; 8065 static const char kOriginHeaderValue[] = "http://www.example.com";
8050 8066
8051 SpawnedTestServer::SSLOptions ssl_options( 8067 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
8052 SpawnedTestServer::SSLOptions::CERT_OK); 8068 test_server.ServeFilesFromSourceDirectory("net/data/ssl");
8053 SpawnedTestServer test_server(
8054 SpawnedTestServer::TYPE_HTTPS,
8055 ssl_options,
8056 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
8057 ASSERT_TRUE(test_server.Start()); 8069 ASSERT_TRUE(test_server.Start());
8058 8070
8059 // Per spec, TransportSecurityState expects a domain name, rather than an IP 8071 // Per spec, TransportSecurityState expects a domain name, rather than an IP
8060 // address, so a MockHostResolver is needed to redirect example.net to the 8072 // address, so a MockHostResolver is needed to redirect example.net to the
8061 // SpawnedTestServer. MockHostResolver maps all hosts to 127.0.0.1 by default. 8073 // EmbeddedTestServer. MockHostResolver maps all hosts to 127.0.0.1 by
8074 // default.
8062 MockHostResolver host_resolver; 8075 MockHostResolver host_resolver;
8063 8076
8064 TransportSecurityState transport_security_state; 8077 TransportSecurityState transport_security_state;
8065 base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1); 8078 base::Time expiry = base::Time::Now() + base::TimeDelta::FromDays(1);
8066 bool include_subdomains = false; 8079 bool include_subdomains = false;
8067 transport_security_state.AddHSTS("example.net", expiry, include_subdomains); 8080 transport_security_state.AddHSTS("example.net", expiry, include_subdomains);
8068 8081
8069 TestNetworkDelegate network_delegate; // Must outlive URLRequest. 8082 TestNetworkDelegate network_delegate; // Must outlive URLRequest.
8070 8083
8071 MockCertVerifier cert_verifier; 8084 MockCertVerifier cert_verifier;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
8151 }; 8164 };
8152 8165
8153 } // namespace 8166 } // namespace
8154 8167
8155 // TODO(davidben): Test the rest of the code. Specifically, 8168 // TODO(davidben): Test the rest of the code. Specifically,
8156 // - Filtering which certificates to select. 8169 // - Filtering which certificates to select.
8157 // - Sending a certificate back. 8170 // - Sending a certificate back.
8158 // - Getting a certificate request in an SSL renegotiation sending the 8171 // - Getting a certificate request in an SSL renegotiation sending the
8159 // HTTP request. 8172 // HTTP request.
8160 TEST_F(HTTPSRequestTest, ClientAuthTest) { 8173 TEST_F(HTTPSRequestTest, ClientAuthTest) {
8161 SpawnedTestServer::SSLOptions ssl_options; 8174 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
8162 ssl_options.request_client_certificate = true; 8175 net::SSLServerConfig ssl_config;
8163 SpawnedTestServer test_server( 8176 ssl_config.require_client_cert = true;
8164 SpawnedTestServer::TYPE_HTTPS, 8177 test_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config);
8165 ssl_options, 8178 test_server.AddDefaultHandlers(
8166 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 8179 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
8167 ASSERT_TRUE(test_server.Start()); 8180 ASSERT_TRUE(test_server.Start());
8168 8181
8169 SSLClientAuthTestDelegate d; 8182 SSLClientAuthTestDelegate d;
8170 { 8183 {
8171 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 8184 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
8172 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 8185 test_server.GetURL("/defaultresponse"), DEFAULT_PRIORITY, &d));
8173 8186
8174 r->Start(); 8187 r->Start();
8175 EXPECT_TRUE(r->is_pending()); 8188 EXPECT_TRUE(r->is_pending());
8176 8189
8177 base::RunLoop().Run(); 8190 base::RunLoop().Run();
8178 8191
8179 EXPECT_EQ(1, d.on_certificate_requested_count()); 8192 EXPECT_EQ(1, d.on_certificate_requested_count());
8180 EXPECT_FALSE(d.received_data_before_response()); 8193 EXPECT_FALSE(d.received_data_before_response());
8181 EXPECT_EQ(0, d.bytes_received()); 8194 EXPECT_EQ(0, d.bytes_received());
8182 8195
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
8367 } // namespace 8380 } // namespace
8368 8381
8369 // Test that ECDSA is disabled on Windows XP, where ECDSA certificates cannot be 8382 // Test that ECDSA is disabled on Windows XP, where ECDSA certificates cannot be
8370 // verified. 8383 // verified.
8371 TEST_F(HTTPSRequestTest, DisableECDSAOnXP) { 8384 TEST_F(HTTPSRequestTest, DisableECDSAOnXP) {
8372 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { 8385 if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
8373 LOG(INFO) << "Skipping test on this version."; 8386 LOG(INFO) << "Skipping test on this version.";
8374 return; 8387 return;
8375 } 8388 }
8376 8389
8377 SpawnedTestServer test_server( 8390 EmbeddedTestServer test_server(net::EmbeddedTestServer::TYPE_HTTPS);
8378 SpawnedTestServer::TYPE_HTTPS, 8391 test_server.ServeFilesFromSourceDirectory("net/data/ssl");
8379 SpawnedTestServer::kLocalhost,
8380 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
8381 ASSERT_TRUE(test_server.Start()); 8392 ASSERT_TRUE(test_server.Start());
8382 8393
8383 TestDelegate d; 8394 TestDelegate d;
8384 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 8395 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
8385 test_server.GetURL("client-cipher-list"), DEFAULT_PRIORITY, &d)); 8396 test_server.GetURL("/client-cipher-list"), DEFAULT_PRIORITY, &d));
8386 r->Start(); 8397 r->Start();
8387 EXPECT_TRUE(r->is_pending()); 8398 EXPECT_TRUE(r->is_pending());
8388 8399
8389 base::RunLoop().Run(); 8400 base::RunLoop().Run();
8390 8401
8391 EXPECT_EQ(1, d.response_started_count()); 8402 EXPECT_EQ(1, d.response_started_count());
8392 std::vector<std::string> lines = base::SplitString( 8403 std::vector<std::string> lines = base::SplitString(
8393 d.data_received(), "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 8404 d.data_received(), "\n", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
8394 8405
8395 for (size_t i = 0; i < lines.size(); i++) { 8406 for (size_t i = 0; i < lines.size(); i++) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
8474 DCHECK(!request_); 8485 DCHECK(!request_);
8475 context_.Init(); 8486 context_.Init();
8476 delegate_.set_allow_certificate_errors(true); 8487 delegate_.set_allow_certificate_errors(true);
8477 8488
8478 SpawnedTestServer test_server( 8489 SpawnedTestServer test_server(
8479 SpawnedTestServer::TYPE_HTTPS, 8490 SpawnedTestServer::TYPE_HTTPS,
8480 ssl_options, 8491 ssl_options,
8481 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 8492 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
8482 ASSERT_TRUE(test_server.Start()); 8493 ASSERT_TRUE(test_server.Start());
8483 8494
8484 request_ = context_.CreateRequest(test_server.GetURL(std::string()), 8495 request_ = context_.CreateRequest(test_server.GetURL("/"), DEFAULT_PRIORITY,
8485 DEFAULT_PRIORITY, &delegate_); 8496 &delegate_);
8486 request_->Start(); 8497 request_->Start();
8487 8498
8488 base::RunLoop().Run(); 8499 base::RunLoop().Run();
8489 } 8500 }
8490 8501
8491 void set_fallback_min_version(uint16 version) { 8502 void set_fallback_min_version(uint16 version) {
8492 context_.set_fallback_min_version(version); 8503 context_.set_fallback_min_version(version);
8493 } 8504 }
8494 8505
8495 void ExpectConnection(int version) { 8506 void ExpectConnection(int version) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
8630 // Make a connection that does a probe fallback to TLSv1 but fails because 8641 // Make a connection that does a probe fallback to TLSv1 but fails because
8631 // TLSv1 fallback is disabled. We don't wish a session for this connection to 8642 // TLSv1 fallback is disabled. We don't wish a session for this connection to
8632 // be inserted locally. 8643 // be inserted locally.
8633 { 8644 {
8634 TestDelegate delegate; 8645 TestDelegate delegate;
8635 FallbackTestURLRequestContext context(true); 8646 FallbackTestURLRequestContext context(true);
8636 8647
8637 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_TLS1_2); 8648 context.set_fallback_min_version(SSL_PROTOCOL_VERSION_TLS1_2);
8638 context.Init(); 8649 context.Init();
8639 scoped_ptr<URLRequest> request(context.CreateRequest( 8650 scoped_ptr<URLRequest> request(context.CreateRequest(
8640 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &delegate)); 8651 test_server.GetURL("/"), DEFAULT_PRIORITY, &delegate));
8641 request->Start(); 8652 request->Start();
8642 8653
8643 base::RunLoop().Run(); 8654 base::RunLoop().Run();
8644 8655
8645 EXPECT_EQ(1, delegate.response_started_count()); 8656 EXPECT_EQ(1, delegate.response_started_count());
8646 EXPECT_FALSE(request->status().is_success()); 8657 EXPECT_FALSE(request->status().is_success());
8647 EXPECT_EQ(URLRequestStatus::FAILED, request->status().status()); 8658 EXPECT_EQ(URLRequestStatus::FAILED, request->status().status());
8648 EXPECT_EQ(ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION, 8659 EXPECT_EQ(ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION,
8649 request->status().error()); 8660 request->status().error());
8650 } 8661 }
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
8805 // We always overwrite out_cert_status. 8816 // We always overwrite out_cert_status.
8806 *out_cert_status = 0; 8817 *out_cert_status = 0;
8807 SpawnedTestServer test_server( 8818 SpawnedTestServer test_server(
8808 SpawnedTestServer::TYPE_HTTPS, 8819 SpawnedTestServer::TYPE_HTTPS,
8809 ssl_options, 8820 ssl_options,
8810 base::FilePath(FILE_PATH_LITERAL("net/data/ssl"))); 8821 base::FilePath(FILE_PATH_LITERAL("net/data/ssl")));
8811 ASSERT_TRUE(test_server.Start()); 8822 ASSERT_TRUE(test_server.Start());
8812 8823
8813 TestDelegate d; 8824 TestDelegate d;
8814 d.set_allow_certificate_errors(true); 8825 d.set_allow_certificate_errors(true);
8815 scoped_ptr<URLRequest> r(context_.CreateRequest( 8826 scoped_ptr<URLRequest> r(
8816 test_server.GetURL(std::string()), DEFAULT_PRIORITY, &d)); 8827 context_.CreateRequest(test_server.GetURL("/"), DEFAULT_PRIORITY, &d));
8817 r->Start(); 8828 r->Start();
8818 8829
8819 base::RunLoop().Run(); 8830 base::RunLoop().Run();
8820 8831
8821 EXPECT_EQ(1, d.response_started_count()); 8832 EXPECT_EQ(1, d.response_started_count());
8822 *out_cert_status = r->ssl_info().cert_status; 8833 *out_cert_status = r->ssl_info().cert_status;
8823 } 8834 }
8824 8835
8825 ~HTTPSOCSPTest() override { 8836 ~HTTPSOCSPTest() override {
8826 #if defined(USE_NSS_CERTS) || defined(OS_IOS) 8837 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
9302 #endif // !defined(OS_IOS) 9313 #endif // !defined(OS_IOS)
9303 9314
9304 #if !defined(DISABLE_FTP_SUPPORT) && !defined(OS_ANDROID) 9315 #if !defined(DISABLE_FTP_SUPPORT) && !defined(OS_ANDROID)
9305 // These tests aren't passing on Android. Either the RemoteTestServer isn't 9316 // These tests aren't passing on Android. Either the RemoteTestServer isn't
9306 // starting up successfully, or it can't access the test files. 9317 // starting up successfully, or it can't access the test files.
9307 // TODO(mmenke): Fix this. See http://crbug.com/495220 9318 // TODO(mmenke): Fix this. See http://crbug.com/495220
9308 class URLRequestTestFTP : public URLRequestTest { 9319 class URLRequestTestFTP : public URLRequestTest {
9309 public: 9320 public:
9310 URLRequestTestFTP() 9321 URLRequestTestFTP()
9311 : ftp_transaction_factory_(&host_resolver_), 9322 : ftp_transaction_factory_(&host_resolver_),
9312 test_server_(SpawnedTestServer::TYPE_FTP, 9323 ftp_test_server_(SpawnedTestServer::TYPE_FTP,
9313 SpawnedTestServer::kLocalhost, 9324 SpawnedTestServer::kLocalhost,
9314 base::FilePath(kTestFilePath)) { 9325 base::FilePath(kTestFilePath)) {
9315 // Can't use |default_context_|'s HostResolver to set up the 9326 // Can't use |default_context_|'s HostResolver to set up the
9316 // FTPTransactionFactory because it hasn't been created yet. 9327 // FTPTransactionFactory because it hasn't been created yet.
9317 default_context_.set_host_resolver(&host_resolver_); 9328 default_context_.set_host_resolver(&host_resolver_);
9318 } 9329 }
9319 9330
9320 // URLRequestTest interface: 9331 // URLRequestTest interface:
9321 void SetUpFactory() override { 9332 void SetUpFactory() override {
9322 // Add FTP support to the default URLRequestContext. 9333 // Add FTP support to the default URLRequestContext.
9323 job_factory_impl_->SetProtocolHandler( 9334 job_factory_impl_->SetProtocolHandler(
9324 "ftp", 9335 "ftp",
9325 make_scoped_ptr(new FtpProtocolHandler(&ftp_transaction_factory_))); 9336 make_scoped_ptr(new FtpProtocolHandler(&ftp_transaction_factory_)));
9326 } 9337 }
9327 9338
9328 std::string GetTestFileContents() { 9339 std::string GetTestFileContents() {
9329 base::FilePath path; 9340 base::FilePath path;
9330 EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &path)); 9341 EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &path));
9331 path = path.Append(kTestFilePath); 9342 path = path.Append(kTestFilePath);
9332 path = path.AppendASCII(kFtpTestFile); 9343 path = path.AppendASCII(kFtpTestFile);
9333 std::string contents; 9344 std::string contents;
9334 EXPECT_TRUE(base::ReadFileToString(path, &contents)); 9345 EXPECT_TRUE(base::ReadFileToString(path, &contents));
9335 return contents; 9346 return contents;
9336 } 9347 }
9337 9348
9338 protected: 9349 protected:
9339 MockHostResolver host_resolver_; 9350 MockHostResolver host_resolver_;
9340 FtpNetworkLayer ftp_transaction_factory_; 9351 FtpNetworkLayer ftp_transaction_factory_;
9341 9352
9342 SpawnedTestServer test_server_; 9353 SpawnedTestServer ftp_test_server_;
9343 }; 9354 };
9344 9355
9345 // Make sure an FTP request using an unsafe ports fails. 9356 // Make sure an FTP request using an unsafe ports fails.
9346 TEST_F(URLRequestTestFTP, UnsafePort) { 9357 TEST_F(URLRequestTestFTP, UnsafePort) {
9347 GURL url("ftp://127.0.0.1:7"); 9358 GURL url("ftp://127.0.0.1:7");
9348 9359
9349 TestDelegate d; 9360 TestDelegate d;
9350 { 9361 {
9351 scoped_ptr<URLRequest> r( 9362 scoped_ptr<URLRequest> r(
9352 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d)); 9363 default_context_.CreateRequest(url, DEFAULT_PRIORITY, &d));
9353 r->Start(); 9364 r->Start();
9354 EXPECT_TRUE(r->is_pending()); 9365 EXPECT_TRUE(r->is_pending());
9355 9366
9356 base::RunLoop().Run(); 9367 base::RunLoop().Run();
9357 9368
9358 EXPECT_FALSE(r->is_pending()); 9369 EXPECT_FALSE(r->is_pending());
9359 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status()); 9370 EXPECT_EQ(URLRequestStatus::FAILED, r->status().status());
9360 EXPECT_EQ(ERR_UNSAFE_PORT, r->status().error()); 9371 EXPECT_EQ(ERR_UNSAFE_PORT, r->status().error());
9361 } 9372 }
9362 } 9373 }
9363 9374
9364 TEST_F(URLRequestTestFTP, FTPDirectoryListing) { 9375 TEST_F(URLRequestTestFTP, FTPDirectoryListing) {
9365 ASSERT_TRUE(test_server_.Start()); 9376 ASSERT_TRUE(ftp_test_server_.Start());
9366 9377
9367 TestDelegate d; 9378 TestDelegate d;
9368 { 9379 {
9369 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9380 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9370 test_server_.GetURL("/"), DEFAULT_PRIORITY, &d)); 9381 ftp_test_server_.GetURL("/"), DEFAULT_PRIORITY, &d));
9371 r->Start(); 9382 r->Start();
9372 EXPECT_TRUE(r->is_pending()); 9383 EXPECT_TRUE(r->is_pending());
9373 9384
9374 base::RunLoop().Run(); 9385 base::RunLoop().Run();
9375 9386
9376 EXPECT_FALSE(r->is_pending()); 9387 EXPECT_FALSE(r->is_pending());
9377 EXPECT_EQ(1, d.response_started_count()); 9388 EXPECT_EQ(1, d.response_started_count());
9378 EXPECT_FALSE(d.received_data_before_response()); 9389 EXPECT_FALSE(d.received_data_before_response());
9379 EXPECT_LT(0, d.bytes_received()); 9390 EXPECT_LT(0, d.bytes_received());
9380 EXPECT_EQ(test_server_.host_port_pair().host(), 9391 EXPECT_EQ(ftp_test_server_.host_port_pair().host(),
9381 r->GetSocketAddress().host()); 9392 r->GetSocketAddress().host());
9382 EXPECT_EQ(test_server_.host_port_pair().port(), 9393 EXPECT_EQ(ftp_test_server_.host_port_pair().port(),
9383 r->GetSocketAddress().port()); 9394 r->GetSocketAddress().port());
9384 } 9395 }
9385 } 9396 }
9386 9397
9387 TEST_F(URLRequestTestFTP, FTPGetTestAnonymous) { 9398 TEST_F(URLRequestTestFTP, FTPGetTestAnonymous) {
9388 ASSERT_TRUE(test_server_.Start()); 9399 ASSERT_TRUE(ftp_test_server_.Start());
9389 9400
9390 TestDelegate d; 9401 TestDelegate d;
9391 { 9402 {
9392 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9403 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9393 test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, &d)); 9404 ftp_test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, &d));
9394 r->Start(); 9405 r->Start();
9395 EXPECT_TRUE(r->is_pending()); 9406 EXPECT_TRUE(r->is_pending());
9396 9407
9397 base::RunLoop().Run(); 9408 base::RunLoop().Run();
9398 9409
9399 EXPECT_FALSE(r->is_pending()); 9410 EXPECT_FALSE(r->is_pending());
9400 EXPECT_EQ(1, d.response_started_count()); 9411 EXPECT_EQ(1, d.response_started_count());
9401 EXPECT_FALSE(d.received_data_before_response()); 9412 EXPECT_FALSE(d.received_data_before_response());
9402 EXPECT_EQ(GetTestFileContents(), d.data_received()); 9413 EXPECT_EQ(GetTestFileContents(), d.data_received());
9403 EXPECT_EQ(test_server_.host_port_pair().host(), 9414 EXPECT_EQ(ftp_test_server_.host_port_pair().host(),
9404 r->GetSocketAddress().host()); 9415 r->GetSocketAddress().host());
9405 EXPECT_EQ(test_server_.host_port_pair().port(), 9416 EXPECT_EQ(ftp_test_server_.host_port_pair().port(),
9406 r->GetSocketAddress().port()); 9417 r->GetSocketAddress().port());
9407 } 9418 }
9408 } 9419 }
9409 9420
9410 TEST_F(URLRequestTestFTP, FTPGetTest) { 9421 TEST_F(URLRequestTestFTP, FTPGetTest) {
9411 ASSERT_TRUE(test_server_.Start()); 9422 ASSERT_TRUE(ftp_test_server_.Start());
9412 9423
9413 TestDelegate d; 9424 TestDelegate d;
9414 { 9425 {
9415 scoped_ptr<URLRequest> r( 9426 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9416 default_context_.CreateRequest(test_server_.GetURLWithUserAndPassword( 9427 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome",
9417 kFtpTestFile, "chrome", "chrome"), 9428 "chrome"),
9418 DEFAULT_PRIORITY, &d)); 9429 DEFAULT_PRIORITY, &d));
9419 r->Start(); 9430 r->Start();
9420 EXPECT_TRUE(r->is_pending()); 9431 EXPECT_TRUE(r->is_pending());
9421 9432
9422 base::RunLoop().Run(); 9433 base::RunLoop().Run();
9423 9434
9424 EXPECT_FALSE(r->is_pending()); 9435 EXPECT_FALSE(r->is_pending());
9425 EXPECT_EQ(1, d.response_started_count()); 9436 EXPECT_EQ(1, d.response_started_count());
9426 EXPECT_FALSE(d.received_data_before_response()); 9437 EXPECT_FALSE(d.received_data_before_response());
9427 EXPECT_EQ(GetTestFileContents(), d.data_received()); 9438 EXPECT_EQ(GetTestFileContents(), d.data_received());
9428 EXPECT_EQ(test_server_.host_port_pair().host(), 9439 EXPECT_EQ(ftp_test_server_.host_port_pair().host(),
9429 r->GetSocketAddress().host()); 9440 r->GetSocketAddress().host());
9430 EXPECT_EQ(test_server_.host_port_pair().port(), 9441 EXPECT_EQ(ftp_test_server_.host_port_pair().port(),
9431 r->GetSocketAddress().port()); 9442 r->GetSocketAddress().port());
9432 9443
9433 LoadTimingInfo load_timing_info; 9444 LoadTimingInfo load_timing_info;
9434 r->GetLoadTimingInfo(&load_timing_info); 9445 r->GetLoadTimingInfo(&load_timing_info);
9435 TestLoadTimingNoHttpResponse(load_timing_info); 9446 TestLoadTimingNoHttpResponse(load_timing_info);
9436 } 9447 }
9437 } 9448 }
9438 9449
9439 TEST_F(URLRequestTestFTP, FTPCheckWrongPassword) { 9450 TEST_F(URLRequestTestFTP, FTPCheckWrongPassword) {
9440 ASSERT_TRUE(test_server_.Start()); 9451 ASSERT_TRUE(ftp_test_server_.Start());
9441 9452
9442 TestDelegate d; 9453 TestDelegate d;
9443 { 9454 {
9444 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9455 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9445 test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome", 9456 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome",
9446 "wrong_password"), 9457 "wrong_password"),
9447 DEFAULT_PRIORITY, &d)); 9458 DEFAULT_PRIORITY, &d));
9448 r->Start(); 9459 r->Start();
9449 EXPECT_TRUE(r->is_pending()); 9460 EXPECT_TRUE(r->is_pending());
9450 9461
9451 base::RunLoop().Run(); 9462 base::RunLoop().Run();
9452 9463
9453 EXPECT_FALSE(r->is_pending()); 9464 EXPECT_FALSE(r->is_pending());
9454 EXPECT_EQ(1, d.response_started_count()); 9465 EXPECT_EQ(1, d.response_started_count());
9455 EXPECT_FALSE(d.received_data_before_response()); 9466 EXPECT_FALSE(d.received_data_before_response());
9456 EXPECT_EQ(d.bytes_received(), 0); 9467 EXPECT_EQ(d.bytes_received(), 0);
9457 } 9468 }
9458 } 9469 }
9459 9470
9460 TEST_F(URLRequestTestFTP, FTPCheckWrongPasswordRestart) { 9471 TEST_F(URLRequestTestFTP, FTPCheckWrongPasswordRestart) {
9461 ASSERT_TRUE(test_server_.Start()); 9472 ASSERT_TRUE(ftp_test_server_.Start());
9462 9473
9463 TestDelegate d; 9474 TestDelegate d;
9464 // Set correct login credentials. The delegate will be asked for them when 9475 // Set correct login credentials. The delegate will be asked for them when
9465 // the initial login with wrong credentials will fail. 9476 // the initial login with wrong credentials will fail.
9466 d.set_credentials(AuthCredentials(kChrome, kChrome)); 9477 d.set_credentials(AuthCredentials(kChrome, kChrome));
9467 { 9478 {
9468 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9479 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9469 test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome", 9480 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome",
9470 "wrong_password"), 9481 "wrong_password"),
9471 DEFAULT_PRIORITY, &d)); 9482 DEFAULT_PRIORITY, &d));
9472 r->Start(); 9483 r->Start();
9473 EXPECT_TRUE(r->is_pending()); 9484 EXPECT_TRUE(r->is_pending());
9474 9485
9475 base::RunLoop().Run(); 9486 base::RunLoop().Run();
9476 9487
9477 EXPECT_FALSE(r->is_pending()); 9488 EXPECT_FALSE(r->is_pending());
9478 EXPECT_EQ(1, d.response_started_count()); 9489 EXPECT_EQ(1, d.response_started_count());
9479 EXPECT_FALSE(d.received_data_before_response()); 9490 EXPECT_FALSE(d.received_data_before_response());
9480 EXPECT_EQ(GetTestFileContents(), d.data_received()); 9491 EXPECT_EQ(GetTestFileContents(), d.data_received());
9481 } 9492 }
9482 } 9493 }
9483 9494
9484 TEST_F(URLRequestTestFTP, FTPCheckWrongUser) { 9495 TEST_F(URLRequestTestFTP, FTPCheckWrongUser) {
9485 ASSERT_TRUE(test_server_.Start()); 9496 ASSERT_TRUE(ftp_test_server_.Start());
9486 9497
9487 TestDelegate d; 9498 TestDelegate d;
9488 { 9499 {
9489 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9500 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9490 test_server_.GetURLWithUserAndPassword(kFtpTestFile, "wrong_user", 9501 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "wrong_user",
9491 "chrome"), 9502 "chrome"),
9492 DEFAULT_PRIORITY, &d)); 9503 DEFAULT_PRIORITY, &d));
9493 r->Start(); 9504 r->Start();
9494 EXPECT_TRUE(r->is_pending()); 9505 EXPECT_TRUE(r->is_pending());
9495 9506
9496 base::RunLoop().Run(); 9507 base::RunLoop().Run();
9497 9508
9498 EXPECT_FALSE(r->is_pending()); 9509 EXPECT_FALSE(r->is_pending());
9499 EXPECT_EQ(1, d.response_started_count()); 9510 EXPECT_EQ(1, d.response_started_count());
9500 EXPECT_FALSE(d.received_data_before_response()); 9511 EXPECT_FALSE(d.received_data_before_response());
9501 EXPECT_EQ(0, d.bytes_received()); 9512 EXPECT_EQ(0, d.bytes_received());
9502 } 9513 }
9503 } 9514 }
9504 9515
9505 TEST_F(URLRequestTestFTP, FTPCheckWrongUserRestart) { 9516 TEST_F(URLRequestTestFTP, FTPCheckWrongUserRestart) {
9506 ASSERT_TRUE(test_server_.Start()); 9517 ASSERT_TRUE(ftp_test_server_.Start());
9507 9518
9508 TestDelegate d; 9519 TestDelegate d;
9509 // Set correct login credentials. The delegate will be asked for them when 9520 // Set correct login credentials. The delegate will be asked for them when
9510 // the initial login with wrong credentials will fail. 9521 // the initial login with wrong credentials will fail.
9511 d.set_credentials(AuthCredentials(kChrome, kChrome)); 9522 d.set_credentials(AuthCredentials(kChrome, kChrome));
9512 { 9523 {
9513 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9524 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9514 test_server_.GetURLWithUserAndPassword(kFtpTestFile, "wrong_user", 9525 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "wrong_user",
9515 "chrome"), 9526 "chrome"),
9516 DEFAULT_PRIORITY, &d)); 9527 DEFAULT_PRIORITY, &d));
9517 r->Start(); 9528 r->Start();
9518 EXPECT_TRUE(r->is_pending()); 9529 EXPECT_TRUE(r->is_pending());
9519 9530
9520 base::RunLoop().Run(); 9531 base::RunLoop().Run();
9521 9532
9522 EXPECT_FALSE(r->is_pending()); 9533 EXPECT_FALSE(r->is_pending());
9523 EXPECT_EQ(1, d.response_started_count()); 9534 EXPECT_EQ(1, d.response_started_count());
9524 EXPECT_FALSE(d.received_data_before_response()); 9535 EXPECT_FALSE(d.received_data_before_response());
9525 EXPECT_EQ(GetTestFileContents(), d.data_received()); 9536 EXPECT_EQ(GetTestFileContents(), d.data_received());
9526 } 9537 }
9527 } 9538 }
9528 9539
9529 TEST_F(URLRequestTestFTP, FTPCacheURLCredentials) { 9540 TEST_F(URLRequestTestFTP, FTPCacheURLCredentials) {
9530 ASSERT_TRUE(test_server_.Start()); 9541 ASSERT_TRUE(ftp_test_server_.Start());
9531 9542
9532 scoped_ptr<TestDelegate> d(new TestDelegate); 9543 scoped_ptr<TestDelegate> d(new TestDelegate);
9533 { 9544 {
9534 // Pass correct login identity in the URL. 9545 // Pass correct login identity in the URL.
9535 scoped_ptr<URLRequest> r( 9546 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9536 default_context_.CreateRequest(test_server_.GetURLWithUserAndPassword( 9547 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome",
9537 kFtpTestFile, "chrome", "chrome"), 9548 "chrome"),
9538 DEFAULT_PRIORITY, d.get())); 9549 DEFAULT_PRIORITY, d.get()));
9539 r->Start(); 9550 r->Start();
9540 EXPECT_TRUE(r->is_pending()); 9551 EXPECT_TRUE(r->is_pending());
9541 9552
9542 base::RunLoop().Run(); 9553 base::RunLoop().Run();
9543 9554
9544 EXPECT_FALSE(r->is_pending()); 9555 EXPECT_FALSE(r->is_pending());
9545 EXPECT_EQ(1, d->response_started_count()); 9556 EXPECT_EQ(1, d->response_started_count());
9546 EXPECT_FALSE(d->received_data_before_response()); 9557 EXPECT_FALSE(d->received_data_before_response());
9547 EXPECT_EQ(GetTestFileContents(), d->data_received()); 9558 EXPECT_EQ(GetTestFileContents(), d->data_received());
9548 } 9559 }
9549 9560
9550 d.reset(new TestDelegate); 9561 d.reset(new TestDelegate);
9551 { 9562 {
9552 // This request should use cached identity from previous request. 9563 // This request should use cached identity from previous request.
9553 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9564 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9554 test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, d.get())); 9565 ftp_test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, d.get()));
9555 r->Start(); 9566 r->Start();
9556 EXPECT_TRUE(r->is_pending()); 9567 EXPECT_TRUE(r->is_pending());
9557 9568
9558 base::RunLoop().Run(); 9569 base::RunLoop().Run();
9559 9570
9560 EXPECT_FALSE(r->is_pending()); 9571 EXPECT_FALSE(r->is_pending());
9561 EXPECT_EQ(1, d->response_started_count()); 9572 EXPECT_EQ(1, d->response_started_count());
9562 EXPECT_FALSE(d->received_data_before_response()); 9573 EXPECT_FALSE(d->received_data_before_response());
9563 EXPECT_EQ(GetTestFileContents(), d->data_received()); 9574 EXPECT_EQ(GetTestFileContents(), d->data_received());
9564 } 9575 }
9565 } 9576 }
9566 9577
9567 TEST_F(URLRequestTestFTP, FTPCacheLoginBoxCredentials) { 9578 TEST_F(URLRequestTestFTP, FTPCacheLoginBoxCredentials) {
9568 ASSERT_TRUE(test_server_.Start()); 9579 ASSERT_TRUE(ftp_test_server_.Start());
9569 9580
9570 scoped_ptr<TestDelegate> d(new TestDelegate); 9581 scoped_ptr<TestDelegate> d(new TestDelegate);
9571 // Set correct login credentials. The delegate will be asked for them when 9582 // Set correct login credentials. The delegate will be asked for them when
9572 // the initial login with wrong credentials will fail. 9583 // the initial login with wrong credentials will fail.
9573 d->set_credentials(AuthCredentials(kChrome, kChrome)); 9584 d->set_credentials(AuthCredentials(kChrome, kChrome));
9574 { 9585 {
9575 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9586 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9576 test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome", 9587 ftp_test_server_.GetURLWithUserAndPassword(kFtpTestFile, "chrome",
9577 "wrong_password"), 9588 "wrong_password"),
9578 DEFAULT_PRIORITY, d.get())); 9589 DEFAULT_PRIORITY, d.get()));
9579 r->Start(); 9590 r->Start();
9580 EXPECT_TRUE(r->is_pending()); 9591 EXPECT_TRUE(r->is_pending());
9581 9592
9582 base::RunLoop().Run(); 9593 base::RunLoop().Run();
9583 9594
9584 EXPECT_FALSE(r->is_pending()); 9595 EXPECT_FALSE(r->is_pending());
9585 EXPECT_EQ(1, d->response_started_count()); 9596 EXPECT_EQ(1, d->response_started_count());
9586 EXPECT_FALSE(d->received_data_before_response()); 9597 EXPECT_FALSE(d->received_data_before_response());
9587 EXPECT_EQ(GetTestFileContents(), d->data_received()); 9598 EXPECT_EQ(GetTestFileContents(), d->data_received());
9588 } 9599 }
9589 9600
9590 // Use a new delegate without explicit credentials. The cached ones should be 9601 // Use a new delegate without explicit credentials. The cached ones should be
9591 // used. 9602 // used.
9592 d.reset(new TestDelegate); 9603 d.reset(new TestDelegate);
9593 { 9604 {
9594 // Don't pass wrong credentials in the URL, they would override valid cached 9605 // Don't pass wrong credentials in the URL, they would override valid cached
9595 // ones. 9606 // ones.
9596 scoped_ptr<URLRequest> r(default_context_.CreateRequest( 9607 scoped_ptr<URLRequest> r(default_context_.CreateRequest(
9597 test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, d.get())); 9608 ftp_test_server_.GetURL(kFtpTestFile), DEFAULT_PRIORITY, d.get()));
9598 r->Start(); 9609 r->Start();
9599 EXPECT_TRUE(r->is_pending()); 9610 EXPECT_TRUE(r->is_pending());
9600 9611
9601 base::RunLoop().Run(); 9612 base::RunLoop().Run();
9602 9613
9603 EXPECT_FALSE(r->is_pending()); 9614 EXPECT_FALSE(r->is_pending());
9604 EXPECT_EQ(1, d->response_started_count()); 9615 EXPECT_EQ(1, d->response_started_count());
9605 EXPECT_FALSE(d->received_data_before_response()); 9616 EXPECT_FALSE(d->received_data_before_response());
9606 EXPECT_EQ(GetTestFileContents(), d->data_received()); 9617 EXPECT_EQ(GetTestFileContents(), d->data_received());
9607 } 9618 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
9677 9688
9678 req->Start(); 9689 req->Start();
9679 req->Cancel(); 9690 req->Cancel();
9680 job->DetachRequest(); 9691 job->DetachRequest();
9681 base::RunLoop().RunUntilIdle(); 9692 base::RunLoop().RunUntilIdle();
9682 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status()); 9693 EXPECT_EQ(URLRequestStatus::CANCELED, req->status().status());
9683 EXPECT_EQ(0, d.received_redirect_count()); 9694 EXPECT_EQ(0, d.received_redirect_count());
9684 } 9695 }
9685 9696
9686 } // namespace net 9697 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_context_builder_unittest.cc ('k') | net/websockets/websocket_end_to_end_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698