| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_stream_parser.h" | 5 #include "net/http/http_stream_parser.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 | 195 |
| 196 // 2 CRLFs + max of 8 hex chars. | 196 // 2 CRLFs + max of 8 hex chars. |
| 197 const size_t HttpStreamParser::kChunkHeaderFooterSize = 12; | 197 const size_t HttpStreamParser::kChunkHeaderFooterSize = 12; |
| 198 | 198 |
| 199 HttpStreamParser::HttpStreamParser(ClientSocketHandle* connection, | 199 HttpStreamParser::HttpStreamParser(ClientSocketHandle* connection, |
| 200 const HttpRequestInfo* request, | 200 const HttpRequestInfo* request, |
| 201 GrowableIOBuffer* read_buffer, | 201 GrowableIOBuffer* read_buffer, |
| 202 const BoundNetLog& net_log) | 202 const BoundNetLog& net_log) |
| 203 : io_state_(STATE_NONE), | 203 : io_state_(STATE_NONE), |
| 204 request_(request), | 204 request_(request), |
| 205 request_headers_(NULL), | 205 request_headers_(nullptr), |
| 206 request_headers_length_(0), | 206 request_headers_length_(0), |
| 207 read_buf_(read_buffer), | 207 read_buf_(read_buffer), |
| 208 read_buf_unused_offset_(0), | 208 read_buf_unused_offset_(0), |
| 209 response_header_start_offset_(-1), | 209 response_header_start_offset_(-1), |
| 210 received_bytes_(0), | 210 received_bytes_(0), |
| 211 response_(nullptr), |
| 211 response_body_length_(-1), | 212 response_body_length_(-1), |
| 212 response_body_read_(0), | 213 response_body_read_(0), |
| 213 user_read_buf_(NULL), | 214 user_read_buf_(nullptr), |
| 214 user_read_buf_len_(0), | 215 user_read_buf_len_(0), |
| 215 connection_(connection), | 216 connection_(connection), |
| 216 net_log_(net_log), | 217 net_log_(net_log), |
| 217 sent_last_chunk_(false), | 218 sent_last_chunk_(false), |
| 218 upload_error_(OK), | 219 upload_error_(OK), |
| 219 weak_ptr_factory_(this) { | 220 weak_ptr_factory_(this) { |
| 220 io_callback_ = base::Bind(&HttpStreamParser::OnIOComplete, | 221 io_callback_ = base::Bind(&HttpStreamParser::OnIOComplete, |
| 221 weak_ptr_factory_.GetWeakPtr()); | 222 weak_ptr_factory_.GetWeakPtr()); |
| 222 } | 223 } |
| 223 | 224 |
| (...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1062 bool HttpStreamParser::IsConnectionReused() const { | 1063 bool HttpStreamParser::IsConnectionReused() const { |
| 1063 ClientSocketHandle::SocketReuseType reuse_type = connection_->reuse_type(); | 1064 ClientSocketHandle::SocketReuseType reuse_type = connection_->reuse_type(); |
| 1064 return connection_->is_reused() || | 1065 return connection_->is_reused() || |
| 1065 reuse_type == ClientSocketHandle::UNUSED_IDLE; | 1066 reuse_type == ClientSocketHandle::UNUSED_IDLE; |
| 1066 } | 1067 } |
| 1067 | 1068 |
| 1068 void HttpStreamParser::SetConnectionReused() { | 1069 void HttpStreamParser::SetConnectionReused() { |
| 1069 connection_->set_reuse_type(ClientSocketHandle::REUSED_IDLE); | 1070 connection_->set_reuse_type(ClientSocketHandle::REUSED_IDLE); |
| 1070 } | 1071 } |
| 1071 | 1072 |
| 1072 bool HttpStreamParser::IsConnectionReusable() const { | 1073 bool HttpStreamParser::CanReuseConnection() const { |
| 1074 if (!CanFindEndOfResponse()) |
| 1075 return false; |
| 1076 if (!response_->headers || !response_->headers->IsKeepAlive()) |
| 1077 return false; |
| 1073 return connection_->socket() && connection_->socket()->IsConnectedAndIdle(); | 1078 return connection_->socket() && connection_->socket()->IsConnectedAndIdle(); |
| 1074 } | 1079 } |
| 1075 | 1080 |
| 1076 void HttpStreamParser::GetSSLInfo(SSLInfo* ssl_info) { | 1081 void HttpStreamParser::GetSSLInfo(SSLInfo* ssl_info) { |
| 1077 if (request_->url.SchemeIsCryptographic() && connection_->socket()) { | 1082 if (request_->url.SchemeIsCryptographic() && connection_->socket()) { |
| 1078 SSLClientSocket* ssl_socket = | 1083 SSLClientSocket* ssl_socket = |
| 1079 static_cast<SSLClientSocket*>(connection_->socket()); | 1084 static_cast<SSLClientSocket*>(connection_->socket()); |
| 1080 ssl_socket->GetSSLInfo(ssl_info); | 1085 ssl_socket->GetSSLInfo(ssl_info); |
| 1081 } | 1086 } |
| 1082 } | 1087 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 } | 1135 } |
| 1131 | 1136 |
| 1132 void HttpStreamParser::ValidateStatusLine(const std::string& status_line) { | 1137 void HttpStreamParser::ValidateStatusLine(const std::string& status_line) { |
| 1133 HttpStatusLineValidator::StatusLineStatus status = | 1138 HttpStatusLineValidator::StatusLineStatus status = |
| 1134 HttpStatusLineValidator::ValidateStatusLine(status_line); | 1139 HttpStatusLineValidator::ValidateStatusLine(status_line); |
| 1135 UMA_HISTOGRAM_ENUMERATION("Net.HttpStatusLineStatus", status, | 1140 UMA_HISTOGRAM_ENUMERATION("Net.HttpStatusLineStatus", status, |
| 1136 HttpStatusLineValidator::STATUS_LINE_MAX); | 1141 HttpStatusLineValidator::STATUS_LINE_MAX); |
| 1137 } | 1142 } |
| 1138 | 1143 |
| 1139 } // namespace net | 1144 } // namespace net |
| OLD | NEW |