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

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

Issue 8990001: base::Bind: Convert most of net/http. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Clang. Created 9 years 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <set> 7 #include <set>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h"
11 #include "base/bind_helpers.h"
10 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
11 #include "base/format_macros.h" 13 #include "base/format_macros.h"
12 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
13 #include "base/metrics/field_trial.h" 15 #include "base/metrics/field_trial.h"
14 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
15 #include "base/metrics/stats_counters.h" 17 #include "base/metrics/stats_counters.h"
16 #include "base/stl_util.h" 18 #include "base/stl_util.h"
17 #include "base/string_number_conversions.h" 19 #include "base/string_number_conversions.h"
18 #include "base/string_util.h" 20 #include "base/string_util.h"
19 #include "base/stringprintf.h" 21 #include "base/stringprintf.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 return false; 91 return false;
90 } 92 }
91 } 93 }
92 94
93 } // namespace 95 } // namespace
94 96
95 //----------------------------------------------------------------------------- 97 //-----------------------------------------------------------------------------
96 98
97 HttpNetworkTransaction::HttpNetworkTransaction(HttpNetworkSession* session) 99 HttpNetworkTransaction::HttpNetworkTransaction(HttpNetworkSession* session)
98 : pending_auth_target_(HttpAuth::AUTH_NONE), 100 : pending_auth_target_(HttpAuth::AUTH_NONE),
99 ALLOW_THIS_IN_INITIALIZER_LIST( 101 ALLOW_THIS_IN_INITIALIZER_LIST(io_callback_(
100 io_callback_(this, &HttpNetworkTransaction::OnIOComplete)), 102 base::Bind(&HttpNetworkTransaction::OnIOComplete,
101 user_callback_(NULL), 103 base::Unretained(this)))),
102 session_(session), 104 session_(session),
103 request_(NULL), 105 request_(NULL),
104 headers_valid_(false), 106 headers_valid_(false),
105 logged_response_time_(false), 107 logged_response_time_(false),
106 request_headers_(), 108 request_headers_(),
107 read_buf_len_(0), 109 read_buf_len_(0),
108 next_state_(STATE_NONE), 110 next_state_(STATE_NONE),
109 establishing_tunnel_(false) { 111 establishing_tunnel_(false) {
110 session->ssl_config_service()->GetSSLConfig(&server_ssl_config_); 112 session->ssl_config_service()->GetSSLConfig(&server_ssl_config_);
111 if (session->http_stream_factory()->has_next_protos()) { 113 if (session->http_stream_factory()->has_next_protos()) {
(...skipping 25 matching lines...) Expand all
137 } else { 139 } else {
138 // Otherwise, we try to drain the response body. 140 // Otherwise, we try to drain the response body.
139 HttpStream* stream = stream_.release(); 141 HttpStream* stream = stream_.release();
140 stream->Drain(session_); 142 stream->Drain(session_);
141 } 143 }
142 } 144 }
143 } 145 }
144 } 146 }
145 147
146 int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info, 148 int HttpNetworkTransaction::Start(const HttpRequestInfo* request_info,
147 OldCompletionCallback* callback, 149 const CompletionCallback& callback,
148 const BoundNetLog& net_log) { 150 const BoundNetLog& net_log) {
149 SIMPLE_STATS_COUNTER("HttpNetworkTransaction.Count"); 151 SIMPLE_STATS_COUNTER("HttpNetworkTransaction.Count");
150 152
151 net_log_ = net_log; 153 net_log_ = net_log;
152 request_ = request_info; 154 request_ = request_info;
153 start_time_ = base::Time::Now(); 155 start_time_ = base::Time::Now();
154 156
155 if (request_->load_flags & LOAD_DISABLE_CERT_REVOCATION_CHECKING) { 157 if (request_->load_flags & LOAD_DISABLE_CERT_REVOCATION_CHECKING) {
156 server_ssl_config_.rev_checking_enabled = false; 158 server_ssl_config_.rev_checking_enabled = false;
157 proxy_ssl_config_.rev_checking_enabled = false; 159 proxy_ssl_config_.rev_checking_enabled = false;
158 } 160 }
159 161
160 next_state_ = STATE_CREATE_STREAM; 162 next_state_ = STATE_CREATE_STREAM;
161 int rv = DoLoop(OK); 163 int rv = DoLoop(OK);
162 if (rv == ERR_IO_PENDING) 164 if (rv == ERR_IO_PENDING)
163 user_callback_ = callback; 165 callback_ = callback;
164 return rv; 166 return rv;
165 } 167 }
166 168
167 int HttpNetworkTransaction::RestartIgnoringLastError( 169 int HttpNetworkTransaction::RestartIgnoringLastError(
168 OldCompletionCallback* callback) { 170 const CompletionCallback& callback) {
169 DCHECK(!stream_.get()); 171 DCHECK(!stream_.get());
170 DCHECK(!stream_request_.get()); 172 DCHECK(!stream_request_.get());
171 DCHECK_EQ(STATE_NONE, next_state_); 173 DCHECK_EQ(STATE_NONE, next_state_);
172 174
173 next_state_ = STATE_CREATE_STREAM; 175 next_state_ = STATE_CREATE_STREAM;
174 176
175 int rv = DoLoop(OK); 177 int rv = DoLoop(OK);
176 if (rv == ERR_IO_PENDING) 178 if (rv == ERR_IO_PENDING)
177 user_callback_ = callback; 179 callback_ = callback;
178 return rv; 180 return rv;
179 } 181 }
180 182
181 int HttpNetworkTransaction::RestartWithCertificate( 183 int HttpNetworkTransaction::RestartWithCertificate(
182 X509Certificate* client_cert, 184 X509Certificate* client_cert, const CompletionCallback& callback) {
183 OldCompletionCallback* callback) {
184 // In HandleCertificateRequest(), we always tear down existing stream 185 // In HandleCertificateRequest(), we always tear down existing stream
185 // requests to force a new connection. So we shouldn't have one here. 186 // requests to force a new connection. So we shouldn't have one here.
186 DCHECK(!stream_request_.get()); 187 DCHECK(!stream_request_.get());
187 DCHECK(!stream_.get()); 188 DCHECK(!stream_.get());
188 DCHECK_EQ(STATE_NONE, next_state_); 189 DCHECK_EQ(STATE_NONE, next_state_);
189 190
190 SSLConfig* ssl_config = response_.cert_request_info->is_proxy ? 191 SSLConfig* ssl_config = response_.cert_request_info->is_proxy ?
191 &proxy_ssl_config_ : &server_ssl_config_; 192 &proxy_ssl_config_ : &server_ssl_config_;
192 ssl_config->send_client_cert = true; 193 ssl_config->send_client_cert = true;
193 ssl_config->client_cert = client_cert; 194 ssl_config->client_cert = client_cert;
194 session_->ssl_client_auth_cache()->Add( 195 session_->ssl_client_auth_cache()->Add(
195 response_.cert_request_info->host_and_port, client_cert); 196 response_.cert_request_info->host_and_port, client_cert);
196 // Reset the other member variables. 197 // Reset the other member variables.
197 // Note: this is necessary only with SSL renegotiation. 198 // Note: this is necessary only with SSL renegotiation.
198 ResetStateForRestart(); 199 ResetStateForRestart();
199 next_state_ = STATE_CREATE_STREAM; 200 next_state_ = STATE_CREATE_STREAM;
200 int rv = DoLoop(OK); 201 int rv = DoLoop(OK);
201 if (rv == ERR_IO_PENDING) 202 if (rv == ERR_IO_PENDING)
202 user_callback_ = callback; 203 callback_ = callback;
203 return rv; 204 return rv;
204 } 205 }
205 206
206 int HttpNetworkTransaction::RestartWithAuth(const AuthCredentials& credentials, 207 int HttpNetworkTransaction::RestartWithAuth(
207 OldCompletionCallback* callback) { 208 const AuthCredentials& credentials, const CompletionCallback& callback) {
208 HttpAuth::Target target = pending_auth_target_; 209 HttpAuth::Target target = pending_auth_target_;
209 if (target == HttpAuth::AUTH_NONE) { 210 if (target == HttpAuth::AUTH_NONE) {
210 NOTREACHED(); 211 NOTREACHED();
211 return ERR_UNEXPECTED; 212 return ERR_UNEXPECTED;
212 } 213 }
213 pending_auth_target_ = HttpAuth::AUTH_NONE; 214 pending_auth_target_ = HttpAuth::AUTH_NONE;
214 215
215 auth_controllers_[target]->ResetAuth(credentials); 216 auth_controllers_[target]->ResetAuth(credentials);
216 217
217 DCHECK(user_callback_ == NULL); 218 DCHECK(callback_.is_null());
218 219
219 int rv = OK; 220 int rv = OK;
220 if (target == HttpAuth::AUTH_PROXY && establishing_tunnel_) { 221 if (target == HttpAuth::AUTH_PROXY && establishing_tunnel_) {
221 // In this case, we've gathered credentials for use with proxy 222 // In this case, we've gathered credentials for use with proxy
222 // authentication of a tunnel. 223 // authentication of a tunnel.
223 DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_); 224 DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_);
224 DCHECK(stream_request_ != NULL); 225 DCHECK(stream_request_ != NULL);
225 auth_controllers_[target] = NULL; 226 auth_controllers_[target] = NULL;
226 ResetStateForRestart(); 227 ResetStateForRestart();
227 rv = stream_request_->RestartTunnelWithProxyAuth(credentials); 228 rv = stream_request_->RestartTunnelWithProxyAuth(credentials);
228 } else { 229 } else {
229 // In this case, we've gathered credentials for the server or the proxy 230 // In this case, we've gathered credentials for the server or the proxy
230 // but it is not during the tunneling phase. 231 // but it is not during the tunneling phase.
231 DCHECK(stream_request_ == NULL); 232 DCHECK(stream_request_ == NULL);
232 PrepareForAuthRestart(target); 233 PrepareForAuthRestart(target);
233 rv = DoLoop(OK); 234 rv = DoLoop(OK);
234 } 235 }
235 236
236 if (rv == ERR_IO_PENDING) 237 if (rv == ERR_IO_PENDING)
237 user_callback_ = callback; 238 callback_ = callback;
238 return rv; 239 return rv;
239 } 240 }
240 241
241 void HttpNetworkTransaction::PrepareForAuthRestart(HttpAuth::Target target) { 242 void HttpNetworkTransaction::PrepareForAuthRestart(HttpAuth::Target target) {
242 DCHECK(HaveAuth(target)); 243 DCHECK(HaveAuth(target));
243 DCHECK(!stream_request_.get()); 244 DCHECK(!stream_request_.get());
244 245
245 bool keep_alive = false; 246 bool keep_alive = false;
246 // Even if the server says the connection is keep-alive, we have to be 247 // Even if the server says the connection is keep-alive, we have to be
247 // able to find the end of each response in order to reuse the connection. 248 // able to find the end of each response in order to reuse the connection.
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // Reset the other member variables. 291 // Reset the other member variables.
291 ResetStateForAuthRestart(); 292 ResetStateForAuthRestart();
292 } 293 }
293 294
294 bool HttpNetworkTransaction::IsReadyToRestartForAuth() { 295 bool HttpNetworkTransaction::IsReadyToRestartForAuth() {
295 return pending_auth_target_ != HttpAuth::AUTH_NONE && 296 return pending_auth_target_ != HttpAuth::AUTH_NONE &&
296 HaveAuth(pending_auth_target_); 297 HaveAuth(pending_auth_target_);
297 } 298 }
298 299
299 int HttpNetworkTransaction::Read(IOBuffer* buf, int buf_len, 300 int HttpNetworkTransaction::Read(IOBuffer* buf, int buf_len,
300 OldCompletionCallback* callback) { 301 const CompletionCallback& callback) {
301 DCHECK(buf); 302 DCHECK(buf);
302 DCHECK_LT(0, buf_len); 303 DCHECK_LT(0, buf_len);
303 304
304 State next_state = STATE_NONE; 305 State next_state = STATE_NONE;
305 306
306 scoped_refptr<HttpResponseHeaders> headers(GetResponseHeaders()); 307 scoped_refptr<HttpResponseHeaders> headers(GetResponseHeaders());
307 if (headers_valid_ && headers.get() && stream_request_.get()) { 308 if (headers_valid_ && headers.get() && stream_request_.get()) {
308 // We're trying to read the body of the response but we're still trying 309 // We're trying to read the body of the response but we're still trying
309 // to establish an SSL tunnel through an HTTP proxy. We can't read these 310 // to establish an SSL tunnel through an HTTP proxy. We can't read these
310 // bytes when establishing a tunnel because they might be controlled by 311 // bytes when establishing a tunnel because they might be controlled by
(...skipping 13 matching lines...) Expand all
324 325
325 // Are we using SPDY or HTTP? 326 // Are we using SPDY or HTTP?
326 next_state = STATE_READ_BODY; 327 next_state = STATE_READ_BODY;
327 328
328 read_buf_ = buf; 329 read_buf_ = buf;
329 read_buf_len_ = buf_len; 330 read_buf_len_ = buf_len;
330 331
331 next_state_ = next_state; 332 next_state_ = next_state;
332 int rv = DoLoop(OK); 333 int rv = DoLoop(OK);
333 if (rv == ERR_IO_PENDING) 334 if (rv == ERR_IO_PENDING)
334 user_callback_ = callback; 335 callback_ = callback;
335 return rv; 336 return rv;
336 } 337 }
337 338
338 const HttpResponseInfo* HttpNetworkTransaction::GetResponseInfo() const { 339 const HttpResponseInfo* HttpNetworkTransaction::GetResponseInfo() const {
339 return ((headers_valid_ && response_.headers) || response_.ssl_info.cert || 340 return ((headers_valid_ && response_.headers) || response_.ssl_info.cert ||
340 response_.cert_request_info) ? &response_ : NULL; 341 response_.cert_request_info) ? &response_ : NULL;
341 } 342 }
342 343
343 LoadState HttpNetworkTransaction::GetLoadState() const { 344 LoadState HttpNetworkTransaction::GetLoadState() const {
344 // TODO(wtc): Define a new LoadState value for the 345 // TODO(wtc): Define a new LoadState value for the
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 stream_request_.reset(); // we're done with the stream request 461 stream_request_.reset(); // we're done with the stream request
461 OnIOComplete(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); 462 OnIOComplete(ERR_HTTPS_PROXY_TUNNEL_RESPONSE);
462 } 463 }
463 464
464 bool HttpNetworkTransaction::is_https_request() const { 465 bool HttpNetworkTransaction::is_https_request() const {
465 return request_->url.SchemeIs("https"); 466 return request_->url.SchemeIs("https");
466 } 467 }
467 468
468 void HttpNetworkTransaction::DoCallback(int rv) { 469 void HttpNetworkTransaction::DoCallback(int rv) {
469 DCHECK_NE(rv, ERR_IO_PENDING); 470 DCHECK_NE(rv, ERR_IO_PENDING);
470 DCHECK(user_callback_); 471 DCHECK(!callback_.is_null());
471 472
472 // Since Run may result in Read being called, clear user_callback_ up front. 473 // Since Run may result in Read being called, clear user_callback_ up front.
473 OldCompletionCallback* c = user_callback_; 474 CompletionCallback c = callback_;
474 user_callback_ = NULL; 475 callback_.Reset();
475 c->Run(rv); 476 c.Run(rv);
476 } 477 }
477 478
478 void HttpNetworkTransaction::OnIOComplete(int result) { 479 void HttpNetworkTransaction::OnIOComplete(int result) {
479 int rv = DoLoop(result); 480 int rv = DoLoop(result);
480 if (rv != ERR_IO_PENDING) 481 if (rv != ERR_IO_PENDING)
481 DoCallback(rv); 482 DoCallback(rv);
482 } 483 }
483 484
484 int HttpNetworkTransaction::DoLoop(int result) { 485 int HttpNetworkTransaction::DoLoop(int result) {
485 DCHECK(next_state_ != STATE_NONE); 486 DCHECK(next_state_ != STATE_NONE);
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 result = HandleSSLHandshakeError(result); 607 result = HandleSSLHandshakeError(result);
607 608
608 // At this point we are done with the stream_request_. 609 // At this point we are done with the stream_request_.
609 stream_request_.reset(); 610 stream_request_.reset();
610 return result; 611 return result;
611 } 612 }
612 613
613 int HttpNetworkTransaction::DoInitStream() { 614 int HttpNetworkTransaction::DoInitStream() {
614 DCHECK(stream_.get()); 615 DCHECK(stream_.get());
615 next_state_ = STATE_INIT_STREAM_COMPLETE; 616 next_state_ = STATE_INIT_STREAM_COMPLETE;
616 return stream_->InitializeStream(request_, net_log_, &io_callback_); 617 return stream_->InitializeStream(request_, net_log_, io_callback_);
617 } 618 }
618 619
619 int HttpNetworkTransaction::DoInitStreamComplete(int result) { 620 int HttpNetworkTransaction::DoInitStreamComplete(int result) {
620 if (result == OK) { 621 if (result == OK) {
621 next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN; 622 next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN;
622 } else { 623 } else {
623 if (result < 0) 624 if (result < 0)
624 result = HandleIOError(result); 625 result = HandleIOError(result);
625 626
626 // The stream initialization failed, so this stream will never be useful. 627 // The stream initialization failed, so this stream will never be useful.
627 stream_.reset(); 628 stream_.reset();
628 } 629 }
629 630
630 return result; 631 return result;
631 } 632 }
632 633
633 int HttpNetworkTransaction::DoGenerateProxyAuthToken() { 634 int HttpNetworkTransaction::DoGenerateProxyAuthToken() {
634 next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE; 635 next_state_ = STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE;
635 if (!ShouldApplyProxyAuth()) 636 if (!ShouldApplyProxyAuth())
636 return OK; 637 return OK;
637 HttpAuth::Target target = HttpAuth::AUTH_PROXY; 638 HttpAuth::Target target = HttpAuth::AUTH_PROXY;
638 if (!auth_controllers_[target].get()) 639 if (!auth_controllers_[target].get())
639 auth_controllers_[target] = 640 auth_controllers_[target] =
640 new HttpAuthController(target, 641 new HttpAuthController(target,
641 AuthURL(target), 642 AuthURL(target),
642 session_->http_auth_cache(), 643 session_->http_auth_cache(),
643 session_->http_auth_handler_factory()); 644 session_->http_auth_handler_factory());
644 return auth_controllers_[target]->MaybeGenerateAuthToken(request_, 645 return auth_controllers_[target]->MaybeGenerateAuthToken(request_,
645 &io_callback_, 646 io_callback_,
646 net_log_); 647 net_log_);
647 } 648 }
648 649
649 int HttpNetworkTransaction::DoGenerateProxyAuthTokenComplete(int rv) { 650 int HttpNetworkTransaction::DoGenerateProxyAuthTokenComplete(int rv) {
650 DCHECK_NE(ERR_IO_PENDING, rv); 651 DCHECK_NE(ERR_IO_PENDING, rv);
651 if (rv == OK) 652 if (rv == OK)
652 next_state_ = STATE_GENERATE_SERVER_AUTH_TOKEN; 653 next_state_ = STATE_GENERATE_SERVER_AUTH_TOKEN;
653 return rv; 654 return rv;
654 } 655 }
655 656
656 int HttpNetworkTransaction::DoGenerateServerAuthToken() { 657 int HttpNetworkTransaction::DoGenerateServerAuthToken() {
657 next_state_ = STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE; 658 next_state_ = STATE_GENERATE_SERVER_AUTH_TOKEN_COMPLETE;
658 HttpAuth::Target target = HttpAuth::AUTH_SERVER; 659 HttpAuth::Target target = HttpAuth::AUTH_SERVER;
659 if (!auth_controllers_[target].get()) 660 if (!auth_controllers_[target].get())
660 auth_controllers_[target] = 661 auth_controllers_[target] =
661 new HttpAuthController(target, 662 new HttpAuthController(target,
662 AuthURL(target), 663 AuthURL(target),
663 session_->http_auth_cache(), 664 session_->http_auth_cache(),
664 session_->http_auth_handler_factory()); 665 session_->http_auth_handler_factory());
665 if (!ShouldApplyServerAuth()) 666 if (!ShouldApplyServerAuth())
666 return OK; 667 return OK;
667 return auth_controllers_[target]->MaybeGenerateAuthToken(request_, 668 return auth_controllers_[target]->MaybeGenerateAuthToken(request_,
668 &io_callback_, 669 io_callback_,
669 net_log_); 670 net_log_);
670 } 671 }
671 672
672 int HttpNetworkTransaction::DoGenerateServerAuthTokenComplete(int rv) { 673 int HttpNetworkTransaction::DoGenerateServerAuthTokenComplete(int rv) {
673 DCHECK_NE(ERR_IO_PENDING, rv); 674 DCHECK_NE(ERR_IO_PENDING, rv);
674 if (rv == OK) 675 if (rv == OK)
675 next_state_ = STATE_BUILD_REQUEST; 676 next_state_ = STATE_BUILD_REQUEST;
676 return rv; 677 return rv;
677 } 678 }
678 679
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
752 int HttpNetworkTransaction::DoBuildRequestComplete(int result) { 753 int HttpNetworkTransaction::DoBuildRequestComplete(int result) {
753 if (result == OK) 754 if (result == OK)
754 next_state_ = STATE_SEND_REQUEST; 755 next_state_ = STATE_SEND_REQUEST;
755 return result; 756 return result;
756 } 757 }
757 758
758 int HttpNetworkTransaction::DoSendRequest() { 759 int HttpNetworkTransaction::DoSendRequest() {
759 next_state_ = STATE_SEND_REQUEST_COMPLETE; 760 next_state_ = STATE_SEND_REQUEST_COMPLETE;
760 761
761 return stream_->SendRequest( 762 return stream_->SendRequest(
762 request_headers_, request_body_.release(), &response_, &io_callback_); 763 request_headers_, request_body_.release(), &response_, io_callback_);
763 } 764 }
764 765
765 int HttpNetworkTransaction::DoSendRequestComplete(int result) { 766 int HttpNetworkTransaction::DoSendRequestComplete(int result) {
766 if (result < 0) 767 if (result < 0)
767 return HandleIOError(result); 768 return HandleIOError(result);
768 next_state_ = STATE_READ_HEADERS; 769 next_state_ = STATE_READ_HEADERS;
769 return OK; 770 return OK;
770 } 771 }
771 772
772 int HttpNetworkTransaction::DoReadHeaders() { 773 int HttpNetworkTransaction::DoReadHeaders() {
773 next_state_ = STATE_READ_HEADERS_COMPLETE; 774 next_state_ = STATE_READ_HEADERS_COMPLETE;
774 return stream_->ReadResponseHeaders(&io_callback_); 775 return stream_->ReadResponseHeaders(io_callback_);
775 } 776 }
776 777
777 int HttpNetworkTransaction::HandleConnectionClosedBeforeEndOfHeaders() { 778 int HttpNetworkTransaction::HandleConnectionClosedBeforeEndOfHeaders() {
778 if (!response_.headers && !stream_->IsConnectionReused()) { 779 if (!response_.headers && !stream_->IsConnectionReused()) {
779 // The connection was closed before any data was sent. Likely an error 780 // The connection was closed before any data was sent. Likely an error
780 // rather than empty HTTP/0.9 response. 781 // rather than empty HTTP/0.9 response.
781 return ERR_EMPTY_RESPONSE; 782 return ERR_EMPTY_RESPONSE;
782 } 783 }
783 784
784 return OK; 785 return OK;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 headers_valid_ = true; 870 headers_valid_ = true;
870 return OK; 871 return OK;
871 } 872 }
872 873
873 int HttpNetworkTransaction::DoReadBody() { 874 int HttpNetworkTransaction::DoReadBody() {
874 DCHECK(read_buf_); 875 DCHECK(read_buf_);
875 DCHECK_GT(read_buf_len_, 0); 876 DCHECK_GT(read_buf_len_, 0);
876 DCHECK(stream_ != NULL); 877 DCHECK(stream_ != NULL);
877 878
878 next_state_ = STATE_READ_BODY_COMPLETE; 879 next_state_ = STATE_READ_BODY_COMPLETE;
879 return stream_->ReadResponseBody(read_buf_, read_buf_len_, &io_callback_); 880 return stream_->ReadResponseBody(read_buf_, read_buf_len_, io_callback_);
880 } 881 }
881 882
882 int HttpNetworkTransaction::DoReadBodyComplete(int result) { 883 int HttpNetworkTransaction::DoReadBodyComplete(int result) {
883 // We are done with the Read call. 884 // We are done with the Read call.
884 bool done = false; 885 bool done = false;
885 if (result <= 0) { 886 if (result <= 0) {
886 DCHECK_NE(ERR_IO_PENDING, result); 887 DCHECK_NE(ERR_IO_PENDING, result);
887 done = true; 888 done = true;
888 } 889 }
889 890
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, 1349 description = base::StringPrintf("Unknown state 0x%08X (%u)", state,
1349 state); 1350 state);
1350 break; 1351 break;
1351 } 1352 }
1352 return description; 1353 return description;
1353 } 1354 }
1354 1355
1355 #undef STATE_CASE 1356 #undef STATE_CASE
1356 1357
1357 } // namespace net 1358 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698