OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |