| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/spdy/spdy_network_transaction.h" | 5 #include "net/spdy/spdy_network_transaction.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
| 10 #include "base/stats_counters.h" | 10 #include "base/stats_counters.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 } | 38 } |
| 39 | 39 |
| 40 SpdyNetworkTransaction::~SpdyNetworkTransaction() { | 40 SpdyNetworkTransaction::~SpdyNetworkTransaction() { |
| 41 LOG(INFO) << "SpdyNetworkTransaction dead. " << this; | 41 LOG(INFO) << "SpdyNetworkTransaction dead. " << this; |
| 42 if (stream_.get()) | 42 if (stream_.get()) |
| 43 stream_->Cancel(); | 43 stream_->Cancel(); |
| 44 } | 44 } |
| 45 | 45 |
| 46 int SpdyNetworkTransaction::Start(const HttpRequestInfo* request_info, | 46 int SpdyNetworkTransaction::Start(const HttpRequestInfo* request_info, |
| 47 CompletionCallback* callback, | 47 CompletionCallback* callback, |
| 48 LoadLog* load_log) { | 48 const BoundNetLog& net_log) { |
| 49 CHECK(request_info); | 49 CHECK(request_info); |
| 50 CHECK(callback); | 50 CHECK(callback); |
| 51 | 51 |
| 52 SIMPLE_STATS_COUNTER("SpdyNetworkTransaction.Count"); | 52 SIMPLE_STATS_COUNTER("SpdyNetworkTransaction.Count"); |
| 53 | 53 |
| 54 load_log_ = load_log; | 54 net_log_ = net_log; |
| 55 request_ = request_info; | 55 request_ = request_info; |
| 56 start_time_ = base::TimeTicks::Now(); | 56 start_time_ = base::TimeTicks::Now(); |
| 57 | 57 |
| 58 next_state_ = STATE_INIT_CONNECTION; | 58 next_state_ = STATE_INIT_CONNECTION; |
| 59 int rv = DoLoop(OK); | 59 int rv = DoLoop(OK); |
| 60 if (rv == ERR_IO_PENDING) | 60 if (rv == ERR_IO_PENDING) |
| 61 user_callback_ = callback; | 61 user_callback_ = callback; |
| 62 return rv; | 62 return rv; |
| 63 } | 63 } |
| 64 | 64 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 if (!request_) | 152 if (!request_) |
| 153 return 0; | 153 return 0; |
| 154 | 154 |
| 155 int rv = result; | 155 int rv = result; |
| 156 do { | 156 do { |
| 157 State state = next_state_; | 157 State state = next_state_; |
| 158 next_state_ = STATE_NONE; | 158 next_state_ = STATE_NONE; |
| 159 switch (state) { | 159 switch (state) { |
| 160 case STATE_INIT_CONNECTION: | 160 case STATE_INIT_CONNECTION: |
| 161 DCHECK_EQ(OK, rv); | 161 DCHECK_EQ(OK, rv); |
| 162 LoadLog::BeginEvent(load_log_, | 162 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_INIT_CONNECTION); |
| 163 LoadLog::TYPE_SPDY_TRANSACTION_INIT_CONNECTION); | |
| 164 rv = DoInitConnection(); | 163 rv = DoInitConnection(); |
| 165 break; | 164 break; |
| 166 case STATE_INIT_CONNECTION_COMPLETE: | 165 case STATE_INIT_CONNECTION_COMPLETE: |
| 167 LoadLog::EndEvent(load_log_, | 166 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_INIT_CONNECTION); |
| 168 LoadLog::TYPE_SPDY_TRANSACTION_INIT_CONNECTION); | |
| 169 rv = DoInitConnectionComplete(rv); | 167 rv = DoInitConnectionComplete(rv); |
| 170 break; | 168 break; |
| 171 case STATE_SEND_REQUEST: | 169 case STATE_SEND_REQUEST: |
| 172 DCHECK_EQ(OK, rv); | 170 DCHECK_EQ(OK, rv); |
| 173 LoadLog::BeginEvent(load_log_, | 171 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST); |
| 174 LoadLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST); | |
| 175 rv = DoSendRequest(); | 172 rv = DoSendRequest(); |
| 176 break; | 173 break; |
| 177 case STATE_SEND_REQUEST_COMPLETE: | 174 case STATE_SEND_REQUEST_COMPLETE: |
| 178 LoadLog::EndEvent(load_log_, | 175 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST); |
| 179 LoadLog::TYPE_SPDY_TRANSACTION_SEND_REQUEST); | |
| 180 rv = DoSendRequestComplete(rv); | 176 rv = DoSendRequestComplete(rv); |
| 181 break; | 177 break; |
| 182 case STATE_READ_HEADERS: | 178 case STATE_READ_HEADERS: |
| 183 DCHECK_EQ(OK, rv); | 179 DCHECK_EQ(OK, rv); |
| 184 LoadLog::BeginEvent(load_log_, | 180 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_HEADERS); |
| 185 LoadLog::TYPE_SPDY_TRANSACTION_READ_HEADERS); | |
| 186 rv = DoReadHeaders(); | 181 rv = DoReadHeaders(); |
| 187 break; | 182 break; |
| 188 case STATE_READ_HEADERS_COMPLETE: | 183 case STATE_READ_HEADERS_COMPLETE: |
| 189 LoadLog::EndEvent(load_log_, | 184 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_HEADERS); |
| 190 LoadLog::TYPE_SPDY_TRANSACTION_READ_HEADERS); | |
| 191 rv = DoReadHeadersComplete(rv); | 185 rv = DoReadHeadersComplete(rv); |
| 192 break; | 186 break; |
| 193 case STATE_READ_BODY: | 187 case STATE_READ_BODY: |
| 194 DCHECK_EQ(OK, rv); | 188 DCHECK_EQ(OK, rv); |
| 195 LoadLog::BeginEvent(load_log_, | 189 net_log_.BeginEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_BODY); |
| 196 LoadLog::TYPE_SPDY_TRANSACTION_READ_BODY); | |
| 197 rv = DoReadBody(); | 190 rv = DoReadBody(); |
| 198 break; | 191 break; |
| 199 case STATE_READ_BODY_COMPLETE: | 192 case STATE_READ_BODY_COMPLETE: |
| 200 LoadLog::EndEvent(load_log_, | 193 net_log_.EndEvent(NetLog::TYPE_SPDY_TRANSACTION_READ_BODY); |
| 201 LoadLog::TYPE_SPDY_TRANSACTION_READ_BODY); | |
| 202 rv = DoReadBodyComplete(rv); | 194 rv = DoReadBodyComplete(rv); |
| 203 break; | 195 break; |
| 204 case STATE_NONE: | 196 case STATE_NONE: |
| 205 rv = ERR_FAILED; | 197 rv = ERR_FAILED; |
| 206 break; | 198 break; |
| 207 default: | 199 default: |
| 208 NOTREACHED() << "bad state"; | 200 NOTREACHED() << "bad state"; |
| 209 rv = ERR_FAILED; | 201 rv = ERR_FAILED; |
| 210 break; | 202 break; |
| 211 } | 203 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 233 connection_group.append(host); | 225 connection_group.append(host); |
| 234 | 226 |
| 235 TCPSocketParams tcp_params(host, port, request_->priority, request_->referrer, | 227 TCPSocketParams tcp_params(host, port, request_->priority, request_->referrer, |
| 236 false); | 228 false); |
| 237 HostPortPair host_port_pair(host, port); | 229 HostPortPair host_port_pair(host, port); |
| 238 | 230 |
| 239 spdy_ = session_->spdy_session_pool()->Get(host_port_pair, session_); | 231 spdy_ = session_->spdy_session_pool()->Get(host_port_pair, session_); |
| 240 DCHECK(spdy_); | 232 DCHECK(spdy_); |
| 241 | 233 |
| 242 return spdy_->Connect( | 234 return spdy_->Connect( |
| 243 connection_group, tcp_params, request_->priority, load_log_); | 235 connection_group, tcp_params, request_->priority, net_log_); |
| 244 } | 236 } |
| 245 | 237 |
| 246 int SpdyNetworkTransaction::DoInitConnectionComplete(int result) { | 238 int SpdyNetworkTransaction::DoInitConnectionComplete(int result) { |
| 247 if (result < 0) | 239 if (result < 0) |
| 248 return result; | 240 return result; |
| 249 | 241 |
| 250 next_state_ = STATE_SEND_REQUEST; | 242 next_state_ = STATE_SEND_REQUEST; |
| 251 return OK; | 243 return OK; |
| 252 } | 244 } |
| 253 | 245 |
| 254 int SpdyNetworkTransaction::DoSendRequest() { | 246 int SpdyNetworkTransaction::DoSendRequest() { |
| 255 next_state_ = STATE_SEND_REQUEST_COMPLETE; | 247 next_state_ = STATE_SEND_REQUEST_COMPLETE; |
| 256 CHECK(!stream_.get()); | 248 CHECK(!stream_.get()); |
| 257 UploadDataStream* upload_data = request_->upload_data ? | 249 UploadDataStream* upload_data = request_->upload_data ? |
| 258 new UploadDataStream(request_->upload_data) : NULL; | 250 new UploadDataStream(request_->upload_data) : NULL; |
| 259 stream_ = spdy_->GetOrCreateStream(*request_, upload_data, load_log_.get()); | 251 stream_ = spdy_->GetOrCreateStream(*request_, upload_data, net_log_); |
| 260 // Release the reference to |spdy_| since we don't need it anymore. | 252 // Release the reference to |spdy_| since we don't need it anymore. |
| 261 spdy_ = NULL; | 253 spdy_ = NULL; |
| 262 return stream_->SendRequest(upload_data, &response_, &io_callback_); | 254 return stream_->SendRequest(upload_data, &response_, &io_callback_); |
| 263 } | 255 } |
| 264 | 256 |
| 265 int SpdyNetworkTransaction::DoSendRequestComplete(int result) { | 257 int SpdyNetworkTransaction::DoSendRequestComplete(int result) { |
| 266 if (result < 0) | 258 if (result < 0) |
| 267 return result; | 259 return result; |
| 268 | 260 |
| 269 next_state_ = STATE_READ_HEADERS; | 261 next_state_ = STATE_READ_HEADERS; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 291 user_buffer_ = NULL; | 283 user_buffer_ = NULL; |
| 292 user_buffer_len_ = 0; | 284 user_buffer_len_ = 0; |
| 293 | 285 |
| 294 if (result <= 0) | 286 if (result <= 0) |
| 295 stream_ = NULL; | 287 stream_ = NULL; |
| 296 | 288 |
| 297 return result; | 289 return result; |
| 298 } | 290 } |
| 299 | 291 |
| 300 } // namespace net | 292 } // namespace net |
| OLD | NEW |