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

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

Issue 848006: Generalize the net module's LoadLog facility from a passive container, to an event stream (NetLog). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Split up RequestTracker into ConnectJobTracker+RequestTracker+RequestTrackerBase, address comments Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/field_trial.h" 10 #include "base/field_trial.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 g_next_protos = new std::string(next_protos); 233 g_next_protos = new std::string(next_protos);
234 } 234 }
235 235
236 // static 236 // static
237 void HttpNetworkTransaction::IgnoreCertificateErrors(bool enabled) { 237 void HttpNetworkTransaction::IgnoreCertificateErrors(bool enabled) {
238 g_ignore_certificate_errors = enabled; 238 g_ignore_certificate_errors = enabled;
239 } 239 }
240 240
241 int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info, 241 int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info,
242 CompletionCallback* callback, 242 CompletionCallback* callback,
243 LoadLog* load_log) { 243 const BoundNetLog& net_log) {
244 SIMPLE_STATS_COUNTER("HttpNetworkTransaction.Count"); 244 SIMPLE_STATS_COUNTER("HttpNetworkTransaction.Count");
245 245
246 load_log_ = load_log; 246 net_log_ = net_log;
247 request_ = request_info; 247 request_ = request_info;
248 start_time_ = base::Time::Now(); 248 start_time_ = base::Time::Now();
249 249
250 next_state_ = STATE_RESOLVE_PROXY; 250 next_state_ = STATE_RESOLVE_PROXY;
251 int rv = DoLoop(OK); 251 int rv = DoLoop(OK);
252 if (rv == ERR_IO_PENDING) 252 if (rv == ERR_IO_PENDING)
253 user_callback_ = callback; 253 user_callback_ = callback;
254 return rv; 254 return rv;
255 } 255 }
256 256
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 TRACE_EVENT_BEGIN("http.ssl_connect", request_, request_->url.spec()); 535 TRACE_EVENT_BEGIN("http.ssl_connect", request_, request_->url.spec());
536 rv = DoSSLConnect(); 536 rv = DoSSLConnect();
537 break; 537 break;
538 case STATE_SSL_CONNECT_COMPLETE: 538 case STATE_SSL_CONNECT_COMPLETE:
539 rv = DoSSLConnectComplete(rv); 539 rv = DoSSLConnectComplete(rv);
540 TRACE_EVENT_END("http.ssl_connect", request_, request_->url.spec()); 540 TRACE_EVENT_END("http.ssl_connect", request_, request_->url.spec());
541 break; 541 break;
542 case STATE_SEND_REQUEST: 542 case STATE_SEND_REQUEST:
543 DCHECK_EQ(OK, rv); 543 DCHECK_EQ(OK, rv);
544 TRACE_EVENT_BEGIN("http.send_request", request_, request_->url.spec()); 544 TRACE_EVENT_BEGIN("http.send_request", request_, request_->url.spec());
545 LoadLog::BeginEvent(load_log_, 545 net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST);
546 LoadLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST);
547 rv = DoSendRequest(); 546 rv = DoSendRequest();
548 break; 547 break;
549 case STATE_SEND_REQUEST_COMPLETE: 548 case STATE_SEND_REQUEST_COMPLETE:
550 rv = DoSendRequestComplete(rv); 549 rv = DoSendRequestComplete(rv);
551 TRACE_EVENT_END("http.send_request", request_, request_->url.spec()); 550 TRACE_EVENT_END("http.send_request", request_, request_->url.spec());
552 LoadLog::EndEvent(load_log_, 551 net_log_.EndEvent(NetLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST);
553 LoadLog::TYPE_HTTP_TRANSACTION_SEND_REQUEST);
554 break; 552 break;
555 case STATE_READ_HEADERS: 553 case STATE_READ_HEADERS:
556 DCHECK_EQ(OK, rv); 554 DCHECK_EQ(OK, rv);
557 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec()); 555 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec());
558 LoadLog::BeginEvent(load_log_, 556 net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_READ_HEADERS);
559 LoadLog::TYPE_HTTP_TRANSACTION_READ_HEADERS);
560 rv = DoReadHeaders(); 557 rv = DoReadHeaders();
561 break; 558 break;
562 case STATE_READ_HEADERS_COMPLETE: 559 case STATE_READ_HEADERS_COMPLETE:
563 rv = DoReadHeadersComplete(rv); 560 rv = DoReadHeadersComplete(rv);
564 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec()); 561 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec());
565 LoadLog::EndEvent(load_log_, 562 net_log_.EndEvent(NetLog::TYPE_HTTP_TRANSACTION_READ_HEADERS);
566 LoadLog::TYPE_HTTP_TRANSACTION_READ_HEADERS);
567 break; 563 break;
568 case STATE_READ_BODY: 564 case STATE_READ_BODY:
569 DCHECK_EQ(OK, rv); 565 DCHECK_EQ(OK, rv);
570 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec()); 566 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec());
571 LoadLog::BeginEvent(load_log_, 567 net_log_.BeginEvent(NetLog::TYPE_HTTP_TRANSACTION_READ_BODY);
572 LoadLog::TYPE_HTTP_TRANSACTION_READ_BODY);
573 rv = DoReadBody(); 568 rv = DoReadBody();
574 break; 569 break;
575 case STATE_READ_BODY_COMPLETE: 570 case STATE_READ_BODY_COMPLETE:
576 rv = DoReadBodyComplete(rv); 571 rv = DoReadBodyComplete(rv);
577 TRACE_EVENT_END("http.read_body", request_, request_->url.spec()); 572 TRACE_EVENT_END("http.read_body", request_, request_->url.spec());
578 LoadLog::EndEvent(load_log_, 573 net_log_.EndEvent(NetLog::TYPE_HTTP_TRANSACTION_READ_BODY);
579 LoadLog::TYPE_HTTP_TRANSACTION_READ_BODY);
580 break; 574 break;
581 case STATE_DRAIN_BODY_FOR_AUTH_RESTART: 575 case STATE_DRAIN_BODY_FOR_AUTH_RESTART:
582 DCHECK_EQ(OK, rv); 576 DCHECK_EQ(OK, rv);
583 TRACE_EVENT_BEGIN("http.drain_body_for_auth_restart", 577 TRACE_EVENT_BEGIN("http.drain_body_for_auth_restart",
584 request_, request_->url.spec()); 578 request_, request_->url.spec());
585 LoadLog::BeginEvent( 579 net_log_.BeginEvent(
586 load_log_, 580 NetLog::TYPE_HTTP_TRANSACTION_DRAIN_BODY_FOR_AUTH_RESTART);
587 LoadLog::TYPE_HTTP_TRANSACTION_DRAIN_BODY_FOR_AUTH_RESTART);
588 rv = DoDrainBodyForAuthRestart(); 581 rv = DoDrainBodyForAuthRestart();
589 break; 582 break;
590 case STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE: 583 case STATE_DRAIN_BODY_FOR_AUTH_RESTART_COMPLETE:
591 rv = DoDrainBodyForAuthRestartComplete(rv); 584 rv = DoDrainBodyForAuthRestartComplete(rv);
592 TRACE_EVENT_END("http.drain_body_for_auth_restart", 585 TRACE_EVENT_END("http.drain_body_for_auth_restart",
593 request_, request_->url.spec()); 586 request_, request_->url.spec());
594 LoadLog::EndEvent( 587 net_log_.EndEvent(
595 load_log_, 588 NetLog::TYPE_HTTP_TRANSACTION_DRAIN_BODY_FOR_AUTH_RESTART);
596 LoadLog::TYPE_HTTP_TRANSACTION_DRAIN_BODY_FOR_AUTH_RESTART);
597 break; 589 break;
598 case STATE_SPDY_SEND_REQUEST: 590 case STATE_SPDY_SEND_REQUEST:
599 DCHECK_EQ(OK, rv); 591 DCHECK_EQ(OK, rv);
600 TRACE_EVENT_BEGIN("http.send_request", request_, request_->url.spec()); 592 TRACE_EVENT_BEGIN("http.send_request", request_, request_->url.spec());
601 LoadLog::BeginEvent(load_log_, 593 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST);
602 LoadLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST);
603 rv = DoSpdySendRequest(); 594 rv = DoSpdySendRequest();
604 break; 595 break;
605 case STATE_SPDY_SEND_REQUEST_COMPLETE: 596 case STATE_SPDY_SEND_REQUEST_COMPLETE:
606 rv = DoSpdySendRequestComplete(rv); 597 rv = DoSpdySendRequestComplete(rv);
607 TRACE_EVENT_END("http.send_request", request_, request_->url.spec()); 598 TRACE_EVENT_END("http.send_request", request_, request_->url.spec());
608 LoadLog::EndEvent(load_log_, 599 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST);
609 LoadLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST);
610 break; 600 break;
611 case STATE_SPDY_READ_HEADERS: 601 case STATE_SPDY_READ_HEADERS:
612 DCHECK_EQ(OK, rv); 602 DCHECK_EQ(OK, rv);
613 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec()); 603 TRACE_EVENT_BEGIN("http.read_headers", request_, request_->url.spec());
614 LoadLog::BeginEvent(load_log_, 604 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_HEADERS);
615 LoadLog::TYPE_SPDY_TRANSACTION_READ_HEADERS);
616 rv = DoSpdyReadHeaders(); 605 rv = DoSpdyReadHeaders();
617 break; 606 break;
618 case STATE_SPDY_READ_HEADERS_COMPLETE: 607 case STATE_SPDY_READ_HEADERS_COMPLETE:
619 rv = DoSpdyReadHeadersComplete(rv); 608 rv = DoSpdyReadHeadersComplete(rv);
620 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec()); 609 TRACE_EVENT_END("http.read_headers", request_, request_->url.spec());
621 LoadLog::EndEvent(load_log_, 610 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_HEADERS);
622 LoadLog::TYPE_SPDY_TRANSACTION_READ_HEADERS);
623 break; 611 break;
624 case STATE_SPDY_READ_BODY: 612 case STATE_SPDY_READ_BODY:
625 DCHECK_EQ(OK, rv); 613 DCHECK_EQ(OK, rv);
626 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec()); 614 TRACE_EVENT_BEGIN("http.read_body", request_, request_->url.spec());
627 LoadLog::BeginEvent(load_log_, 615 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_BODY);
628 LoadLog::TYPE_SPDY_TRANSACTION_READ_BODY);
629 rv = DoSpdyReadBody(); 616 rv = DoSpdyReadBody();
630 break; 617 break;
631 case STATE_SPDY_READ_BODY_COMPLETE: 618 case STATE_SPDY_READ_BODY_COMPLETE:
632 rv = DoSpdyReadBodyComplete(rv); 619 rv = DoSpdyReadBodyComplete(rv);
633 TRACE_EVENT_END("http.read_body", request_, request_->url.spec()); 620 TRACE_EVENT_END("http.read_body", request_, request_->url.spec());
634 LoadLog::EndEvent(load_log_, 621 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_BODY);
635 LoadLog::TYPE_SPDY_TRANSACTION_READ_BODY);
636 break; 622 break;
637 default: 623 default:
638 NOTREACHED() << "bad state"; 624 NOTREACHED() << "bad state";
639 rv = ERR_FAILED; 625 rv = ERR_FAILED;
640 break; 626 break;
641 } 627 }
642 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); 628 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
643 629
644 return rv; 630 return rv;
645 } 631 }
646 632
647 int HttpNetworkTransaction::DoResolveProxy() { 633 int HttpNetworkTransaction::DoResolveProxy() {
648 DCHECK(!pac_request_); 634 DCHECK(!pac_request_);
649 635
650 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; 636 next_state_ = STATE_RESOLVE_PROXY_COMPLETE;
651 637
652 if (request_->load_flags & LOAD_BYPASS_PROXY) { 638 if (request_->load_flags & LOAD_BYPASS_PROXY) {
653 proxy_info_.UseDirect(); 639 proxy_info_.UseDirect();
654 return OK; 640 return OK;
655 } 641 }
656 642
657 return session_->proxy_service()->ResolveProxy( 643 return session_->proxy_service()->ResolveProxy(
658 request_->url, &proxy_info_, &io_callback_, &pac_request_, load_log_); 644 request_->url, &proxy_info_, &io_callback_, &pac_request_, net_log_);
659 } 645 }
660 646
661 int HttpNetworkTransaction::DoResolveProxyComplete(int result) { 647 int HttpNetworkTransaction::DoResolveProxyComplete(int result) {
662 pac_request_ = NULL; 648 pac_request_ = NULL;
663 649
664 if (result != OK) 650 if (result != OK)
665 return result; 651 return result;
666 652
667 // Remove unsupported proxies from the list. 653 // Remove unsupported proxies from the list.
668 proxy_info_.RemoveProxiesWithoutScheme( 654 proxy_info_.RemoveProxiesWithoutScheme(
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 740
755 // If the user is refreshing the page, bypass the host cache. 741 // If the user is refreshing the page, bypass the host cache.
756 bool disable_resolver_cache = request_->load_flags & LOAD_BYPASS_CACHE || 742 bool disable_resolver_cache = request_->load_flags & LOAD_BYPASS_CACHE ||
757 request_->load_flags & LOAD_DISABLE_CACHE; 743 request_->load_flags & LOAD_DISABLE_CACHE;
758 744
759 TCPSocketParams tcp_params(host, port, request_->priority, request_->referrer, 745 TCPSocketParams tcp_params(host, port, request_->priority, request_->referrer,
760 disable_resolver_cache); 746 disable_resolver_cache);
761 747
762 int rv = connection_->Init(connection_group, tcp_params, request_->priority, 748 int rv = connection_->Init(connection_group, tcp_params, request_->priority,
763 &io_callback_, session_->tcp_socket_pool(), 749 &io_callback_, session_->tcp_socket_pool(),
764 load_log_); 750 net_log_);
765 return rv; 751 return rv;
766 } 752 }
767 753
768 int HttpNetworkTransaction::DoInitConnectionComplete(int result) { 754 int HttpNetworkTransaction::DoInitConnectionComplete(int result) {
769 if (result < 0) { 755 if (result < 0) {
770 if (alternate_protocol_mode_ == kUsingAlternateProtocol) { 756 if (alternate_protocol_mode_ == kUsingAlternateProtocol) {
771 // Mark the alternate protocol as broken and fallback. 757 // Mark the alternate protocol as broken and fallback.
772 MarkBrokenAlternateProtocolAndFallback(); 758 MarkBrokenAlternateProtocolAndFallback();
773 return OK; 759 return OK;
774 } 760 }
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 HostResolver::RequestInfo req_info(request_->url.HostNoBrackets(), 806 HostResolver::RequestInfo req_info(request_->url.HostNoBrackets(),
821 request_->url.EffectiveIntPort()); 807 request_->url.EffectiveIntPort());
822 req_info.set_referrer(request_->referrer); 808 req_info.set_referrer(request_->referrer);
823 req_info.set_priority(request_->priority); 809 req_info.set_priority(request_->priority);
824 810
825 if (proxy_info_.proxy_server().scheme() == ProxyServer::SCHEME_SOCKS5) 811 if (proxy_info_.proxy_server().scheme() == ProxyServer::SCHEME_SOCKS5)
826 s = new SOCKS5ClientSocket(s, req_info); 812 s = new SOCKS5ClientSocket(s, req_info);
827 else 813 else
828 s = new SOCKSClientSocket(s, req_info, session_->host_resolver()); 814 s = new SOCKSClientSocket(s, req_info, session_->host_resolver());
829 connection_->set_socket(s); 815 connection_->set_socket(s);
830 return connection_->socket()->Connect(&io_callback_, load_log_); 816 return connection_->socket()->Connect(&io_callback_, net_log_);
831 } 817 }
832 818
833 int HttpNetworkTransaction::DoSOCKSConnectComplete(int result) { 819 int HttpNetworkTransaction::DoSOCKSConnectComplete(int result) {
834 DCHECK_EQ(kSOCKSProxy, proxy_mode_); 820 DCHECK_EQ(kSOCKSProxy, proxy_mode_);
835 821
836 if (result == OK) { 822 if (result == OK) {
837 if (using_ssl_) { 823 if (using_ssl_) {
838 next_state_ = STATE_SSL_CONNECT; 824 next_state_ = STATE_SSL_CONNECT;
839 } else { 825 } else {
840 next_state_ = STATE_SEND_REQUEST; 826 next_state_ = STATE_SEND_REQUEST;
(...skipping 10 matching lines...) Expand all
851 if (request_->load_flags & LOAD_VERIFY_EV_CERT) 837 if (request_->load_flags & LOAD_VERIFY_EV_CERT)
852 ssl_config_.verify_ev_cert = true; 838 ssl_config_.verify_ev_cert = true;
853 839
854 ssl_connect_start_time_ = base::TimeTicks::Now(); 840 ssl_connect_start_time_ = base::TimeTicks::Now();
855 841
856 // Add a SSL socket on top of our existing transport socket. 842 // Add a SSL socket on top of our existing transport socket.
857 ClientSocket* s = connection_->release_socket(); 843 ClientSocket* s = connection_->release_socket();
858 s = session_->socket_factory()->CreateSSLClientSocket( 844 s = session_->socket_factory()->CreateSSLClientSocket(
859 s, request_->url.HostNoBrackets(), ssl_config_); 845 s, request_->url.HostNoBrackets(), ssl_config_);
860 connection_->set_socket(s); 846 connection_->set_socket(s);
861 return connection_->socket()->Connect(&io_callback_, load_log_); 847 return connection_->socket()->Connect(&io_callback_, net_log_);
862 } 848 }
863 849
864 int HttpNetworkTransaction::DoSSLConnectComplete(int result) { 850 int HttpNetworkTransaction::DoSSLConnectComplete(int result) {
865 SSLClientSocket* ssl_socket = 851 SSLClientSocket* ssl_socket =
866 reinterpret_cast<SSLClientSocket*>(connection_->socket()); 852 reinterpret_cast<SSLClientSocket*>(connection_->socket());
867 853
868 SSLClientSocket::NextProtoStatus status = 854 SSLClientSocket::NextProtoStatus status =
869 SSLClientSocket::kNextProtoUnsupported; 855 SSLClientSocket::kNextProtoUnsupported;
870 std::string proto; 856 std::string proto;
871 // GetNextProto will fail and and trigger a NOTREACHED if we pass in a socket 857 // GetNextProto will fail and and trigger a NOTREACHED if we pass in a socket
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 948
963 if (establishing_tunnel_) { 949 if (establishing_tunnel_) {
964 BuildTunnelRequest(request_, authorization_headers, &request_headers_); 950 BuildTunnelRequest(request_, authorization_headers, &request_headers_);
965 } else { 951 } else {
966 BuildRequestHeaders(request_, authorization_headers, request_body, 952 BuildRequestHeaders(request_, authorization_headers, request_body,
967 proxy_mode_ == kHTTPProxy, &request_headers_); 953 proxy_mode_ == kHTTPProxy, &request_headers_);
968 } 954 }
969 } 955 }
970 956
971 headers_valid_ = false; 957 headers_valid_ = false;
972 http_stream_.reset(new HttpBasicStream(connection_.get(), load_log_)); 958 http_stream_.reset(new HttpBasicStream(connection_.get(), net_log_));
973 959
974 return http_stream_->SendRequest(request_, request_headers_, 960 return http_stream_->SendRequest(request_, request_headers_,
975 request_body, &response_, &io_callback_); 961 request_body, &response_, &io_callback_);
976 } 962 }
977 963
978 int HttpNetworkTransaction::DoSendRequestComplete(int result) { 964 int HttpNetworkTransaction::DoSendRequestComplete(int result) {
979 if (result < 0) 965 if (result < 0)
980 return HandleIOError(result); 966 return HandleIOError(result);
981 967
982 next_state_ = STATE_READ_HEADERS; 968 next_state_ = STATE_READ_HEADERS;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 if (establishing_tunnel_) { 1048 if (establishing_tunnel_) {
1063 switch (response_.headers->response_code()) { 1049 switch (response_.headers->response_code()) {
1064 case 200: // OK 1050 case 200: // OK
1065 if (http_stream_->IsMoreDataBuffered()) { 1051 if (http_stream_->IsMoreDataBuffered()) {
1066 // The proxy sent extraneous data after the headers. 1052 // The proxy sent extraneous data after the headers.
1067 return ERR_TUNNEL_CONNECTION_FAILED; 1053 return ERR_TUNNEL_CONNECTION_FAILED;
1068 } 1054 }
1069 next_state_ = STATE_SSL_CONNECT; 1055 next_state_ = STATE_SSL_CONNECT;
1070 // Reset for the real request and response headers. 1056 // Reset for the real request and response headers.
1071 request_headers_.clear(); 1057 request_headers_.clear();
1072 http_stream_.reset(new HttpBasicStream(connection_.get(), load_log_)); 1058 http_stream_.reset(new HttpBasicStream(connection_.get(), net_log_));
1073 headers_valid_ = false; 1059 headers_valid_ = false;
1074 establishing_tunnel_ = false; 1060 establishing_tunnel_ = false;
1075 return OK; 1061 return OK;
1076 1062
1077 // We aren't able to CONNECT to the remote host through the proxy. We 1063 // We aren't able to CONNECT to the remote host through the proxy. We
1078 // need to be very suspicious about the response because an active network 1064 // need to be very suspicious about the response because an active network
1079 // attacker can force us into this state by masquerading as the proxy. 1065 // attacker can force us into this state by masquerading as the proxy.
1080 // The only safe thing to do here is to fail the connection because our 1066 // The only safe thing to do here is to fail the connection because our
1081 // client is expecting an SSL protected response. 1067 // client is expecting an SSL protected response.
1082 // See http://crbug.com/7338. 1068 // See http://crbug.com/7338.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 spdy_session = spdy_pool->GetSpdySessionFromSSLSocket( 1214 spdy_session = spdy_pool->GetSpdySessionFromSSLSocket(
1229 host_port_pair, session_, connection_.release()); 1215 host_port_pair, session_, connection_.release());
1230 } 1216 }
1231 1217
1232 CHECK(spdy_session.get()); 1218 CHECK(spdy_session.get());
1233 1219
1234 UploadDataStream* upload_data = request_->upload_data ? 1220 UploadDataStream* upload_data = request_->upload_data ?
1235 new UploadDataStream(request_->upload_data) : NULL; 1221 new UploadDataStream(request_->upload_data) : NULL;
1236 headers_valid_ = false; 1222 headers_valid_ = false;
1237 spdy_stream_ = spdy_session->GetOrCreateStream( 1223 spdy_stream_ = spdy_session->GetOrCreateStream(
1238 *request_, upload_data, load_log_); 1224 *request_, upload_data, net_log_);
1239 return spdy_stream_->SendRequest(upload_data, &response_, &io_callback_); 1225 return spdy_stream_->SendRequest(upload_data, &response_, &io_callback_);
1240 } 1226 }
1241 1227
1242 int HttpNetworkTransaction::DoSpdySendRequestComplete(int result) { 1228 int HttpNetworkTransaction::DoSpdySendRequestComplete(int result) {
1243 if (result < 0) 1229 if (result < 0)
1244 return result; 1230 return result;
1245 1231
1246 next_state_ = STATE_SPDY_READ_HEADERS; 1232 next_state_ = STATE_SPDY_READ_HEADERS;
1247 return OK; 1233 return OK;
1248 } 1234 }
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
1614 return ERR_ADDRESS_UNREACHABLE; 1600 return ERR_ADDRESS_UNREACHABLE;
1615 default: 1601 default:
1616 return error; 1602 return error;
1617 } 1603 }
1618 1604
1619 if (request_->load_flags & LOAD_BYPASS_PROXY) { 1605 if (request_->load_flags & LOAD_BYPASS_PROXY) {
1620 return error; 1606 return error;
1621 } 1607 }
1622 1608
1623 int rv = session_->proxy_service()->ReconsiderProxyAfterError( 1609 int rv = session_->proxy_service()->ReconsiderProxyAfterError(
1624 request_->url, &proxy_info_, &io_callback_, &pac_request_, load_log_); 1610 request_->url, &proxy_info_, &io_callback_, &pac_request_, net_log_);
1625 if (rv == OK || rv == ERR_IO_PENDING) { 1611 if (rv == OK || rv == ERR_IO_PENDING) {
1626 // If the error was during connection setup, there is no socket to 1612 // If the error was during connection setup, there is no socket to
1627 // disconnect. 1613 // disconnect.
1628 if (connection_->socket()) 1614 if (connection_->socket())
1629 connection_->socket()->Disconnect(); 1615 connection_->socket()->Disconnect();
1630 connection_->Reset(); 1616 connection_->Reset();
1631 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; 1617 next_state_ = STATE_RESOLVE_PROXY_COMPLETE;
1632 } else { 1618 } else {
1633 // If ReconsiderProxyAfterError() failed synchronously, it means 1619 // If ReconsiderProxyAfterError() failed synchronously, it means
1634 // there was nothing left to fall-back to, so fail the transaction 1620 // there was nothing left to fall-back to, so fail the transaction
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 http_host_port_pair); 1913 http_host_port_pair);
1928 1914
1929 alternate_protocol_mode_ = kDoNotUseAlternateProtocol; 1915 alternate_protocol_mode_ = kDoNotUseAlternateProtocol;
1930 if (connection_->socket()) 1916 if (connection_->socket())
1931 connection_->socket()->Disconnect(); 1917 connection_->socket()->Disconnect();
1932 connection_->Reset(); 1918 connection_->Reset();
1933 next_state_ = STATE_INIT_CONNECTION; 1919 next_state_ = STATE_INIT_CONNECTION;
1934 } 1920 }
1935 1921
1936 } // namespace net 1922 } // 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