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

Side by Side Diff: net/http/http_network_transaction.cc

Issue 113760: Revert "Temporarily landing my ClientSocketPool refactor. Will revert right after." (Closed)
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include "base/scoped_ptr.h" 7 #include "base/scoped_ptr.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/field_trial.h" 9 #include "base/field_trial.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 if (rv == ERR_IO_PENDING) 169 if (rv == ERR_IO_PENDING)
170 user_callback_ = callback; 170 user_callback_ = callback;
171 return rv; 171 return rv;
172 } 172 }
173 173
174 int HttpNetworkTransaction::RestartIgnoringLastError( 174 int HttpNetworkTransaction::RestartIgnoringLastError(
175 CompletionCallback* callback) { 175 CompletionCallback* callback) {
176 if (connection_.socket()->IsConnected()) { 176 if (connection_.socket()->IsConnected()) {
177 next_state_ = STATE_WRITE_HEADERS; 177 next_state_ = STATE_WRITE_HEADERS;
178 } else { 178 } else {
179 connection_.socket()->Disconnect(); 179 connection_.set_socket(NULL);
180 connection_.Reset(); 180 connection_.Reset();
181 next_state_ = STATE_INIT_CONNECTION; 181 next_state_ = STATE_INIT_CONNECTION;
182 } 182 }
183 int rv = DoLoop(OK); 183 int rv = DoLoop(OK);
184 if (rv == ERR_IO_PENDING) 184 if (rv == ERR_IO_PENDING)
185 user_callback_ = callback; 185 user_callback_ = callback;
186 return rv; 186 return rv;
187 } 187 }
188 188
189 int HttpNetworkTransaction::RestartWithAuth( 189 int HttpNetworkTransaction::RestartWithAuth(
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 // the response body. 293 // the response body.
294 DidDrainBodyForAuthRestart(keep_alive); 294 DidDrainBodyForAuthRestart(keep_alive);
295 } 295 }
296 296
297 void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) { 297 void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) {
298 if (keep_alive) { 298 if (keep_alive) {
299 next_state_ = STATE_WRITE_HEADERS; 299 next_state_ = STATE_WRITE_HEADERS;
300 reused_socket_ = true; 300 reused_socket_ = true;
301 } else { 301 } else {
302 next_state_ = STATE_INIT_CONNECTION; 302 next_state_ = STATE_INIT_CONNECTION;
303 connection_.socket()->Disconnect(); 303 connection_.set_socket(NULL);
304 connection_.Reset(); 304 connection_.Reset();
305 } 305 }
306 306
307 // Reset the other member variables. 307 // Reset the other member variables.
308 ResetStateForRestart(); 308 ResetStateForRestart();
309 } 309 }
310 310
311 int HttpNetworkTransaction::Read(IOBuffer* buf, int buf_len, 311 int HttpNetworkTransaction::Read(IOBuffer* buf, int buf_len,
312 CompletionCallback* callback) { 312 CompletionCallback* callback) {
313 DCHECK(response_.headers); 313 DCHECK(response_.headers);
(...skipping 29 matching lines...) Expand all
343 const HttpResponseInfo* HttpNetworkTransaction::GetResponseInfo() const { 343 const HttpResponseInfo* HttpNetworkTransaction::GetResponseInfo() const {
344 return (response_.headers || response_.ssl_info.cert) ? &response_ : NULL; 344 return (response_.headers || response_.ssl_info.cert) ? &response_ : NULL;
345 } 345 }
346 346
347 LoadState HttpNetworkTransaction::GetLoadState() const { 347 LoadState HttpNetworkTransaction::GetLoadState() const {
348 // TODO(wtc): Define a new LoadState value for the 348 // TODO(wtc): Define a new LoadState value for the
349 // STATE_INIT_CONNECTION_COMPLETE state, which delays the HTTP request. 349 // STATE_INIT_CONNECTION_COMPLETE state, which delays the HTTP request.
350 switch (next_state_) { 350 switch (next_state_) {
351 case STATE_RESOLVE_PROXY_COMPLETE: 351 case STATE_RESOLVE_PROXY_COMPLETE:
352 return LOAD_STATE_RESOLVING_PROXY_FOR_URL; 352 return LOAD_STATE_RESOLVING_PROXY_FOR_URL;
353 case STATE_INIT_CONNECTION_COMPLETE: 353 case STATE_RESOLVE_HOST_COMPLETE:
354 return connection_.GetLoadState(); 354 return LOAD_STATE_RESOLVING_HOST;
355 case STATE_TCP_CONNECT_COMPLETE:
356 return LOAD_STATE_CONNECTING;
355 case STATE_WRITE_HEADERS_COMPLETE: 357 case STATE_WRITE_HEADERS_COMPLETE:
356 case STATE_WRITE_BODY_COMPLETE: 358 case STATE_WRITE_BODY_COMPLETE:
357 return LOAD_STATE_SENDING_REQUEST; 359 return LOAD_STATE_SENDING_REQUEST;
358 case STATE_READ_HEADERS_COMPLETE: 360 case STATE_READ_HEADERS_COMPLETE:
359 return LOAD_STATE_WAITING_FOR_RESPONSE; 361 return LOAD_STATE_WAITING_FOR_RESPONSE;
360 case STATE_READ_BODY_COMPLETE: 362 case STATE_READ_BODY_COMPLETE:
361 return LOAD_STATE_READING_RESPONSE; 363 return LOAD_STATE_READING_RESPONSE;
362 default: 364 default:
363 return LOAD_STATE_IDLE; 365 return LOAD_STATE_IDLE;
364 } 366 }
365 } 367 }
366 368
367 uint64 HttpNetworkTransaction::GetUploadProgress() const { 369 uint64 HttpNetworkTransaction::GetUploadProgress() const {
368 if (!request_body_stream_.get()) 370 if (!request_body_stream_.get())
369 return 0; 371 return 0;
370 372
371 return request_body_stream_->position(); 373 return request_body_stream_->position();
372 } 374 }
373 375
374 HttpNetworkTransaction::~HttpNetworkTransaction() { 376 HttpNetworkTransaction::~HttpNetworkTransaction() {
375 // If we still have an open socket, then make sure to disconnect it so we 377 // If we still have an open socket, then make sure to close it so we don't
376 // don't try to reuse it later on. 378 // try to reuse it later on.
377 if (connection_.is_initialized()) 379 if (connection_.is_initialized())
378 connection_.socket()->Disconnect(); 380 connection_.set_socket(NULL);
379 381
380 if (pac_request_) 382 if (pac_request_)
381 session_->proxy_service()->CancelPacRequest(pac_request_); 383 session_->proxy_service()->CancelPacRequest(pac_request_);
382 } 384 }
383 385
384 void HttpNetworkTransaction::DoCallback(int rv) { 386 void HttpNetworkTransaction::DoCallback(int rv) {
385 DCHECK(rv != ERR_IO_PENDING); 387 DCHECK(rv != ERR_IO_PENDING);
386 DCHECK(user_callback_); 388 DCHECK(user_callback_);
387 389
388 // Since Run may result in Read being called, clear user_callback_ up front. 390 // Since Run may result in Read being called, clear user_callback_ up front.
(...skipping 27 matching lines...) Expand all
416 break; 418 break;
417 case STATE_INIT_CONNECTION: 419 case STATE_INIT_CONNECTION:
418 DCHECK_EQ(OK, rv); 420 DCHECK_EQ(OK, rv);
419 TRACE_EVENT_BEGIN("http.init_conn", request_, request_->url.spec()); 421 TRACE_EVENT_BEGIN("http.init_conn", request_, request_->url.spec());
420 rv = DoInitConnection(); 422 rv = DoInitConnection();
421 break; 423 break;
422 case STATE_INIT_CONNECTION_COMPLETE: 424 case STATE_INIT_CONNECTION_COMPLETE:
423 rv = DoInitConnectionComplete(rv); 425 rv = DoInitConnectionComplete(rv);
424 TRACE_EVENT_END("http.init_conn", request_, request_->url.spec()); 426 TRACE_EVENT_END("http.init_conn", request_, request_->url.spec());
425 break; 427 break;
428 case STATE_RESOLVE_HOST:
429 DCHECK_EQ(OK, rv);
430 TRACE_EVENT_BEGIN("http.resolve_host", request_, request_->url.spec());
431 rv = DoResolveHost();
432 break;
433 case STATE_RESOLVE_HOST_COMPLETE:
434 rv = DoResolveHostComplete(rv);
435 TRACE_EVENT_END("http.resolve_host", request_, request_->url.spec());
436 break;
437 case STATE_TCP_CONNECT:
438 DCHECK_EQ(OK, rv);
439 TRACE_EVENT_BEGIN("http.connect", request_, request_->url.spec());
440 rv = DoTCPConnect();
441 break;
442 case STATE_TCP_CONNECT_COMPLETE:
443 rv = DoTCPConnectComplete(rv);
444 TRACE_EVENT_END("http.connect", request_, request_->url.spec());
445 break;
426 case STATE_SSL_CONNECT: 446 case STATE_SSL_CONNECT:
427 DCHECK_EQ(OK, rv); 447 DCHECK_EQ(OK, rv);
428 TRACE_EVENT_BEGIN("http.ssl_connect", request_, request_->url.spec()); 448 TRACE_EVENT_BEGIN("http.ssl_connect", request_, request_->url.spec());
429 rv = DoSSLConnect(); 449 rv = DoSSLConnect();
430 break; 450 break;
431 case STATE_SSL_CONNECT_COMPLETE: 451 case STATE_SSL_CONNECT_COMPLETE:
432 rv = DoSSLConnectComplete(rv); 452 rv = DoSSLConnectComplete(rv);
433 TRACE_EVENT_END("http.ssl_connect", request_, request_->url.spec()); 453 TRACE_EVENT_END("http.ssl_connect", request_, request_->url.spec());
434 break; 454 break;
435 case STATE_WRITE_HEADERS: 455 case STATE_WRITE_HEADERS:
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 DCHECK(!connection_.is_initialized()); 545 DCHECK(!connection_.is_initialized());
526 546
527 next_state_ = STATE_INIT_CONNECTION_COMPLETE; 547 next_state_ = STATE_INIT_CONNECTION_COMPLETE;
528 548
529 using_ssl_ = request_->url.SchemeIs("https"); 549 using_ssl_ = request_->url.SchemeIs("https");
530 using_proxy_ = !proxy_info_.is_direct() && !using_ssl_; 550 using_proxy_ = !proxy_info_.is_direct() && !using_ssl_;
531 using_tunnel_ = !proxy_info_.is_direct() && using_ssl_; 551 using_tunnel_ = !proxy_info_.is_direct() && using_ssl_;
532 552
533 // Build the string used to uniquely identify connections of this type. 553 // Build the string used to uniquely identify connections of this type.
534 std::string connection_group; 554 std::string connection_group;
535 std::string host; 555 if (using_proxy_ || using_tunnel_)
536 int port; 556 connection_group = "proxy/" + proxy_info_.proxy_server().ToURI() + "/";
537 if (using_proxy_ || using_tunnel_) {
538 ProxyServer proxy_server = proxy_info_.proxy_server();
539 connection_group = "proxy/" + proxy_server.ToURI() + "/";
540 host = proxy_server.HostNoBrackets();
541 port = proxy_server.port();
542 } else {
543 host = request_->url.HostNoBrackets();
544 port = request_->url.EffectiveIntPort();
545 }
546 if (!using_proxy_) 557 if (!using_proxy_)
547 connection_group.append(request_->url.GetOrigin().spec()); 558 connection_group.append(request_->url.GetOrigin().spec());
548 559
549 DCHECK(!connection_group.empty()); 560 DCHECK(!connection_group.empty());
550 int rv = connection_.Init(connection_group, host, port, request_->priority, 561 return connection_.Init(connection_group, request_->priority, &io_callback_);
551 &io_callback_);
552 return rv;
553 } 562 }
554 563
555 int HttpNetworkTransaction::DoInitConnectionComplete(int result) { 564 int HttpNetworkTransaction::DoInitConnectionComplete(int result) {
556 if (result < 0) 565 if (result < 0)
557 return ReconsiderProxyAfterError(result); 566 return result;
558 567
559 DCHECK(connection_.is_initialized()); 568 DCHECK(connection_.is_initialized());
560 569
561 // Set the reused_socket_ flag to indicate that we are using a keep-alive 570 // Set the reused_socket_ flag to indicate that we are using a keep-alive
562 // connection. This flag is used to handle errors that occur while we are 571 // connection. This flag is used to handle errors that occur while we are
563 // trying to reuse a keep-alive connection. 572 // trying to reuse a keep-alive connection.
564 reused_socket_ = connection_.is_reused(); 573 reused_socket_ = (connection_.socket() != NULL);
565 if (reused_socket_) { 574 if (reused_socket_) {
566 next_state_ = STATE_WRITE_HEADERS; 575 next_state_ = STATE_WRITE_HEADERS;
567 } else { 576 } else {
568 // Now we have a TCP connected socket. Perform other connection setup as 577 next_state_ = STATE_RESOLVE_HOST;
569 // needed. 578 }
579 return OK;
580 }
581
582 int HttpNetworkTransaction::DoResolveHost() {
583 next_state_ = STATE_RESOLVE_HOST_COMPLETE;
584
585 std::string host;
586 int port;
587
588 // Determine the host and port to connect to.
589 if (using_proxy_ || using_tunnel_) {
590 ProxyServer proxy_server = proxy_info_.proxy_server();
591 host = proxy_server.HostNoBrackets();
592 port = proxy_server.port();
593 } else {
594 // Direct connection
595 host = request_->url.HostNoBrackets();
596 port = request_->url.EffectiveIntPort();
597 }
598
599 host_resolution_start_time_ = base::Time::Now();
600
601 DidStartDnsResolution(host, this);
602 return resolver_.Resolve(host, port, &addresses_, &io_callback_);
603 }
604
605 int HttpNetworkTransaction::DoResolveHostComplete(int result) {
606 bool ok = (result == OK);
607 DidFinishDnsResolutionWithStatus(ok, request_->referrer, this);
608 if (ok) {
609 next_state_ = STATE_TCP_CONNECT;
610 } else {
611 result = ReconsiderProxyAfterError(result);
612 }
613 return result;
614 }
615
616 int HttpNetworkTransaction::DoTCPConnect() {
617 next_state_ = STATE_TCP_CONNECT_COMPLETE;
618
619 DCHECK(!connection_.socket());
620
621 connect_start_time_ = base::Time::Now();
622
623 ClientSocket* s = socket_factory_->CreateTCPClientSocket(addresses_);
624 connection_.set_socket(s);
625 return connection_.socket()->Connect(&io_callback_);
626 }
627
628 int HttpNetworkTransaction::DoTCPConnectComplete(int result) {
629 // If we are using a direct SSL connection, then go ahead and establish the
630 // SSL connection, now. Otherwise, we need to first issue a CONNECT request.
631 if (result == OK) {
570 LogTCPConnectedMetrics(); 632 LogTCPConnectedMetrics();
571 if (using_ssl_ && !using_tunnel_) { 633 if (using_ssl_ && !using_tunnel_) {
572 next_state_ = STATE_SSL_CONNECT; 634 next_state_ = STATE_SSL_CONNECT;
573 } else { 635 } else {
574 next_state_ = STATE_WRITE_HEADERS; 636 next_state_ = STATE_WRITE_HEADERS;
575 if (using_tunnel_) 637 if (using_tunnel_)
576 establishing_tunnel_ = true; 638 establishing_tunnel_ = true;
577 } 639 }
640 } else {
641 result = ReconsiderProxyAfterError(result);
578 } 642 }
579 return OK; 643 return result;
580 } 644 }
581 645
582 int HttpNetworkTransaction::DoSSLConnect() { 646 int HttpNetworkTransaction::DoSSLConnect() {
583 next_state_ = STATE_SSL_CONNECT_COMPLETE; 647 next_state_ = STATE_SSL_CONNECT_COMPLETE;
584 648
585 // Add a SSL socket on top of our existing transport socket. 649 // Add a SSL socket on top of our existing transport socket.
586 ClientSocket* s = connection_.release_socket(); 650 ClientSocket* s = connection_.release_socket();
587 s = socket_factory_->CreateSSLClientSocket( 651 s = socket_factory_->CreateSSLClientSocket(
588 s, request_->url.HostNoBrackets(), ssl_config_); 652 s, request_->url.HostNoBrackets(), ssl_config_);
589 connection_.set_socket(s); 653 connection_.set_socket(s);
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 (response_body_length_ != -1 && 934 (response_body_length_ != -1 &&
871 response_body_read_ > response_body_length_)) 935 response_body_read_ > response_body_length_))
872 keep_alive = false; 936 keep_alive = false;
873 } 937 }
874 } 938 }
875 939
876 // Clean up connection_ if we are done. 940 // Clean up connection_ if we are done.
877 if (done) { 941 if (done) {
878 LogTransactionMetrics(); 942 LogTransactionMetrics();
879 if (!keep_alive) 943 if (!keep_alive)
880 connection_.socket()->Disconnect(); 944 connection_.set_socket(NULL);
881 connection_.Reset(); 945 connection_.Reset();
882 // The next Read call will return 0 (EOF). 946 // The next Read call will return 0 (EOF).
883 } 947 }
884 948
885 // Clear these to avoid leaving around old state. 949 // Clear these to avoid leaving around old state.
886 read_buf_ = NULL; 950 read_buf_ = NULL;
887 read_buf_len_ = 0; 951 read_buf_len_ = 0;
888 952
889 return result; 953 return result;
890 } 954 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 DidDrainBodyForAuthRestart(keep_alive); 1006 DidDrainBodyForAuthRestart(keep_alive);
943 } else { 1007 } else {
944 // Keep draining. 1008 // Keep draining.
945 next_state_ = STATE_DRAIN_BODY_FOR_AUTH_RESTART; 1009 next_state_ = STATE_DRAIN_BODY_FOR_AUTH_RESTART;
946 } 1010 }
947 1011
948 return OK; 1012 return OK;
949 } 1013 }
950 1014
951 void HttpNetworkTransaction::LogTCPConnectedMetrics() const { 1015 void HttpNetworkTransaction::LogTCPConnectedMetrics() const {
1016 DCHECK(connect_start_time_ != base::Time());
1017 base::TimeDelta connect_duration =
1018 base::Time::Now() - connect_start_time_;
1019
1020 UMA_HISTOGRAM_CLIPPED_TIMES(FieldTrial::MakeName(
1021 "Net.TCP_Connection_Latency", "DnsImpact").data(), connect_duration,
1022 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMinutes(10),
1023 100);
1024
952 base::TimeDelta host_resolution_and_tcp_connection_latency = 1025 base::TimeDelta host_resolution_and_tcp_connection_latency =
953 base::Time::Now() - host_resolution_start_time_; 1026 base::Time::Now() - host_resolution_start_time_;
954 1027
955 UMA_HISTOGRAM_CLIPPED_TIMES( 1028 UMA_HISTOGRAM_CLIPPED_TIMES(
956 FieldTrial::MakeName( 1029 FieldTrial::MakeName(
957 "Net.Dns_Resolution_And_TCP_Connection_Latency", "DnsImpact").data(), 1030 "Net.Dns_Resolution_And_TCP_Connection_Latency", "DnsImpact").data(),
958 host_resolution_and_tcp_connection_latency, 1031 host_resolution_and_tcp_connection_latency,
959 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMinutes(10), 1032 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromMinutes(10),
960 100); 1033 100);
961 1034
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1214 } 1287 }
1215 1288
1216 int HttpNetworkTransaction::HandleSSLHandshakeError(int error) { 1289 int HttpNetworkTransaction::HandleSSLHandshakeError(int error) {
1217 switch (error) { 1290 switch (error) {
1218 case ERR_SSL_PROTOCOL_ERROR: 1291 case ERR_SSL_PROTOCOL_ERROR:
1219 case ERR_SSL_VERSION_OR_CIPHER_MISMATCH: 1292 case ERR_SSL_VERSION_OR_CIPHER_MISMATCH:
1220 if (ssl_config_.tls1_enabled) { 1293 if (ssl_config_.tls1_enabled) {
1221 // This could be a TLS-intolerant server or an SSL 3.0 server that 1294 // This could be a TLS-intolerant server or an SSL 3.0 server that
1222 // chose a TLS-only cipher suite. Turn off TLS 1.0 and retry. 1295 // chose a TLS-only cipher suite. Turn off TLS 1.0 and retry.
1223 ssl_config_.tls1_enabled = false; 1296 ssl_config_.tls1_enabled = false;
1224 connection_.socket()->Disconnect(); 1297 connection_.set_socket(NULL);
1225 connection_.Reset(); 1298 connection_.Reset();
1226 next_state_ = STATE_INIT_CONNECTION; 1299 next_state_ = STATE_INIT_CONNECTION;
1227 error = OK; 1300 error = OK;
1228 } 1301 }
1229 break; 1302 break;
1230 } 1303 }
1231 return error; 1304 return error;
1232 } 1305 }
1233 1306
1234 // This method determines whether it is safe to resend the request after an 1307 // This method determines whether it is safe to resend the request after an
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1277 // out of the cached keep-alive connections eventually. 1350 // out of the cached keep-alive connections eventually.
1278 if (establishing_tunnel_ || 1351 if (establishing_tunnel_ ||
1279 !reused_socket_ || // We didn't reuse a keep-alive connection. 1352 !reused_socket_ || // We didn't reuse a keep-alive connection.
1280 header_buf_len_) { // We have received some response headers. 1353 header_buf_len_) { // We have received some response headers.
1281 return false; 1354 return false;
1282 } 1355 }
1283 return true; 1356 return true;
1284 } 1357 }
1285 1358
1286 void HttpNetworkTransaction::ResetConnectionAndRequestForResend() { 1359 void HttpNetworkTransaction::ResetConnectionAndRequestForResend() {
1287 connection_.socket()->Disconnect(); 1360 connection_.set_socket(NULL);
1288 connection_.Reset(); 1361 connection_.Reset();
1289 // There are two reasons we need to clear request_headers_. 1) It contains 1362 // There are two reasons we need to clear request_headers_. 1) It contains
1290 // the real request headers, but we may need to resend the CONNECT request 1363 // the real request headers, but we may need to resend the CONNECT request
1291 // first to recreate the SSL tunnel. 2) An empty request_headers_ causes 1364 // first to recreate the SSL tunnel. 2) An empty request_headers_ causes
1292 // BuildRequestHeaders to be called, which rewinds request_body_stream_ to 1365 // BuildRequestHeaders to be called, which rewinds request_body_stream_ to
1293 // the beginning of request_->upload_data. 1366 // the beginning of request_->upload_data.
1294 request_headers_->headers_.clear(); 1367 request_headers_->headers_.clear();
1295 request_headers_bytes_sent_ = 0; 1368 request_headers_bytes_sent_ = 0;
1296 next_state_ = STATE_INIT_CONNECTION; // Resend the request. 1369 next_state_ = STATE_INIT_CONNECTION; // Resend the request.
1297 } 1370 }
(...skipping 24 matching lines...) Expand all
1322 return error; 1395 return error;
1323 } 1396 }
1324 1397
1325 if (request_->load_flags & LOAD_BYPASS_PROXY) { 1398 if (request_->load_flags & LOAD_BYPASS_PROXY) {
1326 return error; 1399 return error;
1327 } 1400 }
1328 1401
1329 int rv = session_->proxy_service()->ReconsiderProxyAfterError( 1402 int rv = session_->proxy_service()->ReconsiderProxyAfterError(
1330 request_->url, &proxy_info_, &io_callback_, &pac_request_); 1403 request_->url, &proxy_info_, &io_callback_, &pac_request_);
1331 if (rv == OK || rv == ERR_IO_PENDING) { 1404 if (rv == OK || rv == ERR_IO_PENDING) {
1332 connection_.socket()->Disconnect(); 1405 connection_.set_socket(NULL);
1333 connection_.Reset(); 1406 connection_.Reset();
1334 DCHECK(!request_headers_bytes_sent_); 1407 DCHECK(!request_headers_bytes_sent_);
1335 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; 1408 next_state_ = STATE_RESOLVE_PROXY_COMPLETE;
1336 } else { 1409 } else {
1337 rv = error; 1410 rv = error;
1338 } 1411 }
1339 1412
1340 return rv; 1413 return rv;
1341 } 1414 }
1342 1415
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
1605 host_and_port = proxy_info_.proxy_server().host_and_port(); 1678 host_and_port = proxy_info_.proxy_server().host_and_port();
1606 } else { 1679 } else {
1607 DCHECK(target == HttpAuth::AUTH_SERVER); 1680 DCHECK(target == HttpAuth::AUTH_SERVER);
1608 host_and_port = GetHostAndPort(request_->url); 1681 host_and_port = GetHostAndPort(request_->url);
1609 } 1682 }
1610 auth_info->host_and_port = ASCIIToWide(host_and_port); 1683 auth_info->host_and_port = ASCIIToWide(host_and_port);
1611 response_.auth_challenge = auth_info; 1684 response_.auth_challenge = auth_info;
1612 } 1685 }
1613 1686
1614 } // namespace net 1687 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698