| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/url_request/url_request_test_util.h" | 5 #include "net/url_request/url_request_test_util.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/threading/thread.h" | 10 #include "base/threading/thread.h" |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 context_storage_.set_ssl_config_service(new SSLConfigServiceDefaults); | 80 context_storage_.set_ssl_config_service(new SSLConfigServiceDefaults); |
| 81 if (!http_auth_handler_factory()) { | 81 if (!http_auth_handler_factory()) { |
| 82 context_storage_.set_http_auth_handler_factory( | 82 context_storage_.set_http_auth_handler_factory( |
| 83 HttpAuthHandlerFactory::CreateDefault(host_resolver())); | 83 HttpAuthHandlerFactory::CreateDefault(host_resolver())); |
| 84 } | 84 } |
| 85 if (!http_server_properties()) { | 85 if (!http_server_properties()) { |
| 86 context_storage_.set_http_server_properties( | 86 context_storage_.set_http_server_properties( |
| 87 scoped_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); | 87 scoped_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); |
| 88 } | 88 } |
| 89 if (!transport_security_state()) { | 89 if (!transport_security_state()) { |
| 90 context_storage_.set_transport_security_state( | 90 context_storage_.set_transport_security_state(new TransportSecurityState()); |
| 91 new TransportSecurityState()); | |
| 92 } | 91 } |
| 93 if (http_transaction_factory()) { | 92 if (http_transaction_factory()) { |
| 94 // Make sure we haven't been passed an object we're not going to use. | 93 // Make sure we haven't been passed an object we're not going to use. |
| 95 EXPECT_FALSE(client_socket_factory_); | 94 EXPECT_FALSE(client_socket_factory_); |
| 96 } else { | 95 } else { |
| 97 HttpNetworkSession::Params params; | 96 HttpNetworkSession::Params params; |
| 98 params.client_socket_factory = client_socket_factory(); | 97 params.client_socket_factory = client_socket_factory(); |
| 99 params.host_resolver = host_resolver(); | 98 params.host_resolver = host_resolver(); |
| 100 params.cert_verifier = cert_verifier(); | 99 params.cert_verifier = cert_verifier(); |
| 101 params.transport_security_state = transport_security_state(); | 100 params.transport_security_state = transport_security_state(); |
| 102 params.proxy_service = proxy_service(); | 101 params.proxy_service = proxy_service(); |
| 103 params.ssl_config_service = ssl_config_service(); | 102 params.ssl_config_service = ssl_config_service(); |
| 104 params.http_auth_handler_factory = http_auth_handler_factory(); | 103 params.http_auth_handler_factory = http_auth_handler_factory(); |
| 105 params.network_delegate = network_delegate(); | 104 params.network_delegate = network_delegate(); |
| 106 params.http_server_properties = http_server_properties(); | 105 params.http_server_properties = http_server_properties(); |
| 107 params.net_log = net_log(); | 106 params.net_log = net_log(); |
| 108 context_storage_.set_http_transaction_factory(new HttpCache( | 107 context_storage_.set_http_transaction_factory( |
| 109 new HttpNetworkSession(params), | 108 new HttpCache(new HttpNetworkSession(params), |
| 110 HttpCache::DefaultBackend::InMemory(0))); | 109 HttpCache::DefaultBackend::InMemory(0))); |
| 111 } | 110 } |
| 112 // In-memory cookie store. | 111 // In-memory cookie store. |
| 113 if (!cookie_store()) | 112 if (!cookie_store()) |
| 114 context_storage_.set_cookie_store(new CookieMonster(NULL, NULL)); | 113 context_storage_.set_cookie_store(new CookieMonster(NULL, NULL)); |
| 115 // In-memory origin bound cert service. | 114 // In-memory origin bound cert service. |
| 116 if (!server_bound_cert_service()) { | 115 if (!server_bound_cert_service()) { |
| 117 context_storage_.set_server_bound_cert_service( | 116 context_storage_.set_server_bound_cert_service( |
| 118 new ServerBoundCertService( | 117 new ServerBoundCertService(new DefaultServerBoundCertStore(NULL), |
| 119 new DefaultServerBoundCertStore(NULL), | 118 base::WorkerPool::GetTaskRunner(true))); |
| 120 base::WorkerPool::GetTaskRunner(true))); | |
| 121 } | 119 } |
| 122 if (!http_user_agent_settings()) { | 120 if (!http_user_agent_settings()) { |
| 123 context_storage_.set_http_user_agent_settings( | 121 context_storage_.set_http_user_agent_settings( |
| 124 new StaticHttpUserAgentSettings("en-us,fr", std::string())); | 122 new StaticHttpUserAgentSettings("en-us,fr", std::string())); |
| 125 } | 123 } |
| 126 if (!job_factory()) | 124 if (!job_factory()) |
| 127 context_storage_.set_job_factory(new URLRequestJobFactoryImpl); | 125 context_storage_.set_job_factory(new URLRequestJobFactoryImpl); |
| 128 } | 126 } |
| 129 | 127 |
| 130 TestURLRequest::TestURLRequest(const GURL& url, | 128 TestURLRequest::TestURLRequest(const GURL& url, |
| 131 RequestPriority priority, | 129 RequestPriority priority, |
| 132 Delegate* delegate, | 130 Delegate* delegate, |
| 133 TestURLRequestContext* context) | 131 TestURLRequestContext* context) |
| 134 : URLRequest(url, priority, delegate, context) {} | 132 : URLRequest(url, priority, delegate, context) { |
| 133 } |
| 135 | 134 |
| 136 TestURLRequest::~TestURLRequest() { | 135 TestURLRequest::~TestURLRequest() { |
| 137 } | 136 } |
| 138 | 137 |
| 139 TestURLRequestContextGetter::TestURLRequestContextGetter( | 138 TestURLRequestContextGetter::TestURLRequestContextGetter( |
| 140 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner) | 139 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner) |
| 141 : network_task_runner_(network_task_runner) { | 140 : network_task_runner_(network_task_runner) { |
| 142 DCHECK(network_task_runner_.get()); | 141 DCHECK(network_task_runner_.get()); |
| 143 } | 142 } |
| 144 | 143 |
| 145 TestURLRequestContextGetter::TestURLRequestContextGetter( | 144 TestURLRequestContextGetter::TestURLRequestContextGetter( |
| 146 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner, | 145 const scoped_refptr<base::SingleThreadTaskRunner>& network_task_runner, |
| 147 scoped_ptr<TestURLRequestContext> context) | 146 scoped_ptr<TestURLRequestContext> context) |
| 148 : network_task_runner_(network_task_runner), context_(context.Pass()) { | 147 : network_task_runner_(network_task_runner), context_(context.Pass()) { |
| 149 DCHECK(network_task_runner_.get()); | 148 DCHECK(network_task_runner_.get()); |
| 150 } | 149 } |
| 151 | 150 |
| 152 TestURLRequestContextGetter::~TestURLRequestContextGetter() {} | 151 TestURLRequestContextGetter::~TestURLRequestContextGetter() { |
| 152 } |
| 153 | 153 |
| 154 TestURLRequestContext* TestURLRequestContextGetter::GetURLRequestContext() { | 154 TestURLRequestContext* TestURLRequestContextGetter::GetURLRequestContext() { |
| 155 if (!context_.get()) | 155 if (!context_.get()) |
| 156 context_.reset(new TestURLRequestContext); | 156 context_.reset(new TestURLRequestContext); |
| 157 return context_.get(); | 157 return context_.get(); |
| 158 } | 158 } |
| 159 | 159 |
| 160 scoped_refptr<base::SingleThreadTaskRunner> | 160 scoped_refptr<base::SingleThreadTaskRunner> |
| 161 TestURLRequestContextGetter::GetNetworkTaskRunner() const { | 161 TestURLRequestContextGetter::GetNetworkTaskRunner() const { |
| 162 return network_task_runner_; | 162 return network_task_runner_; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 177 received_before_network_start_count_(0), | 177 received_before_network_start_count_(0), |
| 178 received_data_before_response_(false), | 178 received_data_before_response_(false), |
| 179 request_failed_(false), | 179 request_failed_(false), |
| 180 have_certificate_errors_(false), | 180 have_certificate_errors_(false), |
| 181 certificate_errors_are_fatal_(false), | 181 certificate_errors_are_fatal_(false), |
| 182 auth_required_(false), | 182 auth_required_(false), |
| 183 have_full_request_headers_(false), | 183 have_full_request_headers_(false), |
| 184 buf_(new IOBuffer(kBufferSize)) { | 184 buf_(new IOBuffer(kBufferSize)) { |
| 185 } | 185 } |
| 186 | 186 |
| 187 TestDelegate::~TestDelegate() {} | 187 TestDelegate::~TestDelegate() { |
| 188 } |
| 188 | 189 |
| 189 void TestDelegate::ClearFullRequestHeaders() { | 190 void TestDelegate::ClearFullRequestHeaders() { |
| 190 full_request_headers_.Clear(); | 191 full_request_headers_.Clear(); |
| 191 have_full_request_headers_ = false; | 192 have_full_request_headers_ = false; |
| 192 } | 193 } |
| 193 | 194 |
| 194 void TestDelegate::OnReceivedRedirect(URLRequest* request, | 195 void TestDelegate::OnReceivedRedirect(URLRequest* request, |
| 195 const GURL& new_url, | 196 const GURL& new_url, |
| 196 bool* defer_redirect) { | 197 bool* defer_redirect) { |
| 197 EXPECT_TRUE(request->is_redirecting()); | 198 EXPECT_TRUE(request->is_redirecting()); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 323 blocked_set_cookie_count_(0), | 324 blocked_set_cookie_count_(0), |
| 324 set_cookie_count_(0), | 325 set_cookie_count_(0), |
| 325 has_load_timing_info_before_redirect_(false), | 326 has_load_timing_info_before_redirect_(false), |
| 326 has_load_timing_info_before_auth_(false), | 327 has_load_timing_info_before_auth_(false), |
| 327 can_access_files_(true), | 328 can_access_files_(true), |
| 328 can_throttle_requests_(true) { | 329 can_throttle_requests_(true) { |
| 329 } | 330 } |
| 330 | 331 |
| 331 TestNetworkDelegate::~TestNetworkDelegate() { | 332 TestNetworkDelegate::~TestNetworkDelegate() { |
| 332 for (std::map<int, int>::iterator i = next_states_.begin(); | 333 for (std::map<int, int>::iterator i = next_states_.begin(); |
| 333 i != next_states_.end(); ++i) { | 334 i != next_states_.end(); |
| 335 ++i) { |
| 334 event_order_[i->first] += "~TestNetworkDelegate\n"; | 336 event_order_[i->first] += "~TestNetworkDelegate\n"; |
| 335 EXPECT_TRUE(i->second & kStageDestruction) << event_order_[i->first]; | 337 EXPECT_TRUE(i->second & kStageDestruction) << event_order_[i->first]; |
| 336 } | 338 } |
| 337 } | 339 } |
| 338 | 340 |
| 339 bool TestNetworkDelegate::GetLoadTimingInfoBeforeRedirect( | 341 bool TestNetworkDelegate::GetLoadTimingInfoBeforeRedirect( |
| 340 LoadTimingInfo* load_timing_info_before_redirect) const { | 342 LoadTimingInfo* load_timing_info_before_redirect) const { |
| 341 *load_timing_info_before_redirect = load_timing_info_before_redirect_; | 343 *load_timing_info_before_redirect = load_timing_info_before_redirect_; |
| 342 return has_load_timing_info_before_redirect_; | 344 return has_load_timing_info_before_redirect_; |
| 343 } | 345 } |
| 344 | 346 |
| 345 bool TestNetworkDelegate::GetLoadTimingInfoBeforeAuth( | 347 bool TestNetworkDelegate::GetLoadTimingInfoBeforeAuth( |
| 346 LoadTimingInfo* load_timing_info_before_auth) const { | 348 LoadTimingInfo* load_timing_info_before_auth) const { |
| 347 *load_timing_info_before_auth = load_timing_info_before_auth_; | 349 *load_timing_info_before_auth = load_timing_info_before_auth_; |
| 348 return has_load_timing_info_before_auth_; | 350 return has_load_timing_info_before_auth_; |
| 349 } | 351 } |
| 350 | 352 |
| 351 void TestNetworkDelegate::InitRequestStatesIfNew(int request_id) { | 353 void TestNetworkDelegate::InitRequestStatesIfNew(int request_id) { |
| 352 if (next_states_.find(request_id) == next_states_.end()) { | 354 if (next_states_.find(request_id) == next_states_.end()) { |
| 353 // TODO(davidben): Although the URLRequest documentation does not allow | 355 // TODO(davidben): Although the URLRequest documentation does not allow |
| 354 // calling Cancel() before Start(), the ResourceLoader does so. URLRequest's | 356 // calling Cancel() before Start(), the ResourceLoader does so. URLRequest's |
| 355 // destructor also calls Cancel. Either officially support this or fix the | 357 // destructor also calls Cancel. Either officially support this or fix the |
| 356 // ResourceLoader code. | 358 // ResourceLoader code. |
| 357 next_states_[request_id] = kStageBeforeURLRequest | kStageCompletedError; | 359 next_states_[request_id] = kStageBeforeURLRequest | kStageCompletedError; |
| 358 event_order_[request_id] = ""; | 360 event_order_[request_id] = ""; |
| 359 } | 361 } |
| 360 } | 362 } |
| 361 | 363 |
| 362 int TestNetworkDelegate::OnBeforeURLRequest( | 364 int TestNetworkDelegate::OnBeforeURLRequest(URLRequest* request, |
| 363 URLRequest* request, | 365 const CompletionCallback& callback, |
| 364 const CompletionCallback& callback, | 366 GURL* new_url) { |
| 365 GURL* new_url ) { | |
| 366 int req_id = request->identifier(); | 367 int req_id = request->identifier(); |
| 367 InitRequestStatesIfNew(req_id); | 368 InitRequestStatesIfNew(req_id); |
| 368 event_order_[req_id] += "OnBeforeURLRequest\n"; | 369 event_order_[req_id] += "OnBeforeURLRequest\n"; |
| 369 EXPECT_TRUE(next_states_[req_id] & kStageBeforeURLRequest) << | 370 EXPECT_TRUE(next_states_[req_id] & kStageBeforeURLRequest) |
| 370 event_order_[req_id]; | 371 << event_order_[req_id]; |
| 371 next_states_[req_id] = | 372 next_states_[req_id] = |
| 372 kStageBeforeSendHeaders | | 373 kStageBeforeSendHeaders | |
| 373 kStageResponseStarted | // data: URLs do not trigger sending headers | 374 kStageResponseStarted | // data: URLs do not trigger sending headers |
| 374 kStageBeforeRedirect | // a delegate can trigger a redirection | 375 kStageBeforeRedirect | // a delegate can trigger a redirection |
| 375 kStageCompletedError | // request canceled by delegate | 376 kStageCompletedError | // request canceled by delegate |
| 376 kStageAuthRequired; // Auth can come next for FTP requests | 377 kStageAuthRequired; // Auth can come next for FTP requests |
| 377 created_requests_++; | 378 created_requests_++; |
| 378 return OK; | 379 return OK; |
| 379 } | 380 } |
| 380 | 381 |
| 381 int TestNetworkDelegate::OnBeforeSendHeaders( | 382 int TestNetworkDelegate::OnBeforeSendHeaders(URLRequest* request, |
| 382 URLRequest* request, | 383 const CompletionCallback& callback, |
| 383 const CompletionCallback& callback, | 384 HttpRequestHeaders* headers) { |
| 384 HttpRequestHeaders* headers) { | |
| 385 int req_id = request->identifier(); | 385 int req_id = request->identifier(); |
| 386 InitRequestStatesIfNew(req_id); | 386 InitRequestStatesIfNew(req_id); |
| 387 event_order_[req_id] += "OnBeforeSendHeaders\n"; | 387 event_order_[req_id] += "OnBeforeSendHeaders\n"; |
| 388 EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) << | 388 EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) |
| 389 event_order_[req_id]; | 389 << event_order_[req_id]; |
| 390 next_states_[req_id] = | 390 next_states_[req_id] = |
| 391 kStageSendHeaders | | 391 kStageSendHeaders | kStageCompletedError; // request canceled by delegate |
| 392 kStageCompletedError; // request canceled by delegate | |
| 393 | 392 |
| 394 return OK; | 393 return OK; |
| 395 } | 394 } |
| 396 | 395 |
| 397 void TestNetworkDelegate::OnSendHeaders( | 396 void TestNetworkDelegate::OnSendHeaders(URLRequest* request, |
| 398 URLRequest* request, | 397 const HttpRequestHeaders& headers) { |
| 399 const HttpRequestHeaders& headers) { | |
| 400 int req_id = request->identifier(); | 398 int req_id = request->identifier(); |
| 401 InitRequestStatesIfNew(req_id); | 399 InitRequestStatesIfNew(req_id); |
| 402 event_order_[req_id] += "OnSendHeaders\n"; | 400 event_order_[req_id] += "OnSendHeaders\n"; |
| 403 EXPECT_TRUE(next_states_[req_id] & kStageSendHeaders) << | 401 EXPECT_TRUE(next_states_[req_id] & kStageSendHeaders) << event_order_[req_id]; |
| 404 event_order_[req_id]; | 402 next_states_[req_id] = kStageHeadersReceived | kStageCompletedError; |
| 405 next_states_[req_id] = | |
| 406 kStageHeadersReceived | | |
| 407 kStageCompletedError; | |
| 408 } | 403 } |
| 409 | 404 |
| 410 int TestNetworkDelegate::OnHeadersReceived( | 405 int TestNetworkDelegate::OnHeadersReceived( |
| 411 URLRequest* request, | 406 URLRequest* request, |
| 412 const CompletionCallback& callback, | 407 const CompletionCallback& callback, |
| 413 const HttpResponseHeaders* original_response_headers, | 408 const HttpResponseHeaders* original_response_headers, |
| 414 scoped_refptr<HttpResponseHeaders>* override_response_headers, | 409 scoped_refptr<HttpResponseHeaders>* override_response_headers, |
| 415 GURL* allowed_unsafe_redirect_url) { | 410 GURL* allowed_unsafe_redirect_url) { |
| 416 int req_id = request->identifier(); | 411 int req_id = request->identifier(); |
| 417 event_order_[req_id] += "OnHeadersReceived\n"; | 412 event_order_[req_id] += "OnHeadersReceived\n"; |
| 418 InitRequestStatesIfNew(req_id); | 413 InitRequestStatesIfNew(req_id); |
| 419 EXPECT_TRUE(next_states_[req_id] & kStageHeadersReceived) << | 414 EXPECT_TRUE(next_states_[req_id] & kStageHeadersReceived) |
| 420 event_order_[req_id]; | 415 << event_order_[req_id]; |
| 421 next_states_[req_id] = | 416 next_states_[req_id] = kStageBeforeRedirect | kStageResponseStarted | |
| 422 kStageBeforeRedirect | | 417 kStageAuthRequired | |
| 423 kStageResponseStarted | | 418 kStageCompletedError; // e.g. proxy resolution problem |
| 424 kStageAuthRequired | | |
| 425 kStageCompletedError; // e.g. proxy resolution problem | |
| 426 | 419 |
| 427 // Basic authentication sends a second request from the URLRequestHttpJob | 420 // Basic authentication sends a second request from the URLRequestHttpJob |
| 428 // layer before the URLRequest reports that a response has started. | 421 // layer before the URLRequest reports that a response has started. |
| 429 next_states_[req_id] |= kStageBeforeSendHeaders; | 422 next_states_[req_id] |= kStageBeforeSendHeaders; |
| 430 | 423 |
| 431 if (!redirect_on_headers_received_url_.is_empty()) { | 424 if (!redirect_on_headers_received_url_.is_empty()) { |
| 432 *override_response_headers = | 425 *override_response_headers = |
| 433 new net::HttpResponseHeaders(original_response_headers->raw_headers()); | 426 new net::HttpResponseHeaders(original_response_headers->raw_headers()); |
| 434 (*override_response_headers)->ReplaceStatusLine("HTTP/1.1 302 Found"); | 427 (*override_response_headers)->ReplaceStatusLine("HTTP/1.1 302 Found"); |
| 435 (*override_response_headers)->RemoveHeader("Location"); | 428 (*override_response_headers)->RemoveHeader("Location"); |
| 436 (*override_response_headers)->AddHeader( | 429 (*override_response_headers) |
| 437 "Location: " + redirect_on_headers_received_url_.spec()); | 430 ->AddHeader("Location: " + redirect_on_headers_received_url_.spec()); |
| 438 | 431 |
| 439 redirect_on_headers_received_url_ = GURL(); | 432 redirect_on_headers_received_url_ = GURL(); |
| 440 | 433 |
| 441 if (!allowed_unsafe_redirect_url_.is_empty()) | 434 if (!allowed_unsafe_redirect_url_.is_empty()) |
| 442 *allowed_unsafe_redirect_url = allowed_unsafe_redirect_url_; | 435 *allowed_unsafe_redirect_url = allowed_unsafe_redirect_url_; |
| 443 } | 436 } |
| 444 | 437 |
| 445 return OK; | 438 return OK; |
| 446 } | 439 } |
| 447 | 440 |
| 448 void TestNetworkDelegate::OnBeforeRedirect(URLRequest* request, | 441 void TestNetworkDelegate::OnBeforeRedirect(URLRequest* request, |
| 449 const GURL& new_location) { | 442 const GURL& new_location) { |
| 450 load_timing_info_before_redirect_ = LoadTimingInfo(); | 443 load_timing_info_before_redirect_ = LoadTimingInfo(); |
| 451 request->GetLoadTimingInfo(&load_timing_info_before_redirect_); | 444 request->GetLoadTimingInfo(&load_timing_info_before_redirect_); |
| 452 has_load_timing_info_before_redirect_ = true; | 445 has_load_timing_info_before_redirect_ = true; |
| 453 EXPECT_FALSE(load_timing_info_before_redirect_.request_start_time.is_null()); | 446 EXPECT_FALSE(load_timing_info_before_redirect_.request_start_time.is_null()); |
| 454 EXPECT_FALSE(load_timing_info_before_redirect_.request_start.is_null()); | 447 EXPECT_FALSE(load_timing_info_before_redirect_.request_start.is_null()); |
| 455 | 448 |
| 456 int req_id = request->identifier(); | 449 int req_id = request->identifier(); |
| 457 InitRequestStatesIfNew(req_id); | 450 InitRequestStatesIfNew(req_id); |
| 458 event_order_[req_id] += "OnBeforeRedirect\n"; | 451 event_order_[req_id] += "OnBeforeRedirect\n"; |
| 459 EXPECT_TRUE(next_states_[req_id] & kStageBeforeRedirect) << | 452 EXPECT_TRUE(next_states_[req_id] & kStageBeforeRedirect) |
| 460 event_order_[req_id]; | 453 << event_order_[req_id]; |
| 461 next_states_[req_id] = | 454 next_states_[req_id] = |
| 462 kStageBeforeURLRequest | // HTTP redirects trigger this. | 455 kStageBeforeURLRequest | // HTTP redirects trigger this. |
| 463 kStageBeforeSendHeaders | // Redirects from the network delegate do not | 456 kStageBeforeSendHeaders | // Redirects from the network delegate do not |
| 464 // trigger onBeforeURLRequest. | 457 // trigger onBeforeURLRequest. |
| 465 kStageCompletedError; | 458 kStageCompletedError; |
| 466 | 459 |
| 467 // A redirect can lead to a file or a data URL. In this case, we do not send | 460 // A redirect can lead to a file or a data URL. In this case, we do not send |
| 468 // headers. | 461 // headers. |
| 469 next_states_[req_id] |= kStageResponseStarted; | 462 next_states_[req_id] |= kStageResponseStarted; |
| 470 } | 463 } |
| 471 | 464 |
| 472 void TestNetworkDelegate::OnResponseStarted(URLRequest* request) { | 465 void TestNetworkDelegate::OnResponseStarted(URLRequest* request) { |
| 473 LoadTimingInfo load_timing_info; | 466 LoadTimingInfo load_timing_info; |
| 474 request->GetLoadTimingInfo(&load_timing_info); | 467 request->GetLoadTimingInfo(&load_timing_info); |
| 475 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); | 468 EXPECT_FALSE(load_timing_info.request_start_time.is_null()); |
| 476 EXPECT_FALSE(load_timing_info.request_start.is_null()); | 469 EXPECT_FALSE(load_timing_info.request_start.is_null()); |
| 477 | 470 |
| 478 int req_id = request->identifier(); | 471 int req_id = request->identifier(); |
| 479 InitRequestStatesIfNew(req_id); | 472 InitRequestStatesIfNew(req_id); |
| 480 event_order_[req_id] += "OnResponseStarted\n"; | 473 event_order_[req_id] += "OnResponseStarted\n"; |
| 481 EXPECT_TRUE(next_states_[req_id] & kStageResponseStarted) << | 474 EXPECT_TRUE(next_states_[req_id] & kStageResponseStarted) |
| 482 event_order_[req_id]; | 475 << event_order_[req_id]; |
| 483 next_states_[req_id] = kStageCompletedSuccess | kStageCompletedError; | 476 next_states_[req_id] = kStageCompletedSuccess | kStageCompletedError; |
| 484 if (request->status().status() == URLRequestStatus::FAILED) { | 477 if (request->status().status() == URLRequestStatus::FAILED) { |
| 485 error_count_++; | 478 error_count_++; |
| 486 last_error_ = request->status().error(); | 479 last_error_ = request->status().error(); |
| 487 } | 480 } |
| 488 } | 481 } |
| 489 | 482 |
| 490 void TestNetworkDelegate::OnRawBytesRead(const URLRequest& request, | 483 void TestNetworkDelegate::OnRawBytesRead(const URLRequest& request, |
| 491 int bytes_read) { | 484 int bytes_read) { |
| 492 } | 485 } |
| 493 | 486 |
| 494 void TestNetworkDelegate::OnCompleted(URLRequest* request, bool started) { | 487 void TestNetworkDelegate::OnCompleted(URLRequest* request, bool started) { |
| 495 int req_id = request->identifier(); | 488 int req_id = request->identifier(); |
| 496 InitRequestStatesIfNew(req_id); | 489 InitRequestStatesIfNew(req_id); |
| 497 event_order_[req_id] += "OnCompleted\n"; | 490 event_order_[req_id] += "OnCompleted\n"; |
| 498 // Expect "Success -> (next_states_ & kStageCompletedSuccess)" | 491 // Expect "Success -> (next_states_ & kStageCompletedSuccess)" |
| 499 // is logically identical to | 492 // is logically identical to |
| 500 // Expect "!(Success) || (next_states_ & kStageCompletedSuccess)" | 493 // Expect "!(Success) || (next_states_ & kStageCompletedSuccess)" |
| 501 EXPECT_TRUE(!request->status().is_success() || | 494 EXPECT_TRUE(!request->status().is_success() || |
| 502 (next_states_[req_id] & kStageCompletedSuccess)) << | 495 (next_states_[req_id] & kStageCompletedSuccess)) |
| 503 event_order_[req_id]; | 496 << event_order_[req_id]; |
| 504 EXPECT_TRUE(request->status().is_success() || | 497 EXPECT_TRUE(request->status().is_success() || |
| 505 (next_states_[req_id] & kStageCompletedError)) << | 498 (next_states_[req_id] & kStageCompletedError)) |
| 506 event_order_[req_id]; | 499 << event_order_[req_id]; |
| 507 next_states_[req_id] = kStageURLRequestDestroyed; | 500 next_states_[req_id] = kStageURLRequestDestroyed; |
| 508 completed_requests_++; | 501 completed_requests_++; |
| 509 if (request->status().status() == URLRequestStatus::FAILED) { | 502 if (request->status().status() == URLRequestStatus::FAILED) { |
| 510 error_count_++; | 503 error_count_++; |
| 511 last_error_ = request->status().error(); | 504 last_error_ = request->status().error(); |
| 512 } else if (request->status().status() == URLRequestStatus::CANCELED) { | 505 } else if (request->status().status() == URLRequestStatus::CANCELED) { |
| 513 canceled_requests_++; | 506 canceled_requests_++; |
| 514 } else { | 507 } else { |
| 515 DCHECK_EQ(URLRequestStatus::SUCCESS, request->status().status()); | 508 DCHECK_EQ(URLRequestStatus::SUCCESS, request->status().status()); |
| 516 } | 509 } |
| 517 } | 510 } |
| 518 | 511 |
| 519 void TestNetworkDelegate::OnURLRequestDestroyed(URLRequest* request) { | 512 void TestNetworkDelegate::OnURLRequestDestroyed(URLRequest* request) { |
| 520 int req_id = request->identifier(); | 513 int req_id = request->identifier(); |
| 521 InitRequestStatesIfNew(req_id); | 514 InitRequestStatesIfNew(req_id); |
| 522 event_order_[req_id] += "OnURLRequestDestroyed\n"; | 515 event_order_[req_id] += "OnURLRequestDestroyed\n"; |
| 523 EXPECT_TRUE(next_states_[req_id] & kStageURLRequestDestroyed) << | 516 EXPECT_TRUE(next_states_[req_id] & kStageURLRequestDestroyed) |
| 524 event_order_[req_id]; | 517 << event_order_[req_id]; |
| 525 next_states_[req_id] = kStageDestruction; | 518 next_states_[req_id] = kStageDestruction; |
| 526 destroyed_requests_++; | 519 destroyed_requests_++; |
| 527 } | 520 } |
| 528 | 521 |
| 529 void TestNetworkDelegate::OnPACScriptError(int line_number, | 522 void TestNetworkDelegate::OnPACScriptError(int line_number, |
| 530 const base::string16& error) { | 523 const base::string16& error) { |
| 531 } | 524 } |
| 532 | 525 |
| 533 NetworkDelegate::AuthRequiredResponse TestNetworkDelegate::OnAuthRequired( | 526 NetworkDelegate::AuthRequiredResponse TestNetworkDelegate::OnAuthRequired( |
| 534 URLRequest* request, | 527 URLRequest* request, |
| 535 const AuthChallengeInfo& auth_info, | 528 const AuthChallengeInfo& auth_info, |
| 536 const AuthCallback& callback, | 529 const AuthCallback& callback, |
| 537 AuthCredentials* credentials) { | 530 AuthCredentials* credentials) { |
| 538 load_timing_info_before_auth_ = LoadTimingInfo(); | 531 load_timing_info_before_auth_ = LoadTimingInfo(); |
| 539 request->GetLoadTimingInfo(&load_timing_info_before_auth_); | 532 request->GetLoadTimingInfo(&load_timing_info_before_auth_); |
| 540 has_load_timing_info_before_auth_ = true; | 533 has_load_timing_info_before_auth_ = true; |
| 541 EXPECT_FALSE(load_timing_info_before_auth_.request_start_time.is_null()); | 534 EXPECT_FALSE(load_timing_info_before_auth_.request_start_time.is_null()); |
| 542 EXPECT_FALSE(load_timing_info_before_auth_.request_start.is_null()); | 535 EXPECT_FALSE(load_timing_info_before_auth_.request_start.is_null()); |
| 543 | 536 |
| 544 int req_id = request->identifier(); | 537 int req_id = request->identifier(); |
| 545 InitRequestStatesIfNew(req_id); | 538 InitRequestStatesIfNew(req_id); |
| 546 event_order_[req_id] += "OnAuthRequired\n"; | 539 event_order_[req_id] += "OnAuthRequired\n"; |
| 547 EXPECT_TRUE(next_states_[req_id] & kStageAuthRequired) << | 540 EXPECT_TRUE(next_states_[req_id] & kStageAuthRequired) |
| 548 event_order_[req_id]; | 541 << event_order_[req_id]; |
| 549 next_states_[req_id] = kStageBeforeSendHeaders | | 542 next_states_[req_id] = |
| 543 kStageBeforeSendHeaders | |
| 550 kStageAuthRequired | // For example, proxy auth followed by server auth. | 544 kStageAuthRequired | // For example, proxy auth followed by server auth. |
| 551 kStageHeadersReceived | // Request canceled by delegate simulates empty | 545 kStageHeadersReceived | // Request canceled by delegate simulates empty |
| 552 // response. | 546 // response. |
| 553 kStageResponseStarted | // data: URLs do not trigger sending headers | 547 kStageResponseStarted | // data: URLs do not trigger sending headers |
| 554 kStageBeforeRedirect | // a delegate can trigger a redirection | 548 kStageBeforeRedirect | // a delegate can trigger a redirection |
| 555 kStageCompletedError; // request cancelled before callback | 549 kStageCompletedError; // request cancelled before callback |
| 556 return NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; | 550 return NetworkDelegate::AUTH_REQUIRED_RESPONSE_NO_ACTION; |
| 557 } | 551 } |
| 558 | 552 |
| 559 bool TestNetworkDelegate::OnCanGetCookies(const URLRequest& request, | 553 bool TestNetworkDelegate::OnCanGetCookies(const URLRequest& request, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 int TestNetworkDelegate::OnBeforeSocketStreamConnect( | 592 int TestNetworkDelegate::OnBeforeSocketStreamConnect( |
| 599 SocketStream* socket, | 593 SocketStream* socket, |
| 600 const CompletionCallback& callback) { | 594 const CompletionCallback& callback) { |
| 601 return OK; | 595 return OK; |
| 602 } | 596 } |
| 603 | 597 |
| 604 // static | 598 // static |
| 605 std::string ScopedCustomUrlRequestTestHttpHost::value_("127.0.0.1"); | 599 std::string ScopedCustomUrlRequestTestHttpHost::value_("127.0.0.1"); |
| 606 | 600 |
| 607 ScopedCustomUrlRequestTestHttpHost::ScopedCustomUrlRequestTestHttpHost( | 601 ScopedCustomUrlRequestTestHttpHost::ScopedCustomUrlRequestTestHttpHost( |
| 608 const std::string& new_value) | 602 const std::string& new_value) |
| 609 : old_value_(value_), | 603 : old_value_(value_), new_value_(new_value) { |
| 610 new_value_(new_value) { | |
| 611 value_ = new_value_; | 604 value_ = new_value_; |
| 612 } | 605 } |
| 613 | 606 |
| 614 ScopedCustomUrlRequestTestHttpHost::~ScopedCustomUrlRequestTestHttpHost() { | 607 ScopedCustomUrlRequestTestHttpHost::~ScopedCustomUrlRequestTestHttpHost() { |
| 615 DCHECK_EQ(value_, new_value_); | 608 DCHECK_EQ(value_, new_value_); |
| 616 value_ = old_value_; | 609 value_ = old_value_; |
| 617 } | 610 } |
| 618 | 611 |
| 619 // static | 612 // static |
| 620 const std::string& ScopedCustomUrlRequestTestHttpHost::value() { | 613 const std::string& ScopedCustomUrlRequestTestHttpHost::value() { |
| 621 return value_; | 614 return value_; |
| 622 } | 615 } |
| 623 | 616 |
| 624 TestJobInterceptor::TestJobInterceptor() : main_intercept_job_(NULL) { | 617 TestJobInterceptor::TestJobInterceptor() : main_intercept_job_(NULL) { |
| 625 } | 618 } |
| 626 | 619 |
| 627 URLRequestJob* TestJobInterceptor::MaybeCreateJob( | 620 URLRequestJob* TestJobInterceptor::MaybeCreateJob( |
| 628 URLRequest* request, | 621 URLRequest* request, |
| 629 NetworkDelegate* network_delegate) const { | 622 NetworkDelegate* network_delegate) const { |
| 630 URLRequestJob* job = main_intercept_job_; | 623 URLRequestJob* job = main_intercept_job_; |
| 631 main_intercept_job_ = NULL; | 624 main_intercept_job_ = NULL; |
| 632 return job; | 625 return job; |
| 633 } | 626 } |
| 634 | 627 |
| 635 void TestJobInterceptor::set_main_intercept_job(URLRequestJob* job) { | 628 void TestJobInterceptor::set_main_intercept_job(URLRequestJob* job) { |
| 636 main_intercept_job_ = job; | 629 main_intercept_job_ = job; |
| 637 } | 630 } |
| 638 | 631 |
| 639 } // namespace net | 632 } // namespace net |
| OLD | NEW |